blob: b016c15497391ba524024943b8fadf574af18750 [file] [log] [blame]
/**
*
*/
package org.eclipse.smila.solr.httphandler;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.solr.common.params.CollectionParams.CollectionAction;
import org.eclipse.smila.datamodel.Any;
import org.eclipse.smila.datamodel.Record;
import org.eclipse.smila.http.server.HttpExchange;
import org.eclipse.smila.http.server.json.JsonRequestHandler;
import org.eclipse.smila.http.server.util.UnsupportedMethodException;
import org.eclipse.smila.solr.SolrOperationService;
/**
* @author pwissel
*
*/
public abstract class AAdminHandler extends JsonRequestHandler {
private final Log _log = LogFactory.getLog(getClass());
private SolrOperationService _operationService;
@Override
public Object process(final String method, final String requestUri, Record inputRecord,
final HttpExchange exchange) throws Exception {
// TODO: allow handler only if static uri part match mode configuration
Any result = null;
switch (method) {
case "GET":
result = doGet(exchange, requestUri);
break;
case "POST":
result = doPost(exchange, requestUri);
break;
default:
throw new UnsupportedMethodException("HttpMethod: [GET, POST]");
}
return result;
}
abstract Any doGet(final HttpExchange exchange, final String requestUri) throws Exception;
Any doPost(final HttpExchange exchange, final String requestUri) throws Exception {
final String action = getAction(requestUri);
final Map<String, String[]> params = exchange.getParameterMap();
return _operationService.processAdminOperation(action, params);
}
protected String getStaticUriPart(final String requestUri) {
return getDynamicUriParts(requestUri).get(0);
}
protected String getAction(final String requestUri) {
final List<String> dynamicUriParts = getDynamicUriParts(requestUri);
if (dynamicUriParts.size() <= 1) {
final String message =
String.format("Action must be part of the uri. One of [%s]",
StringUtils.join(CollectionAction.values(), ','));
throw new IllegalArgumentException(message);
}
return dynamicUriParts.get(1);
}
@Override
protected boolean isValidMethod(final String method, final String requestUri) {
return "POST".equals(method) || "GET".equals(method);
}
protected void bindSolrOperationService(final SolrOperationService operationService) {
if (_log.isDebugEnabled()) {
_log.debug("Bind SolrOperationService...");
}
_operationService = operationService;
}
protected void unbindSolrOperationService(final SolrOperationService operationService) {
if (_operationService == operationService) {
if (_log.isDebugEnabled()) {
_log.debug("Unbind SolrOperationService...");
}
_operationService = null;
}
}
}