From: <otm...@us...> - 2008-12-11 09:15:47
|
Revision: 5736 http://jython.svn.sourceforge.net/jython/?rev=5736&view=rev Author: otmarhumbel Date: 2008-12-11 09:15:43 +0000 (Thu, 11 Dec 2008) Log Message: ----------- - unified handling of java home - provide a fallback mechanism for an invalid java.home system property Modified Paths: -------------- trunk/installer/src/java/org/python/util/install/ConsoleInstaller.java trunk/installer/src/java/org/python/util/install/DirectorySelectionPage.java trunk/installer/src/java/org/python/util/install/FrameInstaller.java trunk/installer/src/java/org/python/util/install/Installation.java trunk/installer/src/java/org/python/util/install/InstallerCommandLine.java trunk/installer/src/java/org/python/util/install/JarInstaller.java trunk/installer/src/java/org/python/util/install/JavaSelectionPage.java trunk/installer/src/java/org/python/util/install/JavaSelectionPageValidator.java trunk/installer/src/java/org/python/util/install/JavaVersionTester.java trunk/installer/src/java/org/python/util/install/ProgressPage.java trunk/installer/src/java/org/python/util/install/StartScriptGenerator.java trunk/installer/src/java/org/python/util/install/driver/Autotest.java trunk/installer/src/java/org/python/util/install/driver/InstallationDriver.java trunk/installer/src/java/org/python/util/install/driver/NormalVerifier.java trunk/installer/src/java/org/python/util/install/driver/StandaloneVerifier.java trunk/installer/test/java/org/python/util/install/FrameInstallerTest.java trunk/installer/test/java/org/python/util/install/InstallationTest.java trunk/installer/test/java/org/python/util/install/InstallerCommandLineTest.java trunk/installer/test/java/org/python/util/install/JavaTest_Standalone.java trunk/installer/test/java/org/python/util/install/StartScriptGeneratorTest.java trunk/installer/test/java/org/python/util/install/driver/NormalVerifierTest.java Added Paths: ----------- trunk/installer/src/java/org/python/util/install/JavaHomeHandler.java trunk/installer/test/java/org/python/util/install/JavaHomeHandlerTest.java Modified: trunk/installer/src/java/org/python/util/install/ConsoleInstaller.java =================================================================== --- trunk/installer/src/java/org/python/util/install/ConsoleInstaller.java 2008-12-11 05:20:55 UTC (rev 5735) +++ trunk/installer/src/java/org/python/util/install/ConsoleInstaller.java 2008-12-11 09:15:43 UTC (rev 5736) @@ -10,20 +10,27 @@ import java.util.List; import java.util.Locale; -import org.python.util.install.Installation.JavaFilenameFilter; import org.python.util.install.Installation.JavaVersionInfo; import org.python.util.install.driver.Tunnel; public class ConsoleInstaller implements ProgressListener, TextKeys { + private static final String _CANCEL = "c"; + private static final String _PROMPT = ">>>"; + private static final String _BEGIN_ANSWERS = "["; + private static final String _END_ANSWERS = "]"; + private static final String _CURRENT = "=="; private InstallerCommandLine _commandLine; + private JarInstaller _jarInstaller; + private JarInfo _jarInfo; + private Tunnel _tunnel; public ConsoleInstaller(InstallerCommandLine commandLine, JarInfo jarInfo) { @@ -38,24 +45,26 @@ public void install() { File targetDirectory = null; - File javaHome = null; + JavaHomeHandler javaHomeHandler = null; if (_commandLine.hasConsoleOption()) { welcome(); selectLanguage(); acceptLicense(); InstallationType installationType = selectInstallationType(); targetDirectory = determineTargetDirectory(); - javaHome = checkVersion(determineJavaHome()); - promptForCopying(targetDirectory, installationType, javaHome); - _jarInstaller.inflate(targetDirectory, installationType, javaHome); + javaHomeHandler = checkVersion(determineJavaHome()); + promptForCopying(targetDirectory, installationType, javaHomeHandler); + _jarInstaller.inflate(targetDirectory, installationType, javaHomeHandler); showReadme(targetDirectory); success(targetDirectory); } else if (_commandLine.hasSilentOption()) { message(getText(C_SILENT_INSTALLATION)); targetDirectory = _commandLine.getTargetDirectory(); checkTargetDirectorySilent(targetDirectory); - javaHome = checkVersionSilent(_commandLine.getJavaHome()); - _jarInstaller.inflate(targetDirectory, _commandLine.getInstallationType(), javaHome); + javaHomeHandler = checkVersionSilent(_commandLine.getJavaHomeHandler()); + _jarInstaller.inflate(targetDirectory, + _commandLine.getInstallationType(), + javaHomeHandler); success(targetDirectory); } } @@ -85,7 +94,8 @@ /** * question and answer * - * @param answers Possible answers (may be null) + * @param answers + * Possible answers (may be null) * @return (chosen) answer */ private String question(String question, List<String> answers, boolean answerRequired) { @@ -170,7 +180,7 @@ languages = languages.substring(0, languages.length() - 2); message(getText(C_AVAILABLE_LANGUAGES, languages)); String answer = question(getText(C_SELECT_LANGUAGE), answers); - if (answer.equalsIgnoreCase((String) answers.get(1))) { + if (answer.equalsIgnoreCase((String)answers.get(1))) { Installation.setLanguage(Locale.GERMAN); } else { Installation.setLanguage(Locale.ENGLISH); @@ -243,11 +253,12 @@ return installationType; } - private File checkVersion(File javaHome) { + private JavaHomeHandler checkVersion(JavaHomeHandler javaHomeHandler) { // handle target java version - JavaInfo javaInfo = verifyTargetJava(javaHome); - message(getText(C_JAVA_VERSION, javaInfo.getJavaVersionInfo().getVendor(), javaInfo.getJavaVersionInfo() - .getVersion())); + JavaInfo javaInfo = verifyTargetJava(javaHomeHandler); + message(getText(C_JAVA_VERSION, + javaInfo.getJavaVersionInfo().getVendor(), + javaInfo.getJavaVersionInfo().getVersion())); if (Installation.isValidJava(javaInfo.getJavaVersionInfo())) { question(getText(C_PROCEED)); } else { @@ -264,12 +275,12 @@ message(getText(C_UNSUPPORTED_OS)); question(getText(C_PROCEED_ANYWAY)); } - return javaInfo.getJavaHome(); + return javaInfo.getJavaHomeHandler(); } - private File checkVersionSilent(File javaHome) { + private JavaHomeHandler checkVersionSilent(JavaHomeHandler javaHomeHandler) { // check target java version - JavaInfo javaInfo = verifyTargetJava(javaHome); + JavaInfo javaInfo = verifyTargetJava(javaHomeHandler); if (!Installation.isValidJava(javaInfo.getJavaVersionInfo())) { message(getText(C_UNSUPPORTED_JAVA)); } @@ -277,31 +288,22 @@ if (!Installation.isValidOs()) { message(getText(C_UNSUPPORTED_OS)); } - return javaInfo.getJavaHome(); + return javaInfo.getJavaHomeHandler(); } - private JavaInfo verifyTargetJava(File javaHome) { + private JavaInfo verifyTargetJava(JavaHomeHandler javaHomeHandler) { JavaVersionInfo javaVersionInfo = new JavaVersionInfo(); - String currentJavaHomeName = System.getProperty(JavaVersionTester.JAVA_HOME); - if (javaHome != null) { - if (currentJavaHomeName.equals(javaHome.getAbsolutePath())) { - // no experiments if current java is selected - javaHome = null; - } else { - javaVersionInfo = Installation.getExternalJavaVersion(javaHome); - if (javaVersionInfo.getErrorCode() != Installation.NORMAL_RETURN) { - // switch back to current if an error occurred - message(getText(C_TO_CURRENT_JAVA, javaVersionInfo.getReason())); - javaHome = null; - } + Installation.fillJavaVersionInfo(javaVersionInfo, System.getProperties()); // a priori + if (javaHomeHandler.isDeviation()) { + javaVersionInfo = Installation.getExternalJavaVersion(javaHomeHandler); + if (javaVersionInfo.getErrorCode() != Installation.NORMAL_RETURN) { + // switch back to current if an error occurred + message(getText(C_TO_CURRENT_JAVA, javaVersionInfo.getReason())); + javaHomeHandler = new JavaHomeHandler(); } } - if (javaHome == null) { - Installation.fillJavaVersionInfo(javaVersionInfo, System.getProperties()); - javaHome = new File(currentJavaHomeName); - } JavaInfo javaInfo = new JavaInfo(); - javaInfo.setJavaHome(javaHome); + javaInfo.setJavaHomeHandler(javaHomeHandler); javaInfo.setJavaVersionInfo(javaVersionInfo); return javaInfo; } @@ -333,11 +335,13 @@ message(getText(C_NOT_A_DIRECTORY, targetDirectory.getCanonicalPath())); } else { if (targetDirectory.list().length > 0) { - String overwrite = question(getText(C_OVERWRITE_DIRECTORY, targetDirectory - .getCanonicalPath()), getYNAnswers()); + String overwrite = question(getText(C_OVERWRITE_DIRECTORY, + targetDirectory.getCanonicalPath()), + getYNAnswers()); if (overwrite.equalsIgnoreCase(getText(C_YES))) { - String clear = question(getText(C_CLEAR_DIRECTORY, targetDirectory.getCanonicalPath()), - getYNAnswers()); + String clear = question(getText(C_CLEAR_DIRECTORY, + targetDirectory.getCanonicalPath()), + getYNAnswers()); if (clear.equalsIgnoreCase(getText(C_YES))) { clearDirectory(targetDirectory); } @@ -345,57 +349,48 @@ } } } else { - String create = question(getText(C_CREATE_DIRECTORY, targetDirectory.getCanonicalPath()), - getYNAnswers()); + String create = question(getText(C_CREATE_DIRECTORY, + targetDirectory.getCanonicalPath()), + getYNAnswers()); if (create.equalsIgnoreCase(getText(C_YES))) { if (!targetDirectory.mkdirs()) { - throw new InstallerException(getText(C_UNABLE_CREATE_DIRECTORY, targetDirectory - .getCanonicalPath())); + throw new InstallerException(getText(C_UNABLE_CREATE_DIRECTORY, + targetDirectory.getCanonicalPath())); } } } - } while (!targetDirectory.exists() || !targetDirectory.isDirectory() || targetDirectory.list().length > 0); + } while (!targetDirectory.exists() || !targetDirectory.isDirectory() + || targetDirectory.list().length > 0); } catch (IOException ioe) { throw new InstallerException(ioe); } return targetDirectory; } - private File determineJavaHome() { - File javaHome = null; - File binDir = null; - try { - boolean javaFound = false; - do { - String javaHomeName = question(getText(C_ENTER_JAVA_HOME, _CURRENT), true); - if (_CURRENT.equals(javaHomeName)) { - javaHome = new File(System.getProperty(JavaVersionTester.JAVA_HOME)); - } else { - javaHome = new File(javaHomeName); - } - if (!javaHome.exists()) { - message(getText(C_NOT_FOUND, javaHome.getCanonicalPath())); - } else { - if (!javaHome.isDirectory()) { - message(getText(C_NOT_A_DIRECTORY, javaHome.getCanonicalPath())); + private JavaHomeHandler determineJavaHome() { + JavaHomeHandler javaHomeHandler = null; + boolean javaFound = false; + while (!javaFound) { + String javaHomeName = question(getText(C_ENTER_JAVA_HOME, _CURRENT), true); + // only validate deviations + if (_CURRENT.equals(javaHomeName)) { + javaHomeHandler = new JavaHomeHandler(); + javaFound = true; + } else { + javaHomeHandler = new JavaHomeHandler(javaHomeName); + if (javaHomeHandler.isDeviation()) { + if (!javaHomeHandler.isValidHome()) { + String binDirName = javaHomeName.concat("/bin"); + message(getText(C_NO_JAVA_EXECUTABLE, binDirName)); } else { - binDir = new File(javaHome, "bin"); - if (!binDir.exists()) { - message(getText(C_NO_BIN_DIRECTORY, javaHome.getCanonicalPath())); - } else { - if (binDir.list(new JavaFilenameFilter()).length <= 0) { - message(getText(C_NO_JAVA_EXECUTABLE, binDir.getCanonicalPath())); - } else { - javaFound = true; - } - } + javaFound = true; } + } else { + javaFound = true; } - } while (!javaHome.exists() || !javaHome.isDirectory() || !binDir.exists() || !javaFound); - } catch (IOException ioe) { - throw new InstallerException(ioe); + } } - return javaHome; + return javaHomeHandler; } private void checkTargetDirectorySilent(File targetDirectory) { @@ -403,16 +398,18 @@ if (!targetDirectory.exists()) { // create directory if (!targetDirectory.mkdirs()) { - throw new InstallerException(getText(C_UNABLE_CREATE_DIRECTORY, targetDirectory.getCanonicalPath())); + throw new InstallerException(getText(C_UNABLE_CREATE_DIRECTORY, + targetDirectory.getCanonicalPath())); } } else { // assert it is an empty directory if (!targetDirectory.isDirectory()) { - throw new InstallerException(getText(C_NOT_A_DIRECTORY, targetDirectory.getCanonicalPath())); + throw new InstallerException(getText(C_NOT_A_DIRECTORY, + targetDirectory.getCanonicalPath())); } else { if (targetDirectory.list().length > 0) { - throw new InstallerException(getText(C_NON_EMPTY_TARGET_DIRECTORY, targetDirectory - .getCanonicalPath())); + throw new InstallerException(getText(C_NON_EMPTY_TARGET_DIRECTORY, + targetDirectory.getCanonicalPath())); } } } @@ -445,8 +442,9 @@ } } - private void promptForCopying(final File targetDirectory, final InstallationType installationType, - final File javaHome) { + private void promptForCopying(final File targetDirectory, + final InstallationType installationType, + final JavaHomeHandler javaHomeHandler) { try { message(getText(C_SUMMARY)); if (installationType.isStandalone()) { @@ -458,10 +456,16 @@ + installationType.installDemosAndExamples()); message(" - " + InstallerCommandLine.INEXCLUDE_DOCUMENTATION + ": " + installationType.installDocumentation()); - message(" - " + InstallerCommandLine.INEXCLUDE_SOURCES + ": " + installationType.installSources()); - message(" - JRE: " + javaHome.getAbsolutePath()); + message(" - " + InstallerCommandLine.INEXCLUDE_SOURCES + ": " + + installationType.installSources()); + if (javaHomeHandler.isValidHome()) { + message(" - JRE: " + javaHomeHandler.getHome().getAbsolutePath()); + } else { + message(" - java"); + } } - String proceed = question(getText(C_CONFIRM_TARGET, targetDirectory.getCanonicalPath()), getYNAnswers()); + String proceed = question(getText(C_CONFIRM_TARGET, targetDirectory.getCanonicalPath()), + getYNAnswers()); if (!proceed.equalsIgnoreCase(getText(C_YES))) { throw new InstallationCancelledException(); } @@ -479,14 +483,14 @@ } } - private List<String> getTypeAnswers() { - List<String> answers = new ArrayList<String>(4); + private List<String> getTypeAnswers() { + List<String> answers = new ArrayList<String>(4); answers.add(Installation.ALL); answers.add(Installation.STANDARD); answers.add(Installation.MINIMUM); answers.add(Installation.STANDALONE); - return answers; - } + return answers; + } private List<String> getYNAnswers() { List<String> answers = new ArrayList<String>(2); @@ -502,9 +506,9 @@ answers.add(InstallerCommandLine.INEXCLUDE_DOCUMENTATION); answers.add(InstallerCommandLine.INEXCLUDE_SOURCES); answers.add(getText(C_NO)); - return answers; + return answers; } - + private void progressMessage(int percentage) { message(" " + percentage + " %"); } @@ -522,15 +526,17 @@ } private static class JavaInfo { + private JavaVersionInfo _javaVersionInfo; - private File _javaHome; - void setJavaHome(File javaHome) { - _javaHome = javaHome; + private JavaHomeHandler _javaHomeHandler; + + void setJavaHomeHandler(JavaHomeHandler javaHomeHandler) { + _javaHomeHandler = javaHomeHandler; } - File getJavaHome() { - return _javaHome; + JavaHomeHandler getJavaHomeHandler() { + return _javaHomeHandler; } void setJavaVersionInfo(JavaVersionInfo javaVersionInfo) { @@ -545,7 +551,6 @@ // // interface ProgressListener // - public void progressChanged(int newPercentage) { progressMessage(newPercentage); } @@ -559,7 +564,7 @@ } public void progressEntry(String entry) { - // ignore the single entries - only used in gui mode + // ignore the single entries - only used in gui mode } public void progressStartScripts() { @@ -569,5 +574,4 @@ public void progressStandalone() { message(getText(C_PACKING_STANDALONE_JAR)); } - } \ No newline at end of file Modified: trunk/installer/src/java/org/python/util/install/DirectorySelectionPage.java =================================================================== --- trunk/installer/src/java/org/python/util/install/DirectorySelectionPage.java 2008-12-11 05:20:55 UTC (rev 5735) +++ trunk/installer/src/java/org/python/util/install/DirectorySelectionPage.java 2008-12-11 09:15:43 UTC (rev 5736) @@ -17,6 +17,9 @@ import javax.swing.JTextField; public class DirectorySelectionPage extends AbstractWizardPage { + + private static final long serialVersionUID = -3672273150338356549L; + private JLabel _label; private JTextField _directory; private JButton _browse; @@ -111,9 +114,14 @@ File defaultDirectory = null; // 1st try (on windows): root if (Installation.isWindows()) { - directory = System.getProperty(JavaVersionTester.JAVA_HOME, "C:"); - if (directory.length() > 2) { - directory = directory.substring(0, 2); + JavaHomeHandler handler = new JavaHomeHandler(); + if (handler.isValidHome()) { + directory = handler.getHome().getAbsolutePath(); + if (directory.length() > 2) { + directory = directory.substring(0, 2); + } + } else { + directory = "C:"; } defaultDirectory = makeJythonSubDirectory(directory); } Modified: trunk/installer/src/java/org/python/util/install/FrameInstaller.java =================================================================== --- trunk/installer/src/java/org/python/util/install/FrameInstaller.java 2008-12-11 05:20:55 UTC (rev 5735) +++ trunk/installer/src/java/org/python/util/install/FrameInstaller.java 2008-12-11 09:15:43 UTC (rev 5736) @@ -26,6 +26,8 @@ private static Properties _properties = new Properties(); + private static JavaHomeHandler _javaHomeHandler; + protected FrameInstaller(InstallerCommandLine commandLine, JarInfo jarInfo, Autotest autotest) { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); @@ -38,7 +40,7 @@ setTargetDirectory(commandLine.getTargetDirectory().getAbsolutePath()); } if (commandLine.hasJavaHomeOption()) { - setTargetJavaHome(commandLine.getJavaHome().getAbsolutePath()); + setJavaHomeHandler(commandLine.getJavaHomeHandler()); } Wizard wizard = new Wizard(jarInfo, autotest); wizard.addWindowListener(new WindowAdapter() { @@ -72,12 +74,15 @@ return getProperty(TextKeys.TARGET_DIRECTORY_PROPERTY); } - protected static void setTargetJavaHome(String javaHome) { - setProperty(TextKeys.TARGET_JAVA_HOME_PROPERTY, javaHome.trim()); + protected static void setJavaHomeHandler(JavaHomeHandler javaHomeHandler) { + _javaHomeHandler = javaHomeHandler; } - protected static String getTargetJavaHome() { - return getProperty(TextKeys.TARGET_JAVA_HOME_PROPERTY); + protected static JavaHomeHandler getJavaHomeHandler() { + if (_javaHomeHandler == null) { + _javaHomeHandler = new JavaHomeHandler(); + } + return _javaHomeHandler; } protected static void setLanguage(Locale locale) { Modified: trunk/installer/src/java/org/python/util/install/Installation.java =================================================================== --- trunk/installer/src/java/org/python/util/install/Installation.java 2008-12-11 05:20:55 UTC (rev 5735) +++ trunk/installer/src/java/org/python/util/install/Installation.java 2008-12-11 09:15:43 UTC (rev 5736) @@ -150,57 +150,53 @@ /** * Get the version info of an external (maybe other) jvm. * - * @param javaHome The java home of the external jvm. The /bin directory is assumed to be a direct child directory. + * @param javaHomeHandler + * The java home handler pointing to the java home of the external jvm.<br> + * The /bin directory is assumed to be a direct child directory. + * * @return The versionInfo */ - protected static JavaVersionInfo getExternalJavaVersion(File javaHome) { + protected static JavaVersionInfo getExternalJavaVersion(JavaHomeHandler javaHomeHandler) { JavaVersionInfo versionInfo = new JavaVersionInfo(); - - File binDirectory = new File(javaHome, "bin"); - if (binDirectory.exists() && binDirectory.isDirectory()) { - if (binDirectory.list(new JavaFilenameFilter()).length > 0) { - try { - ConsoleInstaller.message(getText(TextKeys.C_CHECK_JAVA_VERSION)); - // launch the java command - temporary file will be written by the child process - File tempFile = File.createTempFile("jython_installation", ".properties"); - if (tempFile.exists() && tempFile.canWrite()) { - String command[] = new String[5]; - command[0] = binDirectory.getAbsolutePath() + File.separator + "java"; - command[1] = "-cp"; - command[2] = System.getProperty("java.class.path"); // our own class path should be ok here - command[3] = JavaVersionTester.class.getName(); - command[4] = tempFile.getAbsolutePath(); - - if (isVerbose()) { - ConsoleInstaller.message("executing: " + command[0] + " " + command[1] + " " + command[2] - + " " + command[3] + " " + command[4]); - } - ChildProcess childProcess = new ChildProcess(command, 10000); // 10 seconds - childProcess.setDebug(Installation.isVerbose()); - int errorCode = childProcess.run(); - if (errorCode != NORMAL_RETURN) { - versionInfo.setErrorCode(errorCode); - versionInfo.setReason(getText(TextKeys.C_NO_VALID_JAVA, javaHome.getAbsolutePath())); - } else { - Properties tempProperties = new Properties(); - tempProperties.load(new FileInputStream(tempFile)); - fillJavaVersionInfo(versionInfo, tempProperties); - } + if (javaHomeHandler.isValidHome()) { + try { + ConsoleInstaller.message(getText(TextKeys.C_CHECK_JAVA_VERSION)); + // launch the java command - temporary file will be written by the child process + File tempFile = File.createTempFile("jython_installation", ".properties"); + if (tempFile.exists() && tempFile.canWrite()) { + String command[] = new String[5]; + command[0] = javaHomeHandler.getExecutableName(); + command[1] = "-cp"; + // our own class path should be ok here + command[2] = System.getProperty("java.class.path"); + command[3] = JavaVersionTester.class.getName(); + command[4] = tempFile.getAbsolutePath(); + if (isVerbose()) { + ConsoleInstaller.message("executing: " + command[0] + " " + command[1] + + " " + command[2] + " " + command[3] + " " + command[4]); + } + ChildProcess childProcess = new ChildProcess(command, 10000); // 10 seconds + childProcess.setDebug(Installation.isVerbose()); + int errorCode = childProcess.run(); + if (errorCode != NORMAL_RETURN) { + versionInfo.setErrorCode(errorCode); + versionInfo.setReason(getText(TextKeys.C_NO_VALID_JAVA, javaHomeHandler.toString())); } else { - versionInfo.setErrorCode(ERROR_RETURN); - versionInfo.setReason(getText(TextKeys.C_UNABLE_CREATE_TMPFILE, tempFile.getAbsolutePath())); + Properties tempProperties = new Properties(); + tempProperties.load(new FileInputStream(tempFile)); + fillJavaVersionInfo(versionInfo, tempProperties); } - } catch (IOException e) { + } else { versionInfo.setErrorCode(ERROR_RETURN); - versionInfo.setReason(getText(TextKeys.C_NO_VALID_JAVA, javaHome.getAbsolutePath())); + versionInfo.setReason(getText(TextKeys.C_UNABLE_CREATE_TMPFILE, tempFile.getAbsolutePath())); } - } else { + } catch (IOException e) { versionInfo.setErrorCode(ERROR_RETURN); - versionInfo.setReason(getText(TextKeys.C_NO_JAVA_EXECUTABLE, binDirectory.getAbsolutePath())); + versionInfo.setReason(getText(TextKeys.C_NO_VALID_JAVA, javaHomeHandler.toString())); } } else { versionInfo.setErrorCode(ERROR_RETURN); - versionInfo.setReason(getText(TextKeys.C_NOT_A_DIRECTORY, binDirectory.getAbsolutePath())); + versionInfo.setReason(getText(TextKeys.C_NO_VALID_JAVA, javaHomeHandler.toString())); } return versionInfo; Modified: trunk/installer/src/java/org/python/util/install/InstallerCommandLine.java =================================================================== --- trunk/installer/src/java/org/python/util/install/InstallerCommandLine.java 2008-12-11 05:20:55 UTC (rev 5735) +++ trunk/installer/src/java/org/python/util/install/InstallerCommandLine.java 2008-12-11 09:15:43 UTC (rev 5736) @@ -308,13 +308,14 @@ } /** - * @return the requested java home directory, <code>null</code> if no java home specified + * @return a java home handler for the requested java home directory, or a default handler if no + * java home specified */ - public File getJavaHome() { + public JavaHomeHandler getJavaHomeHandler() { if (hasJavaHomeOption()) { - return new File(_commandLine.getOptionValue(JRE_SHORT)); + return new JavaHomeHandler(_commandLine.getOptionValue(JRE_SHORT)); } else { - return null; + return new JavaHomeHandler(); } } Modified: trunk/installer/src/java/org/python/util/install/JarInstaller.java =================================================================== --- trunk/installer/src/java/org/python/util/install/JarInstaller.java 2008-12-11 05:20:55 UTC (rev 5735) +++ trunk/installer/src/java/org/python/util/install/JarInstaller.java 2008-12-11 09:15:43 UTC (rev 5736) @@ -50,7 +50,7 @@ * @param targetDirectory * @param installationType */ - public void inflate(final File targetDirectory, InstallationType installationType, File javaHome) { + public void inflate(final File targetDirectory, InstallationType installationType, JavaHomeHandler javaHomeHandler) { try { // has to correspond with build.xml // has to correspond with build.Lib.include.properties @@ -144,7 +144,7 @@ if (!installationType.isStandalone()) { // generate start scripts _progressListener.progressStartScripts(); - StartScriptGenerator generator = new StartScriptGenerator(targetDirectory, javaHome); + StartScriptGenerator generator = new StartScriptGenerator(targetDirectory, javaHomeHandler); generator.generateStartScripts(); } else { _progressListener.progressStandalone(); Added: trunk/installer/src/java/org/python/util/install/JavaHomeHandler.java =================================================================== --- trunk/installer/src/java/org/python/util/install/JavaHomeHandler.java (rev 0) +++ trunk/installer/src/java/org/python/util/install/JavaHomeHandler.java 2008-12-11 09:15:43 UTC (rev 5736) @@ -0,0 +1,209 @@ +package org.python.util.install; + +import java.io.File; +import java.util.HashMap; +import java.util.Map; + +/** + * Unified entry point for treatment of java.home + * <p> + * Note that the system property <code>java.home</code> is never changed + */ +public final class JavaHomeHandler { + + public static final String JAVA_HOME = "java.home"; + + private static final String JAVA = "java"; + + private static final String JAVA_EXE = "java.exe"; + + private static final String BIN = "bin"; + + private static final String DEFAULT = "_default_"; + + private static final String EMPTY = ""; + + /** + * A map for java home strings and their respective executable names + */ + private static Map<String, String> _executableNames; + + /** + * The current java home + */ + private String _currentJavaHome; + + /** + * create a java home handler for the default java home + */ + public JavaHomeHandler() { + this(DEFAULT); + } + + /** + * create a java home handler for a java home deviation + * + * @param currentJavaHome + * The deviated java home + */ + public JavaHomeHandler(String currentJavaHome) { + setCurrentJavaHome(currentJavaHome); + check(getCurrentJavaHome()); + } + + /** + * get the name of the java executable + * + * @return A name of a java executable which can be passed to {@link ChildProcess} + */ + public String getExecutableName() { + return getExecutableName(getCurrentJavaHome()); + } + + /** + * tell the validity of the current java home + * <p> + * Note: if the current java home is not valid, {@link JavaHomeHandler#getExecutableName()} + * still returns the name of a callable java + * + * @return <code>true</code> if we have a valid java home, <code>false</code> otherwise. + */ + public boolean isValidHome() { + return !getFallbackExecutableName().equals(getExecutableName()); + } + + /** + * get the current java home, if it is valid + * + * @return The current java home + * @throws InstallerException + * if there is no valid java home + * + * @see JavaHomeHandler#isValidHome() + */ + public File getHome() throws InstallerException { + if (!isValidHome()) { + throw new InstallerException("no valid java home"); + } else { + return new File(getCurrentJavaHome()); + } + } + + /** + * @return <code>true</code> if the current java home is a deviation, <code>false</code> + * otherwise + */ + public boolean isDeviation() { + // make sure the default java home is also known + if (!getExecutableNames().containsKey(DEFAULT)) { + check(DEFAULT); + } + return !getExecutableName(DEFAULT).equals(getExecutableName(getCurrentJavaHome())); + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(80); + builder.append("["); + if(!isValidHome()) { + builder.append("in"); + } + builder.append("valid java home: "); + builder.append(getCurrentJavaHome()); + builder.append("; executable: "); + builder.append(getExecutableName()); + builder.append("]"); + return builder.toString(); + } + + /** + * reset the handler (clear all stored java homes) + */ + static void reset() { + getExecutableNames().clear(); + } + + private String getExecutableName(String javaHome) { + Map<String, String> executableNames = getExecutableNames(); + if (!executableNames.containsKey(javaHome)) { + check(javaHome); + } + return executableNames.get(javaHome); + } + + private void check(String javaHome) { + boolean valid = false; + boolean isDefault = false; + File javaExecutableFile = null; + if (DEFAULT.equals(javaHome)) { + isDefault = true; + javaHome = System.getProperty(JAVA_HOME, EMPTY); + } + if (javaHome.length() > 0) { + File javaHomeDir = new File(javaHome); + if (javaHomeDir.exists() && javaHomeDir.isDirectory()) { + File binDir = new File(javaHomeDir, BIN); + if (binDir.exists() && binDir.isDirectory()) { + javaExecutableFile = getExecutableFile(binDir); + if (javaExecutableFile.exists()) { + valid = true; + } + } + } + } + if (valid) { + addExecutable(javaHome, javaExecutableFile); + if (isDefault) { + addExecutable(DEFAULT, javaExecutableFile); + if (DEFAULT.equals(getCurrentJavaHome())) { + // update the current home to the real one + setCurrentJavaHome(javaHome); + } + } + } else { + addFallbackExecutable(javaHome); + if (isDefault) { + addFallbackExecutable(DEFAULT); + } + } + } + + private String getFallbackExecutableName() { + return JAVA; + } + + private void addFallbackExecutable(String javaHome) { + getExecutableNames().put(javaHome, getFallbackExecutableName()); + } + + private void addExecutable(String javaHome, File javaExecutableFile) { + getExecutableNames().put(javaHome, javaExecutableFile.getAbsolutePath()); + } + + private File getExecutableFile(File binDir) { + if (Installation.isWindows()) { + return new File(binDir, JAVA_EXE); + } else { + return new File(binDir, JAVA); + } + } + + private static Map<String, String> getExecutableNames() { + if (_executableNames == null) { + _executableNames = new HashMap<String, String>(); + } + return _executableNames; + } + + private String getCurrentJavaHome() { + if (_currentJavaHome == null) { + return DEFAULT; + } else { + return _currentJavaHome; + } + } + + private void setCurrentJavaHome(String currentJavaHome) { + _currentJavaHome = currentJavaHome.trim(); + } +} Modified: trunk/installer/src/java/org/python/util/install/JavaSelectionPage.java =================================================================== --- trunk/installer/src/java/org/python/util/install/JavaSelectionPage.java 2008-12-11 05:20:55 UTC (rev 5735) +++ trunk/installer/src/java/org/python/util/install/JavaSelectionPage.java 2008-12-11 09:15:43 UTC (rev 5736) @@ -20,6 +20,8 @@ public class JavaSelectionPage extends AbstractWizardPage { + private static final long serialVersionUID = 2871052924519223110L; + private final static String _CURRENT_ACTION_COMMAND = "current"; private final static String _OTHER_ACTION_COMMAND = "other"; @@ -123,24 +125,18 @@ protected void beforeValidate() { } - private String getDefaultJavaHome() { - return System.getProperty(JavaVersionTester.JAVA_HOME); - } - private void setValues() { - String javaHome = FrameInstaller.getTargetJavaHome(); boolean current = true; - if (javaHome != null && javaHome.length() > 0) { - if (!javaHome.equals(getDefaultJavaHome())) { - current = false; - } + JavaHomeHandler javaHomeHandler = FrameInstaller.getJavaHomeHandler(); + if (javaHomeHandler.isDeviation()) { + current = false; } setCurrent(current); } private void setCurrent(boolean current) { if (current) { - FrameInstaller.setTargetJavaHome(getDefaultJavaHome()); + FrameInstaller.setJavaHomeHandler(new JavaHomeHandler()); _currentButton.setSelected(true); _otherButton.setSelected(false); _javaHome.setEnabled(false); @@ -151,7 +147,12 @@ _javaHome.setEnabled(true); _browse.setEnabled(true); } - _javaHome.setText(FrameInstaller.getTargetJavaHome()); + JavaHomeHandler javaHomeHandler = FrameInstaller.getJavaHomeHandler(); + if (javaHomeHandler.isValidHome()) { + _javaHome.setText(javaHomeHandler.getHome().getAbsolutePath()); + } else { + _javaHome.setText(""); + } _javaHome.setToolTipText(_javaHome.getText()); } @@ -171,7 +172,7 @@ } int returnValue = fileChooser.showDialog(_browse, getText(SELECT)); if (returnValue == JFileChooser.APPROVE_OPTION) { - FrameInstaller.setTargetJavaHome(fileChooser.getSelectedFile().getAbsolutePath()); + FrameInstaller.setJavaHomeHandler(new JavaHomeHandler(fileChooser.getSelectedFile().getAbsolutePath())); setValues(); } } @@ -189,8 +190,9 @@ } public void focusLost(FocusEvent e) { - FrameInstaller.setTargetJavaHome(_javaHome.getText()); - _javaHome.setToolTipText(_javaHome.getText()); + String javaHome = _javaHome.getText(); + FrameInstaller.setJavaHomeHandler(new JavaHomeHandler(javaHome)); + _javaHome.setToolTipText(javaHome); } } Modified: trunk/installer/src/java/org/python/util/install/JavaSelectionPageValidator.java =================================================================== --- trunk/installer/src/java/org/python/util/install/JavaSelectionPageValidator.java 2008-12-11 05:20:55 UTC (rev 5735) +++ trunk/installer/src/java/org/python/util/install/JavaSelectionPageValidator.java 2008-12-11 09:15:43 UTC (rev 5736) @@ -1,7 +1,5 @@ package org.python.util.install; -import java.io.File; - import org.python.util.install.Installation.JavaVersionInfo; public class JavaSelectionPageValidator extends AbstractWizardValidator { @@ -14,21 +12,19 @@ } protected void validate() throws ValidationException { - String directory = _page.getJavaHome().getText().trim(); // trim to be sure - File javaHome = new File(directory); JavaVersionInfo javaVersionInfo = new JavaVersionInfo(); - String currentJavaHomeName = System.getProperty(JavaVersionTester.JAVA_HOME); - if (currentJavaHomeName.equals(javaHome.getAbsolutePath())) { - // no experiments if current java is selected - Installation.fillJavaVersionInfo(javaVersionInfo, System.getProperties()); - javaHome = new File(currentJavaHomeName); - } else { - javaVersionInfo = Installation.getExternalJavaVersion(javaHome); + String directory = _page.getJavaHome().getText().trim(); // trim to be sure + JavaHomeHandler javaHomeHandler = new JavaHomeHandler(directory); + if(javaHomeHandler.isDeviation()) { + javaVersionInfo = Installation.getExternalJavaVersion(javaHomeHandler); if (javaVersionInfo.getErrorCode() != Installation.NORMAL_RETURN) { throw new ValidationException(javaVersionInfo.getReason()); } + } else { + // no experiments if current java is selected + Installation.fillJavaVersionInfo(javaVersionInfo, System.getProperties()); } - FrameInstaller.setTargetJavaHome(javaHome.getAbsolutePath()); + FrameInstaller.setJavaHomeHandler(javaHomeHandler); FrameInstaller.setJavaVersionInfo(javaVersionInfo); } Modified: trunk/installer/src/java/org/python/util/install/JavaVersionTester.java =================================================================== --- trunk/installer/src/java/org/python/util/install/JavaVersionTester.java 2008-12-11 05:20:55 UTC (rev 5735) +++ trunk/installer/src/java/org/python/util/install/JavaVersionTester.java 2008-12-11 09:15:43 UTC (rev 5736) @@ -27,11 +27,15 @@ System.exit(1); } } else { - System.err.println("problems with temp file " + tempFilePath); + if (!tempFile.exists()) { + System.err.println("temp file " + tempFilePath + " does not exist"); + } else { + System.err.println("cannot write to temp file " + tempFilePath); + } System.exit(1); } } else { - System.err.println("no temp file given"); + System.err.println("no temp file given. usage: JavaVersionTester tempfile"); System.out.println("exiting with 1"); System.exit(1); } @@ -43,7 +47,7 @@ private static String createFileContent() { StringBuffer sb = new StringBuffer(500); - String java_home = System.getProperty(JAVA_HOME, UNKNOWN); + String java_home = new JavaHomeHandler().getExecutableName(); if (File.separatorChar != '/') { java_home = java_home.replace(File.separatorChar, '/'); // backslash would be interpreted as escape char } Modified: trunk/installer/src/java/org/python/util/install/ProgressPage.java =================================================================== --- trunk/installer/src/java/org/python/util/install/ProgressPage.java 2008-12-11 05:20:55 UTC (rev 5735) +++ trunk/installer/src/java/org/python/util/install/ProgressPage.java 2008-12-11 09:15:43 UTC (rev 5736) @@ -13,6 +13,8 @@ public class ProgressPage extends AbstractWizardPage implements ProgressListener { + private static final long serialVersionUID = 9013748834030994976L; + private JarInfo _jarInfo; private JLabel _label; private JProgressBar _progressBar; @@ -78,8 +80,8 @@ jarInstaller.addInstallationListener(_autotest); } File targetDirectory = new File(FrameInstaller.getTargetDirectory()); - File javaHome = new File(FrameInstaller.getTargetJavaHome()); - jarInstaller.inflate(targetDirectory, FrameInstaller.getInstallationType(), javaHome); + JavaHomeHandler javaHomeHandler = FrameInstaller.getJavaHomeHandler(); + jarInstaller.inflate(targetDirectory, FrameInstaller.getInstallationType(), javaHomeHandler); } protected void passivate() { Modified: trunk/installer/src/java/org/python/util/install/StartScriptGenerator.java =================================================================== --- trunk/installer/src/java/org/python/util/install/StartScriptGenerator.java 2008-12-11 05:20:55 UTC (rev 5735) +++ trunk/installer/src/java/org/python/util/install/StartScriptGenerator.java 2008-12-11 09:15:43 UTC (rev 5736) @@ -31,13 +31,13 @@ private File _targetDirectory; - private File _javaHome; + private JavaHomeHandler _javaHomeHandler; private int _flavour; - public StartScriptGenerator(File targetDirectory, File javaHome) { + public StartScriptGenerator(File targetDirectory, JavaHomeHandler javaHomeHandler) { _targetDirectory = targetDirectory; - _javaHome = javaHome; + _javaHomeHandler = javaHomeHandler; if (Installation.isWindows()) { setFlavour(WINDOWS_FLAVOUR); } else { @@ -115,15 +115,13 @@ * * {0} : current date <br> * {1} : user.name <br> - * {2} : java home directory <br> - * {3} : target directory <br> + * {2} : target directory <br> */ private String getStartScript(String template) throws IOException { String parameters[] = new String[4]; parameters[0] = new Date().toString(); parameters[1] = System.getProperty("user.name"); - parameters[2] = _javaHome.getCanonicalPath(); - parameters[3] = getTargetDirectory().getCanonicalPath(); + parameters[2] = getTargetDirectory().getCanonicalPath(); return MessageFormat.format(template, (Object[])parameters); } @@ -136,11 +134,16 @@ StringBuilder builder = getWindowsHeaderTemplate(); builder.append("set "); builder.append(JAVA_HOME); - builder.append("=\"{2}\""); + builder.append("="); + if (_javaHomeHandler.isValidHome()) { + builder.append("\""); + builder.append(_javaHomeHandler.getHome().getAbsolutePath()); + builder.append("\""); + } builder.append(WIN_CR_LF); builder.append("set "); builder.append(JYTHON_HOME_FALLBACK); - builder.append("=\"{3}\""); + builder.append("=\"{2}\""); builder.append(WIN_CR_LF); builder.append(WIN_CR_LF); return builder.toString(); @@ -171,9 +174,15 @@ private String getUnixJythonTemplate() { StringBuilder builder = getUnixHeaderTemplate(); builder.append(JAVA_HOME); + builder.append("="); + if (_javaHomeHandler.isValidHome()) { + builder.append("\""); + builder.append(_javaHomeHandler.getHome().getAbsolutePath()); + builder.append("\""); + } + builder.append("\n"); + builder.append(JYTHON_HOME_FALLBACK); builder.append("=\"{2}\"\n"); - builder.append(JYTHON_HOME_FALLBACK); - builder.append("=\"{3}\"\n"); builder.append("\n"); return builder.toString(); } Modified: trunk/installer/src/java/org/python/util/install/driver/Autotest.java =================================================================== --- trunk/installer/src/java/org/python/util/install/driver/Autotest.java 2008-12-11 05:20:55 UTC (rev 5735) +++ trunk/installer/src/java/org/python/util/install/driver/Autotest.java 2008-12-11 09:15:43 UTC (rev 5736) @@ -6,6 +6,7 @@ import org.python.util.install.FileHelper; import org.python.util.install.InstallationListener; import org.python.util.install.InstallerCommandLine; +import org.python.util.install.JavaHomeHandler; public abstract class Autotest implements InstallationListener { @@ -16,7 +17,7 @@ private String _name; private File _targetDir; - private File _javaHome; + private JavaHomeHandler _javaHomeHandler; private boolean _verbose; private String[] _commandLineArgs; private Verifier _verifier; @@ -36,7 +37,7 @@ createTargetDirectory(); setCommandLineArgs(new String[0]); // a priori value _verbose = commandLine.hasVerboseOption(); - _javaHome = commandLine.getJavaHome(); // null if not present + _javaHomeHandler = commandLine.getJavaHomeHandler(); } /** @@ -77,20 +78,13 @@ } /** - * @return <code>true</code> if this test has a java home deviation + * @return the java home handler, can be asked for deviation using <code>isDeviation()</code>. */ - protected boolean hasJavaHomeDeviation() { - return getJavaHome() != null; + protected JavaHomeHandler getJavaHomeHandler() { + return _javaHomeHandler; } /** - * @return the deviation for java home, <code>null</code> if there is none - */ - protected File getJavaHome() { - return _javaHome; - } - - /** * @return <code>true</code> if this test should be verbose */ protected boolean isVerbose() { @@ -135,9 +129,10 @@ if (isVerbose()) { addArgument("-v"); } - if (hasJavaHomeDeviation()) { + JavaHomeHandler javaHomeHandler = getJavaHomeHandler(); + if (javaHomeHandler.isDeviation() && javaHomeHandler.isValidHome()) { addArgument("-j"); - addArgument(getJavaHome().getAbsolutePath()); + addArgument(javaHomeHandler.getHome().getAbsolutePath()); } } Modified: trunk/installer/src/java/org/python/util/install/driver/InstallationDriver.java =================================================================== --- trunk/installer/src/java/org/python/util/install/driver/InstallationDriver.java 2008-12-11 05:20:55 UTC (rev 5735) +++ trunk/installer/src/java/org/python/util/install/driver/InstallationDriver.java 2008-12-11 09:15:43 UTC (rev 5736) @@ -8,6 +8,7 @@ import org.python.util.install.Installation; import org.python.util.install.InstallerCommandLine; +import org.python.util.install.JavaHomeHandler; public class InstallationDriver { private SilentAutotest[] _silentTests; @@ -186,8 +187,9 @@ test1.addAnswer("3"); // type: minimum test1.addAnswer("n"); // include: nothing test1.addAnswer(test1.getTargetDir().getAbsolutePath()); // target directory - if (test1.hasJavaHomeDeviation()) { - test1.addAnswer(test1.getJavaHome().getAbsolutePath()); // different jre + JavaHomeHandler javaHomeHandler = test1.getJavaHomeHandler(); + if (javaHomeHandler.isDeviation() && javaHomeHandler.isValidHome()) { + test1.addAnswer(javaHomeHandler.getHome().getAbsolutePath()); // different jre } else { test1.addAnswer("=="); // current jre } @@ -214,8 +216,9 @@ test2.addAnswer("wrongAnswer"); // wrong answer test2.addAnswer("n"); // no further excludes test2.addAnswer(test2.getTargetDir().getAbsolutePath()); // target directory - if (test2.hasJavaHomeDeviation()) { - test2.addAnswer(test2.getJavaHome().getAbsolutePath()); // different jre + javaHomeHandler = test2.getJavaHomeHandler(); + if (javaHomeHandler.isDeviation() && javaHomeHandler.isValidHome()) { + test2.addAnswer(javaHomeHandler.getHome().getAbsolutePath()); // different jre } else { test2.addAnswer("=="); // current jre } @@ -233,8 +236,9 @@ test3.addAnswer("y"); // accept license test3.addAnswer("9"); // type: standalone test3.addAnswer(test3.getTargetDir().getAbsolutePath()); // target directory - if (test3.hasJavaHomeDeviation()) { - test3.addAnswer(test3.getJavaHome().getAbsolutePath()); // different jre + javaHomeHandler = test3.getJavaHomeHandler(); + if (javaHomeHandler.isDeviation() && javaHomeHandler.isValidHome()) { + test3.addAnswer(javaHomeHandler.getHome().getAbsolutePath()); // different jre } else { test3.addAnswer("=="); // current jre } @@ -256,8 +260,9 @@ test4.addAnswer("y"); // exclude test4.addAnswer("n"); // no further excludes test4.addAnswer(test4.getTargetDir().getAbsolutePath()); // target directory - if (test4.hasJavaHomeDeviation()) { - test4.addAnswer(test4.getJavaHome().getAbsolutePath()); // different jre + javaHomeHandler = test4.getJavaHomeHandler(); + if (javaHomeHandler.isDeviation() && javaHomeHandler.isValidHome()) { + test4.addAnswer(javaHomeHandler.getHome().getAbsolutePath()); // different jre } else { test4.addAnswer("=="); // current jre } @@ -403,13 +408,15 @@ guiTest.addKeyAction(KeyEvent.VK_TAB); guiTest.addKeyAction(KeyEvent.VK_TAB); guiTest.addKeyAction(KeyEvent.VK_TAB); - if (guiTest.hasJavaHomeDeviation()) { // need 2 more tabs + JavaHomeHandler javaHomeHandler = guiTest.getJavaHomeHandler(); + boolean isValidDeviation = javaHomeHandler.isDeviation() && javaHomeHandler.isValidHome(); + if (isValidDeviation) { // need 2 more tabs guiTest.addKeyAction(KeyEvent.VK_TAB); guiTest.addKeyAction(KeyEvent.VK_TAB); } guiTest.addKeyAction(KeyEvent.VK_SPACE); // overview page - if (guiTest.hasJavaHomeDeviation()) { + if (isValidDeviation) { guiTest.addKeyAction(KeyEvent.VK_SPACE, 3000); // enough time to check the java version } else { guiTest.addKeyAction(KeyEvent.VK_SPACE); Modified: trunk/installer/src/java/org/python/util/install/driver/NormalVerifier.java =================================================================== --- trunk/installer/src/java/org/python/util/install/driver/NormalVerifier.java 2008-12-11 05:20:55 UTC (rev 5735) +++ trunk/installer/src/java/org/python/util/install/driver/NormalVerifier.java 2008-12-11 09:15:43 UTC (rev 5736) @@ -11,7 +11,7 @@ import org.python.util.install.ChildProcess; import org.python.util.install.FileHelper; import org.python.util.install.Installation; -import org.python.util.install.JavaVersionTester; +import org.python.util.install.JavaHomeHandler; public class NormalVerifier implements Verifier { @@ -125,7 +125,11 @@ String template = FileHelper.readAll(inputStream); String targetDirPath = getTargetDir().getCanonicalPath(); String upScriptPath = getSimpleCommand()[1]; - String javaHomeString = System.getProperty(JavaVersionTester.JAVA_HOME, ""); + JavaHomeHandler javaHomeHandler = new JavaHomeHandler(); + String javaHomeString = ""; + if (javaHomeHandler.isValidHome()) { + javaHomeString = javaHomeHandler.getHome().getAbsolutePath(); + } contents = MessageFormat.format(template, targetDirPath, upScriptPath, Modified: trunk/installer/src/java/org/python/util/install/driver/StandaloneVerifier.java =================================================================== --- trunk/installer/src/java/org/python/util/install/driver/StandaloneVerifier.java 2008-12-11 05:20:55 UTC (rev 5735) +++ trunk/installer/src/java/org/python/util/install/driver/StandaloneVerifier.java 2008-12-11 09:15:43 UTC (rev 5736) @@ -6,7 +6,7 @@ import java.util.jar.JarEntry; import java.util.jar.JarFile; -import org.python.util.install.JavaVersionTester; +import org.python.util.install.JavaHomeHandler; public class StandaloneVerifier extends NormalVerifier { @@ -30,22 +30,7 @@ throw new DriverException(ioe); } String command[] = new String[4]; - command[0] = null; - String javaHomeString = System.getProperty(JavaVersionTester.JAVA_HOME, null); - if (javaHomeString != null) { - File javaHome = new File(javaHomeString); - if (javaHome.exists()) { - try { - command[0] = javaHome.getCanonicalPath() + File.separator + "bin" - + File.separator + "java"; - } catch (IOException ioe) { - throw new DriverException(ioe); - } - } - } - if (command[0] == null) { - command[0] = "java"; - } + command[0] = new JavaHomeHandler().getExecutableName(); command[1] = "-jar"; command[2] = parentDirName + JYTHON_JAR; command[3] = parentDirName + AUTOTEST_PY; Modified: trunk/installer/test/java/org/python/util/install/FrameInstallerTest.java =================================================================== --- trunk/installer/test/java/org/python/util/install/FrameInstallerTest.java 2008-12-11 05:20:55 UTC (rev 5735) +++ trunk/installer/test/java/org/python/util/install/FrameInstallerTest.java 2008-12-11 09:15:43 UTC (rev 5736) @@ -60,4 +60,14 @@ assertFalse(returnedType.installDocumentation()); assertFalse(returnedType.installSources()); } + + public void testSetGetJavaHomeHandler() { + assertNotNull(FrameInstaller.getJavaHomeHandler()); + JavaHomeHandler handler1 = new JavaHomeHandler(); + JavaHomeHandler handler2 = new JavaHomeHandler("some/dir"); + FrameInstaller.setJavaHomeHandler(handler1); + assertEquals(handler1, FrameInstaller.getJavaHomeHandler()); + FrameInstaller.setJavaHomeHandler(handler2); + assertEquals(handler2, FrameInstaller.getJavaHomeHandler()); + } } Modified: trunk/installer/test/java/org/python/util/install/InstallationTest.java =================================================================== --- trunk/installer/test/java/org/python/util/install/InstallationTest.java 2008-12-11 05:20:55 UTC (rev 5735) +++ trunk/insta... [truncated message content] |