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.gui.AlignFrame;
12 import jalview.gui.Desktop;
13 import jalview.rest.RestHandler.EndpointI;
15 public abstract class AbstractEndpoint implements EndpointI
17 private final String path;
21 private final String name;
23 private final String parameters;
25 private final String description;
27 public AbstractEndpoint(API api, String path, String name,
28 String parameters, String description)
33 this.parameters = parameters;
34 this.description = description;
37 public String getPath()
42 protected API getAPI()
47 public String getName()
52 public String getParameters()
54 return this.parameters;
57 public String getDescription()
59 return this.description;
62 public abstract void processEndpoint(HttpServletRequest request,
63 HttpServletResponse response);
66 * Shared methods below here
69 protected String[] getEndpointPathParameters(HttpServletRequest request)
71 String pathInfo = request.getPathInfo();
72 int slashpos = pathInfo.indexOf('/', 1);
73 return slashpos < 1 ? null
74 : pathInfo.substring(slashpos + 1).split("/");
77 protected void returnError(HttpServletRequest request,
78 HttpServletResponse response, String message)
80 String okString = request.getParameter("ok");
81 boolean ok = (okString != null && okString.equalsIgnoreCase("true"));
82 response.setStatus(ok ? HttpServletResponse.SC_OK
83 : HttpServletResponse.SC_BAD_REQUEST);
84 String endpointName = getPath();
85 Cache.error(getAPI().getName() + " error: endpoint " + endpointName
86 + " failed: '" + message + "'");
89 PrintWriter writer = response.getWriter();
90 writer.write("message=Endpoint " + endpointName + ": " + message);
91 } catch (IOException e)
97 protected String getRequestBody(HttpServletRequest request)
100 StringBuilder sb = new StringBuilder();
101 BufferedReader reader = request.getReader();
105 while ((line = reader.readLine()) != null)
107 sb.append(line).append('\n');
113 return sb.toString();
116 protected boolean checkParameters(HttpServletRequest request,
117 HttpServletResponse response, int i)
119 String[] parameters = getEndpointPathParameters(request);
121 // check we can run fetchsequence
122 if (parameters.length < i)
124 returnError(request, response,
125 "requires parameters:" + getParameters() + "\n" + getName()
126 + ": " + getDescription());
132 public int[][] parseIntRanges(String rangesString)
134 if (rangesString.equals("*"))
136 return new int[][] { { -1 }, { -1 } };
138 String[] rangeStrings = rangesString.split(",");
139 int[][] ranges = new int[2][rangeStrings.length];
140 for (int i = 0; i < rangeStrings.length; i++)
142 String range = rangeStrings[i];
145 int hyphenpos = range.indexOf('-');
148 ranges[0][i] = Integer.parseInt(range);
149 ranges[1][i] = ranges[0][i];
153 ranges[0][i] = Integer.parseInt(range.substring(0, hyphenpos));
154 ranges[1][i] = Integer.parseInt(range.substring(hyphenpos + 1));
156 } catch (NumberFormatException nfe)
165 * Get all AlignFrames or just one if requested to work on a specific window (fromId query string parameter)
167 protected AlignFrame[] getAlignFrames(HttpServletRequest request,
170 return getAlignFrames(request, "fromId", all);
173 protected AlignFrame[] getAlignFrames(HttpServletRequest request,
174 String idParam, boolean all)
176 String fromIdString = request.getParameter(idParam);
178 if (fromIdString != null)
180 AlignFrame af = AlignFrame.getAlignFrameFromRestId(fromIdString);
181 return af == null ? null : new AlignFrame[] { af };
185 return Desktop.getAlignFrames();
193 protected AlignFrame getAlignFrameFromId(HttpServletRequest request)
195 return getAlignFrameFromId(request, "fromId");
198 protected AlignFrame getAlignFrameFromId(HttpServletRequest request,
201 AlignFrame[] afs = getAlignFrames(request, idParam, false);
202 return (afs == null || afs.length < 1 || afs[0] == null) ? null