+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;
+ }
+
+}