X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fhttpserver%2FAbstractRequestHandler.java;h=ece2df08298721993c68eb1db30e3dc801530c9e;hb=refs%2Fheads%2Ffeatures%2FJAL-3417_sdppred_calcs;hp=f48ba49e3cc2d80a25ef1477e440c8a876ea4511;hpb=f2f654875a6eb5f4e90b2c5c545bfed3a70f2b5f;p=jalview.git diff --git a/src/jalview/httpserver/AbstractRequestHandler.java b/src/jalview/httpserver/AbstractRequestHandler.java index f48ba49..ece2df0 100644 --- a/src/jalview/httpserver/AbstractRequestHandler.java +++ b/src/jalview/httpserver/AbstractRequestHandler.java @@ -1,6 +1,27 @@ +/* + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors + * + * This file is part of Jalview. + * + * Jalview is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * Jalview is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. + */ package jalview.httpserver; import java.io.IOException; +import java.net.BindException; import java.util.Collections; import javax.servlet.ServletException; @@ -17,6 +38,18 @@ import org.eclipse.jetty.server.handler.AbstractHandler; */ public abstract class AbstractRequestHandler extends AbstractHandler { + + /* + * The relative path (below context root) of this handler (without / + * separators) + */ + private String path; + + /* + * The full URI on which this handler listens + */ + private String uri; + /** * Handle an incoming Http request. */ @@ -41,8 +74,8 @@ public abstract class AbstractRequestHandler extends AbstractHandler /* * Can't write an HTTP header once any response content has been written */ - System.err - .println("Unable to return HTTP 500 as response already committed"); + System.err.println( + "Unable to return HTTP 500 as response already committed"); } else { @@ -60,9 +93,10 @@ public abstract class AbstractRequestHandler extends AbstractHandler * * @param request * @param response + * @throws IOException */ protected abstract void processRequest(HttpServletRequest request, - HttpServletResponse response); + HttpServletResponse response) throws IOException; /** * For debug - writes HTTP request details to stdout @@ -72,6 +106,7 @@ public abstract class AbstractRequestHandler extends AbstractHandler protected void dumpRequest(HttpServletRequest request) { System.out.println(request.getMethod()); + System.out.println(request.getRequestURL()); for (String hdr : Collections.list(request.getHeaderNames())) { for (String val : Collections.list(request.getHeaders(hdr))) @@ -87,4 +122,84 @@ public abstract class AbstractRequestHandler extends AbstractHandler } } } + + /** + * Returns a display name for the handler + * + * @return + */ + public abstract String getName(); + + /** + * Deregister this listener and close it down + * + * @throws Exception + */ + public void shutdown() + { + try + { + HttpServer.getInstance().removeHandler(this); + stop(); + } catch (Exception e) + { + System.err.println( + "Error stopping " + getName() + ": " + e.getMessage()); + } + } + + /** + * Returns the URI on which we are listening + * + * @return + */ + public String getUri() + { + return this.uri; + } + + /** + * Set the URI to this handler + * + * @param u + */ + protected void setUri(String u) + { + this.uri = u; + } + + /** + * Sets the relative path to this handler - do this before registering the + * handler. + * + * @param p + */ + protected void setPath(String p) + { + this.path = p; + } + + /** + * Returns the relative path to this handler below the context root (without / + * separators) + * + * @return + */ + public String getPath() + { + return this.path; + } + + /** + * Registers the handler with the HttpServer and reports its URI on stdout + * + * @throws BindException + * if no port could be allocated + * @throws IllegalStateException + * if this method is called before {@link #setPath} + */ + protected void registerHandler() throws BindException + { + HttpServer.getInstance().registerHandler(this); + } }