From 7ae21709bb6dbdc092052acb5098bfa5cb316d9e Mon Sep 17 00:00:00 2001
From: kenneth_suter <kenneth_suter@localhost>
Date: Thu, 29 Mar 2007 15:09:14 +0000
Subject: [PATCH] These refactorings are essential in anticipation of a new quicksetup application for the upgrader feature (issue 598). These changes were reviewed by Josu.
---
opends/src/quicksetup/org/opends/quicksetup/uninstaller/Uninstaller.java | 490 +++++++++---------------------------------------------
1 files changed, 81 insertions(+), 409 deletions(-)
diff --git a/opends/src/quicksetup/org/opends/quicksetup/uninstaller/Uninstaller.java b/opends/src/quicksetup/org/opends/quicksetup/uninstaller/Uninstaller.java
index ba76a6e..8e70e59 100644
--- a/opends/src/quicksetup/org/opends/quicksetup/uninstaller/Uninstaller.java
+++ b/opends/src/quicksetup/org/opends/quicksetup/uninstaller/Uninstaller.java
@@ -27,120 +27,51 @@
package org.opends.quicksetup.uninstaller;
-import java.io.BufferedReader;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileFilter;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.PrintStream;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-
-import org.opends.quicksetup.CurrentInstallStatus;
-import org.opends.quicksetup.event.UninstallProgressUpdateEvent;
-import org.opends.quicksetup.event.UninstallProgressUpdateListener;
-import org.opends.quicksetup.i18n.ResourceProvider;
-import org.opends.quicksetup.util.ProgressMessageFormatter;
+import org.opends.quicksetup.*;
import org.opends.quicksetup.util.Utils;
-
import org.opends.server.tools.ConfigureWindowsService;
+import java.io.*;
+import java.util.*;
+
/**
* This class is in charge of performing the uninstallation of Open DS.
- *
*/
-public class Uninstaller
-{
- private UserUninstallData userData;
- private ProgressMessageFormatter formatter;
- private UninstallProgressStep status;
- private HashMap<UninstallProgressStep, Integer> hmRatio =
- new HashMap<UninstallProgressStep, Integer>();
+public class Uninstaller extends Application {
- private HashMap<UninstallProgressStep, String> hmSummary =
- new HashMap<UninstallProgressStep, String>();
+ private ProgressStep status = UninstallProgressStep.NOT_STARTED;
- private HashSet<UninstallProgressUpdateListener> listeners =
- new HashSet<UninstallProgressUpdateListener>();
+ private HashMap<ProgressStep, Integer> hmRatio =
+ new HashMap<ProgressStep, Integer>();
- private UninstallException ue;
+ private HashMap<ProgressStep, String> hmSummary =
+ new HashMap<ProgressStep, String>();
+
+ private ApplicationException ue;
private Boolean isWindowsServiceEnabled;
/**
- * Uninstaller constructor.
- * @param userData the object containing the information provided by the user
- * in the uninstallation.
- * @param formatter the message formatter to be used to generate the text of
- * the UninstallProgressUpdateEvent.
+ * {@inheritDoc}
*/
- public Uninstaller(UserUninstallData userData,
- ProgressMessageFormatter formatter)
- {
- this.userData = userData;
- this.formatter = formatter;
- initMaps();
- status = UninstallProgressStep.NOT_STARTED;
+ public UserData createUserData() {
+ return new UninstallUserData();
}
/**
- * Start the uninstall process. This method will not block the thread on
- * which is invoked.
+ * {@inheritDoc}
*/
- public void start()
- {
- Thread t = new Thread(new Runnable()
- {
- public void run()
- {
- doUninstall();
- }
- });
- t.start();
+ protected String getInstallationPath() {
+ return null;
}
/**
- * Returns whether the uninstaller has finished or not.
- * @return <CODE>true</CODE> if the install is finished or <CODE>false
- * </CODE> if not.
- */
- public boolean isFinished()
- {
- return getStatus() == UninstallProgressStep.FINISHED_SUCCESSFULLY
- || getStatus() == UninstallProgressStep.FINISHED_WITH_ERROR;
- }
-
- /**
- * Adds a UninstallProgressUpdateListener that will be notified of updates in
- * the uninstall progress.
- * @param l the UninstallProgressUpdateListener to be added.
- */
- public void addProgressUpdateListener(UninstallProgressUpdateListener l)
- {
- listeners.add(l);
- }
-
- /**
- * Removes a UninstallProgressUpdateListener.
- * @param l the UninstallProgressUpdateListener to be removed.
- */
- public void removeProgressUpdateListener(UninstallProgressUpdateListener l)
- {
- listeners.remove(l);
- }
-
- /**
- * Returns the UninstallException that might occur during installation or
+ * Returns the ApplicationException that might occur during installation or
* <CODE>null</CODE> if no exception occurred.
- * @return the UninstallException that might occur during installation or
+ * @return the ApplicationException that might occur during installation or
* <CODE>null</CODE> if no exception occurred.
*/
- public UninstallException getException()
+ public ApplicationException getException()
{
return ue;
}
@@ -169,7 +100,7 @@
String successMsg;
if (Utils.isCli())
{
- if (userData.getRemoveLibrariesAndTools())
+ if (getUninstallUserData().getRemoveLibrariesAndTools())
{
String[] arg = new String[1];
if (Utils.isWindows())
@@ -192,7 +123,7 @@
}
else
{
- if (userData.getRemoveLibrariesAndTools())
+ if (getUninstallUserData().getRemoveLibrariesAndTools())
{
String[] arg = {getLibrariesPath()};
successMsg = getMsg(
@@ -240,14 +171,14 @@
totalTime += hmTime.get(UninstallProgressStep.DELETING_INSTALLATION_FILES);
steps.add(UninstallProgressStep.DELETING_INSTALLATION_FILES);
- if (getUserData().getExternalDbsToRemove().size() > 0)
+ if (getUninstallUserData().getExternalDbsToRemove().size() > 0)
{
totalTime += hmTime.get(
UninstallProgressStep.DELETING_EXTERNAL_DATABASE_FILES);
steps.add(UninstallProgressStep.DELETING_EXTERNAL_DATABASE_FILES);
}
- if (getUserData().getExternalLogsToRemove().size() > 0)
+ if (getUninstallUserData().getExternalLogsToRemove().size() > 0)
{
totalTime += hmTime.get(
UninstallProgressStep.DELETING_EXTERNAL_LOG_FILES);
@@ -270,241 +201,12 @@
}
/**
- * Returns a localized message for a key value. In the properties file we
- * have something of type:
- * key=value
- *
- * @see ResourceProvider.getMsg(String key)
- * @param key the key in the properties file.
- * @return the value associated to the key in the properties file.
- * properties file.
- */
- private String getMsg(String key)
- {
- return getI18n().getMsg(key);
- }
-
- /**
- * Returns a localized message for a key value. In the properties file we
- * have something of type:
- * key=value
- *
- * For instance if we pass as key "mykey" and as arguments {"value1"} and
- * in the properties file we have:
- * mykey=value with argument {0}.
- *
- * This method will return "value with argument value1".
- * @see ResourceProvider.getMsg(String key, String[] args)
- * @param key the key in the properties file.
- * @param args the arguments to be passed to generate the resulting value.
- * @return the value associated to the key in the properties file.
- */
- private String getMsg(String key, String[] args)
- {
- return getI18n().getMsg(key, args);
- }
-
- /**
- * Returns a ResourceProvider instance.
- * @return a ResourceProvider instance.
- */
- private ResourceProvider getI18n()
- {
- return ResourceProvider.getInstance();
- }
-
- /**
- * Returns a localized message for a given properties key and throwable.
- * @param key the key of the message in the properties file.
- * @param t the throwable for which we want to get a message.
- * @return a localized message for a given properties key and throwable.
- */
- private String getThrowableMsg(String key, Throwable t)
- {
- return getThrowableMsg(key, null, t);
- }
-
- /**
- * Returns a localized message for a given properties key and throwable.
- * @param key the key of the message in the properties file.
- * @param args the arguments of the message in the properties file.
- * @param t the throwable for which we want to get a message.
- *
- * @return a localized message for a given properties key and throwable.
- */
- private String getThrowableMsg(String key, String[] args, Throwable t)
- {
- return Utils.getThrowableMsg(getI18n(), key, args, t);
- }
-
- /**
- * Returns the formatted representation of the text that is the summary of the
- * installation process (the one that goes in the UI next to the progress
- * bar).
- * @param text the source text from which we want to get the formatted
- * representation
- * @return the formatted representation of an error for the given text.
- */
- private String getFormattedSummary(String text)
- {
- return formatter.getFormattedSummary(text);
- }
-
- /**
- * Returns the formatted representation of a success message for a given text.
- * @param text the source text from which we want to get the formatted
- * representation
- * @return the formatted representation of an success message for the given
- * text.
- */
- private String getFormattedSuccess(String text)
- {
- return formatter.getFormattedSuccess(text);
- }
-
- /**
- * Returns the formatted representation of an warning for a given text.
- * @param text the source text from which we want to get the formatted
- * representation
- * @return the formatted representation of an warning for the given text.
- */
- private String getFormattedWarning(String text)
- {
- return formatter.getFormattedWarning(text, true);
- }
-
- /**
- * Returns the formatted representation of an error for a given text.
- * @param text the source text from which we want to get the formatted
- * representation
- * @return the formatted representation of an error for the given text.
- */
- private String getFormattedError(String text)
- {
- return formatter.getFormattedError(text, false);
- }
-
- /**
- * Returns the formatted representation of a log error message for a given
- * text.
- * @param text the source text from which we want to get the formatted
- * representation
- * @return the formatted representation of a log error message for the given
- * text.
- */
- private String getFormattedLogError(String text)
- {
- return formatter.getFormattedLogError(text);
- }
-
- /**
- * Returns the formatted representation of a log message for a given text.
- * @param text the source text from which we want to get the formatted
- * representation
- * @return the formatted representation of a log message for the given text.
- */
- private String getFormattedLog(String text)
- {
- return formatter.getFormattedLog(text);
- }
-
- /**
- * Returns the formatted representation of the 'Done' text string.
- * @return the formatted representation of the 'Done' text string.
- */
- private String getFormattedDone()
- {
- return formatter.getFormattedDone();
- }
-
- /**
- * Returns the formatted representation of the argument text to which we add
- * points. For instance if we pass as argument 'Deleting file' the
- * return value will be 'Deleting file .....'.
- * @param text the String to which add points.
- * @return the formatted representation of the '.....' text string.
- */
- private String getFormattedWithPoints(String text)
- {
- return formatter.getFormattedWithPoints(text);
- }
-
- /**
- * Returns the formatted representation of an error message for a given
- * exception.
- * This method applies a margin if the applyMargin parameter is
- * <CODE>true</CODE>.
- * @param ex the exception.
- * @param applyMargin specifies whether we apply a margin or not to the
- * resulting formatted text.
- * @return the formatted representation of an error message for the given
- * exception.
- */
- private String getFormattedError(Exception ex, boolean applyMargin)
- {
- return formatter.getFormattedError(ex, applyMargin);
- }
-
- /**
- * Returns the line break formatted.
- * @return the line break formatted.
- */
- private String getLineBreak()
- {
- return formatter.getLineBreak();
- }
-
- /**
- * Returns the tab formatted.
- * @return the tab formatted.
- */
- private String getTab()
- {
- return formatter.getTab();
- }
-
- /**
- * Returns the task separator formatted.
- * @return the task separator formatted.
- */
- private String getTaskSeparator()
- {
- return formatter.getTaskSeparator();
- }
-
- /**
- * Returns the formatted representation of a progress message for a given
- * text.
- * @param text the source text from which we want to get the formatted
- * representation
- * @return the formatted representation of a progress message for the given
- * text.
- */
- private String getFormattedProgress(String text)
- {
- return formatter.getFormattedProgress(text);
- }
-
- /**
- * Returns the current UninstallProgressStep of the installation process.
- * @return the current UninstallProgressStep of the installation process.
- */
- private UninstallProgressStep getStatus()
- {
- return status;
- }
-
- private UserUninstallData getUserData()
- {
- return userData;
- }
-
- /**
* Actually performs the uninstall in this thread. The thread is blocked.
*
*/
- private void doUninstall()
+ public void run()
{
+ initMaps();
PrintStream origErr = System.err;
PrintStream origOut = System.out;
try
@@ -535,7 +237,7 @@
displaySeparator = true;
}
- Set<String> dbsToDelete = getUserData().getExternalDbsToRemove();
+ Set<String> dbsToDelete = getUninstallUserData().getExternalDbsToRemove();
if (dbsToDelete.size() > 0)
{
status = UninstallProgressStep.DELETING_EXTERNAL_DATABASE_FILES;
@@ -548,7 +250,8 @@
displaySeparator = true;
}
- Set<String> logsToDelete = getUserData().getExternalLogsToRemove();
+ Set<String> logsToDelete =
+ getUninstallUserData().getExternalLogsToRemove();
if (logsToDelete.size() > 0)
{
status = UninstallProgressStep.DELETING_EXTERNAL_LOG_FILES;
@@ -562,6 +265,7 @@
displaySeparator = true;
}
+ UninstallUserData userData = getUninstallUserData();
boolean somethingToDelete = userData.getRemoveBackups() ||
userData.getRemoveConfigurationAndSchema() ||
userData.getRemoveDatabases() ||
@@ -589,7 +293,7 @@
notifyListeners(null);
}
- } catch (UninstallException ex)
+ } catch (ApplicationException ex)
{
ue = ex;
status = UninstallProgressStep.FINISHED_WITH_ERROR;
@@ -598,8 +302,8 @@
}
catch (Throwable t)
{
- ue = new UninstallException(
- UninstallException.Type.BUG,
+ ue = new ApplicationException(
+ ApplicationException.Type.BUG,
getThrowableMsg("bug-msg", t), t);
status = UninstallProgressStep.FINISHED_WITH_ERROR;
String msg = getFormattedError(ue, true);
@@ -613,37 +317,10 @@
}
/**
- * This method notifies the UninstallProgressUpdateListeners that there was an
- * update in the installation progress.
- * @param ratio the integer that specifies which percentage of
- * the whole installation has been completed.
- * @param currentPhaseSummary the localized summary message for the
- * current installation progress in formatted form.
- * @param newLogDetail the new log messages that we have for the
- * installation in formatted form.
+ * {@inheritDoc}
*/
- private void notifyListeners(Integer ratio, String currentPhaseSummary,
- String newLogDetail)
- {
- UninstallProgressUpdateEvent ev =
- new UninstallProgressUpdateEvent(getStatus(), ratio,
- currentPhaseSummary, newLogDetail);
- for (UninstallProgressUpdateListener l : listeners)
- {
- l.progressUpdate(ev);
- }
- }
-
- /**
- * This method is called when a new log message has been received. It will
- * notify the UninstallProgressUpdateListeners of this fact.
- * @param newLogDetail the new log detail.
- */
- private void notifyListeners(String newLogDetail)
- {
- Integer ratio = getRatio(getStatus());
- String currentPhaseSummary = getSummary(getStatus());
- notifyListeners(ratio, currentPhaseSummary, newLogDetail);
+ public ProgressStep getStatus() {
+ return status;
}
/**
@@ -653,9 +330,9 @@
* @return an integer that specifies which percentage of the whole
* uninstallation has been completed.
*/
- private Integer getRatio(UninstallProgressStep status)
+ public Integer getRatio(ProgressStep step)
{
- return hmRatio.get(status);
+ return hmRatio.get(step);
}
/**
@@ -665,16 +342,16 @@
* @return an formatted representation of the summary for the specified
* UninstallProgressStep.
*/
- private String getSummary(UninstallProgressStep status)
+ public String getSummary(ProgressStep step)
{
- return hmSummary.get(status);
+ return hmSummary.get(step);
}
/**
* This methods stops the server.
- * @throws UninstallException if something goes wrong.
+ * @throws ApplicationException if something goes wrong.
*/
- private void stopServer() throws UninstallException
+ private void stopServer() throws ApplicationException
{
notifyListeners(getFormattedProgress(getMsg("progress-stopping")) +
getLineBreak());
@@ -774,8 +451,9 @@
* The return code is not the one expected, assume the server could
* not be stopped.
*/
- throw new UninstallException(UninstallException.Type.STOP_ERROR, msg,
- null);
+ throw new ApplicationException(ApplicationException.Type.STOP_ERROR,
+ msg,
+ null);
}
else
{
@@ -785,12 +463,12 @@
} catch (IOException ioe)
{
- throw new UninstallException(UninstallException.Type.STOP_ERROR,
+ throw new ApplicationException(ApplicationException.Type.STOP_ERROR,
getThrowableMsg("error-stopping-server", ioe), ioe);
}
catch (InterruptedException ie)
{
- throw new UninstallException(UninstallException.Type.BUG,
+ throw new ApplicationException(ApplicationException.Type.BUG,
getThrowableMsg("error-stopping-server", ie), ie);
}
}
@@ -798,10 +476,10 @@
/**
* Deletes the external database files specified in the provided Set.
* @param dbFiles the database directories to be deleted.
- * @throws UninstallException if something goes wrong.
+ * @throws ApplicationException if something goes wrong.
*/
private void deleteExternalDatabaseFiles(Set<String> dbFiles)
- throws UninstallException
+ throws ApplicationException
{
notifyListeners(getFormattedProgress(
getMsg("progress-deleting-external-db-files")) +
@@ -815,10 +493,10 @@
/**
* Deletes the external database files specified in the provided Set.
* @param logFiles the log files to be deleted.
- * @throws UninstallException if something goes wrong.
+ * @throws ApplicationException if something goes wrong.
*/
private void deleteExternalLogFiles(Set<String> logFiles)
- throws UninstallException
+ throws ApplicationException
{
notifyListeners(getFormattedProgress(
getMsg("progress-deleting-external-log-files")) +
@@ -831,10 +509,10 @@
/**
* Deletes the files under the installation path.
- * @throws UninstallException if something goes wrong.
+ * @throws ApplicationException if something goes wrong.
*/
private void deleteInstallationFiles(int minRatio, int maxRatio)
- throws UninstallException
+ throws ApplicationException
{
notifyListeners(getFormattedProgress(
getMsg("progress-deleting-installation-files")) +
@@ -910,26 +588,6 @@
}
/**
- * Returns the path to the binaries.
- * @return the path to the binaries.
- */
- private String getBinariesPath()
- {
- return Utils.getPath(Utils.getInstallPathFromClasspath(),
- Utils.getBinariesRelativePath());
- }
-
- /**
- * Returns the path to the libraries.
- * @return the path to the libraries.
- */
- private String getLibrariesPath()
- {
- return Utils.getPath(Utils.getInstallPathFromClasspath(),
- Utils.getLibrariesRelativePath());
- }
-
- /**
* Returns the path to the quicksetup jar file.
* @return the path to the quicksetup jar file.
*/
@@ -1012,9 +670,9 @@
/**
* Deletes everything below the specified file.
* @param file the path to be deleted.
- * @throws UninstallException if something goes wrong.
+ * @throws ApplicationException if something goes wrong.
*/
- private void deleteRecursively(File file) throws UninstallException
+ private void deleteRecursively(File file) throws ApplicationException
{
deleteRecursively(file, null);
}
@@ -1024,11 +682,10 @@
* @param file the path to be deleted.
* @param filter the filter of the files to know if the file can be deleted
* directly or not.
- * @throws UninstallException if something goes wrong.
+ * @throws ApplicationException if something goes wrong.
*/
-
private void deleteRecursively(File file, FileFilter filter)
- throws UninstallException
+ throws ApplicationException
{
if (file.exists())
{
@@ -1081,9 +738,9 @@
/**
* Deletes the specified file.
* @param file the file to be deleted.
- * @throws UninstallException if something goes wrong.
+ * @throws ApplicationException if something goes wrong.
*/
- private void delete(File file) throws UninstallException
+ private void delete(File file) throws ApplicationException
{
String[] arg = {file.getAbsolutePath()};
boolean isFile = file.isFile();
@@ -1132,8 +789,8 @@
{
errMsg = getMsg("error-deleting-directory", arg);
}
- throw new UninstallException(
- UninstallException.Type.FILE_SYSTEM_ERROR, errMsg, null);
+ throw new ApplicationException(
+ ApplicationException.Type.FILE_SYSTEM_ERROR, errMsg, null);
}
notifyListeners(getFormattedDone()+getLineBreak());
@@ -1146,6 +803,15 @@
}
/**
+ * {@inheritDoc}
+ */
+ protected String getBinariesPath()
+ {
+ return Utils.getPath(Utils.getInstallPathFromClasspath(),
+ Utils.getBinariesRelativePath());
+ }
+
+ /**
* This class is used to read the standard error and standard output of the
* Stop process.
*
@@ -1232,6 +898,7 @@
*/
public boolean accept(File file)
{
+ UninstallUserData userData = getUninstallUserData();
boolean[] uData = {
userData.getRemoveLibrariesAndTools(),
userData.getRemoveLibrariesAndTools(),
@@ -1292,9 +959,9 @@
/**
* This methods disables this server as a Windows service.
- * @throws UninstallException if something goes wrong.
+ * @throws ApplicationException if something goes wrong.
*/
- protected void disableWindowsService() throws UninstallException
+ protected void disableWindowsService() throws ApplicationException
{
notifyListeners(getFormattedProgress(
getMsg("progress-disabling-windows-service")));
@@ -1309,8 +976,8 @@
case ConfigureWindowsService.SERVICE_ALREADY_DISABLED:
break;
default:
- throw new UninstallException(
- UninstallException.Type.WINDOWS_SERVICE_ERROR, errorMessage, null);
+ throw new ApplicationException(
+ ApplicationException.Type.WINDOWS_SERVICE_ERROR, errorMessage, null);
}
}
@@ -1430,5 +1097,10 @@
println(new String(b, off, len));
}
}
+
+ private UninstallUserData getUninstallUserData() {
+ return (UninstallUserData)getUserData();
+ }
+
}
--
Gitblit v1.10.0