package jalview.rest; import java.io.IOException; import java.io.PrintWriter; import java.net.BindException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import jalview.httpserver.AbstractRequestHandler; /** * A simple handler to process (or delegate) HTTP requests on /jalview/rest */ public class RestHandler extends AbstractRequestHandler { private static final String MY_PATH = "rest"; private static final String MY_NAME = "Rest"; /** * Singleton instance of this class */ private static RestHandler instance = null; /** * Returns the singleton instance of this class * * @return * @throws BindException */ public static RestHandler getInstance() throws BindException { synchronized (RestHandler.class) { if (instance == null) { instance = new RestHandler(); } } return instance; } /** * Private constructor enforces use of singleton * * @throws BindException */ private RestHandler() throws BindException { setPath(MY_PATH); /* * We don't register the handler here - this is done as a special case in * HttpServer initialisation; to do it here would invite an infinite loop of * RestHandler/HttpServer constructor */ } /** * Handle a jalview/rest request * * @throws IOException */ @Override protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws IOException { /* * Currently just echoes the request; add helper classes as required to * process requests */ final String queryString = request.getQueryString(); final String reply = "REST not yet implemented; received " + request.getMethod() + ": " + request.getRequestURL() + (queryString == null ? "" : "?" + queryString); System.out.println(reply); response.setHeader("Cache-Control", "no-cache/no-store"); response.setHeader("Content-type", "text/plain"); final PrintWriter writer = response.getWriter(); writer.write(reply); writer.close(); } /** * Returns a display name for this service */ @Override public String getName() { return MY_NAME; } }