package org.dcache.services.httpd.handlers; import org.eclipse.jetty.server.Request; import org.eclipse.jetty.server.handler.AbstractHandler; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.net.URISyntaxException; import dmg.util.HttpException; import dmg.util.HttpRequest; import dmg.util.HttpResponseEngine; import org.dcache.services.httpd.util.StandardHttpRequest; import static com.google.common.base.Preconditions.checkNotNull; /** * Wraps calls to {@link HttpResponseEngine} aliases with the Jetty handler API. * * @author arossi */ public class ResponseEngineHandler extends AbstractHandler { private final HttpResponseEngine engine; public ResponseEngineHandler(HttpResponseEngine engine) { this.engine = engine; } @Override public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { checkNotNull(engine); try { HttpRequest proxy = new StandardHttpRequest(request, response); engine.queryUrl(proxy); proxy.getPrintWriter().flush(); } catch (HttpException e) { response.sendError(e.getErrorCode(), e.getMessage()); } catch (URISyntaxException e) { response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.getMessage()); } } @Override protected void doStart() throws Exception { engine.startup(); super.doStart(); } @Override protected void doStop() throws Exception { super.doStop(); engine.shutdown(); } }