JAL-1575 bare bones RestHandler added
[jalview.git] / src / jalview / rest / RestHandler.java
1 package jalview.rest;
2
3 import java.io.IOException;
4 import java.io.PrintWriter;
5 import java.net.BindException;
6
7 import javax.servlet.http.HttpServletRequest;
8 import javax.servlet.http.HttpServletResponse;
9
10 import jalview.httpserver.AbstractRequestHandler;
11
12 /**
13  * A simple handler to process (or delegate) HTTP requests on /jalview/rest
14  */
15 public class RestHandler extends AbstractRequestHandler
16 {
17   private static final String MY_PATH = "rest";
18
19   private static final String MY_NAME = "Rest";
20
21   /**
22    * Singleton instance of this class
23    */
24   private static RestHandler instance = null;
25
26   /**
27    * Returns the singleton instance of this class
28    * 
29    * @return
30    * @throws BindException
31    */
32   public static RestHandler getInstance() throws BindException
33   {
34     synchronized (RestHandler.class)
35     {
36       if (instance == null)
37       {
38         instance = new RestHandler();
39       }
40     }
41     return instance;
42   }
43
44   /**
45    * Private constructor enforces use of singleton
46    * 
47    * @throws BindException
48    */
49   private RestHandler() throws BindException
50   {
51     setPath(MY_PATH);
52
53     /*
54      * We don't register the handler here - this is done as a special case in
55      * HttpServer initialisation; to do it here would invite an infinite loop of
56      * RestHandler/HttpServer constructor
57      */
58   }
59
60   /**
61    * Handle a jalview/rest request
62    * 
63    * @throws IOException
64    */
65   @Override
66   protected void processRequest(HttpServletRequest request,
67           HttpServletResponse response)
68   {
69     /*
70      * Currently just echoes the request; add helper classes as required to
71      * process requests
72      */
73     final String queryString = request.getQueryString();
74     final String reply = "REST not yet implemented; received "
75             + request.getRequestURL()
76             + (queryString == null ? "" : "?" + queryString);
77     System.out.println(reply);
78
79     try
80     {
81       final PrintWriter writer = response.getWriter();
82       writer.write(reply);
83       writer.close();
84     } catch (IOException e)
85     {
86       System.err.println("Error writing REST response: " + e.getMessage());
87     }
88   }
89
90   /**
91    * Returns a display name for this service
92    */
93   @Override
94   public String getName()
95   {
96     return MY_NAME;
97   }
98
99 }