JAL-3851 some changes. HighlightSequenceEndpoint and SelectSequenceEndpoint
[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.Cache;
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.structure.StructureSelectionManager;
17 import jalview.util.DBRefUtils;
18
19 public class FetchSequencesEndpoint extends AbstractEndpointAsync
20 {
21   public FetchSequencesEndpoint(API api)
22   {
23     super(api, path, name, parameters, description);
24   }
25
26   private static final String path = "fetchsequences";
27
28   private static final String name = "Fetch Sequences";
29
30   private static final String parameters = "<resource name>,<sequence ids>";
31
32   private static final String description = "Fetch sequences from online resource";
33
34   private SequenceFetcher sf;
35
36   @Override
37   protected void initialise(HttpServletRequest request,
38           HttpServletResponse response)
39   {
40     if (!checkParameters(request, response, 2))
41     {
42       return;
43     }
44     String[] parameters = getEndpointPathParameters(request);
45
46     String dbName = parameters[0];
47     String dbId = parameters[1];
48
49     setId(request, dbName + "::" + dbId);
50     if (checkStatus(request, response))
51       return;
52
53     String db = DBRefUtils.getCanonicalName(dbName);
54     Desktop desktop = Desktop.instance;
55     sf = new SequenceFetcher(desktop, db, dbId, false);
56     setCompletableFuture(sf.ok_actionPerformed(true, getId()));
57   }
58
59   protected void processAsync(HttpServletRequest request,
60           HttpServletResponse response, Map<String, String> map)
61   {
62     // all the work being done by the SequenceFetcher!
63     Cache.warn("THIS SHOULD NOT BE RUN");
64   }
65
66   protected void atEnd()
67   {
68     sf.close_actionPerformed(null);
69   }
70
71   protected String finished(HttpServletRequest request,
72           HttpServletResponse response)
73   {
74     AlignFrame af = AlignFrame.getAlignFrameFromRestId(getId());
75     if (af == null)
76     {
77       return null;
78     }
79     List<AlignmentViewPanel> aps = (List<AlignmentViewPanel>) af
80             .getAlignPanels();
81     StringBuilder sb = new StringBuilder();
82     for (AlignmentViewPanel ap : aps)
83     {
84       StructureSelectionManager ssm = ap.getStructureSelectionManager();
85       // ap.getAlignViewport().getSequenceSetId()
86       AlignmentI al = ap.getAlignment();
87       List<SequenceI> seqs = (List<SequenceI>) al.getSequences();
88       for (SequenceI seq : seqs)
89       {
90         if (sb.length() > 0)
91           sb.append(",");
92         sb.append(seq.getName());
93       }
94     }
95     sb.insert(0, "sequences=");
96     sb.append("\n");
97     return sb.toString();
98   }
99
100 }