package uk.ac.ic.wlgitbridge.snapshot.servermock.server; import org.eclipse.jetty.server.Request; import org.eclipse.jetty.server.handler.AbstractHandler; import uk.ac.ic.wlgitbridge.snapshot.servermock.exception.InvalidAPICallException; import uk.ac.ic.wlgitbridge.snapshot.servermock.response.SnapshotResponse; import uk.ac.ic.wlgitbridge.snapshot.servermock.response.SnapshotResponseBuilder; import uk.ac.ic.wlgitbridge.util.Log; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** * Created by Winston on 09/01/15. */ public class MockSnapshotRequestHandler extends AbstractHandler { private final SnapshotResponseBuilder responseBuilder; public MockSnapshotRequestHandler(SnapshotResponseBuilder responseBuilder) { this.responseBuilder = responseBuilder; } @Override public void handle(String target, final Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { boolean handled; try { final SnapshotResponse snapshotResponse = responseBuilder.buildWithTarget(target, baseRequest.getMethod()); response.getWriter().println(snapshotResponse.respond()); new PostbackThread(baseRequest.getReader(), snapshotResponse.postback()).startIfNotNull(); handled = true; } catch (InvalidAPICallException e) { handled = false; } catch (RuntimeException e) { Log.warn("Runtime exception when handling request", e); handled = true; } baseRequest.setHandled(handled); } }