From 09796fae6f999e5fb68a8d2fed46aa4447235b12 Mon Sep 17 00:00:00 2001 From: Ben Soares Date: Mon, 13 Sep 2021 16:46:31 +0100 Subject: [PATCH] JAL-2422 Added linux rpm and deb install locations. Changed macOS to also look for version numbers in Chimera/X (e.g. '/Applications/ChimeraX-1.2.5.app') as this is default macOS installation. Changed macOS preferences to check endswith '.app' and look for '....app/Contents/MacOS/ChimeraX' so user can select the .app folder --- .../edu/ucsf/rbvi/strucviz2/StructureManager.java | 102 +++++++++++++++----- 1 file changed, 78 insertions(+), 24 deletions(-) diff --git a/src/ext/edu/ucsf/rbvi/strucviz2/StructureManager.java b/src/ext/edu/ucsf/rbvi/strucviz2/StructureManager.java index 5cf8a73..9078d12 100644 --- a/src/ext/edu/ucsf/rbvi/strucviz2/StructureManager.java +++ b/src/ext/edu/ucsf/rbvi/strucviz2/StructureManager.java @@ -69,13 +69,13 @@ public class StructureManager * 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.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" }; + // Missing 1.1 as this has known bug see JAL-2422 + private static String[] CHIMERAX_VERSIONS = new String[] { "1.2.5", "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", @@ -561,8 +561,8 @@ public class StructureManager /** * This is called by the selectionListener to let us know that the user has - * changed their selection in Chimera. We need to go back to Chimera to find - * out what is currently selected and update our list. + * changed their selection in Chimera. We need to go back to Chimera to find out + * what is currently selected and update our list. */ public void chimeraSelectionChanged() { @@ -677,11 +677,11 @@ public class StructureManager } /** - * Add a selection to the selection list. This is called primarily by the - * Model Navigator Dialog to keep the selections in sync + * Add a selection to the selection list. This is called primarily by the Model + * Navigator Dialog to keep the selections in sync * * @param selectionToAdd - * the selection to add to our list + * the selection to add to our list */ public void addChimSelection(ChimeraStructuralObject selectionToAdd) { @@ -698,7 +698,7 @@ public class StructureManager * Model Navigator Dialog to keep the selections in sync * * @param selectionToRemove - * the selection to remove from our list + * the selection to remove from our list */ public void removeChimSelection(ChimeraStructuralObject selectionToRemove) { @@ -936,16 +936,10 @@ public class StructureManager // } // } - /* - * Jalview addition: check if path set in user preferences - */ + String os = System.getProperty("os.name"); String userPath = Cache .getDefault(isChimeraX ? Preferences.CHIMERAX_PATH : Preferences.CHIMERA_PATH, null); - if (userPath != null) - { - pathList.add(userPath); - } /* * paths are based on getChimeraPaths() in @@ -957,15 +951,61 @@ public class StructureManager String chimera = isChimeraX ? "ChimeraX" : "Chimera"; String chimeraExe = isChimeraX ? "ChimeraX" : "chimera"; + /* + * Jalview addition: check if path set in user preferences + */ + if (userPath != null) + { + // in macos, deal with the user selecting the .app folder + boolean adjusted = false; + if (os.startsWith("Mac") && userPath.endsWith((".app"))) + { + String possiblePath = String.format("%s/Contents/MacOS/%s", + userPath, chimeraExe); + if (new File(possiblePath).exists()) + { + pathList.add(possiblePath); + adjusted = true; + } + } + if (!adjusted) + { + pathList.add(userPath); + } + } + // Add default installation paths - String os = System.getProperty("os.name"); if (os.startsWith("Linux")) { - // 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); + // ChimeraX .deb and .rpm packages put symbolic link from /usr/bin/chimerax + pathList.add(String.format("/usr/bin/%s", chimeraExe.toLowerCase())); + pathList.add(String.format("/usr/bin/%s", chimeraExe)); + + pathList.add( + String.format("/usr/local/bin/%s", chimeraExe.toLowerCase())); + pathList.add(String.format("/usr/local/bin/%s", chimeraExe)); + + // these paths also used by .deb and .rpm + pathList.add(String.format("/usr/lib/ucsf-%s/bin/%s", + chimera.toLowerCase(), chimeraExe)); + pathList.add(String.format("/usr/libexec/UCSF-%s/bin/%s", chimera, + chimeraExe)); + + pathList.add(String.format("/usr/local/chimera/bin/%s", chimeraExe)); + + // user home paths + pathList.add(String.format("%s/bin/%s", + System.getProperty("user.home"), chimeraExe.toLowerCase())); + pathList.add(String.format("%s/bin/%s", + System.getProperty("user.home"), chimeraExe)); + pathList.add(String.format("%s/opt/bin/%s", + System.getProperty("user.home"), chimeraExe.toLowerCase())); + pathList.add(String.format("%s/opt/bin/%s", + System.getProperty("user.home"), chimeraExe)); + pathList.add(String.format("%s/local/bin/%s", + System.getProperty("user.home"), chimeraExe.toLowerCase())); + pathList.add(String.format("%s/local/bin/%s", + System.getProperty("user.home"), chimeraExe)); } else if (os.startsWith("Windows")) { @@ -983,10 +1023,24 @@ public class StructureManager pathList.add(path); pathList.add(path + ".exe"); } + // try without a version number too + String path = String.format("%s\\%s\\bin\\%s", root, chimera, + chimeraExe); + pathList.add(path); + pathList.add(path + ".exe"); } } else if (os.startsWith("Mac")) { + // check for installations with version numbers first + String[] candidates = isChimeraX ? CHIMERAX_VERSIONS + : CHIMERA_VERSIONS; + for (String version : candidates) + { + pathList.add( + String.format("/Applications/%s-%s.app/Contents/MacOS/%s", + chimera, version, chimeraExe)); + } pathList.add(String.format("/Applications/%s.app/Contents/MacOS/%s", chimera, chimeraExe)); } -- 1.7.10.2