JAL-3949 - refactor logging from jalview.bin.Cache to jalview.bin.Console
[jalview.git] / src / jalview / ext / rbvi / chimera / JalviewChimeraBinding.java
index c8875b4..c78a82b 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;
@@ -37,8 +36,7 @@ import ext.edu.ucsf.rbvi.strucviz2.ChimeraModel;
 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.bin.Console;
 import jalview.datamodel.PDBEntry;
 import jalview.datamodel.SearchResultMatchI;
 import jalview.datamodel.SearchResultsI;
@@ -339,8 +337,17 @@ public abstract class JalviewChimeraBinding extends AAStructureBindingModel
     if (getResponse)
     {
       reply = lastReply;
-      Cache.log.debug(
-              "Response from command ('" + cmd + "') was:\n" + lastReply);
+      if (Console.isDebugEnabled()) {
+        Console.debug(
+              "Response from command ('" + cmd + "') was:\n" + lastReply); 
+      }
+    }
+    else
+    {
+      if (Console.isDebugEnabled())
+      {
+        Console.debug("Command executed: " + cmd);
+      }
     }
 
     return reply;
@@ -418,19 +425,29 @@ public abstract class JalviewChimeraBinding extends AAStructureBindingModel
     {
       return;
     }
-
+    if (!found)
+    {
+      // not a valid residue label command, so clear
+      cmd.setLength(0);
+    }
     /*
-     * unshow the label for the previous residue
+     * prepend with command
+     * to unshow the label for the previous residue
      */
     if (lastHighlightCommand != null)
     {
-      chimeraManager.sendChimeraCommand("~" + lastHighlightCommand, false);
+      cmd.insert(0, ";");
+      cmd.insert(0,lastHighlightCommand);
+      cmd.insert(0,"~");
+      
     }
-    if (found)
-    {
-      chimeraManager.sendChimeraCommand(command, false);
+    if (cmd.length()>0) {
+      executeCommand(true,  null,  new StructureCommand(cmd.toString()));
+    }
+    
+    if (found) {
+      this.lastHighlightCommand = command;
     }
-    this.lastHighlightCommand = command;
   }
 
   /**
@@ -442,40 +459,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();
   }
 
   /**
@@ -499,7 +527,7 @@ public abstract class JalviewChimeraBinding extends AAStructureBindingModel
         atomSpecs.add(spec);
       } catch (IllegalArgumentException e)
       {
-        Cache.log.error("Failed to parse atomspec: " + atomSpec);
+        Console.error("Failed to parse atomspec: " + atomSpec);
       }
     }
     return atomSpecs;
@@ -535,34 +563,6 @@ public abstract class JalviewChimeraBinding extends AAStructureBindingModel
   }
 
   /**
-   * Send a 'show' command for all atoms in the currently selected columns
-   * 
-   * TODO: pull up to abstract structure viewer interface
-   * 
-   * @param vp
-   */
-  public void highlightSelection(AlignmentViewPanel vp)
-  {
-    List<Integer> cols = vp.getAlignViewport().getColumnSelection()
-            .getSelected();
-    AlignmentI alignment = vp.getAlignment();
-    StructureSelectionManager sm = getSsm();
-    for (SequenceI seq : alignment.getSequences())
-    {
-      /*
-       * convert selected columns into sequence positions
-       */
-      int[] positions = new int[cols.size()];
-      int i = 0;
-      for (Integer col : cols)
-      {
-        positions[i++] = seq.findPosition(col);
-      }
-      sm.highlightStructure(this, seq, positions);
-    }
-  }
-
-  /**
    * Constructs and send commands to Chimera to set attributes on residues for
    * features visible in Jalview.
    * <p>
@@ -587,10 +587,7 @@ public abstract class JalviewChimeraBinding extends AAStructureBindingModel
     }
     else
     {
-      for (StructureCommandI command : commands)
-      {
-        sendAsynchronousCommand(command, null);
-      }
+      executeCommands(commands, false, null);
     }
     return commands.size();
   }
@@ -618,7 +615,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 "
@@ -682,7 +679,7 @@ public abstract class JalviewChimeraBinding extends AAStructureBindingModel
         spec = parseAtomSpec(atomSpec);
       } catch (IllegalArgumentException e)
       {
-        Cache.log.error("Problem parsing atomspec " + atomSpec);
+        Console.error("Problem parsing atomspec " + atomSpec);
         continue;
       }