JAL-3404 explicit getModelForPdbFile lookup
[jalview.git] / src / jalview / ext / jmol / JmolCommands.java
index e3625fa..a900701 100644 (file)
@@ -32,7 +32,7 @@ import jalview.renderer.seqfeatures.FeatureColourFinder;
 import jalview.structure.StructureMapping;
 import jalview.structure.StructureMappingcommandSet;
 import jalview.structure.StructureSelectionManager;
-import jalview.structures.models.AAStructureBindingModel;
+import jalview.util.StructureCommands;
 
 import java.awt.Color;
 import java.util.ArrayList;
@@ -40,33 +40,28 @@ import java.util.List;
 import java.util.Map;
 
 /**
- * Routines for generating Jmol commands for Jalview/Jmol binding another
- * cruisecontrol test.
+ * Routines for generating Jmol commands for Jalview/Jmol binding
  * 
  * @author JimP
  * 
  */
-public class JmolCommands
+public class JmolCommands extends StructureCommands
 {
-
   private static final String COMMA = ",";
 
   /**
-   * Jmol utility which constructs the commands to colour chains by the given
-   * alignment
-   * 
-   * @returns Object[] { Object[] { <model being coloured>,
+   * Get commands to colour structure by sequence
    * 
+   * @param ssm
+   * @param files
+   * @param sequence
+   * @param sr
+   * @param viewPanel
+   * @return
+   * @deprecated only called by applet code
+   * @see #getColourBySequenceCommand(Map)
    */
-  public static StructureMappingcommandSet[] getColourBySequenceCommand(
-          StructureSelectionManager ssm, String[] files,
-          AAStructureBindingModel binding, AlignmentViewPanel viewPanel)
-  {
-    SequenceRenderer sr = binding.getSequenceRenderer(viewPanel);
-    SequenceI[][] sequence = binding.getSequence();
-    return getColourBySequenceCommand(ssm, files, sequence, sr, viewPanel);
-  }
-
+  @Deprecated
   public static StructureMappingcommandSet[] getColourBySequenceCommand(
           StructureSelectionManager ssm, String[] files,
           SequenceI[][] sequence, SequenceRenderer sr,
@@ -239,7 +234,7 @@ public class JmolCommands
       StringBuilder cmd = new StringBuilder(128);
       Color c = (Color) o;
       String atomSpec = getAtomSpec(map.get(o));
-      cmd.append("select ").append(atomSpec).append(";color[")
+      cmd.append("color (").append(atomSpec).append(") [")
               .append(c.getRed()).append(COMMA).append(c.getGreen())
               .append(COMMA).append(c.getBlue()).append("];");
       cmds[i] = cmd.toString();
@@ -253,10 +248,13 @@ public class JmolCommands
    * Builds a Jmol syntax selection expression from the given model, for example
    * 
    * <pre>
-   * 61-64,70:A/1.1,12-25,41-44:B/1.1,12:A/2.1
+   * (61-64,70)&:A/1.1,(12-25,41-44)&:B/1.1,12:A/2.1
    * for model 1, chain A, residues 61-64 and 70, chain B residues 12-25 and 41-44, model 2 chain A residue 12
    * </pre>
    * 
+   * Note the brackets to group multiple residue ranges for the same chain
+   * (without bracketing, ranges would apply to all chains)
+   * 
    * @param atomSpecModel
    * @return
    */
@@ -272,20 +270,19 @@ public class JmolCommands
           sb.append(COMMA);
         }
         boolean firstRange = true;
-        for (int[] range : atomSpecModel.getRanges(model, chain))
+
+        List<int[]> rangeList = atomSpecModel.getRanges(model, chain);
+
+        if (rangeList.size() > 1)
         {
-          if (!firstRange)
-          {
-            sb.append(COMMA);
-          }
-          firstRange = false;
-          sb.append(range[0]);
-          if (range[1] != range[0])
-          {
-            sb.append("-").append(range[1]);
-          }
+          sb.append("(");
+        }
+        appendResidueRange(sb, rangeList, null, firstRange);
+        if (rangeList.size() > 1)
+        {
+          sb.append(")&");
         }
-        sb.append(":").append(chain).append("/")
+        sb.append(":").append(chain.trim()).append("/")
                 .append(String.valueOf(model + 1))
                 .append(".1");
       }