JAL-3518 separation of ChimeraXManager, pull up of closeViewer etc
[jalview.git] / src / ext / edu / ucsf / rbvi / strucviz2 / ChimeraManager.java
index 31f5dc8..ea48cb6 100644 (file)
@@ -333,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);
   }
 
@@ -350,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);
   }
 
@@ -438,10 +429,7 @@ public class ChimeraManager
   {
     List<String> selectedResidues = new ArrayList<>();
 
-    // 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)
     {
@@ -498,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)
     {
@@ -586,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");
@@ -599,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 = "";
@@ -640,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()
@@ -751,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)
     {
@@ -811,8 +801,6 @@ public class ChimeraManager
 
   private volatile boolean busy = false;
 
-  private boolean isChimeraX;
-
   /**
    * Send a command to Chimera.
    * 
@@ -873,7 +861,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")
@@ -914,6 +902,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.
    * 
@@ -964,11 +961,6 @@ public class ChimeraManager
 
   public boolean isChimeraX()
   {
-    return isChimeraX;
-  }
-
-  public void setChimeraX(boolean b)
-  {
-    isChimeraX = b;
+    return false;
   }
 }