From a6bc1867af126f844a8b308381b8de6c25320c4c Mon Sep 17 00:00:00 2001
From: jvergara <jvergara@localhost>
Date: Fri, 29 Feb 2008 18:24:15 +0000
Subject: [PATCH] Fix for issue 2984 (Infinite looping of uninstall command)
---
opends/src/guitools/org/opends/guitools/uninstaller/UninstallCliHelper.java | 357 ++++++++++++++++++++++++++++++++++++-----------------------
1 files changed, 219 insertions(+), 138 deletions(-)
diff --git a/opends/src/guitools/org/opends/guitools/uninstaller/UninstallCliHelper.java b/opends/src/guitools/org/opends/guitools/uninstaller/UninstallCliHelper.java
index e8983e8..2972363 100644
--- a/opends/src/guitools/org/opends/guitools/uninstaller/UninstallCliHelper.java
+++ b/opends/src/guitools/org/opends/guitools/uninstaller/UninstallCliHelper.java
@@ -342,7 +342,7 @@
else
{
boolean somethingSelected = false;
- while (!somethingSelected)
+ while (!somethingSelected && !cancelled)
{
println();
// Ask for confirmation for the different items
@@ -363,80 +363,92 @@
};
boolean[] answers = new boolean[msgs.length];
- for (int i=0; i<msgs.length; i++)
+ try
{
- boolean ignore = ((i == 6) && (outsideDbs.size() == 0)) ||
- ((i == 7) && (outsideLogs.size() == 0));
- if (!ignore)
+ for (int i=0; i<msgs.length; i++)
{
- answers[i] = askConfirmation(msgs[i], true, LOG);
+ boolean ignore = ((i == 6) && (outsideDbs.size() == 0)) ||
+ ((i == 7) && (outsideLogs.size() == 0));
+ if (!ignore)
+ {
+ answers[i] = askConfirmation(msgs[i], true, LOG);
+ }
+ else
+ {
+ answers[i] = false;
+ }
+ }
+ }
+ catch (CLIException ce)
+ {
+ println(ce.getMessageObject());
+ println();
+ cancelled = true;
+ }
+
+ if (!cancelled)
+ {
+ 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;
+ println();
+ println(ERR_CLI_UNINSTALL_NOTHING_TO_BE_UNINSTALLED.get());
}
else
{
- answers[i] = false;
+ somethingSelected = true;
}
}
-
- 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;
- println();
- println(ERR_CLI_UNINSTALL_NOTHING_TO_BE_UNINSTALLED.get());
- }
- else
- {
- somethingSelected = true;
- }
}
}
@@ -477,56 +489,16 @@
{
if (interactive)
{
- if (confirmToUpdateRemote())
+ try
{
- println();
- cancelled = !askForAuthenticationIfNeeded(userData);
- if (cancelled)
+ if (confirmToUpdateRemote())
{
- /* Ask for confirmation to stop server */
println();
- cancelled = !confirmToStopServer();
- }
- else
- {
- cancelled = !updateUserUninstallDataWithRemoteServers(userData);
- if (cancelled)
- {
- println();
- /* Ask for confirmation to stop server */
- cancelled = !confirmToStopServer();
- }
- }
- }
- else
- {
- println();
- /* Ask for confirmation to stop server */
- cancelled = !confirmToStopServer();
- }
- }
- else
- {
- cancelled =
- !updateUserUninstallDataWithRemoteServers(userData);
- }
- }
- else
- {
- if (interactive)
- {
- println();
- if (confirmToUpdateRemoteAndStart())
- {
- boolean startWorked = startServer(userData.isQuiet());
- // Ask for authentication if needed, etc.
- if (startWorked)
- {
cancelled = !askForAuthenticationIfNeeded(userData);
if (cancelled)
{
- println();
/* Ask for confirmation to stop server */
+ println();
cancelled = !confirmToStopServer();
}
else
@@ -542,17 +514,76 @@
}
else
{
- userData.setStopServer(false);
+ println();
+ /* Ask for confirmation to stop server */
+ cancelled = !confirmToStopServer();
+ }
+ }
+ catch (CLIException ce)
+ {
+ println(ce.getMessageObject());
+ println();
+ cancelled = true;
+ }
+ }
+ else
+ {
+ cancelled =
+ !updateUserUninstallDataWithRemoteServers(userData);
+ }
+ }
+ else
+ {
+ if (interactive)
+ {
+ println();
+ try
+ {
+ if (confirmToUpdateRemoteAndStart())
+ {
+ boolean startWorked = startServer(userData.isQuiet());
+ // Ask for authentication if needed, etc.
+ if (startWorked)
+ {
+ cancelled = !askForAuthenticationIfNeeded(userData);
+ if (cancelled)
+ {
+ println();
+ /* Ask for confirmation to stop server */
+ cancelled = !confirmToStopServer();
+ }
+ else
+ {
+ cancelled =
+ !updateUserUninstallDataWithRemoteServers(userData);
+ if (cancelled)
+ {
+ println();
+ /* Ask for confirmation to stop server */
+ cancelled = !confirmToStopServer();
+ }
+ }
+ }
+ else
+ {
+ userData.setStopServer(false);
+ println();
+ /* Ask for confirmation to delete files */
+ cancelled = !confirmDeleteFiles();
+ }
+ }
+ else
+ {
println();
/* Ask for confirmation to delete files */
cancelled = !confirmDeleteFiles();
}
}
- else
+ catch (CLIException ce)
{
+ println(ce.getMessageObject());
println();
- /* Ask for confirmation to delete files */
- cancelled = !confirmDeleteFiles();
+ cancelled = true;
}
}
else
@@ -583,18 +614,27 @@
{
if (conf.isServerRunning())
{
- if (interactive)
+ try
{
- println();
- /* Ask for confirmation to stop server */
- cancelled = !confirmToStopServer();
- }
+ if (interactive)
+ {
+ println();
+ /* Ask for confirmation to stop server */
+ cancelled = !confirmToStopServer();
+ }
- if (!cancelled)
+ if (!cancelled)
+ {
+ /* During all the confirmations, the server might be stopped. */
+ userData.setStopServer(
+ Installation.getLocal().getStatus().isServerRunning());
+ }
+ }
+ catch (CLIException ce)
{
- /* During all the confirmations, the server might be stopped. */
- userData.setStopServer(
- Installation.getLocal().getStatus().isServerRunning());
+ println(ce.getMessageObject());
+ println();
+ cancelled = false;
}
}
else
@@ -604,7 +644,16 @@
{
println();
/* Ask for confirmation to delete files */
- cancelled = !confirmDeleteFiles();
+ try
+ {
+ cancelled = !confirmDeleteFiles();
+ }
+ catch (CLIException ce)
+ {
+ println(ce.getMessageObject());
+ println();
+ cancelled = true;
+ }
}
}
}
@@ -615,8 +664,9 @@
* Ask for confirmation to stop server.
* @return <CODE>true</CODE> if the user wants to continue and stop the
* server. <CODE>false</CODE> otherwise.
+ * @throws CLIException if the user reached the confirmation limit.
*/
- private boolean confirmToStopServer()
+ private boolean confirmToStopServer() throws CLIException
{
return askConfirmation(INFO_CLI_UNINSTALL_CONFIRM_STOP.get(), true, LOG);
}
@@ -625,8 +675,9 @@
* Ask for confirmation to delete files.
* @return <CODE>true</CODE> if the user wants to continue and delete the
* files. <CODE>false</CODE> otherwise.
+ * @throws CLIException if the user reached the confirmation limit.
*/
- private boolean confirmDeleteFiles()
+ private boolean confirmDeleteFiles() throws CLIException
{
return askConfirmation(INFO_CLI_UNINSTALL_CONFIRM_DELETE_FILES.get(), true,
LOG);
@@ -636,8 +687,9 @@
* Ask for confirmation to update configuration on remote servers.
* @return <CODE>true</CODE> if the user wants to continue and stop the
* server. <CODE>false</CODE> otherwise.
+ * @throws CLIException if the user reached the confirmation limit.
*/
- private boolean confirmToUpdateRemote()
+ private boolean confirmToUpdateRemote() throws CLIException
{
return askConfirmation(INFO_CLI_UNINSTALL_CONFIRM_UPDATE_REMOTE.get(), true,
LOG);
@@ -647,8 +699,9 @@
* Ask for confirmation to update configuration on remote servers.
* @return <CODE>true</CODE> if the user wants to continue and stop the
* server. <CODE>false</CODE> otherwise.
+ * @throws CLIException if the user reached the confirmation limit.
*/
- private boolean confirmToUpdateRemoteAndStart()
+ private boolean confirmToUpdateRemoteAndStart() throws CLIException
{
return askConfirmation(
INFO_CLI_UNINSTALL_CONFIRM_UPDATE_REMOTE_AND_START.get(), true, LOG);
@@ -657,9 +710,10 @@
/**
* Ask for confirmation to provide again authentication.
* @return <CODE>true</CODE> if the user wants to provide authentication
- * againr. <CODE>false</CODE> otherwise.
+ * again. <CODE>false</CODE> otherwise.
+ * @throws CLIException if the user reached the confirmation limit.
*/
- private boolean promptToProvideAuthenticationAgain()
+ private boolean promptToProvideAuthenticationAgain() throws CLIException
{
return askConfirmation(
INFO_UNINSTALL_CONFIRM_PROVIDE_AUTHENTICATION_AGAIN.get(), true, LOG);
@@ -830,11 +884,20 @@
if (!couldConnect)
{
- accepted = promptToProvideAuthenticationAgain();
- if (accepted)
+ try
{
- uid = null;
- pwd = null;
+ accepted = promptToProvideAuthenticationAgain();
+ if (accepted)
+ {
+ uid = null;
+ pwd = null;
+ }
+ }
+ catch (CLIException ce)
+ {
+ println(ce.getMessageObject());
+ println();
+ accepted = false;
}
}
}
@@ -1113,8 +1176,17 @@
}
else
{
- accepted = askConfirmation(ERR_UNINSTALL_NOT_UPDATE_REMOTE_PROMPT.get(),
- false, LOG);
+ try
+ {
+ accepted = askConfirmation(
+ ERR_UNINSTALL_NOT_UPDATE_REMOTE_PROMPT.get(),
+ false, LOG);
+ }
+ catch (CLIException ce)
+ {
+ println(ce.getMessageObject());
+ accepted = false;
+ }
}
}
userData.setUpdateRemoteReplication(accepted);
@@ -1210,10 +1282,19 @@
if (!stopProcessing && (exceptionMsgs.size() > 0))
{
println();
- returnValue = askConfirmation(
+ try
+ {
+ returnValue = askConfirmation(
ERR_UNINSTALL_READING_REGISTERED_SERVERS_CONFIRM_UPDATE_REMOTE.get(
Utils.getMessageFromCollection(exceptionMsgs,
Constants.LINE_SEPARATOR).toString()), true, LOG);
+ }
+ catch (CLIException ce)
+ {
+ println(ce.getMessageObject());
+ println();
+ returnValue = false;
+ }
}
else if (reloadTopologyCache)
{
--
Gitblit v1.10.0