From fe7adf67d25394d49e064d73a6048e6dce3dd59b Mon Sep 17 00:00:00 2001
From: kenneth_suter <kenneth_suter@localhost>
Date: Thu, 29 Mar 2007 21:37:27 +0000
Subject: [PATCH] - Created CliApplication interface which defines a common inteface between CliApplications and controlling logic.
---
/dev/null | 719 -----------------
opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/Launcher.java | 281 ++++++
opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/InstallLauncher.java | 285 ++----
opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/QuickSetupCli.java | 209 +++++
opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/uninstaller/UninstallCliHelper.java | 408 +++++++++
opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/CliApplicationHelper.java | 226 +++++
opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/uninstaller/Uninstaller.java | 13
opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/CliApplication.java | 75 +
opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/uninstaller/UninstallLauncher.java | 222 +----
opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/QuickSetup.java | 11
opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/Application.java | 4
11 files changed, 1,361 insertions(+), 1,092 deletions(-)
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/Application.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/Application.java
index 635eab7..b23acbd 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/Application.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/Application.java
@@ -60,13 +60,11 @@
* Creates an application by instantiating the Application class
* denoted by the System property
* <code>org.opends.quicksetup.Application.class</code>.
- * @param formatter ProgressMessageFormatter that will be passed to the
- * constructor of Application
* @return Application object that was newly instantiated
* @throws ApplicationException if there was a problem creating
* the new Application object
*/
- static public Application create(ProgressMessageFormatter formatter)
+ static public Application create()
throws ApplicationException {
Application app;
String appClassName =
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/CliApplication.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/CliApplication.java
new file mode 100644
index 0000000..50774c1
--- /dev/null
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/CliApplication.java
@@ -0,0 +1,75 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE
+ * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
+ * add the following below this CDDL HEADER, with the fields enclosed
+ * by brackets "[]" replaced with your own identifying information:
+ * Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ * Portions Copyright 2007 Sun Microsystems, Inc.
+ */
+
+package org.opends.quicksetup;
+
+import org.opends.quicksetup.event.ProgressNotifier;
+import org.opends.quicksetup.util.ProgressMessageFormatter;
+
+/**
+ * Represents a quick setup CLI application.
+ */
+public interface CliApplication extends ProgressNotifier, Runnable {
+
+ /**
+ * Creates a set of user data from command line arguments and installation
+ * status.
+ * @param args String[] of arguments passed in from the command line
+ * @param status the current installation status
+ * @return UserData object populated to reflect the input args and status
+ * @throws UserDataException if something is wrong
+ */
+ UserData createUserData(String[] args, CurrentInstallStatus status)
+ throws UserDataException;
+
+ /**
+ * Sets the user data this application will use when running.
+ * @param userData UserData to use when running
+ */
+ void setUserData(UserData userData);
+
+ /**
+ * Sets the formatter that will be used to format messages.
+ * @param formatter ProgressMessageFormatter used to format messages
+ */
+ void setProgressMessageFormatter(ProgressMessageFormatter formatter);
+
+ /**
+ * Indicates whether or not this applicat is finished running.
+ * @return boolean where true indicates we are not running
+ */
+ boolean isFinished();
+
+ /**
+ * Gets any exception that happened while this application was running.
+ * A null value returned from this method indicates that the execution
+ * of the CLI program is not complete or was successful.
+ * @return an exception that happened while the CLI was running
+ */
+ ApplicationException getException();
+
+}
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/CliApplicationHelper.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/CliApplicationHelper.java
new file mode 100644
index 0000000..240b317
--- /dev/null
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/CliApplicationHelper.java
@@ -0,0 +1,226 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE
+ * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
+ * add the following below this CDDL HEADER, with the fields enclosed
+ * by brackets "[]" replaced with your own identifying information:
+ * Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ * Portions Copyright 2007 Sun Microsystems, Inc.
+ */
+
+package org.opends.quicksetup;
+
+import org.opends.quicksetup.util.Utils;
+import org.opends.quicksetup.i18n.ResourceProvider;
+
+import java.io.ByteArrayOutputStream;
+import java.util.Set;
+import java.util.ArrayList;
+import java.util.logging.Logger;
+
+/**
+ * Helper class containing useful methods for processing input and output
+ * for a CliApplication.
+ */
+public class CliApplicationHelper {
+
+ static private final Logger LOG =
+ Logger.getLogger(CliApplication.class.getName());
+
+ /**
+ * Interactively prompts (on standard output) the user to provide a string
+ * value. Any non-empty string will be allowed (the empty string will
+ * indicate that the default should be used). The method will display the
+ * message until the user provides one of the values in the validValues
+ * parameter.
+ *
+ * @param formatKey Key for access the prompts format string from the
+ * bundle
+ * @param prompt The prompt to present to the user.
+ * @param defaultValue The default value returned if the user clicks enter.
+ * @param validValues The valid values that can be accepted as user input.
+ *
+ * @return The string value read from the user.
+ */
+ protected String promptConfirm(String formatKey, String prompt,
+ String defaultValue,
+ String[] validValues) {
+
+ System.out.println();
+
+ boolean isValid = false;
+ String response = null;
+ while (!isValid)
+ {
+ String msg = getMsg(formatKey,
+ new String[] {prompt, defaultValue});
+
+ System.out.print(msg);
+ System.out.flush();
+
+ response = readLine();
+ if (response.equals(""))
+ {
+ response = defaultValue;
+ }
+ for (int i=0; i<validValues.length && !isValid; i++)
+ {
+ isValid = validValues[i].equalsIgnoreCase(response);
+ }
+ }
+ return response;
+ }
+
+ /**
+ * Reads a line of text from standard input.
+ *
+ * @return The line of text read from standard input, or <CODE>null</CODE>
+ * if the end of the stream is reached or an error occurs while
+ * attempting to read the response.
+ */
+ private String readLine()
+ {
+ try
+ {
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+
+ while (true)
+ {
+ int b = System.in.read();
+ if ((b < 0) || (b == '\n'))
+ {
+ break;
+ }
+ else if (b == '\r')
+ {
+ int b2 = System.in.read();
+ if (b2 == '\n')
+ {
+ break;
+ }
+ else
+ {
+ baos.write(b);
+ baos.write(b2);
+ }
+ }
+ else
+ {
+ baos.write(b);
+ }
+ }
+
+ return new String(baos.toByteArray(), "UTF-8");
+ }
+ catch (Exception e)
+ {
+ System.err.println(getMsg("cli-uninstall-error-reading-stdin"));
+
+ return null;
+ }
+ }
+
+ /**
+ * Returns <CODE>true</CODE> if this is a silent uninstall and
+ * <CODE>false</CODE> otherwise.
+ * @param args the arguments passed in the command line.
+ * @return <CODE>true</CODE> if this is a silent uninstall and
+ * <CODE>false</CODE> otherwise.
+ */
+ protected boolean isSilent(String[] args)
+ {
+ boolean isSilent = false;
+ for (int i=0; i<args.length && !isSilent; i++)
+ {
+ if (args[i].equalsIgnoreCase("--silentUninstall") ||
+ args[i].equalsIgnoreCase("-s"))
+ {
+ isSilent = true;
+ }
+ }
+ return isSilent;
+ }
+
+ /**
+ * Commodity method used to validate the arguments provided by the user in
+ * the command line and updating the UserData object accordingly.
+ * @param userData the UserData object to be updated.
+ * @param args the arguments passed in the command line.
+ * @param validArgs arguments that are acceptable by this application.
+ * @throws org.opends.quicksetup.UserDataException if there is an error with
+ * the data provided by the user.
+ */
+ protected void validateArguments(UserData userData,
+ String[] args,
+ Set<String> validArgs) throws UserDataException
+ {
+ ArrayList<String> errors = new ArrayList<String>();
+
+ for (String arg1 : args) {
+ if (validArgs.contains(arg1)) {
+ // Ignore
+ } else {
+ String[] arg = {arg1};
+ errors.add(getMsg("cli-uninstall-unknown-argument", arg));
+ }
+ }
+
+ if (errors.size() > 0)
+ {
+ String msg = Utils.getStringFromCollection(errors,
+ QuickSetupCli.LINE_SEPARATOR+QuickSetupCli.LINE_SEPARATOR);
+ throw new UserDataException(null, msg);
+ }
+ }
+
+ /**
+ * The following three methods are just commodity methods to get localized
+ * messages.
+ * @param key String key
+ * @return String message
+ */
+ protected static String getMsg(String key)
+ {
+ return org.opends.server.util.StaticUtils.wrapText(getI18n().getMsg(key),
+ Utils.getCommandLineMaxLineWidth());
+ }
+
+ /**
+ * The following three methods are just commodity methods to get localized
+ * messages.
+ * @param key String key
+ * @param args String[] args
+ * @return String message
+ */
+ protected static String getMsg(String key, String[] args)
+ {
+ return org.opends.server.util.StaticUtils.wrapText(
+ getI18n().getMsg(key, args), Utils.getCommandLineMaxLineWidth());
+ }
+
+ /**
+ * Gets the resource provider instance.
+ * @return ResourceProvider instance
+ */
+ protected static ResourceProvider getI18n()
+ {
+ return ResourceProvider.getInstance();
+ }
+}
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/Launcher.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/Launcher.java
new file mode 100644
index 0000000..2ffaa7d
--- /dev/null
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/Launcher.java
@@ -0,0 +1,281 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE
+ * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
+ * add the following below this CDDL HEADER, with the fields enclosed
+ * by brackets "[]" replaced with your own identifying information:
+ * Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ * Portions Copyright 2007 Sun Microsystems, Inc.
+ */
+
+package org.opends.quicksetup;
+
+import org.opends.quicksetup.util.Utils;
+import org.opends.quicksetup.i18n.ResourceProvider;
+
+import java.io.PrintStream;
+import java.io.ByteArrayOutputStream;
+
+/**
+ * Responsible for providing initial evaluation of command line arguments
+ * and determining whether to launch a CLI, GUI, or print a usage statement.
+ */
+public abstract class Launcher {
+
+ /** Arguments with which this launcher was invoked. */
+ protected String[] args;
+
+ /**
+ * Creates a Launcher.
+ * @param args String[] of argument passes from the command line
+ */
+ public Launcher(String[] args) {
+ if (args == null) {
+ throw new IllegalArgumentException("args cannot be null");
+ }
+ this.args = args;
+ }
+
+ /**
+ * Indicates whether or not the launcher should print a usage
+ * statement based on the content of the arguments passed into
+ * the constructor.
+ * @return boolean where true indicates usage should be printed
+ */
+ protected boolean shouldPrintUsage() {
+ boolean printUsage = false;
+ if (!isCli() && args.length > 0) {
+ printUsage = true;
+ } else {
+ if ((args != null) && (args.length > 0)) {
+ for (String arg : args) {
+ if (arg.equalsIgnoreCase("-H") ||
+ arg.equalsIgnoreCase("--help")) {
+ printUsage = true;
+ }
+ }
+ }
+ }
+ return printUsage;
+ }
+
+ /**
+ * Indicates whether the launcher will launch a command line versus
+ * a graphical application based on the contents of the arguments
+ * passed into the constructor.
+ * @return boolean where true indicates that a CLI application should
+ * be launched
+ */
+ protected boolean isCli() {
+ boolean isCli = false;
+ for (String arg : args) {
+ if (arg.equalsIgnoreCase("--cli")) {
+ isCli = true;
+ break;
+ }
+ }
+ return isCli;
+ }
+
+ /**
+ * Creates an internationaized message based on the input key and
+ * properly formatted for the terminal.
+ * @param key for the message in the bundle
+ * @return String message properly formatted for the terminal
+ */
+ protected String getMsg(String key)
+ {
+ return org.opends.server.util.StaticUtils.wrapText(getI18n().getMsg(key),
+ Utils.getCommandLineMaxLineWidth());
+ }
+
+ /**
+ * Prints a usage message to the terminal and exits
+ * with exit code QuickSetupCli.USER_DATA_ERROR.
+ * @param i18nMsg localized user message that will
+ * be printed to std error
+ */
+ protected void printUsage(String i18nMsg) {
+ System.err.println(i18nMsg);
+ System.exit(QuickSetupCli.USER_DATA_ERROR);
+ }
+
+ /**
+ * Launches the graphical uninstall. The graphical uninstall is launched in a
+ * different thread that the main thread because if we have a problem with the
+ * graphical system (for instance the DISPLAY environment variable is not
+ * correctly set) the native libraries will call exit. However if we launch
+ * this from another thread, the thread will just be killed.
+ *
+ * This code also assumes that if the call to SplashWindow.main worked (and
+ * the splash screen was displayed) we will never get out of it (we will call
+ * a System.exit() when we close the graphical uninstall dialog).
+ *
+ * @param args String[] the arguments used to call the SplashWindow main
+ * method
+ * @return 0 if everything worked fine, or 1 if we could not display properly
+ * the SplashWindow.
+ */
+ protected int launchGui(final String[] args)
+ {
+ final int[] returnValue =
+ { -1 };
+ Thread t = new Thread(new Runnable()
+ {
+ public void run()
+ {
+ // Setup MacOSX native menu bar before AWT is loaded.
+ Utils.setMacOSXMenuBar(getFrameTitle());
+ SplashScreen.main(args);
+ returnValue[0] = 0;
+ }
+ });
+ /*
+ * This is done to avoid displaying the stack that might occur if there are
+ * problems with the display environment.
+ */
+ PrintStream printStream = System.err;
+ System.setErr(new EmptyPrintStream());
+ t.start();
+ try
+ {
+ t.join();
+ }
+ catch (InterruptedException ie)
+ {
+ /* An error occurred, so the return value will be -1. We got nothing to
+ do with this exception. */
+ }
+ System.setErr(printStream);
+ return returnValue[0];
+ }
+
+ /**
+ * Gets the frame title of the GUI application that will be used
+ * in some operating systems.
+ * @return internationalized String representing the frame title
+ */
+ abstract protected String getFrameTitle();
+
+ /**
+ * Launches the command line based uninstall.
+ *
+ * @param args the arguments passed
+ * @param cliApp the CLI application to launch
+ * @return 0 if everything worked fine, and an error code if something wrong
+ * occurred.
+ */
+ protected int launchCli(String[] args, CliApplication cliApp) {
+ System.out.println(getMsg("uninstall-launcher-launching-cli"));
+ System.setProperty("org.opends.quicksetup.cli", "true");
+
+ QuickSetupCli cli = new QuickSetupCli(cliApp, args);
+ int returnValue = cli.run();
+ if (returnValue == QuickSetupCli.USER_DATA_ERROR) {
+ printUsage();
+ }
+
+ // Add an extra space systematically
+ System.out.println();
+
+ return returnValue;
+ }
+
+ /**
+ * Prints a usage statement to terminal and exits
+ * with an error code.
+ */
+ protected abstract void printUsage();
+
+ /**
+ * Creates a CLI application that will be run if the
+ * launcher needs to launch a CLI application.
+ * @return CliApplication that will be run
+ */
+ protected abstract CliApplication createCliApplication();
+
+ /**
+ * Called before the launcher launches the GUI. Here
+ * subclasses can do any application specific things
+ * like set system properties of print status messages
+ * that need to be done before the GUI launches.
+ */
+ protected abstract void willLaunchGui();
+
+ /**
+ * Called if launching of the GUI failed. Here
+ * subclasses can so application specific things
+ * like print a message.
+ */
+ protected abstract void guiLaunchFailed();
+
+ /**
+ * The main method which is called by the uninstall command lines.
+ */
+ public void launch() {
+ if (shouldPrintUsage()) {
+ printUsage();
+ } else if (isCli()) {
+ int exitCode = launchCli(args, createCliApplication());
+ if (exitCode != 0) {
+ System.exit(exitCode);
+ }
+ } else {
+ willLaunchGui();
+ int exitCode = launchGui(args);
+ if (exitCode != 0) {
+ guiLaunchFailed();
+ exitCode = launchCli(args, createCliApplication());
+ if (exitCode != 0) {
+ System.exit(exitCode);
+ }
+ }
+ }
+ }
+
+ /**
+ * This class is used to avoid displaying the error message related to display
+ * problems that we might have when trying to display the SplashWindow.
+ *
+ */
+ private class EmptyPrintStream extends PrintStream {
+ /**
+ * Default constructor.
+ *
+ */
+ public EmptyPrintStream()
+ {
+ super(new ByteArrayOutputStream(), true);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void println(String msg)
+ {
+ }
+ }
+
+ private ResourceProvider getI18n()
+ {
+ return ResourceProvider.getInstance();
+ }
+
+}
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/QuickSetup.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/QuickSetup.java
index bd59f8e..8b46ab7 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/QuickSetup.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/QuickSetup.java
@@ -117,7 +117,7 @@
{
ProgressMessageFormatter formatter = new HtmlProgressMessageFormatter();
try {
- application = Application.create(formatter);
+ application = Application.create();
application.setProgressMessageFormatter(formatter);
} catch (ApplicationException e) {
LOG.log(Level.INFO, "error", e);
@@ -135,15 +135,6 @@
}
}
- private Application createApplication(ProgressMessageFormatter formatter) {
- try {
- application = Application.create(formatter);
- } catch (ApplicationException e) {
- LOG.log(Level.INFO, "error", e);
- }
- return application;
- }
-
/**
* Gets the current installation status of the filesystem
* bits this quick setup is managing.
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/QuickSetupCli.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/QuickSetupCli.java
new file mode 100644
index 0000000..4ba3e66
--- /dev/null
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/QuickSetupCli.java
@@ -0,0 +1,209 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE
+ * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
+ * add the following below this CDDL HEADER, with the fields enclosed
+ * by brackets "[]" replaced with your own identifying information:
+ * Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ * Portions Copyright 2007 Sun Microsystems, Inc.
+ */
+
+package org.opends.quicksetup;
+
+import org.opends.quicksetup.util.ProgressMessageFormatter;
+import org.opends.quicksetup.util.PlainTextProgressMessageFormatter;
+import org.opends.quicksetup.util.Utils;
+import org.opends.quicksetup.event.ProgressUpdateListener;
+import org.opends.quicksetup.event.ProgressUpdateEvent;
+import org.opends.quicksetup.i18n.ResourceProvider;
+
+/**
+ * Controller for managing the execution of a CliApplication.
+ */
+public class QuickSetupCli {
+
+ /**
+ * Return code: Uninstall successful.
+ */
+ static public int SUCCESSFUL = 0;
+
+ /**
+ * Return code: User Cancelled uninstall.
+ */
+ static public int CANCELLED = 1;
+
+ /**
+ * Return code: User provided invalid data.
+ */
+ static public int USER_DATA_ERROR = 2;
+
+ /**
+ * Return code: Error accessing file system (reading/writing).
+ */
+ static public int ERROR_ACCESSING_FILE_SYSTEM = 3;
+
+ /**
+ * Return code: Error stopping server.
+ */
+ static public int ERROR_STOPPING_SERVER = 4;
+
+ /**
+ * Return code: Bug.
+ */
+ static public int BUG = 5;
+
+ /** Platform dependent filesystem separator. */
+ public static String LINE_SEPARATOR = System.getProperty("line.separator");
+
+ /** Arguments passed in the command line. */
+ protected String[] args;
+
+ private CliApplication cliApp;
+
+ /**
+ * Creates a QuickSetupCli instance.
+ * @param cliApp the application to be run
+ * @param args arguments passed in from the command line
+ */
+ public QuickSetupCli(CliApplication cliApp, String[] args) {
+ this.cliApp = cliApp;
+ this.args = args;
+ }
+
+ /**
+ * Parses the user data and prompts the user for data if required. If the
+ * user provides all the required data it launches the Uninstaller.
+ *
+ * @return the return code (SUCCESSFUL, CANCELLED, USER_DATA_ERROR,
+ * ERROR_ACCESSING_FILE_SYSTEM, ERROR_STOPPING_SERVER or BUG.
+ */
+ public int run()
+ {
+ int returnValue;
+ // Parse the arguments
+ try
+ {
+ CurrentInstallStatus installStatus = new CurrentInstallStatus();
+ UserData userData = cliApp.createUserData(args, installStatus);
+ if (userData != null)
+ {
+ ProgressMessageFormatter formatter =
+ new PlainTextProgressMessageFormatter();
+ cliApp.setUserData(userData);
+ cliApp.setProgressMessageFormatter(formatter);
+ cliApp.addProgressUpdateListener(
+ new ProgressUpdateListener()
+ {
+ /**
+ * ProgressUpdateListener implementation.
+ * @param ev the ProgressUpdateEvent we receive.
+ *
+ */
+ public void progressUpdate(ProgressUpdateEvent ev)
+ {
+ System.out.print(
+ org.opends.server.util.StaticUtils.wrapText(ev.getNewLogs(),
+ Utils.getCommandLineMaxLineWidth()));
+ }
+ });
+ new Thread(cliApp).start();
+ while (!cliApp.isFinished())
+ {
+ try
+ {
+ Thread.sleep(100);
+ }
+ catch (Exception ex)
+ {
+ }
+ }
+
+ ApplicationException ue = cliApp.getException();
+ if (ue != null)
+ {
+ switch (ue.getType())
+ {
+ case FILE_SYSTEM_ERROR:
+ returnValue = ERROR_ACCESSING_FILE_SYSTEM;
+ break;
+
+ case STOP_ERROR:
+ returnValue = ERROR_STOPPING_SERVER;
+ break;
+
+ case BUG:
+ returnValue = BUG;
+ break;
+
+ default:
+ throw new IllegalStateException(
+ "Unknown ApplicationException type: "+ue.getType());
+ }
+ }
+ else
+ {
+ returnValue = SUCCESSFUL;
+ }
+ }
+ else
+ {
+ // User cancelled installation.
+ returnValue = CANCELLED;
+ }
+ }
+ catch (UserDataException uude)
+ {
+ System.err.println(LINE_SEPARATOR+uude.getLocalizedMessage()+
+ LINE_SEPARATOR);
+ returnValue = USER_DATA_ERROR;
+ }
+ return returnValue;
+ }
+
+ /**
+ * The following three methods are just commodity methods to get localized
+ * messages.
+ * @param key String key
+ * @return String message
+ */
+ protected static String getMsg(String key)
+ {
+ return org.opends.server.util.StaticUtils.wrapText(getI18n().getMsg(key),
+ Utils.getCommandLineMaxLineWidth());
+ }
+
+ /**
+ * The following three methods are just commodity methods to get localized
+ * messages.
+ * @param key String key
+ * @param args String[] args
+ * @return String message
+ */
+ protected static String getMsg(String key, String[] args)
+ {
+ return org.opends.server.util.StaticUtils.wrapText(
+ getI18n().getMsg(key, args), Utils.getCommandLineMaxLineWidth());
+ }
+
+ private static ResourceProvider getI18n()
+ {
+ return ResourceProvider.getInstance();
+ }
+}
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/InstallLauncher.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/InstallLauncher.java
index a9da5e9..b46acd0 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/InstallLauncher.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/InstallLauncher.java
@@ -26,12 +26,10 @@
*/
package org.opends.quicksetup.installer;
-import java.io.ByteArrayOutputStream;
-import java.io.PrintStream;
import java.util.ArrayList;
-import org.opends.quicksetup.SplashScreen;
-import org.opends.quicksetup.i18n.ResourceProvider;
+import org.opends.quicksetup.Launcher;
+import org.opends.quicksetup.CliApplication;
import org.opends.quicksetup.util.Utils;
/**
@@ -39,129 +37,132 @@
* the Directory Server. It just checks the command line arguments and the
* environment and determines whether the graphical or the command line
* based setup much be launched.
- *
*/
-public class InstallLauncher
-{
+public class InstallLauncher extends Launcher {
+
/**
* The main method which is called by the setup command lines.
+ *
* @param args the arguments passed by the command lines. In the case
* we want to launch the cli setup they are basically the arguments that we
* will pass to the org.opends.server.tools.InstallDS class.
*/
- public static void main(String[] args)
- {
- boolean displayUsage = false;
- boolean useCli = false;
- if ((args != null) && (args.length > 0))
- {
- for (int i = 0; i < args.length; i++)
- {
- if (args[i].equals("--cli"))
- {
- useCli = true;
- }
- }
+ public static void main(String[] args) {
+ new InstallLauncher(args).launch();
+ }
- if (!useCli)
- {
- if (args.length > 0)
- {
- if (args.length == 2)
- {
+ /**
+ * Creates a launcher.
+ *
+ * @param args the arguments passed by the command lines.
+ */
+ public InstallLauncher(String[] args) {
+ super(args);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ protected boolean shouldPrintUsage() {
+ boolean displayUsage = false;
+ if ((args != null) && (args.length > 0)) {
+ if (!isCli()) {
+ if (args.length > 0) {
+ if (args.length == 2) {
/*
* Just ignore the -P argument that is passed by the setup command
* line.
*/
- if (!args[0].equals("-P"))
- {
+ if (!args[0].equals("-P")) {
displayUsage = true;
}
- } else
- {
+ } else {
displayUsage = true;
}
}
}
}
- if (displayUsage)
- {
- String arg;
- if (Utils.isWindows())
- {
- arg = Utils.getWindowsSetupFileName();
- } else
- {
- arg = Utils.getUnixSetupFileName();
- }
- /*
- * This is required because the usage message contains '{' characters that
- * mess up the MessageFormat.format method.
- */
- String msg;
-
- if (Utils.isWindows())
- {
- msg= getMsg("setup-launcher-usage-windows");
- }
- else
- {
- msg= getMsg("setup-launcher-usage-unix");
- }
- msg = msg.replace("{0}", arg);
- System.err.println(msg);
- System.exit(1);
- } else if (useCli)
- {
- int exitCode = launchCliSetup(args);
- if (exitCode != 0)
- {
- System.exit(exitCode);
- }
- } else
- {
- System.setProperty("org.opends.quicksetup.Application.class",
- "org.opends.quicksetup.installer.offline.OfflineInstaller");
- int exitCode = launchGuiSetup(args);
- if (exitCode != 0)
- {
- System.err.println(getMsg("setup-launcher-gui-launched-failed"));
- exitCode = launchCliSetup(args);
- if (exitCode != 0)
- {
- System.exit(exitCode);
- }
- }
- }
+ return displayUsage;
}
/**
- * Launches the command line based setup.
- * @param args the arguments passed
- * @return 0 if everything worked fine, and an error code if something wrong
- * occurred (as specified in org.opends.server.tools.InstallDS).
- * @see org.opends.server.tools.InstallDS
+ * {@inheritDoc}
*/
- private static int launchCliSetup(String[] args)
- {
+ protected void guiLaunchFailed() {
+ System.err.println(getMsg("setup-launcher-gui-launched-failed"));
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ protected void willLaunchGui() {
+ System.out.println(getMsg("setup-launcher-launching-gui"));
+ System.setProperty("org.opends.quicksetup.Application.class",
+ "org.opends.quicksetup.installer.offline.OfflineInstaller");
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ protected String getFrameTitle() {
+ return getMsg("frame-install-title");
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void printUsage() {
+ String arg;
+ if (Utils.isWindows()) {
+ arg = Utils.getWindowsSetupFileName();
+ } else {
+ arg = Utils.getUnixSetupFileName();
+ }
+ /*
+ * This is required because the usage message contains '{' characters that
+ * mess up the MessageFormat.format method.
+ */
+ String msg;
+
+ if (Utils.isWindows()) {
+ msg = getMsg("setup-launcher-usage-windows");
+ } else {
+ msg = getMsg("setup-launcher-usage-unix");
+ }
+ msg = msg.replace("{0}", arg);
+ printUsage(msg);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ protected CliApplication createCliApplication() {
+ // Setup currently has no implemented CliApplication
+ // but rather relies on InstallDS from the server
+ // package. Note that launchCli is overloaded
+ // to run this application instead of the default
+ // behavior in Launcher
+ return null;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ protected int launchCli(String[] args, CliApplication cliApp) {
System.setProperty("org.opends.quicksetup.cli", "true");
- if (Utils.isWindows())
- {
+ if (Utils.isWindows()) {
System.setProperty("org.opends.server.scriptName",
- Utils.getWindowsSetupFileName());
- } else
- {
+ Utils.getWindowsSetupFileName());
+ } else {
System.setProperty("org.opends.server.scriptName",
- Utils.getUnixSetupFileName());
+ Utils.getUnixSetupFileName());
}
ArrayList<String> newArgList = new ArrayList<String>();
- if (args != null)
- {
- for (int i = 0; i < args.length; i++)
- {
- if (!args[i].equalsIgnoreCase("--cli"))
- {
+ if (args != null) {
+ for (int i = 0; i < args.length; i++) {
+ if (!args[i].equalsIgnoreCase("--cli")) {
newArgList.add(args[i]);
}
}
@@ -177,92 +178,4 @@
return org.opends.server.tools.InstallDS.installMain(newArgs);
}
- /**
- * Launches the graphical setup. The graphical setup is launched in a
- * different thread that the main thread because if we have a problem with the
- * graphical system (for instance the DISPLAY environment variable is not
- * correctly set) the native libraries will call exit. However if we launch
- * this from another thread, the thread will just be killed.
- *
- * This code also assumes that if the call to SplashWindow.main worked (and
- * the splash screen was displayed) we will never get out of it (we will call
- * a System.exit() when we close the graphical setup dialog).
- *
- * @params String[] args the arguments used to call the SplashWindow main
- * method
- * @return 0 if everything worked fine, or 1 if we could not display properly
- * the SplashWindow.
- */
- private static int launchGuiSetup(final String[] args)
- {
- System.out.println(getMsg("setup-launcher-launching-gui"));
- final int[] returnValue =
- { -1 };
- Thread t = new Thread(new Runnable()
- {
- public void run()
- {
- // Setup MacOSX native menu bar before AWT is loaded.
- Utils.setMacOSXMenuBar(getMsg("frame-install-title"));
- SplashScreen.main(args);
- returnValue[0] = 0;
- }
- });
- /*
- * This is done to avoid displaying the stack that might occur if there are
- * problems with the display environment.
- */
- PrintStream printStream = System.err;
- System.setErr(new EmptyPrintStream());
- t.start();
- try
- {
- t.join();
- }
- catch (InterruptedException ie)
- {
- /* An error occurred, so the return value will be -1. We got nothing to
- do with this exception. */
- }
- System.setErr(printStream);
- return returnValue[0];
- }
-
- /**
- * The following three methods are just commodity methods to get localized
- * messages.
- */
- private static String getMsg(String key)
- {
- return getI18n().getMsg(key);
- }
-
- private static ResourceProvider getI18n()
- {
- return ResourceProvider.getInstance();
- }
-
- /**
- * This class is used to avoid displaying the error message related to display
- * problems that we might have when trying to display the SplashWindow.
- *
- */
- static class EmptyPrintStream extends PrintStream
- {
- /**
- * Default constructor.
- *
- */
- public EmptyPrintStream()
- {
- super(new ByteArrayOutputStream(), true);
- }
-
- /**
- * {@inheritDoc}
- */
- public void println(String msg)
- {
- }
- }
}
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/uninstaller/UninstallCli.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/uninstaller/UninstallCli.java
deleted file mode 100644
index 3603d8e..0000000
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/uninstaller/UninstallCli.java
+++ /dev/null
@@ -1,719 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License, Version 1.0 only
- * (the "License"). You may not use this file except in compliance
- * with the License.
- *
- * You can obtain a copy of the license at
- * trunk/opends/resource/legal-notices/OpenDS.LICENSE
- * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at
- * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
- * add the following below this CDDL HEADER, with the fields enclosed
- * by brackets "[]" replaced with your own identifying information:
- * Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- *
- *
- * Portions Copyright 2006-2007 Sun Microsystems, Inc.
- */
-
-package org.opends.quicksetup.uninstaller;
-
-
-import java.io.ByteArrayOutputStream;
-
-import java.util.ArrayList;
-import java.util.Set;
-
-import org.opends.quicksetup.CurrentInstallStatus;
-import org.opends.quicksetup.UserDataException;
-import org.opends.quicksetup.ApplicationException;
-import org.opends.quicksetup.UserData;
-import org.opends.quicksetup.event.ProgressUpdateListener;
-import org.opends.quicksetup.event.ProgressUpdateEvent;
-import org.opends.quicksetup.i18n.ResourceProvider;
-import org.opends.quicksetup.util.PlainTextProgressMessageFormatter;
-import org.opends.quicksetup.util.Utils;
-import org.opends.quicksetup.util.ProgressMessageFormatter;
-
-/**
- * The class used to provide some CLI interface in the uninstall.
- *
- * This class basically is in charge of parsing the data provided by the user
- * in the command line and displaying messages asking the user for information.
- *
- * Once the user has provided all the required information it calls Uninstaller
- * and launches it.
- *
- */
-class UninstallCli
-{
- /**
- * Return code: Uninstall successful.
- */
- static int SUCCESSFUL = 0;
- /**
- * Return code: User Cancelled uninstall.
- */
- static int CANCELLED = 1;
- /**
- * Return code: User provided invalid data.
- */
- static int USER_DATA_ERROR = 2;
- /**
- * Return code: Error accessing file system (reading/writing).
- */
- static int ERROR_ACCESSING_FILE_SYSTEM = 3;
- /**
- * Return code: Error stopping server.
- */
- static int ERROR_STOPPING_SERVER = 4;
- /**
- * Return code: Bug.
- */
- static int BUG = 5;
-
- private static String LINE_SEPARATOR = System.getProperty("line.separator");
-
- private String[] args;
-
- /**
- * The constructor for this object.
- * @param args the arguments of the uninstall command line.
- */
- UninstallCli(String[] args)
- {
- this.args = args;
- }
-
- /**
- * Parses the user data and prompts the user for data if required. If the
- * user provides all the required data it launches the Uninstaller.
- *
- * @return the return code (SUCCESSFUL, CANCELLED, USER_DATA_ERROR,
- * ERROR_ACCESSING_FILE_SYSTEM, ERROR_STOPPING_SERVER or BUG.
- */
- int run()
- {
- int returnValue;
-
- System.out.println(getMsg("uninstall-launcher-launching-cli"));
- // Parse the arguments
- try
- {
- CurrentInstallStatus installStatus = new CurrentInstallStatus();
- UninstallUserData userData = getUserData(args, installStatus);
- if (userData != null)
- {
- ProgressMessageFormatter formatter =
- new PlainTextProgressMessageFormatter();
- Uninstaller uninstaller = new Uninstaller();
- uninstaller.setUserData(userData);
- uninstaller.setProgressMessageFormatter(formatter);
- uninstaller.addProgressUpdateListener(
- new ProgressUpdateListener()
- {
- /**
- * ProgressUpdateListener implementation.
- * @param ev the ProgressUpdateEvent we receive.
- *
- */
- public void progressUpdate(ProgressUpdateEvent ev)
- {
- System.out.print(
- org.opends.server.util.StaticUtils.wrapText(ev.getNewLogs(),
- Utils.getCommandLineMaxLineWidth()));
- }
- });
- new Thread(uninstaller).start();
- while (!uninstaller.isFinished())
- {
- try
- {
- Thread.sleep(100);
- }
- catch (Exception ex)
- {
- }
- }
-
- ApplicationException ue = uninstaller.getException();
- if (ue != null)
- {
- switch (ue.getType())
- {
- case FILE_SYSTEM_ERROR:
- returnValue = ERROR_ACCESSING_FILE_SYSTEM;
- break;
-
- case STOP_ERROR:
- returnValue = ERROR_STOPPING_SERVER;
- break;
-
- case BUG:
- returnValue = BUG;
- break;
-
- default:
- throw new IllegalStateException(
- "Unknown ApplicationException type: "+ue.getType());
- }
- }
- else
- {
- returnValue = SUCCESSFUL;
- }
- }
- else
- {
- // User cancelled installation.
- returnValue = CANCELLED;
- }
- }
- catch (UserDataException uude)
- {
- System.err.println(LINE_SEPARATOR+uude.getLocalizedMessage()+
- LINE_SEPARATOR);
- returnValue = USER_DATA_ERROR;
- }
- return returnValue;
- }
-
- /**
- * Creates a UserData based in the arguments provided. It asks
- * user for additional information if what is provided in the arguments is not
- * enough.
- * @param args the arguments provided in the command line.
- * @param installStatus the current install status.
- * @return the UserData object with what the user wants to uninstall
- * and null if the user cancels the uninstallation.
- * @throws UserDataException if there is an error parsing the data
- * in the arguments.
- */
- private UninstallUserData getUserData(String[] args,
- CurrentInstallStatus installStatus) throws UserDataException
- {
- UninstallUserData userData = new UninstallUserData();
-
- boolean silentUninstall;
- boolean isCancelled = false;
-
- /* Step 1: validate the arguments
- */
- validateArguments(userData, args);
-
- silentUninstall = isSilent(args);
-
-
- /* Step 2: If this is not a silent install ask for confirmation to delete
- * the different parts of the installation
- */
- Set<String> outsideDbs = getOutsideDbs(installStatus);
- Set<String> outsideLogs = getOutsideLogs(installStatus);
-
- if (silentUninstall)
- {
- userData.setRemoveBackups(true);
- userData.setRemoveConfigurationAndSchema(true);
- userData.setRemoveDatabases(true);
- userData.setRemoveLDIFs(true);
- userData.setRemoveLibrariesAndTools(true);
- userData.setRemoveLogs(true);
-
- userData.setExternalDbsToRemove(outsideDbs);
- userData.setExternalLogsToRemove(outsideLogs);
- }
- else
- {
- isCancelled = askWhatToDelete(userData, outsideDbs, outsideLogs);
- }
-
- /*
- * Step 3: check if server is running. Depending if it is running and the
- * OS we are running, ask for authentication information.
- */
- if (!isCancelled)
- {
- isCancelled = askConfirmationToStop(userData, installStatus,
- silentUninstall);
- }
-
- if (isCancelled)
- {
- userData = null;
- }
-
- return userData;
- }
-
- /**
- * Interactively prompts (on standard output) the user to provide a string
- * value. Any non-empty string will be allowed (the empty string will
- * indicate that the default should be used). The method will display the
- * message until the user provides one of the values in the validValues
- * parameter.
- *
- * @param prompt The prompt to present to the user.
- * @param defaultValue The default value returned if the user clicks enter.
- * @param validValues The valid values that can be accepted as user input.
- *
- * @return The string value read from the user.
- */
- private String promptConfirm(String prompt, String defaultValue,
- String[] validValues)
- {
- System.out.println();
-
- boolean isValid = false;
- String response = null;
- while (!isValid)
- {
- String msg = getMsg("cli-uninstall-confirm-prompt",
- new String[] {prompt, defaultValue});
-
- System.out.print(msg);
- System.out.flush();
-
- response = readLine();
- if (response.equals(""))
- {
- response = defaultValue;
- }
- for (int i=0; i<validValues.length && !isValid; i++)
- {
- isValid = validValues[i].equalsIgnoreCase(response);
- }
- }
- return response;
- }
-
- /**
- * Reads a line of text from standard input.
- *
- * @return The line of text read from standard input, or <CODE>null</CODE>
- * if the end of the stream is reached or an error occurs while
- * attempting to read the response.
- */
- private String readLine()
- {
- try
- {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
-
- while (true)
- {
- int b = System.in.read();
- if ((b < 0) || (b == '\n'))
- {
- break;
- }
- else if (b == '\r')
- {
- int b2 = System.in.read();
- if (b2 == '\n')
- {
- break;
- }
- else
- {
- baos.write(b);
- baos.write(b2);
- }
- }
- else
- {
- baos.write(b);
- }
- }
-
- return new String(baos.toByteArray(), "UTF-8");
- }
- catch (Exception e)
- {
- System.err.println(getMsg("cli-uninstall-error-reading-stdin"));
-
- return null;
- }
- }
-
- /**
- * Returns a Set of relative paths containing the db paths outside the
- * installation.
- * @param installStatus the Current Install Status object.
- * @return a Set of relative paths containing the db paths outside the
- * installation.
- */
- private Set<String> getOutsideDbs(CurrentInstallStatus installStatus)
- {
- return Utils.getOutsideDbs(installStatus);
- }
-
- /**
- * Returns a Set of relative paths containing the log paths outside the
- * installation.
- * @param installStatus the Current Install Status object.
- * @return a Set of relative paths containing the log paths outside the
- * installation.
- */
- private Set<String> getOutsideLogs(CurrentInstallStatus installStatus)
- {
- return Utils.getOutsideLogs(installStatus);
- }
-
- /**
- * Commodity method used to ask the user to confirm the deletion of certain
- * parts of the server. It updates the provided UserData object
- * accordingly. Returns <CODE>true</CODE> if the user cancels and <CODE>
- * false</CODE> otherwise.
- * @param userData the UserData object to be updated.
- * @param outsideDbs the set of relative paths of databases located outside
- * the installation path of the server.
- * @param outsideLogs the set of relative paths of log files located outside
- * the installation path of the server.
- * @return <CODE>true</CODE> if the user cancels and <CODE>false</CODE>
- * otherwise.
- */
- private boolean askWhatToDelete(UninstallUserData userData,
- Set<String> outsideDbs, Set<String> outsideLogs)
- {
- boolean cancelled = false;
-
- String answer = promptConfirm(getMsg("cli-uninstall-what-to-delete"),
- "1", new String[] {"1", "2", "3"});
- if ("3".equals(answer))
- {
- cancelled = true;
- }
- else if ("1".equals(answer))
- {
- userData.setRemoveBackups(true);
- userData.setRemoveConfigurationAndSchema(true);
- userData.setRemoveDatabases(true);
- userData.setRemoveLDIFs(true);
- userData.setRemoveLibrariesAndTools(true);
- userData.setRemoveLogs(true);
-
- userData.setExternalDbsToRemove(outsideDbs);
- userData.setExternalLogsToRemove(outsideLogs);
- }
- else
- {
- boolean somethingSelected = false;
- while (!somethingSelected)
- {
-// Ask for confirmation for the different items
- String[] keys = {
- "cli-uninstall-confirm-libraries-binaries",
- "cli-uninstall-confirm-databases",
- "cli-uninstall-confirm-logs",
- "cli-uninstall-confirm-configuration-schema",
- "cli-uninstall-confirm-backups",
- "cli-uninstall-confirm-ldifs",
- "cli-uninstall-confirm-outsidedbs",
- "cli-uninstall-confirm-outsidelogs"
- };
-
- String[] validValues = {
- getMsg("cli-uninstall-yes-long"), getMsg("cli-uninstall-no-long"),
- getMsg("cli-uninstall-yes-short"), getMsg("cli-uninstall-no-short")
- };
- boolean[] answers = new boolean[keys.length];
- for (int i=0; i<keys.length; i++)
- {
- boolean ignore = ((i == 6) && (outsideDbs.size() == 0)) ||
- ((i == 7) && (outsideLogs.size() == 0));
- if (!ignore)
- {
- String msg;
- if (i == 6)
- {
- String[] arg = {Utils.getStringFromCollection(outsideDbs,
- LINE_SEPARATOR)};
- msg = getMsg(keys[i], arg);
- }
- else if (i == 7)
- {
- String[] arg = {Utils.getStringFromCollection(outsideLogs,
- LINE_SEPARATOR)};
- msg = getMsg(keys[i], arg);
- }
- else
- {
- msg = getMsg(keys[i]);
- }
- answer = promptConfirm(msg, getMsg("cli-uninstall-yes-long"),
- validValues);
-
- answers[i] =
- getMsg("cli-uninstall-yes-long").equalsIgnoreCase(answer) ||
- getMsg("cli-uninstall-yes-short").equalsIgnoreCase(answer);
- }
- else
- {
- answers[i] = false;
- }
- }
-
- for (int i=0; i<answers.length; i++)
- {
- switch (i)
- {
- case 0:
- userData.setRemoveLibrariesAndTools(answers[i]);
- break;
-
- case 1:
- userData.setRemoveDatabases(answers[i]);
- break;
-
- case 2:
- userData.setRemoveLogs(answers[i]);
- break;
-
- case 3:
- userData.setRemoveConfigurationAndSchema(answers[i]);
- break;
-
- case 4:
- userData.setRemoveBackups(answers[i]);
- break;
-
- case 5:
- userData.setRemoveLDIFs(answers[i]);
- break;
-
- case 6:
- if (answers[i])
- {
- userData.setExternalDbsToRemove(outsideDbs);
- }
- break;
-
- case 7:
- if (answers[i])
- {
- userData.setExternalLogsToRemove(outsideLogs);
- }
- break;
- }
- }
- if ((userData.getExternalDbsToRemove().size() == 0) &&
- (userData.getExternalLogsToRemove().size() == 0) &&
- !userData.getRemoveLibrariesAndTools() &&
- !userData.getRemoveDatabases() &&
- !userData.getRemoveConfigurationAndSchema() &&
- !userData.getRemoveBackups() &&
- !userData.getRemoveLDIFs() &&
- !userData.getRemoveLogs())
- {
- somethingSelected = false;
- System.out.println(LINE_SEPARATOR+
- getMsg("cli-uninstall-nothing-to-be-uninstalled"));
- }
- else
- {
- somethingSelected = true;
- }
- }
- }
-
- return cancelled;
- }
-
- /**
- * Commodity method used to ask the user (when necessary) if the server must
- * be stopped or not. If required it also asks the user authentication to
- * be able to shut down the server in Windows.
- * @param userData the UserData object to be updated with the
- * authentication of the user.
- * @param installStatus the CurrentInstallStatus object.
- * @param silentUninstall boolean telling whether this is a silent uninstall
- * or not.
- * @return <CODE>true</CODE> if the user wants to continue with uninstall and
- * <CODE>false</CODE> otherwise.
- * @throws UserDataException if there is a problem with the data
- * provided by the user (in the particular case where we are on silent
- * uninstall and some data is missing or not valid).
- */
- private boolean askConfirmationToStop(UserData userData,
- CurrentInstallStatus installStatus, boolean silentUninstall)
- throws UserDataException
- {
- boolean cancelled = false;
-
- if (CurrentInstallStatus.isServerRunning())
- {
- if (!silentUninstall)
- {
- /* Ask for confirmation to stop server */
- cancelled = !confirmToStopServer();
- }
-
- if (!cancelled)
- {
- /* During all the confirmations, the server might be stopped. */
- userData.setStopServer(CurrentInstallStatus.isServerRunning());
- }
- }
- else
- {
- userData.setStopServer(false);
- if (!silentUninstall)
- {
- /* Ask for confirmation to delete files */
- cancelled = !confirmDeleteFiles();
- }
- }
- return cancelled;
- }
-
-
- /**
- * Returns <CODE>true</CODE> if this is a silent uninstall and
- * <CODE>false</CODE> otherwise.
- * @param args the arguments passed in the command line.
- * @return <CODE>true</CODE> if this is a silent uninstall and
- * <CODE>false</CODE> otherwise.
- */
- private boolean isSilent(String[] args)
- {
- boolean isSilent = false;
- for (int i=0; i<args.length && !isSilent; i++)
- {
- if (args[i].equalsIgnoreCase("--silentUninstall") ||
- args[i].equalsIgnoreCase("-s"))
- {
- isSilent = true;
- }
- }
- return isSilent;
- }
-
- /**
- * Commodity method used to validate the arguments provided by the user in
- * the command line and updating the UserData object accordingly.
- * @param userData the UserData object to be updated.
- * @param args the arguments passed in the command line.
- * @throws UserDataException if there is an error with the data
- * provided by the user.
- */
- private void validateArguments(UserData userData,
- String[] args) throws UserDataException
- {
- ArrayList<String> errors = new ArrayList<String>();
-
- for (int i=0; i<args.length; i++)
- {
- if (args[i].equalsIgnoreCase("--cli") ||
- args[i].equalsIgnoreCase("-H") ||
- args[i].equalsIgnoreCase("--help") ||
- args[i].equalsIgnoreCase("--silentUninstall") ||
- args[i].equalsIgnoreCase("-s"))
- {
- // Ignore
- }
- else
- {
- String[] arg = {args[i]};
- errors.add(getMsg("cli-uninstall-unknown-argument", arg));
- }
- }
-
- if (errors.size() > 0)
- {
- String msg = Utils.getStringFromCollection(errors,
- LINE_SEPARATOR+LINE_SEPARATOR);
- throw new UserDataException(null, msg);
- }
- }
-
- /**
- * Ask for confirmation to stop server.
- * @return <CODE>true</CODE> if the user wants to continue and stop the
- * server. <CODE>false</CODE> otherwise.
- */
- private boolean confirmToStopServer()
- {
- boolean confirm = true;
- String[] validValues = {
- getMsg("cli-uninstall-yes-short"),
- getMsg("cli-uninstall-no-short"),
- getMsg("cli-uninstall-yes-long"),
- getMsg("cli-uninstall-no-long")
- };
- String answer = promptConfirm(
- getMsg("cli-uninstall-confirm-stop"),
- getMsg("cli-uninstall-yes-long"), validValues);
-
- if (getMsg("cli-uninstall-no-short").equalsIgnoreCase(answer) ||
- getMsg("cli-uninstall-no-long").equalsIgnoreCase(answer))
- {
- confirm = false;
- }
- return confirm;
- }
-
- /**
- * Ask for confirmation to delete files.
- * @return <CODE>true</CODE> if the user wants to continue and delete the
- * files. <CODE>false</CODE> otherwise.
- */
- private boolean confirmDeleteFiles()
- {
- boolean confirm = true;
- String[] validValues = {
- getMsg("cli-uninstall-yes-short"),
- getMsg("cli-uninstall-no-short"),
- getMsg("cli-uninstall-yes-long"),
- getMsg("cli-uninstall-no-long")
- };
- String answer = promptConfirm(
- getMsg("cli-uninstall-confirm-delete-files"),
- getMsg("cli-uninstall-yes-long"), validValues);
-
- if (getMsg("cli-uninstall-no-short").equalsIgnoreCase(answer) ||
- getMsg("cli-uninstall-no-long").equalsIgnoreCase(answer))
- {
- confirm = false;
- }
- return confirm;
- }
-
- /**
- * The following three methods are just commodity methods to get localized
- * messages.
- * @param key String key
- * @return String message
- */
- private static String getMsg(String key)
- {
- return org.opends.server.util.StaticUtils.wrapText(getI18n().getMsg(key),
- Utils.getCommandLineMaxLineWidth());
- }
-
- /**
- * The following three methods are just commodity methods to get localized
- * messages.
- * @param key String key
- * @param args String[] args
- * @return String message
- */
- private static String getMsg(String key, String[] args)
- {
- return org.opends.server.util.StaticUtils.wrapText(
- getI18n().getMsg(key, args), Utils.getCommandLineMaxLineWidth());
- }
-
- private static ResourceProvider getI18n()
- {
- return ResourceProvider.getInstance();
- }
-}
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/uninstaller/UninstallCliHelper.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/uninstaller/UninstallCliHelper.java
new file mode 100644
index 0000000..98dabf5
--- /dev/null
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/uninstaller/UninstallCliHelper.java
@@ -0,0 +1,408 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE
+ * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
+ * add the following below this CDDL HEADER, with the fields enclosed
+ * by brackets "[]" replaced with your own identifying information:
+ * Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ * Portions Copyright 2006-2007 Sun Microsystems, Inc.
+ */
+
+package org.opends.quicksetup.uninstaller;
+
+
+import org.opends.quicksetup.*;
+import org.opends.quicksetup.util.Utils;
+
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * The class used to provide some CLI interface in the uninstall.
+ *
+ * This class basically is in charge of parsing the data provided by the user
+ * in the command line and displaying messages asking the user for information.
+ *
+ * Once the user has provided all the required information it calls Uninstaller
+ * and launches it.
+ *
+ */
+class UninstallCliHelper extends CliApplicationHelper {
+
+ static private String FORMAT_KEY = "cli-uninstall-confirm-prompt";
+
+ /**
+ * Creates a UserData based in the arguments provided. It asks
+ * user for additional information if what is provided in the arguments is not
+ * enough.
+ * @param args the arguments provided in the command line.
+ * @param installStatus the current install status.
+ * @return the UserData object with what the user wants to uninstall
+ * and null if the user cancels the uninstallation.
+ * @throws UserDataException if there is an error parsing the data
+ * in the arguments.
+ */
+ public UninstallUserData createUserData(String[] args,
+ CurrentInstallStatus installStatus) throws UserDataException
+ {
+ UninstallUserData userData = new UninstallUserData();
+
+ boolean silentUninstall;
+ boolean isCancelled = false;
+
+ /* Step 1: validate the arguments
+ */
+ Set<String> validArgs = new HashSet<String>();
+ validArgs.add("--cli");
+ validArgs.add("-H");
+ validArgs.add("--help");
+ validArgs.add("--silentUninstall");
+ validArgs.add("-s");
+ validateArguments(userData, args, validArgs);
+
+ silentUninstall = isSilent(args);
+
+
+ /* Step 2: If this is not a silent install ask for confirmation to delete
+ * the different parts of the installation
+ */
+ Set<String> outsideDbs = getOutsideDbs(installStatus);
+ Set<String> outsideLogs = getOutsideLogs(installStatus);
+
+ if (silentUninstall)
+ {
+ userData.setRemoveBackups(true);
+ userData.setRemoveConfigurationAndSchema(true);
+ userData.setRemoveDatabases(true);
+ userData.setRemoveLDIFs(true);
+ userData.setRemoveLibrariesAndTools(true);
+ userData.setRemoveLogs(true);
+
+ userData.setExternalDbsToRemove(outsideDbs);
+ userData.setExternalLogsToRemove(outsideLogs);
+ }
+ else
+ {
+ isCancelled = askWhatToDelete(userData, outsideDbs, outsideLogs);
+ }
+
+ /*
+ * Step 3: check if server is running. Depending if it is running and the
+ * OS we are running, ask for authentication information.
+ */
+ if (!isCancelled)
+ {
+ isCancelled = askConfirmationToStop(userData, silentUninstall);
+ }
+
+ if (isCancelled)
+ {
+ userData = null;
+ }
+
+ return userData;
+ }
+
+ /**
+ * Returns a Set of relative paths containing the db paths outside the
+ * installation.
+ * @param installStatus the Current Install Status object.
+ * @return a Set of relative paths containing the db paths outside the
+ * installation.
+ */
+ private Set<String> getOutsideDbs(CurrentInstallStatus installStatus)
+ {
+ return Utils.getOutsideDbs(installStatus);
+ }
+
+ /**
+ * Returns a Set of relative paths containing the log paths outside the
+ * installation.
+ * @param installStatus the Current Install Status object.
+ * @return a Set of relative paths containing the log paths outside the
+ * installation.
+ */
+ private Set<String> getOutsideLogs(CurrentInstallStatus installStatus)
+ {
+ return Utils.getOutsideLogs(installStatus);
+ }
+
+ /**
+ * Commodity method used to ask the user to confirm the deletion of certain
+ * parts of the server. It updates the provided UserData object
+ * accordingly. Returns <CODE>true</CODE> if the user cancels and <CODE>
+ * false</CODE> otherwise.
+ * @param userData the UserData object to be updated.
+ * @param outsideDbs the set of relative paths of databases located outside
+ * the installation path of the server.
+ * @param outsideLogs the set of relative paths of log files located outside
+ * the installation path of the server.
+ * @return <CODE>true</CODE> if the user cancels and <CODE>false</CODE>
+ * otherwise.
+ */
+ private boolean askWhatToDelete(UninstallUserData userData,
+ Set<String> outsideDbs, Set<String> outsideLogs)
+ {
+ boolean cancelled = false;
+
+ String answer = promptConfirm(FORMAT_KEY,
+ getMsg("cli-uninstall-what-to-delete"),
+ "1", new String[] {"1", "2", "3"});
+ if ("3".equals(answer))
+ {
+ cancelled = true;
+ }
+ else if ("1".equals(answer))
+ {
+ userData.setRemoveBackups(true);
+ userData.setRemoveConfigurationAndSchema(true);
+ userData.setRemoveDatabases(true);
+ userData.setRemoveLDIFs(true);
+ userData.setRemoveLibrariesAndTools(true);
+ userData.setRemoveLogs(true);
+
+ userData.setExternalDbsToRemove(outsideDbs);
+ userData.setExternalLogsToRemove(outsideLogs);
+ }
+ else
+ {
+ boolean somethingSelected = false;
+ while (!somethingSelected)
+ {
+// Ask for confirmation for the different items
+ String[] keys = {
+ "cli-uninstall-confirm-libraries-binaries",
+ "cli-uninstall-confirm-databases",
+ "cli-uninstall-confirm-logs",
+ "cli-uninstall-confirm-configuration-schema",
+ "cli-uninstall-confirm-backups",
+ "cli-uninstall-confirm-ldifs",
+ "cli-uninstall-confirm-outsidedbs",
+ "cli-uninstall-confirm-outsidelogs"
+ };
+
+ String[] validValues = {
+ getMsg("cli-uninstall-yes-long"), getMsg("cli-uninstall-no-long"),
+ getMsg("cli-uninstall-yes-short"), getMsg("cli-uninstall-no-short")
+ };
+ boolean[] answers = new boolean[keys.length];
+ for (int i=0; i<keys.length; i++)
+ {
+ boolean ignore = ((i == 6) && (outsideDbs.size() == 0)) ||
+ ((i == 7) && (outsideLogs.size() == 0));
+ if (!ignore)
+ {
+ String msg;
+ if (i == 6)
+ {
+ String[] arg = {Utils.getStringFromCollection(outsideDbs,
+ QuickSetupCli.LINE_SEPARATOR)};
+ msg = getMsg(keys[i], arg);
+ }
+ else if (i == 7)
+ {
+ String[] arg = {Utils.getStringFromCollection(outsideLogs,
+ QuickSetupCli.LINE_SEPARATOR)};
+ msg = getMsg(keys[i], arg);
+ }
+ else
+ {
+ msg = getMsg(keys[i]);
+ }
+ answer = promptConfirm(FORMAT_KEY,
+ msg, getMsg("cli-uninstall-yes-long"),
+ validValues);
+
+ answers[i] =
+ getMsg("cli-uninstall-yes-long").equalsIgnoreCase(answer) ||
+ getMsg("cli-uninstall-yes-short").equalsIgnoreCase(answer);
+ }
+ else
+ {
+ answers[i] = false;
+ }
+ }
+
+ for (int i=0; i<answers.length; i++)
+ {
+ switch (i)
+ {
+ case 0:
+ userData.setRemoveLibrariesAndTools(answers[i]);
+ break;
+
+ case 1:
+ userData.setRemoveDatabases(answers[i]);
+ break;
+
+ case 2:
+ userData.setRemoveLogs(answers[i]);
+ break;
+
+ case 3:
+ userData.setRemoveConfigurationAndSchema(answers[i]);
+ break;
+
+ case 4:
+ userData.setRemoveBackups(answers[i]);
+ break;
+
+ case 5:
+ userData.setRemoveLDIFs(answers[i]);
+ break;
+
+ case 6:
+ if (answers[i])
+ {
+ userData.setExternalDbsToRemove(outsideDbs);
+ }
+ break;
+
+ case 7:
+ if (answers[i])
+ {
+ userData.setExternalLogsToRemove(outsideLogs);
+ }
+ break;
+ }
+ }
+ if ((userData.getExternalDbsToRemove().size() == 0) &&
+ (userData.getExternalLogsToRemove().size() == 0) &&
+ !userData.getRemoveLibrariesAndTools() &&
+ !userData.getRemoveDatabases() &&
+ !userData.getRemoveConfigurationAndSchema() &&
+ !userData.getRemoveBackups() &&
+ !userData.getRemoveLDIFs() &&
+ !userData.getRemoveLogs())
+ {
+ somethingSelected = false;
+ System.out.println(QuickSetupCli.LINE_SEPARATOR+
+ getMsg("cli-uninstall-nothing-to-be-uninstalled"));
+ }
+ else
+ {
+ somethingSelected = true;
+ }
+ }
+ }
+
+ return cancelled;
+ }
+
+ /**
+ * Commodity method used to ask the user (when necessary) if the server must
+ * be stopped or not. If required it also asks the user authentication to
+ * be able to shut down the server in Windows.
+ * @param userData the UserData object to be updated with the
+ * authentication of the user.
+ * @param silentUninstall boolean telling whether this is a silent uninstall
+ * or not.
+ * @return <CODE>true</CODE> if the user wants to continue with uninstall and
+ * <CODE>false</CODE> otherwise.
+ * @throws UserDataException if there is a problem with the data
+ * provided by the user (in the particular case where we are on silent
+ * uninstall and some data is missing or not valid).
+ */
+ private boolean askConfirmationToStop(UserData userData,
+ boolean silentUninstall)
+ throws UserDataException
+ {
+ boolean cancelled = false;
+
+ if (CurrentInstallStatus.isServerRunning())
+ {
+ if (!silentUninstall)
+ {
+ /* Ask for confirmation to stop server */
+ cancelled = !confirmToStopServer();
+ }
+
+ if (!cancelled)
+ {
+ /* During all the confirmations, the server might be stopped. */
+ userData.setStopServer(CurrentInstallStatus.isServerRunning());
+ }
+ }
+ else
+ {
+ userData.setStopServer(false);
+ if (!silentUninstall)
+ {
+ /* Ask for confirmation to delete files */
+ cancelled = !confirmDeleteFiles();
+ }
+ }
+ return cancelled;
+ }
+
+
+ /**
+ * Ask for confirmation to stop server.
+ * @return <CODE>true</CODE> if the user wants to continue and stop the
+ * server. <CODE>false</CODE> otherwise.
+ */
+ private boolean confirmToStopServer()
+ {
+ boolean confirm = true;
+ String[] validValues = {
+ getMsg("cli-uninstall-yes-short"),
+ getMsg("cli-uninstall-no-short"),
+ getMsg("cli-uninstall-yes-long"),
+ getMsg("cli-uninstall-no-long")
+ };
+ String answer = promptConfirm(FORMAT_KEY,
+ getMsg("cli-uninstall-confirm-stop"),
+ getMsg("cli-uninstall-yes-long"), validValues);
+
+ if (getMsg("cli-uninstall-no-short").equalsIgnoreCase(answer) ||
+ getMsg("cli-uninstall-no-long").equalsIgnoreCase(answer))
+ {
+ confirm = false;
+ }
+ return confirm;
+ }
+
+ /**
+ * Ask for confirmation to delete files.
+ * @return <CODE>true</CODE> if the user wants to continue and delete the
+ * files. <CODE>false</CODE> otherwise.
+ */
+ private boolean confirmDeleteFiles()
+ {
+ boolean confirm = true;
+ String[] validValues = {
+ getMsg("cli-uninstall-yes-short"),
+ getMsg("cli-uninstall-no-short"),
+ getMsg("cli-uninstall-yes-long"),
+ getMsg("cli-uninstall-no-long")
+ };
+ String answer = promptConfirm(FORMAT_KEY,
+ getMsg("cli-uninstall-confirm-delete-files"),
+ getMsg("cli-uninstall-yes-long"), validValues);
+
+ if (getMsg("cli-uninstall-no-short").equalsIgnoreCase(answer) ||
+ getMsg("cli-uninstall-no-long").equalsIgnoreCase(answer))
+ {
+ confirm = false;
+ }
+ return confirm;
+ }
+
+}
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/uninstaller/UninstallLauncher.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/uninstaller/UninstallLauncher.java
index 1f21e61..0fb0adc 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/uninstaller/UninstallLauncher.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/uninstaller/UninstallLauncher.java
@@ -27,11 +27,8 @@
package org.opends.quicksetup.uninstaller;
-import java.io.ByteArrayOutputStream;
-import java.io.PrintStream;
-
-import org.opends.quicksetup.SplashScreen;
-import org.opends.quicksetup.i18n.ResourceProvider;
+import org.opends.quicksetup.CliApplication;
+import org.opends.quicksetup.Launcher;
import org.opends.quicksetup.util.Utils;
/**
@@ -39,198 +36,77 @@
* of the Directory Server. It just checks the command line arguments and the
* environment and determines whether the graphical or the command line
* based uninstall much be launched.
- *
*/
-public class UninstallLauncher
-{
+public class UninstallLauncher extends Launcher {
+
/**
- * The main method which is called by the uninstall command lines.
+ * The main method which is called by the setup command lines.
+ *
+ * @param args the arguments passed by the command lines. In the case
+ * we want to launch the cli setup they are basically the arguments that we
+ * will pass to the org.opends.server.tools.InstallDS class.
+ */
+ public static void main(String[] args) {
+ new UninstallLauncher(args).launch();
+ }
+
+ /**
+ * Creates a launcher.
+ *
* @param args the arguments passed by the command lines.
*/
- public static void main(String[] args)
- {
- boolean printUsage = false;
- boolean useCli = false;
- if ((args != null) && (args.length > 0))
- {
- for (int i = 0; i < args.length; i++)
- {
- if (args[i].equalsIgnoreCase("--cli"))
- {
- useCli = true;
- }
- else if (args[i].equalsIgnoreCase("-H") ||
- args[i].equalsIgnoreCase("--help"))
- {
- printUsage = true;
- }
- }
-
- if (!useCli)
- {
- if (args.length > 0)
- {
- printUsage = true;
- }
- }
- }
- if (printUsage)
- {
- printUsage();
- System.exit(1);
- } else if (useCli)
- {
- int exitCode = launchCliUninstall(args);
- if (exitCode != 0)
- {
- System.exit(exitCode);
- }
- } else
- {
- System.setProperty("org.opends.quicksetup.uninstall", "true");
- System.setProperty("org.opends.quicksetup.Application.class",
- "org.opends.quicksetup.uninstaller.Uninstaller");
- int exitCode = launchGuiUninstall(args);
- if (exitCode != 0)
- {
- System.err.println(getMsg("uninstall-launcher-gui-launched-failed"));
- exitCode = launchCliUninstall(args);
- if (exitCode != 0)
- {
- System.exit(exitCode);
- }
- }
- }
+ public UninstallLauncher(String[] args) {
+ super(args);
}
/**
- * Launches the command line based uninstall.
- * @param args the arguments passed
- * @return 0 if everything worked fine, and an error code if something wrong
- * occurred.
+ * {@inheritDoc}
*/
- private static int launchCliUninstall(String[] args)
- {
- System.setProperty("org.opends.quicksetup.cli", "true");
-
- UninstallCli cli = new UninstallCli(args);
- int returnValue = cli.run();
- if (returnValue == UninstallCli.USER_DATA_ERROR)
- {
- printUsage();
- }
-// Add an extra space systematically
- System.out.println();
-
- return returnValue;
+ protected void guiLaunchFailed() {
+ System.err.println(getMsg("uninstall-launcher-gui-launched-failed"));
}
/**
- * Launches the graphical uninstall. The graphical uninstall is launched in a
- * different thread that the main thread because if we have a problem with the
- * graphical system (for instance the DISPLAY environment variable is not
- * correctly set) the native libraries will call exit. However if we launch
- * this from another thread, the thread will just be killed.
- *
- * This code also assumes that if the call to SplashWindow.main worked (and
- * the splash screen was displayed) we will never get out of it (we will call
- * a System.exit() when we close the graphical uninstall dialog).
- *
- * @params String[] args the arguments used to call the SplashWindow main
- * method
- * @return 0 if everything worked fine, or 1 if we could not display properly
- * the SplashWindow.
+ * {@inheritDoc}
*/
- private static int launchGuiUninstall(final String[] args)
- {
+ protected void willLaunchGui() {
System.out.println(getMsg("uninstall-launcher-launching-gui"));
- final int[] returnValue =
- { -1 };
- Thread t = new Thread(new Runnable()
- {
- public void run()
- {
- // Setup MacOSX native menu bar before AWT is loaded.
- Utils.setMacOSXMenuBar(getMsg("frame-uninstall-title"));
- SplashScreen.main(args);
- returnValue[0] = 0;
- }
- });
- /*
- * This is done to avoid displaying the stack that might occur if there are
- * problems with the display environment.
- */
- PrintStream printStream = System.err;
- System.setErr(new EmptyPrintStream());
- t.start();
- try
- {
- t.join();
- }
- catch (InterruptedException ie)
- {
- /* An error occurred, so the return value will be -1. We got nothing to
- do with this exception. */
- }
- System.setErr(printStream);
- return returnValue[0];
+ System.setProperty("org.opends.quicksetup.uninstall", "true");
+ System.setProperty("org.opends.quicksetup.Application.class",
+ "org.opends.quicksetup.uninstaller.Uninstaller");
}
- private static void printUsage()
- {
+ /**
+ * {@inheritDoc}
+ */
+ protected CliApplication createCliApplication() {
+ return new Uninstaller();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ protected String getFrameTitle() {
+ return getMsg("frame-uninstall-title");
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ protected void printUsage() {
String arg;
- if (Utils.isWindows())
- {
+ if (Utils.isWindows()) {
arg = Utils.getWindowsUninstallFileName();
- } else
- {
+ } else {
arg = Utils.getUnixUninstallFileName();
}
+ String msg = getMsg("uninstall-launcher-usage");
/*
* This is required because the usage message contains '{' characters that
* mess up the MessageFormat.format method.
*/
- String msg = getMsg("uninstall-launcher-usage");
msg = msg.replace("{0}", arg);
- System.err.println(msg);
+ printUsage(msg);
}
- /**
- * The following three methods are just commodity methods to get localized
- * messages.
- */
- private static String getMsg(String key)
- {
- return org.opends.server.util.StaticUtils.wrapText(getI18n().getMsg(key),
- Utils.getCommandLineMaxLineWidth());
- }
-
- private static ResourceProvider getI18n()
- {
- return ResourceProvider.getInstance();
- }
-
- /**
- * This class is used to avoid displaying the error message related to display
- * problems that we might have when trying to display the SplashWindow.
- *
- */
- static class EmptyPrintStream extends PrintStream
- {
- /**
- * Default constructor.
- *
- */
- public EmptyPrintStream()
- {
- super(new ByteArrayOutputStream(), true);
- }
-
- /**
- * {@inheritDoc}
- */
- public void println(String msg)
- {
- }
- }
}
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/uninstaller/Uninstaller.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/uninstaller/Uninstaller.java
index 8e70e59..12ff3a5 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/uninstaller/Uninstaller.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/uninstaller/Uninstaller.java
@@ -37,7 +37,7 @@
/**
* This class is in charge of performing the uninstallation of Open DS.
*/
-public class Uninstaller extends Application {
+public class Uninstaller extends Application implements CliApplication {
private ProgressStep status = UninstallProgressStep.NOT_STARTED;
@@ -51,6 +51,8 @@
private Boolean isWindowsServiceEnabled;
+ private UninstallCliHelper cliHelper = new UninstallCliHelper();
+
/**
* {@inheritDoc}
*/
@@ -61,6 +63,15 @@
/**
* {@inheritDoc}
*/
+ public UserData createUserData(String[] args, CurrentInstallStatus status)
+ throws UserDataException
+ {
+ return cliHelper.createUserData(args, status);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
protected String getInstallationPath() {
return null;
}
--
Gitblit v1.10.0