From: <otm...@us...> - 2008-12-30 17:17:29
|
Revision: 5817 http://jython.svn.sourceforge.net/jython/?rev=5817&view=rev Author: otmarhumbel Date: 2008-12-30 17:17:26 +0000 (Tue, 30 Dec 2008) Log Message: ----------- provide default answers where possible in console mode (less typing for the user) Modified Paths: -------------- trunk/installer/src/java/org/python/util/install/ConsoleInstaller.java trunk/installer/src/java/org/python/util/install/TextConstants.java trunk/installer/src/java/org/python/util/install/TextConstants_de.java trunk/installer/src/java/org/python/util/install/driver/InstallationDriver.java Modified: trunk/installer/src/java/org/python/util/install/ConsoleInstaller.java =================================================================== --- trunk/installer/src/java/org/python/util/install/ConsoleInstaller.java 2008-12-30 08:17:05 UTC (rev 5816) +++ trunk/installer/src/java/org/python/util/install/ConsoleInstaller.java 2008-12-30 17:17:26 UTC (rev 5817) @@ -15,6 +15,8 @@ public class ConsoleInstaller implements ProgressListener, TextKeys { + public static final String CURRENT_JRE = "="; + private static final String _CANCEL = "c"; private static final String _PROMPT = ">>>"; @@ -23,7 +25,6 @@ private static final String _END_ANSWERS = "]"; - private static final String _CURRENT = "=="; private InstallerCommandLine _commandLine; @@ -80,25 +81,33 @@ } private String question(String question) { - return question(question, null, false); + return question(question, null, false, null); } private String question(String question, boolean answerRequired) { - return question(question, null, answerRequired); + return question(question, null, answerRequired, null); } - private String question(String question, List<String> answers) { - return question(question, answers, true); + private String question(String question, List<String> answers, String defaultAnswer) { + return question(question, answers, true, defaultAnswer); } /** * question and answer * + * @param question * @param answers * Possible answers (may be null) + * @param answerRequired + * @param defaultAnswer + * (may be null) + * * @return (chosen) answer */ - private String question(String question, List<String> answers, boolean answerRequired) { + private String question(String question, + List<String> answers, + boolean answerRequired, + String defaultAnswer) { try { if (answers != null && answers.size() > 0) { question = question + " " + _BEGIN_ANSWERS; @@ -106,7 +115,16 @@ while (answersAsIterator.hasNext()) { if (!question.endsWith(_BEGIN_ANSWERS)) question = question + "/"; - question = question + answersAsIterator.next(); + String possibleAnswer = answersAsIterator.next(); + if (possibleAnswer.equalsIgnoreCase(defaultAnswer)) { + if (Character.isDigit(possibleAnswer.charAt(0))) { + question = question.concat(" ").concat(possibleAnswer).concat(" "); + } else { + question = question + possibleAnswer.toUpperCase(); + } + } else { + question = question + possibleAnswer; + } } question = question + _END_ANSWERS; } @@ -117,22 +135,27 @@ // output to normal System.out System.out.print(question); // intended print, not println (!) answer = readLine(); - if (answers != null && answers.size() > 0) { - Iterator<String> answersAsIterator = answers.iterator(); - while (answersAsIterator.hasNext()) { - if (answer.equalsIgnoreCase(answersAsIterator.next())) { - match = true; - } + if ("".equals(answer) && answerRequired) { + // check default answer + if (defaultAnswer != null) { + match = true; + answer = defaultAnswer; } } else { - match = true; - if (answerRequired && "".equals(answer)) { - match = false; + if (answers != null && answers.size() > 0) { + Iterator<String> answersAsIterator = answers.iterator(); + while (answersAsIterator.hasNext()) { + if (answer.equalsIgnoreCase(answersAsIterator.next())) { + match = true; + } + } + } else { + match = true; } + if (!match && !_CANCEL.equalsIgnoreCase(answer)) { + message(getText(C_INVALID_ANSWER, answer)); + } } - if (!match && !_CANCEL.equalsIgnoreCase(answer)) { - message(getText(C_INVALID_ANSWER, answer)); - } } if (_CANCEL.equalsIgnoreCase(answer)) { throw new InstallationCancelledException(); @@ -172,15 +195,20 @@ availableLanguages.add(getText(C_GERMAN)); // 1 == German List<String> answers = new ArrayList<String>(availableLanguages.size()); String languages = ""; + String defaultAnswer = null; for (Iterator<String> iterator = availableLanguages.iterator(); iterator.hasNext();) { String language = iterator.next(); + String possibleAnswer = language.substring(0, 1); + if (defaultAnswer == null) { + defaultAnswer = possibleAnswer; + } languages = languages + language + ", "; - answers.add(language.substring(0, 1).toLowerCase()); + answers.add(possibleAnswer.toLowerCase()); } 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))) { + String answer = question(getText(C_SELECT_LANGUAGE), answers, defaultAnswer); + if (answer.equalsIgnoreCase(answers.get(1))) { Installation.setLanguage(Locale.GERMAN); } else { Installation.setLanguage(Locale.ENGLISH); @@ -196,7 +224,7 @@ message(" " + Installation.STANDARD + ". " + getText(C_STANDARD)); message(" " + Installation.MINIMUM + ". " + getText(C_MINIMUM)); message(" " + Installation.STANDALONE + ". " + getText(C_STANDALONE)); - String answer = question(getText(C_SELECT_INSTALL_TYPE), getTypeAnswers()); + String answer = question(getText(C_SELECT_INSTALL_TYPE), getTypeAnswers(), Installation.ALL); if (Installation.ALL.equals(answer)) { installationType.setAll(); } else if (Installation.STANDARD.equals(answer)) { @@ -209,10 +237,10 @@ if (!installationType.isStandalone()) { // include parts ? if (!installationType.isAll()) { - answer = question(getText(C_INCLUDE), getYNAnswers()); + answer = question(getText(C_INCLUDE), getYNAnswers(), no); if (yes.equals(answer)) { do { - answer = question(getText(C_INEXCLUDE_PARTS, no), getInExcludeAnswers()); + answer = question(getText(C_INEXCLUDE_PARTS, no), getInExcludeAnswers(), no); if (InstallerCommandLine.INEXCLUDE_LIBRARY_MODULES.equals(answer)) { installationType.addLibraryModules(); } else if (InstallerCommandLine.INEXCLUDE_DEMOS_AND_EXAMPLES.equals(answer)) { @@ -230,10 +258,10 @@ } // exclude parts ? if (!installationType.isMinimum()) { - answer = question(getText(C_EXCLUDE), getYNAnswers()); + answer = question(getText(C_EXCLUDE), getYNAnswers(), no); if (yes.equals(answer)) { do { - answer = question(getText(C_INEXCLUDE_PARTS, no), getInExcludeAnswers()); + answer = question(getText(C_INEXCLUDE_PARTS, no), getInExcludeAnswers(), no); if (InstallerCommandLine.INEXCLUDE_LIBRARY_MODULES.equals(answer)) { installationType.removeLibraryModules(); } else if (InstallerCommandLine.INEXCLUDE_DEMOS_AND_EXAMPLES.equals(answer)) { @@ -259,9 +287,7 @@ message(getText(C_JAVA_VERSION, javaInfo.getJavaVersionInfo().getVendor(), javaInfo.getJavaVersionInfo().getVersion())); - if (Installation.isValidJava(javaInfo.getJavaVersionInfo())) { - question(getText(C_PROCEED)); - } else { + if (!Installation.isValidJava(javaInfo.getJavaVersionInfo())) { message(getText(C_UNSUPPORTED_JAVA)); question(getText(C_PROCEED_ANYWAY)); } @@ -269,9 +295,7 @@ String osName = System.getProperty(Installation.OS_NAME); String osVersion = System.getProperty(Installation.OS_VERSION); message(getText(C_OS_VERSION, osName, osVersion)); - if (Installation.isValidOs()) { - question(getText(C_PROCEED)); - } else { + if (!Installation.isValidOs()) { message(getText(C_UNSUPPORTED_OS)); question(getText(C_PROCEED_ANYWAY)); } @@ -309,7 +333,9 @@ } private void acceptLicense() { - String read = question(getText(C_READ_LICENSE), getYNAnswers()); + String no = getText(C_NO); + String yes = getText(C_YES); + String read = question(getText(C_READ_LICENSE), getYNAnswers(), no); if (read.equalsIgnoreCase(getText(C_YES))) { String licenseText = "n/a"; try { @@ -319,13 +345,15 @@ throw new InstallerException(ioe); } } - String accept = question(getText(C_ACCEPT), getYNAnswers()); + String accept = question(getText(C_ACCEPT), getYNAnswers(), yes); if (!accept.equalsIgnoreCase(getText(C_YES))) { throw new InstallationCancelledException(); } } private File determineTargetDirectory() { + String no = getText(C_NO); + String yes = getText(C_YES); File targetDirectory = null; try { do { @@ -337,11 +365,13 @@ if (targetDirectory.list().length > 0) { String overwrite = question(getText(C_OVERWRITE_DIRECTORY, targetDirectory.getCanonicalPath()), - getYNAnswers()); + getYNAnswers(), + no); if (overwrite.equalsIgnoreCase(getText(C_YES))) { String clear = question(getText(C_CLEAR_DIRECTORY, targetDirectory.getCanonicalPath()), - getYNAnswers()); + getYNAnswers(), + yes); if (clear.equalsIgnoreCase(getText(C_YES))) { clearDirectory(targetDirectory); } @@ -351,7 +381,8 @@ } else { String create = question(getText(C_CREATE_DIRECTORY, targetDirectory.getCanonicalPath()), - getYNAnswers()); + getYNAnswers(), + yes); if (create.equalsIgnoreCase(getText(C_YES))) { if (!targetDirectory.mkdirs()) { throw new InstallerException(getText(C_UNABLE_CREATE_DIRECTORY, @@ -371,9 +402,9 @@ JavaHomeHandler javaHomeHandler = null; boolean javaFound = false; while (!javaFound) { - String javaHomeName = question(getText(C_ENTER_JAVA_HOME, _CURRENT), true); + String javaHomeName = question(getText(C_ENTER_JAVA_HOME), null, true, CURRENT_JRE); // only validate deviations - if (_CURRENT.equals(javaHomeName)) { + if (CURRENT_JRE.equals(javaHomeName)) { javaHomeHandler = new JavaHomeHandler(); javaFound = true; } else { @@ -419,7 +450,8 @@ } private void showReadme(final File targetDirectory) { - String read = question(getText(C_READ_README), getYNAnswers()); + String no = getText(C_NO); + String read = question(getText(C_READ_README), getYNAnswers(), no); if (read.equalsIgnoreCase(getText(C_YES))) { try { message(_jarInfo.getReadmeText()); @@ -465,7 +497,7 @@ } } String proceed = question(getText(C_CONFIRM_TARGET, targetDirectory.getCanonicalPath()), - getYNAnswers()); + getYNAnswers(), getText(C_YES)); if (!proceed.equalsIgnoreCase(getText(C_YES))) { throw new InstallationCancelledException(); } Modified: trunk/installer/src/java/org/python/util/install/TextConstants.java =================================================================== --- trunk/installer/src/java/org/python/util/install/TextConstants.java 2008-12-30 08:17:05 UTC (rev 5816) +++ trunk/installer/src/java/org/python/util/install/TextConstants.java 2008-12-30 17:17:26 UTC (rev 5817) @@ -93,7 +93,7 @@ { C_CONGRATULATIONS, "Congratulations!" }, // congratulations { C_CREATE_DIRECTORY, "Unable to find directory {0}, create it ?" }, // console { C_ENTER_TARGET_DIRECTORY, "Please enter the target directory" }, // console - { C_ENTER_JAVA_HOME, "Please enter the target java home directory ({0} for current)" }, // console + { C_ENTER_JAVA_HOME, "Please enter the java home directory (empty for using the current java runtime)" }, // console { C_ENGLISH, "English" }, // language { C_EXCLUDE, "Do you want to exclude parts from the installation ?" }, // installation type { C_GENERATING_START_SCRIPTS, "Generating start scripts ..." }, // progress @@ -111,7 +111,7 @@ { C_NON_EMPTY_TARGET_DIRECTORY, "Target directory {0} is not empty" }, // error { C_NOT_A_DIRECTORY, "{0} is not a directory. " }, // error { C_NOT_FOUND, "{0} not found. " }, // error - { C_OS_VERSION, "Your operation system version is: {0} / {1}" }, // version + { C_OS_VERSION, "Your operating system version is: {0} / {1}" }, // version { C_OVERWRITE_DIRECTORY, "Directory {0} is not empty - ok to overwrite contents ?" }, // console { C_PACKING_STANDALONE_JAR, "Packing standalone " + JarInstaller.JYTHON_JAR + " ..." }, // progress { C_PROCEED, "Please press Enter to proceed" }, // console Modified: trunk/installer/src/java/org/python/util/install/TextConstants_de.java =================================================================== --- trunk/installer/src/java/org/python/util/install/TextConstants_de.java 2008-12-30 08:17:05 UTC (rev 5816) +++ trunk/installer/src/java/org/python/util/install/TextConstants_de.java 2008-12-30 17:17:26 UTC (rev 5817) @@ -94,7 +94,7 @@ { C_CONGRATULATIONS, "Gratulation!" }, // congratulations { C_CREATE_DIRECTORY, "Das Verzeichnis {0} gibt es nicht - soll es erstellt werden ?" }, // console { C_ENTER_TARGET_DIRECTORY, "Bitte geben Sie das Zielverzeichnis ein" }, // console - { C_ENTER_JAVA_HOME, "Bitte geben Sie das gewuenschte Java Home Verzeichnis ein ({0} fuer das aktuelle)" }, // console + { C_ENTER_JAVA_HOME, "Bitte geben Sie das gewuenschte Java Home Verzeichnis ein (Enter fuer das aktuelle)" }, // console { C_ENGLISH, "Englisch" }, // language { C_EXCLUDE, "Moechten Sie Teile von der Installation ausschliessen ?" }, // installation type { C_GENERATING_START_SCRIPTS, "Start Scripts werden generiert ..." }, // progress 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-30 08:17:05 UTC (rev 5816) +++ trunk/installer/src/java/org/python/util/install/driver/InstallationDriver.java 2008-12-30 17:17:26 UTC (rev 5817) @@ -6,6 +6,7 @@ import java.util.Iterator; import java.util.List; +import org.python.util.install.ConsoleInstaller; import org.python.util.install.Installation; import org.python.util.install.InstallerCommandLine; import org.python.util.install.JavaHomeHandler; @@ -191,10 +192,8 @@ if (javaHomeHandler.isDeviation() && javaHomeHandler.isValidHome()) { test1.addAnswer(javaHomeHandler.getHome().getAbsolutePath()); // different jre } else { - test1.addAnswer("=="); // current jre + test1.addAnswer(ConsoleInstaller.CURRENT_JRE); } - test1.addAnswer(""); // simple enter for java version - test1.addAnswer(""); // simple enter for os version test1.addAnswer("y"); // confirm copying test1.addAnswer("n"); // no readme test1.setVerifier(new NormalVerifier()); @@ -220,10 +219,8 @@ if (javaHomeHandler.isDeviation() && javaHomeHandler.isValidHome()) { test2.addAnswer(javaHomeHandler.getHome().getAbsolutePath()); // different jre } else { - test2.addAnswer("=="); // current jre + test2.addAnswer(ConsoleInstaller.CURRENT_JRE); } - test2.addAnswer(""); // simple enter for java version - test2.addAnswer(""); // simple enter for os version test2.addAnswer("y"); // confirm copying test2.addAnswer("n"); // no readme test2.setVerifier(new NormalVerifier()); @@ -240,10 +237,8 @@ if (javaHomeHandler.isDeviation() && javaHomeHandler.isValidHome()) { test3.addAnswer(javaHomeHandler.getHome().getAbsolutePath()); // different jre } else { - test3.addAnswer("=="); // current jre + test3.addAnswer(ConsoleInstaller.CURRENT_JRE); } - test3.addAnswer(""); // simple enter for java version - test3.addAnswer(""); // simple enter for os version test3.addAnswer("y"); // confirm copying test3.addAnswer("n"); // no readme test3.setVerifier(new StandaloneVerifier()); @@ -264,10 +259,8 @@ if (javaHomeHandler.isDeviation() && javaHomeHandler.isValidHome()) { test4.addAnswer(javaHomeHandler.getHome().getAbsolutePath()); // different jre } else { - test4.addAnswer("=="); // current jre + test4.addAnswer(ConsoleInstaller.CURRENT_JRE); } - test4.addAnswer(""); // simple enter for java version - test4.addAnswer(""); // simple enter for os version test4.addAnswer("y"); // confirm copying test4.addAnswer("n"); // no readme test4.setVerifier(new NormalVerifier()); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |