JAL-629 Add --seqid for non-subval use, make arg value naming more consistent in...
[jalview.git] / src / jalview / bin / Commands.java
index a0209fd..328c6e1 100644 (file)
@@ -413,7 +413,7 @@ public class Commands
         {
           String val = av.getValue();
           SubVals subVals = av.getSubVals();
-          SequenceI seq = getSpecifiedSequence(af, subVals);
+          SequenceI seq = getSpecifiedSequence(af, avm, av);
           if (seq == null)
           {
             // Could not find sequence from subId, let's assume the first
@@ -835,21 +835,34 @@ public class Commands
     return true;
   }
 
-  private SequenceI getSpecifiedSequence(AlignFrame af, SubVals subId)
+  private SequenceI getSpecifiedSequence(AlignFrame af, ArgValuesMap avm,
+          ArgValue av)
   {
-    if (subId == null)
+    SubVals subVals = av.getSubVals();
+    ArgValue idAv = avm.getClosestNextArgValueOfArg(av, Arg.SEQID);
+    SequenceI seq = null;
+    if (subVals == null && idAv == null)
       return null;
     AlignmentI al = af.getCurrentView().getAlignment();
-    if (subId.has("seqid"))
+    if (al == null)
+      return null;
+    if (subVals != null)
     {
-      return al.findName(subId.get("seqid"));
+      if (subVals.has("seqid"))
+      {
+        seq = al.findName(subVals.get("seqid"));
+      }
+      else if (-1 < subVals.getIndex()
+              && subVals.getIndex() < al.getSequences().size())
+      {
+        seq = al.getSequenceAt(subVals.getIndex());
+      }
     }
-    else if (-1 < subId.getIndex()
-            && subId.getIndex() < al.getSequences().size())
+    else if (idAv != null)
     {
-      return al.getSequenceAt(subId.getIndex());
+      seq = al.findName(idAv.getValue());
     }
-    return null;
+    return seq;
   }
 
   // returns the first Arg value intended for the structure structFilename