JAL-3551 concatenate colour by sequence commands for all except PyMOL
[jalview.git] / src / jalview / ext / pymol / PymolCommands.java
index 910aae1..e4f9f5f 100644 (file)
@@ -1,14 +1,15 @@
 package jalview.ext.pymol;
 
+import java.awt.Color;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
 import jalview.structure.AtomSpecModel;
 import jalview.structure.StructureCommand;
 import jalview.structure.StructureCommandI;
 import jalview.structure.StructureCommandsBase;
 
-import java.awt.Color;
-import java.util.ArrayList;
-import java.util.List;
-
 /**
  * A class that generates commands to send to PyMol over its XML-RPC interface.
  * <p>
@@ -119,9 +120,8 @@ public class PymolCommands extends StructureCommandsBase
   @Override
   public StructureCommandI openCommandFile(String path)
   {
-    // where is this documented by PyMol?
-    // todo : xml-rpc answers 'method "@" is not supported'
-    return new StructureCommand("@" + path); // should be .pml
+    // https://pymolwiki.org/index.php/Run
+    return new StructureCommand("run", path); // should be .pml
   }
 
   @Override
@@ -210,4 +210,27 @@ public class PymolCommands extends StructureCommandsBase
     return new StructureCommand("load", file);
   }
 
+  /**
+   * Overrides the default implementation (which generates concatenated
+   * commands) to generate one per colour (because the XML-RPC interface to
+   * PyMOL only accepts one command at a time)
+   * 
+   * @param colourMap
+   * @return
+   */
+  @Override
+  public List<StructureCommandI> colourBySequence(
+          Map<Object, AtomSpecModel> colourMap)
+  {
+    List<StructureCommandI> commands = new ArrayList<>();
+    for (Object key : colourMap.keySet())
+    {
+      Color colour = (Color) key;
+      final AtomSpecModel colourData = colourMap.get(colour);
+      commands.add(getColourCommand(colourData, colour));
+    }
+  
+    return commands;
+  }
+
 }