JAL-3672 debug=false means no debug output
[jalview.git] / src / ext / edu / ucsf / rbvi / strucviz2 / ChimeraManager.java
index 6bb3b71..375fa4a 100644 (file)
@@ -32,8 +32,6 @@
  */
 package ext.edu.ucsf.rbvi.strucviz2;
 
-import jalview.ws.HttpClientUtils;
-
 import java.awt.Color;
 import java.io.BufferedReader;
 import java.io.File;
@@ -54,6 +52,7 @@ import org.slf4j.LoggerFactory;
 
 import ext.edu.ucsf.rbvi.strucviz2.StructureManager.ModelType;
 import ext.edu.ucsf.rbvi.strucviz2.port.ListenerThreads;
+import jalview.ws.HttpClientUtils;
 
 /**
  * This object maintains the Chimera communication information.
@@ -334,10 +333,7 @@ public class ChimeraManager
 
   public void stopListening()
   {
-    // TODO send this command when viewer connection is closed in Jalview
-    String command = isChimeraX
-            ? "info notify stop models jalview; info notify stop selection jalview"
-            : "listen stop models ; listen stop selection ";
+    String command = "listen stop models ; listen stop selection ";
     sendChimeraCommand(command, false);
   }
 
@@ -351,19 +347,13 @@ public class ChimeraManager
     /*
      * listen for model changes
      */
-    String command = isChimeraX
-            ? ("info notify start models prefix ModelChanged jalview url "
-                    + uri)
-            : ("listen start models url " + uri);
+    String command = "listen start models url " + uri;
     sendChimeraCommand(command, false);
 
     /*
      * listen for selection changes
      */
-    command = isChimeraX
-            ? ("info notify start selection jalview prefix SelectionChanged url "
-                    + uri)
-            : ("listen start select prefix SelectionChanged url " + uri);
+    command = "listen start select prefix SelectionChanged url " + uri;
     sendChimeraCommand(command, false);
   }
 
@@ -439,18 +429,7 @@ public class ChimeraManager
   {
     List<String> selectedResidues = new ArrayList<>();
 
-    /*
-     * skip for now if ChimeraX - request times out
-     */
-    if (isChimeraX)
-    {
-      return selectedResidues;
-    }
-
-    // in fact 'listinfo' (undocumented) works in ChimeraX
-    String command = (isChimeraX
-            ? "info"
-            : "list") + " selection level residue";
+    String command = "list selection level residue";
     List<String> chimeraReply = sendChimeraCommand(command, true);
     if (chimeraReply != null)
     {
@@ -507,7 +486,7 @@ public class ChimeraManager
   {
     List<ChimeraModel> modelList = new ArrayList<>();
     String command = "list models type "
-            + (isChimeraX ? "AtomicStructure" : "molecule");
+            + (isChimeraX() ? "AtomicStructure" : "molecule");
     List<String> list = sendChimeraCommand(command, true);
     if (list != null)
     {
@@ -595,7 +574,6 @@ public class ChimeraManager
       {
         // ensure symbolic links are resolved
         chimeraPath = Paths.get(chimeraPath).toRealPath().toString();
-        isChimeraX = chimeraPath.toLowerCase().contains("chimerax");
         File path = new File(chimeraPath);
         // uncomment the next line to simulate Chimera not installed
         // path = new File(chimeraPath + "x");
@@ -608,16 +586,7 @@ public class ChimeraManager
         args.add(chimeraPath);
         // shows Chimera output window but suppresses REST responses:
         // args.add("--debug");
-        if (isChimeraX())
-        {
-          args.add("--cmd");
-          args.add("remote rest start");
-        }
-        else
-        {
-          args.add("--start");
-          args.add("RESTServer");
-        }
+        addLaunchArguments(args);
         ProcessBuilder pb = new ProcessBuilder(args);
         chimera = pb.start();
         error = "";
@@ -649,6 +618,18 @@ public class ChimeraManager
   }
 
   /**
+   * Adds command-line arguments to start the REST server
+   * <p>
+   * Method extracted for Jalview to allow override in ChimeraXManager
+   * @param args
+   */
+  protected void addLaunchArguments(List<String> args)
+  {
+    args.add("--start");
+    args.add("RESTServer");
+  }
+
+  /**
    * Read and return the port number returned in the reply to --start RESTServer
    */
   private int getPortNumber()
@@ -760,7 +741,7 @@ public class ChimeraManager
   public List<String> getAttrList()
   {
     List<String> attributes = new ArrayList<>();
-    String command = (isChimeraX ? "info " : "list ") + "resattr";
+    String command = (isChimeraX() ? "info " : "list ") + "resattr";
     final List<String> reply = sendChimeraCommand(command, true);
     if (reply != null)
     {
@@ -820,8 +801,6 @@ public class ChimeraManager
 
   private volatile boolean busy = false;
 
-  private boolean isChimeraX;
-
   /**
    * Send a command to Chimera.
    * 
@@ -835,7 +814,9 @@ public class ChimeraManager
    */
   public List<String> sendChimeraCommand(String command, boolean reply)
   {
-    System.out.println("chimeradebug>> " + command);
+    if (debug) {
+      System.out.println("chimeradebug>> " + command);
+    }
     if (!isChimeraLaunched() || command == null
             || "".equals(command.trim()))
     {
@@ -882,7 +863,7 @@ public class ChimeraManager
   {
     String restUrl = "http://127.0.0.1:" + this.chimeraRestPort + "/run";
     List<NameValuePair> commands = new ArrayList<>(1);
-    String method = isChimeraX() ? "GET" : "POST";
+    String method = getHttpRequestMethod();
     if ("GET".equals(method))
     {
       command = command.replace(" ", "+").replace("#", "%23")
@@ -923,6 +904,15 @@ public class ChimeraManager
   }
 
   /**
+   * Returns "POST" as the HTTP request method to use for REST service calls to Chimera
+   * @return
+   */
+  protected String getHttpRequestMethod()
+  {
+    return "POST";
+  }
+
+  /**
    * Send a command to stdin of Chimera process, and optionally read any
    * responses.
    * 
@@ -973,11 +963,6 @@ public class ChimeraManager
 
   public boolean isChimeraX()
   {
-    return isChimeraX;
-  }
-
-  public void setChimeraX(boolean b)
-  {
-    isChimeraX = b;
+    return false;
   }
 }