7fa95e2aca17393dc309d841d514268cc7af07e3
[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     if (checkStatus(request, response))
50       return;
51
52     String db = DBRefUtils.getCanonicalName(dbName);
53     Desktop desktop = Desktop.instance;
54     sf = new SequenceFetcher(desktop, db, dbId, false);
55     setCompletableFuture(sf.ok_actionPerformed(true, getId()));
56   }
57
58   protected void processAsync(HttpServletRequest request,
59           HttpServletResponse response, Map<String, Object> map)
60   {
61     // all the work being done by the SequenceFetcher!
62     Console.warn("THIS SHOULD NOT BE RUN");
63   }
64
65   @Override
66   protected void atEnd()
67   {
68     sf.close_actionPerformed(null);
69   }
70
71   @Override
72   protected String finishedResponseString(HttpServletRequest request,
73           HttpServletResponse response)
74   {
75     AlignFrame af = getAlignFrameFromId(request, "id");
76     if (af == null)
77       return null;
78     List<AlignmentViewPanel> aps = (List<AlignmentViewPanel>) af
79             .getAlignPanels();
80     StringBuilder sb = new StringBuilder();
81     for (AlignmentViewPanel ap : aps)
82     {
83       AlignmentI al = ap.getAlignment();
84       if (al == null)
85         continue;
86       List<SequenceI> seqs = (List<SequenceI>) al.getSequences();
87       for (SequenceI seq : seqs)
88       {
89         if (sb.length() > 0)
90           sb.append(",");
91         sb.append(seq.getName());
92       }
93     }
94     sb.insert(0, "sequences=");
95     sb.append("\n");
96     return sb.toString();
97   }
98
99 }