package cz.cuni.mff.d3s.been.swrepository.httpserver;
import org.apache.http.HttpRequest;
import org.apache.http.HttpResponse;
import org.apache.http.protocol.HttpContext;
import org.apache.http.protocol.HttpRequestHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* A skeletal implementation of the {@link HttpRequestHandler}.
*
* @author darklight
*/
public abstract class SkeletalRequestHandler implements HttpRequestHandler {
private static final Logger log = LoggerFactory.getLogger(SkeletalRequestHandler.class);
@Override
public final void handle(HttpRequest request, HttpResponse response, HttpContext context) {
try {
switch (request.getRequestLine().getMethod()) {
case "GET":
handleGet(request, response);
break;
case "PUT":
handlePut(request, response);
break;
default:
replyUnsupportedMethod(request, response);
}
} catch (Exception e) {
log.error("Unexpected exception when processing request.", e);
response.setReasonPhrase(String.format("Unexpected exception when processing request - %s", e.getMessage()));
response.setStatusCode(400);
}
}
/**
* Handle a GET request.
*
* @param request
* The request
* @param response
* Proposed response
*/
protected abstract void handleGet(HttpRequest request, HttpResponse response);
/**
* Handle a PUT request.
*
* @param request
* The request
* @param response
* Proposed response
*/
protected abstract void handlePut(HttpRequest request, HttpResponse response);
/**
* Send a reply that the requested HTTP method is not supported by the server.
*
* @param request
* The request which contained the invalid method
* @param response
* A response which contains a list of supported methods
*/
protected void replyUnsupportedMethod(HttpRequest request, HttpResponse response) {
String msg = String.format("Unsupported method '%s'.", request.getRequestLine().getMethod());
log.error(msg);
response.setReasonPhrase(msg);
response.setStatusCode(400);
}
/**
* Tell the client that his request was invalid. Attach an explanation.
*
* @param response
* Response to fill
* @param permaFailMessage
* Explanation why the request was bad
*/
protected void replyBadRequest(HttpResponse response, String permaFailMessage) {
response.setStatusCode(400);
response.setReasonPhrase(permaFailMessage);
}
}