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 = "highlight";
+ protected static final String path = "highlightsequence";
- private static final String name = "Highlight positions";
+ private static final String name = "Highlight sequence positions";
private static final String parameters = "<sequence names>,<ranges>";
- private static final String description = "Highlight the specified sequences with the specified range(s)";
+ private static final String description = "Highlight the specified sequences at the specified position";
public void processEndpoint(HttpServletRequest request,
HttpServletResponse response)
}
String[] parameters = getEndpointPathParameters(request);
- String rangesString = parameters[0];
- String[] rangeStrings = rangesString.split(",");
- int[][] ranges = new int[rangeStrings.length][2];
- for (int i = 0; i < rangeStrings.length; i++)
+ 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<SequenceI, StructureSelectionManager> ssmMap = new HashMap<>();
+ AlignFrame[] alignFrames;
+ if (fromIdString != null)
{
- String range = rangeStrings[i];
- try
+ AlignFrame af = AlignFrame.getAlignFrameFromRestId(fromIdString);
+ if (af == null)
{
- int hyphenpos = range.indexOf('-');
- if (hyphenpos < 0)
- {
- ranges[i][0] = Integer.parseInt(range);
- ranges[i][1] = ranges[i][0];
- }
- else
+ 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<AlignmentViewPanel> aps = (List<AlignmentViewPanel>) af
+ .getAlignPanels();
+ for (AlignmentViewPanel ap : aps)
+ {
+ StructureSelectionManager ssm = ap.getStructureSelectionManager();
+ // ap.getAlignViewport().getSequenceSetId()
+ AlignmentI al = ap.getAlignment();
+ List<SequenceI> seqs = (List<SequenceI>) al.getSequences();
+ for (SequenceI seq : seqs)
{
- ranges[i][0] = Integer.parseInt(range.substring(0, hyphenpos));
- ranges[i][1] = Integer.parseInt(range.substring(hyphenpos));
+ Cache.info("REMOVEME sequence name=" + seq.getName());
+ if (sequenceNames.equals(seq.getName()))
+ {
+ Cache.info("REMOVEME MATCHED " + seq.getName());
+ ssmMap.put(seq, ssm);
+ }
}
- } catch (NumberFormatException nfe)
+ }
+ }
+ // highlight
+ for (SequenceI seq : ssmMap.keySet())
+ {
+ StructureSelectionManager ssm = ssmMap.get(seq);
+ if (ssm == null)
{
- returnError(request, response,
- "couldn't parse ranges component '" + range + "'");
- return;
+ 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);
}
}