JAL-2422 fixed stopProgressBar (broken in pull up refactoring)
[jalview.git] / src / ext / edu / ucsf / rbvi / strucviz2 / ChimeraManager.java
index 1a8bd76..78103af 100644 (file)
@@ -348,14 +348,22 @@ public class ChimeraManager
    */
   public void startListening(String uri)
   {
+    /*
+     * listen for model changes
+     */
     String command = isChimeraX
             ? ("info notify start models prefix ModelChanged jalview url "
-                    + uri
-                    + "; info notify start selection jalview prefix SelectionChanged url "
                     + uri)
-            : ("listen start models url " + uri
-                    + ";listen start select prefix SelectionChanged url "
-                    + uri);
+            : ("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);
     sendChimeraCommand(command, false);
   }
 
@@ -432,16 +440,17 @@ public class ChimeraManager
     List<String> selectedResidues = new ArrayList<>();
 
     /*
-     * skip for now if ChimeraX - times out
+     * skip for now if ChimeraX - request times out
      */
     if (isChimeraX)
     {
-      return selectedResidues;
+      // return selectedResidues;
     }
 
     // in fact 'listinfo' (undocumented) works in ChimeraX
-    String command = (isChimeraX ? "info" : "list")
-            + " selection level residue";
+    String command = (isChimeraX
+            ? "wait 1; view" /*"info selection level residue" */
+            : "list selection level residue");
     List<String> chimeraReply = sendChimeraCommand(command, true);
     if (chimeraReply != null)
     {
@@ -497,19 +506,24 @@ public class ChimeraManager
   public List<ChimeraModel> getModelList()
   {
     List<ChimeraModel> modelList = new ArrayList<>();
-    modelList.add(new ChimeraModel("4zhp", ModelType.PDB_MODEL, 1, 0));
-    return modelList; // ChimeraX doesn't have 'list models' command
-    // List<String> list = sendChimeraCommand("list models type molecule",
-    // true);
-    // if (list != null)
-    // {
-    // for (String modelLine : list)
-    // {
-    // ChimeraModel chimeraModel = new ChimeraModel(modelLine);
-    // modelList.add(chimeraModel);
-    // }
-    // }
-    // return modelList;
+    String command = "list models type "
+            + (isChimeraX ? "AtomicStructure" : "molecule");
+    List<String> list = sendChimeraCommand(command, true);
+    if (list != null)
+    {
+      for (String modelLine : list)
+      {
+        try
+        {
+          ChimeraModel chimeraModel = new ChimeraModel(modelLine);
+          modelList.add(chimeraModel);
+        } catch (NullPointerException e)
+        {
+          // hack for now
+        }
+      }
+    }
+    return modelList;
   }
 
   /**
@@ -868,24 +882,23 @@ public class ChimeraManager
   {
     String restUrl = "http://127.0.0.1:" + this.chimeraRestPort + "/run";
     List<NameValuePair> commands = new ArrayList<>(1);
-    String encoded = command.replace(" ", "+").replace("#", "%23")
-            .replace("|", "%7C").replace(";", "%3B");
-    commands.add(new BasicNameValuePair("command", encoded));
+    String method = isChimeraX() ? "GET" : "POST";
+    if ("GET".equals(method))
+    {
+      command = command.replace(" ", "+").replace("#", "%23")
+              .replace("|", "%7C").replace(";", "%3B");
+    }
+    commands.add(new BasicNameValuePair("command", command));
 
     List<String> reply = new ArrayList<>();
     BufferedReader response = null;
     try
     {
-      if (isChimeraX())
-      {
-        response = HttpClientUtils.doHttpGet(restUrl, commands,
-                CONNECTION_TIMEOUT_MS, REST_REPLY_TIMEOUT_MS);
-      }
-      else
-      {
-        response = HttpClientUtils.doHttpUrlPost(restUrl, commands,
-                CONNECTION_TIMEOUT_MS, REST_REPLY_TIMEOUT_MS);
-      }
+      response = "GET".equals(method)
+              ? HttpClientUtils.doHttpGet(restUrl, commands,
+                      CONNECTION_TIMEOUT_MS, REST_REPLY_TIMEOUT_MS)
+              : HttpClientUtils.doHttpUrlPost(restUrl, commands,
+                      CONNECTION_TIMEOUT_MS, REST_REPLY_TIMEOUT_MS);
       String line = "";
       while ((line = response.readLine()) != null)
       {
@@ -962,4 +975,9 @@ public class ChimeraManager
   {
     return isChimeraX;
   }
+
+  public void setChimeraX(boolean b)
+  {
+    isChimeraX = b;
+  }
 }