/**
* junit-rules: JUnit Rules Library
*
* Copyright (c) 2009-2011 by Alistair A. Israel.
* This software is made available under the terms of the MIT License.
*
* Created Apr 26, 2011
*/
package junit.rules.jetty;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.mortbay.jetty.handler.AbstractHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author Alistair A. Israel
*/
public class SimpleJettyHandler extends AbstractHandler {
private static final Logger logger = LoggerFactory.getLogger(SimpleJettyHandler.class);
/**
* {@value #GET}
*/
private static final String GET = "GET";
/**
* {@value #POST}
*/
private static final String POST = "POST";
/**
* {@value #PUT}
*/
private static final String PUT = "PUT";
/**
* {@value #DELETE}
*/
private static final String DELETE = "DELETE";
private HttpServletRequest httpServletRequest;
private HttpServletResponse httpServletResponse;
private PrintWriter responseWriter;
private int responseCodeSent;
/**
* {@inheritDoc}
*
* @see org.mortbay.jetty.Handler#handle(java.lang.String, javax.servlet.http.HttpServletRequest,
* javax.servlet.http.HttpServletResponse, int)
*/
@Override
public final void handle(final String target, final HttpServletRequest request, final HttpServletResponse response,
final int dispatch) throws IOException, ServletException {
responseCodeSent = -1;
httpServletRequest = request;
httpServletResponse = response;
responseWriter = response.getWriter();
final String requestMethod = request.getMethod();
logger.debug(requestMethod + " " + request.getRequestURI());
if (GET.equalsIgnoreCase(requestMethod)) {
onGet();
} else if (POST.equalsIgnoreCase(requestMethod)) {
onPost();
} else if (PUT.equalsIgnoreCase(requestMethod)) {
onPut();
} else if (DELETE.equalsIgnoreCase(requestMethod)) {
onDelete();
}
if (responseCodeSent == -1) {
sendResponse(HttpServletResponse.SC_OK);
}
}
/**
* @return the httpServletRequest
*/
public final HttpServletRequest request() {
return httpServletRequest;
}
/**
* @return the httpServletResponse
*/
public final HttpServletResponse response() {
return httpServletResponse;
}
/**
* @return the responseWriter
*/
public final PrintWriter getResponseWriter() {
return responseWriter;
}
/**
* @throws IOException
* on exception
*/
protected void onGet() throws IOException {
}
/**
* @throws IOException
* on exception
*/
protected void onPost() throws IOException {
}
/**
* @throws IOException
* on exception
*/
protected void onPut() throws IOException {
}
/**
* @throws IOException
* on exception
*/
protected void onDelete() throws IOException {
}
/**
* @param responseCode
* the HTTP response code to send
* @throws IOException
* on exception
*/
protected final void sendResponse(final int responseCode) throws IOException {
responseWriter.flush();
httpServletResponse.setStatus(responseCode);
httpServletResponse.flushBuffer();
responseCodeSent = responseCode;
}
}