JAL-3851 Add a redirect back to itself for working endpoints
[jalview.git] / src / jalview / rest / FetchSequencesEndpoint.java
1 package jalview.rest;
2
3 import java.util.List;
4 import java.util.Map;
5
6 import javax.servlet.http.HttpServletRequest;
7 import javax.servlet.http.HttpServletResponse;
8
9 import jalview.api.AlignmentViewPanel;
10 import jalview.bin.Console;
11 import jalview.datamodel.AlignmentI;
12 import jalview.datamodel.SequenceI;
13 import jalview.gui.AlignFrame;
14 import jalview.gui.Desktop;
15 import jalview.gui.SequenceFetcher;
16 import jalview.util.DBRefUtils;
17
18 public class FetchSequencesEndpoint extends AbstractEndpointAsync
19 {
20   public FetchSequencesEndpoint(API api)
21   {
22     super(api, path, name, parameters, description);
23   }
24
25   private static final String path = "fetchsequences";
26
27   private static final String name = "Fetch Sequences";
28
29   private static final String parameters = "<resource name>/<sequence ids>";
30
31   private static final String description = "Fetch sequences from online resource";
32
33   private SequenceFetcher sf;
34
35   @Override
36   protected void initialise(HttpServletRequest request,
37           HttpServletResponse response)
38   {
39     if (!checkParameters(request, response, 2))
40     {
41       return;
42     }
43     String[] parameters = getEndpointPathParameters(request);
44
45     String dbName = parameters[0];
46     String dbId = parameters[1];
47
48     setId(request, dbName + "::" + dbId);
49     saveParameters(request);
50
51     if (checkStatus(request, response))
52       return;
53
54     String db = DBRefUtils.getCanonicalName(dbName);
55     Desktop desktop = Desktop.instance;
56     sf = new SequenceFetcher(desktop, db, dbId, false);
57     setCompletableFuture(sf.ok_actionPerformed(true, getId()));
58   }
59
60   protected void processAsync(HttpServletRequest request,
61           HttpServletResponse response, Map<String, Object> map)
62   {
63     // all the work being done by the SequenceFetcher!
64     Console.warn("THIS SHOULD NOT BE RUN");
65   }
66
67   @Override
68   protected void atEnd()
69   {
70     sf.close_actionPerformed(null);
71   }
72
73   @Override
74   protected String finishedResponseString(HttpServletRequest request,
75           HttpServletResponse response)
76   {
77     AlignFrame af = getAlignFrameFromId(request, "id");
78     if (af == null)
79       return null;
80     List<AlignmentViewPanel> aps = (List<AlignmentViewPanel>) af
81             .getAlignPanels();
82     StringBuilder sb = new StringBuilder();
83     for (AlignmentViewPanel ap : aps)
84     {
85       AlignmentI al = ap.getAlignment();
86       if (al == null)
87         continue;
88       List<SequenceI> seqs = (List<SequenceI>) al.getSequences();
89       for (SequenceI seq : seqs)
90       {
91         if (sb.length() > 0)
92           sb.append(",");
93         sb.append(seq.getName());
94         seq.setStart(1000);
95       }
96     }
97     sb.insert(0, "sequences=");
98     sb.append("\n");
99     return sb.toString();
100   }
101
102 }