488e9f073beb2d4ac893d1f86c09ed303c395375
[jalview.git] / src / jalview / rest / RestHandler.java
1 package jalview.rest;
2
3 import jalview.httpserver.AbstractRequestHandler;
4
5 import java.io.IOException;
6 import java.io.PrintWriter;
7 import java.net.BindException;
8
9 import javax.servlet.http.HttpServletRequest;
10 import javax.servlet.http.HttpServletResponse;
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) throws IOException
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.getMethod() + ": " + request.getRequestURL()
76             + (queryString == null ? "" : "?" + queryString);
77     System.out.println(reply);
78
79     response.setHeader("Cache-Control", "no-cache/no-store");
80     response.setHeader("Content-type", "text/plain");
81     final PrintWriter writer = response.getWriter();
82     writer.write(reply);
83     writer.close();
84   }
85
86   /**
87    * Returns a display name for this service
88    */
89   @Override
90   public String getName()
91   {
92     return MY_NAME;
93   }
94
95 }