JAL-1575 bare bones RestHandler added
[jalview.git] / src / jalview / rest / RestHandler.java
diff --git a/src/jalview/rest/RestHandler.java b/src/jalview/rest/RestHandler.java
new file mode 100644 (file)
index 0000000..88f23f4
--- /dev/null
@@ -0,0 +1,99 @@
+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)
+  {
+    /*
+     * 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.getRequestURL()
+            + (queryString == null ? "" : "?" + queryString);
+    System.out.println(reply);
+
+    try
+    {
+      final PrintWriter writer = response.getWriter();
+      writer.write(reply);
+      writer.close();
+    } catch (IOException e)
+    {
+      System.err.println("Error writing REST response: " + e.getMessage());
+    }
+  }
+
+  /**
+   * Returns a display name for this service
+   */
+  @Override
+  public String getName()
+  {
+    return MY_NAME;
+  }
+
+}