JAL-3851 re-engineering endpoints as separate classes
[jalview.git] / src / jalview / rest / Endpoint.java
1 package jalview.rest;
2
3 import java.io.BufferedReader;
4 import java.io.IOException;
5 import java.io.PrintWriter;
6
7 import javax.servlet.http.HttpServletRequest;
8 import javax.servlet.http.HttpServletResponse;
9
10 import jalview.bin.Cache;
11 import jalview.rest.RestHandler.EndpointI;
12
13 public abstract class Endpoint implements EndpointI
14 {
15   private String name = null;
16
17   private API api = null;
18
19   public void setName(String name)
20   {
21     this.name = name;
22   }
23
24   public String getName()
25   {
26     return this.name;
27   }
28
29   protected API getAPI()
30   {
31     return this.api;
32   }
33
34   public abstract void processEndpoint(HttpServletRequest request,
35           HttpServletResponse response);
36
37   /*
38    * Shared methods below here
39    */
40
41   protected String[] getEndpointPathParameters(HttpServletRequest request)
42   {
43     String pathInfo = request.getPathInfo();
44     int slashpos = pathInfo.indexOf('/', 1);
45     return slashpos < 1 ? null
46             : pathInfo.substring(slashpos + 1).split("/");
47   }
48
49   protected void returnError(HttpServletRequest request,
50           HttpServletResponse response, String message)
51   {
52     response.setStatus(500); // set this to something better
53     String endpointName = getName();
54     Cache.error(getAPI().getName() + " error: endpoint " + endpointName
55             + " failed: '" + message + "'");
56     try
57     {
58       PrintWriter writer = response.getWriter();
59       writer.write("Endpoint " + endpointName + ": " + message);
60       writer.close();
61     } catch (IOException e)
62     {
63       Cache.debug(e);
64     }
65   }
66
67   protected String getRequestBody(HttpServletRequest request)
68           throws IOException
69   {
70     StringBuilder sb = new StringBuilder();
71     BufferedReader reader = request.getReader();
72     try
73     {
74       String line;
75       while ((line = reader.readLine()) != null)
76       {
77         sb.append(line).append('\n');
78       }
79     } finally
80     {
81       reader.close();
82     }
83     return sb.toString();
84   }
85
86 }