Merge branch 'cherry-pick/r2_11_2_JAL-3509' into develop
[jalview.git] / src / jalview / ext / rbvi / chimera / JalviewChimeraBinding.java
index 16aca58..66420b0 100644 (file)
@@ -27,7 +27,6 @@ import java.io.PrintWriter;
 import java.net.BindException;
 import java.util.ArrayList;
 import java.util.Collections;
-import java.util.Iterator;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
@@ -38,7 +37,6 @@ import ext.edu.ucsf.rbvi.strucviz2.StructureManager;
 import ext.edu.ucsf.rbvi.strucviz2.StructureManager.ModelType;
 import jalview.api.AlignmentViewPanel;
 import jalview.bin.Cache;
-import jalview.datamodel.AlignmentI;
 import jalview.datamodel.PDBEntry;
 import jalview.datamodel.SearchResultMatchI;
 import jalview.datamodel.SearchResultsI;
@@ -426,11 +424,11 @@ public abstract class JalviewChimeraBinding extends AAStructureBindingModel
      */
     if (lastHighlightCommand != null)
     {
-      chimeraManager.sendChimeraCommand("~" + lastHighlightCommand, false);
+      executeCommand(false,  null,  new StructureCommand("~" + lastHighlightCommand));
     }
     if (found)
     {
-      chimeraManager.sendChimeraCommand(command, false);
+      executeCommand(false,  null,  new StructureCommand(command));
     }
     this.lastHighlightCommand = command;
   }
@@ -444,40 +442,51 @@ public abstract class JalviewChimeraBinding extends AAStructureBindingModel
      * Ask Chimera for its current selection
      */
     StructureCommandI command = getCommandGenerator().getSelectedResidues();
-    List<String> chimeraReply = executeCommand(command, true);
-    List<String> selectedResidues = new ArrayList<>();
-    if (chimeraReply != null)
+    
+    Runnable action = new Runnable()
     {
-      /*
-       * expect 0, 1 or more lines of the format either
-       * Chimera:
-       * residue id #0:43.A type GLY
-       * ChimeraX:
-       * residue id /A:89 name THR index 88
-       * We are only interested in the atomspec (third token of the reply)
-       */
-      for (String inputLine : chimeraReply)
+      @Override
+      public void run()
       {
-        String[] inputLineParts = inputLine.split("\\s+");
-        if (inputLineParts.length >= 5)
+        List<String> chimeraReply = executeCommand(command, true);
+        
+        List<String> selectedResidues = new ArrayList<>();
+        if (chimeraReply != null)
         {
-          selectedResidues.add(inputLineParts[2]);
+          /*
+           * expect 0, 1 or more lines of the format either
+           * Chimera:
+           * residue id #0:43.A type GLY
+           * ChimeraX:
+           * residue id /A:89 name THR index 88
+           * We are only interested in the atomspec (third token of the reply)
+           */
+          for (String inputLine : chimeraReply)
+          {
+            String[] inputLineParts = inputLine.split("\\s+");
+            if (inputLineParts.length >= 5)
+            {
+              selectedResidues.add(inputLineParts[2]);
+            }
+          }
         }
-      }
-    }
 
-    /*
-     * Parse model number, residue and chain for each selected position,
-     * formatted as #0:123.A or #1.2:87.B (#model.submodel:residue.chain)
-     */
-    List<AtomSpec> atomSpecs = convertStructureResiduesToAlignment(
-            selectedResidues);
-
-    /*
-     * Broadcast the selection (which may be empty, if the user just cleared all
-     * selections)
-     */
-    getSsm().mouseOverStructure(atomSpecs);
+        /*
+         * Parse model number, residue and chain for each selected position,
+         * formatted as #0:123.A or #1.2:87.B (#model.submodel:residue.chain)
+         */
+        List<AtomSpec> atomSpecs = convertStructureResiduesToAlignment(
+                selectedResidues);
+
+        /*
+         * Broadcast the selection (which may be empty, if the user just cleared all
+         * selections)
+         */
+        getSsm().mouseOverStructure(atomSpecs);
+        
+      }
+    };
+    new Thread(action).start();
   }
 
   /**
@@ -561,10 +570,7 @@ public abstract class JalviewChimeraBinding extends AAStructureBindingModel
     }
     else
     {
-      for (StructureCommandI command : commands)
-      {
-        sendAsynchronousCommand(command, null);
-      }
+      executeCommands(commands, false, null);
     }
     return commands.size();
   }
@@ -592,7 +598,7 @@ public abstract class JalviewChimeraBinding extends AAStructureBindingModel
       String path = tmp.getAbsolutePath();
       StructureCommandI command = getCommandGenerator()
               .openCommandFile(path);
-      sendAsynchronousCommand(command, null);
+      executeCommand(false, null, command);
     } catch (IOException e)
     {
       System.err.println("Sending commands to Chimera via file failed with "