JAL-3851 merged to develop 2022-03-22
[jalview.git] / src / jalview / rest / HighlightSequenceEndpoint.java
1 package jalview.rest;
2
3 import java.util.HashMap;
4 import java.util.List;
5 import java.util.Map;
6
7 import javax.servlet.http.HttpServletRequest;
8 import javax.servlet.http.HttpServletResponse;
9
10 import jalview.api.AlignmentViewPanel;
11 import jalview.datamodel.AlignmentI;
12 import jalview.datamodel.SequenceI;
13 import jalview.gui.AlignFrame;
14 import jalview.structure.StructureSelectionManager;
15
16 public class HighlightSequenceEndpoint extends AbstractEndpoint
17 {
18   public HighlightSequenceEndpoint(API api)
19   {
20     super(api, path, name, parameters, description);
21   }
22
23   protected static final String path = "highlightsequence";
24
25   private static final String name = "Highlight sequence position";
26
27   private static final String parameters = "<sequence names>/<position>";
28
29   private static final String description = "Highlight the specified sequences at the specified position";
30
31   public void processEndpoint(HttpServletRequest request,
32           HttpServletResponse response)
33   {
34     if (!checkParameters(request, response, 2))
35     {
36       return;
37     }
38     String[] parameters = getEndpointPathParameters(request);
39
40     String posString = parameters[1];
41     int pos = -1;
42     try
43     {
44       pos = Integer.parseInt(posString);
45     } catch (NumberFormatException e)
46     {
47       returnError(request, response,
48               "Could not parse postition integer " + posString);
49     }
50
51     String sequenceNames = parameters[0];
52
53     Map<SequenceI, StructureSelectionManager> ssmMap = new HashMap<>();
54     AlignFrame[] alignFrames = getAlignFrames(request, true);
55     if (alignFrames == null)
56     {
57       returnError(request, response, "could not find results");
58       return;
59     }
60     for (int i = 0; i < alignFrames.length; i++)
61     {
62       AlignFrame af = alignFrames[i];
63       List<AlignmentViewPanel> aps = (List<AlignmentViewPanel>) af
64               .getAlignPanels();
65       for (AlignmentViewPanel ap : aps)
66       {
67         StructureSelectionManager ssm = ap.getStructureSelectionManager();
68         AlignmentI al = ap.getAlignment();
69         List<SequenceI> seqs = (List<SequenceI>) al.getSequences();
70         for (SequenceI seq : seqs)
71         {
72           if (sequenceNames.equals(seq.getName()))
73           {
74             ssmMap.put(seq, ssm);
75           }
76         }
77       }
78     }
79     // highlight
80     for (SequenceI seq : ssmMap.keySet())
81     {
82       StructureSelectionManager ssm = ssmMap.get(seq);
83       if (ssm == null)
84       {
85         continue;
86       }
87       ssm.mouseOverSequence(seq, pos, -1, null);
88     }
89
90   }
91 }