package jalview.rest; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import jalview.api.AlignmentViewPanel; import jalview.bin.Cache; import jalview.datamodel.AlignmentI; import jalview.datamodel.SequenceI; import jalview.gui.AlignFrame; import jalview.gui.Desktop; import jalview.structure.StructureSelectionManager; public class HighlightSequenceEndpoint extends AbstractEndpoint { public HighlightSequenceEndpoint(API api) { super(api, path, name, parameters, description); } protected static final String path = "highlightsequence"; private static final String name = "Highlight sequence positions"; private static final String parameters = ","; private static final String description = "Highlight the specified sequences at the specified position"; public void processEndpoint(HttpServletRequest request, HttpServletResponse response) { if (!checkParameters(request, response, 2)) { return; } String[] parameters = getEndpointPathParameters(request); String posString = parameters[1]; int pos = -1; try { pos = Integer.parseInt(posString); } catch (NumberFormatException e) { returnError(request, response, "Could not parse postition integer " + posString); } String sequenceNames = parameters[0]; String fromIdString = request.getParameter("fromId"); Map ssmMap = new HashMap<>(); AlignFrame[] alignFrames; if (fromIdString != null) { AlignFrame af = AlignFrame.getAlignFrameFromRestId(fromIdString); if (af == null) { returnError(request, response, "fromId value '" + fromIdString + "' results not found"); return; } alignFrames = new AlignFrame[] { af }; } else { alignFrames = Desktop.getAlignFrames(); } if (alignFrames == null) return; for (int i = 0; i < alignFrames.length; i++) { AlignFrame af = alignFrames[i]; List aps = (List) af .getAlignPanels(); for (AlignmentViewPanel ap : aps) { StructureSelectionManager ssm = ap.getStructureSelectionManager(); // ap.getAlignViewport().getSequenceSetId() AlignmentI al = ap.getAlignment(); List seqs = (List) al.getSequences(); for (SequenceI seq : seqs) { Cache.info("REMOVEME sequence name=" + seq.getName()); if (sequenceNames.equals(seq.getName())) { Cache.info("REMOVEME MATCHED " + seq.getName()); ssmMap.put(seq, ssm); } } } } // highlight for (SequenceI seq : ssmMap.keySet()) { StructureSelectionManager ssm = ssmMap.get(seq); if (ssm == null) { Cache.info("REMOVEME skipping sequence " + seq.getName()); continue; } Cache.info("REMOVEME Attempting to highlight sequence " + seq.getName() + " at postition " + pos); ssm.mouseOverSequence(seq, pos, -1, null); } } }