import java.util.Collection;
import java.util.HashMap;
import java.util.List;
+import java.util.Locale;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
* 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.3", "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",
// }
// }
- /*
- * 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
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(Locale.ROOT)));
+ pathList.add(String.format("/usr/bin/%s", chimeraExe));
+
+ pathList.add(String.format("/usr/local/bin/%s",
+ chimeraExe.toLowerCase(Locale.ROOT)));
+ 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(Locale.ROOT), 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(Locale.ROOT)));
+ 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(Locale.ROOT)));
+ 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(Locale.ROOT)));
+ pathList.add(String.format("%s/local/bin/%s",
+ System.getProperty("user.home"), chimeraExe));
}
else if (os.startsWith("Windows"))
{
for (String root : new String[] { "\\Program Files",
"C:\\Program Files", "\\Program Files (x86)",
- "C:\\Program Files (x86)" })
+ "C:\\Program Files (x86)", String.format("%s\\AppData\\Local",
+ System.getProperty("user.home")) })
{
String[] candidates = isChimeraX ? CHIMERAX_VERSIONS
: CHIMERA_VERSIONS;
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("%s/Applications/%s-%s.app/Contents/MacOS/%s",
+ System.getProperty("user.home"), chimera, version,
+ chimeraExe));
+ }
pathList.add(String.format("/Applications/%s.app/Contents/MacOS/%s",
chimera, chimeraExe));
+ pathList.add(String.format("%s/Applications/%s.app/Contents/MacOS/%s",
+ System.getProperty("user.home"), chimera, chimeraExe));
}
return pathList;
}