JAL-3851 some changes. HighlightSequenceEndpoint and SelectSequenceEndpoint
[jalview.git] / src / jalview / rest / HighlightSequenceEndpoint.java
index 3f63ebb..5aa6943 100644 (file)
@@ -1,8 +1,20 @@
 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)
@@ -10,13 +22,13 @@ public class HighlightSequenceEndpoint extends AbstractEndpoint
     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)
@@ -27,31 +39,73 @@ public class HighlightSequenceEndpoint extends AbstractEndpoint
     }
     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);
     }
 
   }