JAL-2422 ChimeraX paths (versions up to 1.0) added for Windows
authorgmungoc <g.m.carstairs@dundee.ac.uk>
Mon, 11 May 2020 10:42:56 +0000 (11:42 +0100)
committergmungoc <g.m.carstairs@dundee.ac.uk>
Mon, 11 May 2020 10:42:56 +0000 (11:42 +0100)
src/ext/edu/ucsf/rbvi/strucviz2/StructureManager.java

index d1c820c..5cf8a73 100644 (file)
@@ -56,6 +56,27 @@ import jalview.gui.Preferences;
 
 public class StructureManager
 {
+  /*
+   * Version numbers to build Windows installation paths for 
+   * Chimera  https://www.cgl.ucsf.edu/chimera/download.html
+   * ChimeraX http://www.rbvi.ucsf.edu/chimerax/download.html#release
+   *          https://www.rbvi.ucsf.edu/trac/ChimeraX/wiki/ChangeLog
+   * These are a fallback for Jalview users who don't save path in Preferences;
+   * these will need to be updated as new versions are released;
+   * deliberately not 'final' (so modifiable using Groovy).
+   * 
+   * May 2020: 1.14 is Chimera latest, anticipating a few more...
+   * 0.93 is ChimeraX latest, 1.0 expected soon
+   */
+  private static String[] CHIMERA_VERSIONS = new String[] { "1.16.2",
+      "1.16.1", "1.16",
+      "1.15.2", "1.15.1", "1.15", "1.14.2", "1.14.1", "1.14",
+      "1.13.1", "1.13", "1.12.2", "1.12.1", "1.12", "1.11.2",
+      "1.11.2", "1.11.1", "1.11" };
+
+  private static String[] CHIMERAX_VERSIONS = new String[] { "1.0", "0.93",
+      "0.92", "0.91", "0.9" };
+
   static final String[] defaultStructureKeys = { "Structure", "pdb",
       "pdbFileName", "PDB ID", "structure", "biopax.xref.PDB", "pdb_ids",
       "ModelName", "ModelNumber" };
@@ -916,27 +937,35 @@ public class StructureManager
     // }
 
     /*
-     * Jalview addition: check if path set in user preferences.
+     * Jalview addition: check if path set in user preferences
      */
     String userPath = Cache
             .getDefault(isChimeraX ? Preferences.CHIMERAX_PATH
                     : Preferences.CHIMERA_PATH, null);
     if (userPath != null)
     {
-      pathList.add(0, userPath);
+      pathList.add(userPath);
     }
 
-    // FIXME get an updated StructureManager for code for ChimeraX paths
-    String chimera = isChimeraX ? "ChimeraX" : "chimera";
+    /*
+     * paths are based on getChimeraPaths() in
+     * Chimera:
+     * https://github.com/RBVI/structureViz2/blob/master/src/main/java/edu/ucsf/rbvi/structureViz2/internal/model/StructureManager.java
+     * ChimeraX:
+     * https://github.com/RBVI/structureVizX/blob/master/src/main/java/edu/ucsf/rbvi/structureVizX/internal/model/StructureManager.java
+     */
+    String chimera = isChimeraX ? "ChimeraX" : "Chimera";
+    String chimeraExe = isChimeraX ? "ChimeraX" : "chimera";
 
     // Add default installation paths
     String os = System.getProperty("os.name");
     if (os.startsWith("Linux"))
     {
-      pathList.add("/usr/local/chimera/bin/" + chimera);
-      pathList.add("/usr/local/bin/" + chimera);
-      pathList.add("/usr/bin/" + chimera);
-      pathList.add(System.getProperty("user.home") + "/opt/bin/" + chimera);
+      // todo should this be /chimeraX/ for ChimeraX? not in structureVizX code
+      pathList.add("/usr/local/chimera/bin/" + chimeraExe);
+      pathList.add("/usr/local/bin/" + chimeraExe);
+      pathList.add("/usr/bin/" + chimeraExe);
+      pathList.add(System.getProperty("user.home") + "/opt/bin/" + chimeraExe);
     }
     else if (os.startsWith("Windows"))
     {
@@ -944,25 +973,22 @@ public class StructureManager
           "C:\\Program Files", "\\Program Files (x86)",
           "C:\\Program Files (x86)" })
       {
-        /*
-         * May 2020: 1.14 is the latest, anticipating a few more...
-         * see https://www.cgl.ucsf.edu/chimera/download.html
-         */
-        for (String version : new String[] { "1.16.2", "1.16.1", "1.16",
-            "1.15.2", "1.15.1", "1.15", "1.14.2", "1.14.1", "1.14",
-            "1.13.1", "1.13", "1.12.2", "1.12.1", "1.12", "1.11.2",
-            "1.11.2", "1.11.1", "1.11" })
+        String[] candidates = isChimeraX ? CHIMERAX_VERSIONS
+                : CHIMERA_VERSIONS;
+        for (String version : candidates)
         {
-          pathList.add(root + "\\Chimera " + version + "\\bin\\" + chimera);
-          pathList.add(
-                  root + "\\Chimera " + version + "\\bin\\" + chimera
-                          + ".exe");
+          // TODO original code doesn't include version in path; which is right?
+          String path = String.format("%s\\%s %s\\bin\\%s", root, chimera,
+                  version, chimeraExe);
+          pathList.add(path);
+          pathList.add(path + ".exe");
         }
       }
     }
     else if (os.startsWith("Mac"))
     {
-      pathList.add("/Applications/Chimera.app/Contents/MacOS/" + chimera);
+      pathList.add(String.format("/Applications/%s.app/Contents/MacOS/%s",
+              chimera, chimeraExe));
     }
     return pathList;
   }