3 import java.util.HashMap;
7 import javax.servlet.http.HttpServletRequest;
8 import javax.servlet.http.HttpServletResponse;
10 import jalview.api.AlignmentViewPanel;
11 import jalview.bin.Console;
12 import jalview.datamodel.AlignmentI;
13 import jalview.datamodel.SequenceI;
14 import jalview.gui.AlignFrame;
15 import jalview.structure.StructureSelectionManager;
17 public class HighlightSequenceEndpoint extends AbstractEndpoint
19 public HighlightSequenceEndpoint(API api)
21 super(api, path, name, parameters, description);
24 protected static final String path = "highlightsequence";
26 private static final String name = "Highlight sequence position";
28 private static final String parameters = "<sequence names>/<position>";
30 private static final String description = "Highlight the specified sequences at the specified position";
32 public void processEndpoint(HttpServletRequest request,
33 HttpServletResponse response)
35 if (!checkParameters(request, response, 2))
39 String[] parameters = getEndpointPathParameters(request);
41 String posString = parameters[1];
45 pos = Integer.parseInt(posString);
46 } catch (NumberFormatException e)
48 returnError(request, response,
49 "Could not parse postition integer " + posString);
52 String sequenceNames = parameters[0] == null ? "*0" : parameters[0];
53 Console.debug("Looking for sequence '" + sequenceNames + "'");
56 if (sequenceNames.startsWith("*"))
60 sequenceNum = Integer.parseInt(sequenceNames.substring(1));
61 } catch (NumberFormatException e)
63 Console.debug("Could not parse sequence number '" + sequenceNames
64 + "'. Will use as identifier.", e);
68 Map<SequenceI, StructureSelectionManager> ssmMap = new HashMap<>();
69 AlignFrame[] alignFrames = getAlignFrames(request, true);
70 if (alignFrames == null)
72 returnError(request, response, "Could not find AlignFrame for '"
73 + getRequestUrl(request) + "'");
76 for (int i = 0; i < alignFrames.length; i++)
78 AlignFrame af = alignFrames[i];
79 List<AlignmentViewPanel> aps = (List<AlignmentViewPanel>) af
81 for (AlignmentViewPanel ap : aps)
83 StructureSelectionManager ssm = ap.getStructureSelectionManager();
84 AlignmentI al = ap.getAlignment();
85 List<SequenceI> seqs = (List<SequenceI>) al.getSequences();
86 if (0 <= sequenceNum && sequenceNum < seqs.size())
90 SequenceI seqN = seqs.get(sequenceNum);
91 Console.debug("Found sequence " + seqN.getName() + ":"
92 + seqN.getDisplayId(false));
93 ssmMap.put(seqN, ssm);
94 } catch (IndexOutOfBoundsException e)
96 Console.debug("Sequence index number too large: " + sequenceNum,
102 // search for sequence names
103 for (SequenceI seq : seqs)
105 if (sequenceNames.equals(seq.getName()))
107 ssmMap.put(seq, ssm);
108 Console.debug("Found sequence '" + seq.getName());
115 for (SequenceI seq : ssmMap.keySet())
117 StructureSelectionManager ssm = ssmMap.get(seq);
122 Console.debug("Highlighting sequence '" + seq.getName()
123 + "' at position " + pos);
124 ssm.mouseOverSequence(seq, pos, -1, null, true);