3 import java.io.BufferedReader;
4 import java.io.IOException;
5 import java.io.PrintWriter;
7 import javax.servlet.http.HttpServletRequest;
8 import javax.servlet.http.HttpServletResponse;
10 import jalview.bin.Cache;
11 import jalview.rest.RestHandler.EndpointI;
13 public abstract class AbstractEndpoint implements EndpointI
15 private final String path;
19 private final String name;
21 private final String parameters;
23 private final String description;
25 public AbstractEndpoint(API api, String path, String name,
26 String parameters, String description)
31 this.parameters = parameters;
32 this.description = description;
35 public String getPath()
40 protected API getAPI()
45 public String getName()
50 public String getParameters()
52 return this.parameters;
55 public String getDescription()
57 return this.description;
60 public abstract void processEndpoint(HttpServletRequest request,
61 HttpServletResponse response);
64 * Shared methods below here
67 protected String[] getEndpointPathParameters(HttpServletRequest request)
69 String pathInfo = request.getPathInfo();
70 int slashpos = pathInfo.indexOf('/', 1);
71 return slashpos < 1 ? null
72 : pathInfo.substring(slashpos + 1).split("/");
75 protected void returnError(HttpServletRequest request,
76 HttpServletResponse response, String message)
78 response.setStatus(500); // set this to something better
79 String endpointName = getPath();
80 Cache.error(getAPI().getName() + " error: endpoint " + endpointName
81 + " failed: '" + message + "'");
84 PrintWriter writer = response.getWriter();
85 writer.write("Endpoint " + endpointName + ": " + message);
87 } catch (IOException e)
93 protected String getRequestBody(HttpServletRequest request)
96 StringBuilder sb = new StringBuilder();
97 BufferedReader reader = request.getReader();
101 while ((line = reader.readLine()) != null)
103 sb.append(line).append('\n');
109 return sb.toString();
112 protected boolean checkParameters(HttpServletRequest request,
113 HttpServletResponse response, int i)
115 String[] parameters = getEndpointPathParameters(request);
117 // check we can run fetchsequence
118 if (parameters.length < i)
120 returnError(request, response,
121 "requires parameters:" + getParameters() + "\n" + getName()
122 + ": " + getDescription());
128 public int[][] parseIntRanges(String rangesString)
130 String[] rangeStrings = rangesString.split(",");
131 int[][] ranges = new int[2][rangeStrings.length];
132 for (int i = 0; i < rangeStrings.length; i++)
134 String range = rangeStrings[i];
137 int hyphenpos = range.indexOf('-');
140 ranges[0][i] = Integer.parseInt(range);
141 ranges[1][i] = ranges[0][i];
145 ranges[0][i] = Integer.parseInt(range.substring(0, hyphenpos));
146 ranges[1][i] = Integer.parseInt(range.substring(hyphenpos + 1));
148 } catch (NumberFormatException nfe)