From e14ae9996c7a36b85fc602fc3d82239a03e1b990 Mon Sep 17 00:00:00 2001
From: jvergara <jvergara@localhost>
Date: Wed, 30 Jan 2008 00:53:22 +0000
Subject: [PATCH] When there is a problem deleting files in the uninstaller, just consider it a warning and inform the user that the problematic file might being used by another process.

---
 opends/src/guitools/org/opends/guitools/uninstaller/Uninstaller.java |   79 ++++++++++++++++++++++++++++++++++++---
 1 files changed, 72 insertions(+), 7 deletions(-)

diff --git a/opends/src/guitools/org/opends/guitools/uninstaller/Uninstaller.java b/opends/src/guitools/org/opends/guitools/uninstaller/Uninstaller.java
index e23b86f..d20f2cf 100644
--- a/opends/src/guitools/org/opends/guitools/uninstaller/Uninstaller.java
+++ b/opends/src/guitools/org/opends/guitools/uninstaller/Uninstaller.java
@@ -22,7 +22,7 @@
  * CDDL HEADER END
  *
  *
- *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
+ *      Portions Copyright 2006-2008 Sun Microsystems, Inc.
  */
 
 package org.opends.guitools.uninstaller;
@@ -91,6 +91,7 @@
   private ProgressStep status = UninstallProgressStep.NOT_STARTED;
   private boolean runStarted;
   private boolean errorOnRemoteOccurred;
+  private boolean errorDeletingOccurred;
 
   private HashMap<ProgressStep, Integer> hmRatio =
           new HashMap<ProgressStep, Integer>();
@@ -656,7 +657,7 @@
             getFormattedSuccess(successMsg));
 
     Message nonCriticalMsg;
-    if (isCli())
+    if (!isCli())
     {
       nonCriticalMsg =
         INFO_SUMMARY_UNINSTALL_FINISHED_WITH_ERROR_ON_REMOTE.get();
@@ -668,6 +669,18 @@
     }
     hmSummary.put(UninstallProgressStep.FINISHED_WITH_ERROR_ON_REMOTE,
             getFormattedWarning(nonCriticalMsg));
+    if (!isCli())
+    {
+      nonCriticalMsg =
+        INFO_SUMMARY_UNINSTALL_FINISHED_WITH_ERROR_DELETING.get();
+    }
+    else
+    {
+      nonCriticalMsg =
+        INFO_SUMMARY_UNINSTALL_FINISHED_WITH_ERROR_DELETING_CLI.get();
+    }
+    hmSummary.put(UninstallProgressStep.FINISHED_WITH_ERROR_DELETING,
+        getFormattedWarning(nonCriticalMsg));
     hmSummary.put(UninstallProgressStep.FINISHED_WITH_ERROR,
             getFormattedError(
                     INFO_SUMMARY_UNINSTALL_FINISHED_WITH_ERROR.get()));
@@ -790,8 +803,24 @@
           notifyListeners(getTaskSeparator());
         }
 
-        deleteExternalDatabaseFiles(dbsToDelete);
-        displaySeparator = true;
+        try
+        {
+          deleteExternalDatabaseFiles(dbsToDelete);
+          displaySeparator = true;
+        }
+        catch (ApplicationException ae)
+        {
+          if (ae.getType() == ReturnCode.FILE_SYSTEM_ACCESS_ERROR)
+          {
+            errorDeletingOccurred = true;
+            Message msg = getFormattedWarning(ae.getMessageObject());
+            notifyListeners(msg);
+          }
+          else
+          {
+            throw ae;
+          }
+        }
       }
 
       Set<String> logsToDelete =
@@ -803,8 +832,24 @@
           notifyListeners(getTaskSeparator());
         }
 
-        deleteExternalLogFiles(logsToDelete);
-        displaySeparator = true;
+        try
+        {
+          deleteExternalLogFiles(logsToDelete);
+          displaySeparator = true;
+        }
+        catch (ApplicationException ae)
+        {
+          if (ae.getType() == ReturnCode.FILE_SYSTEM_ACCESS_ERROR)
+          {
+            errorDeletingOccurred = true;
+            Message msg = getFormattedWarning(ae.getMessageObject());
+            notifyListeners(msg);
+          }
+          else
+          {
+            throw ae;
+          }
+        }
       }
 
       UninstallUserData userData = getUninstallUserData();
@@ -820,13 +865,33 @@
 
       if (somethingToDelete) {
         status = UninstallProgressStep.DELETING_INSTALLATION_FILES;
-        deleteInstallationFiles(getRatio(status),
+        try
+        {
+          deleteInstallationFiles(getRatio(status),
                 getRatio(UninstallProgressStep.FINISHED_SUCCESSFULLY));
+        }
+        catch (ApplicationException ae)
+        {
+          if (ae.getType() == ReturnCode.FILE_SYSTEM_ACCESS_ERROR)
+          {
+            errorDeletingOccurred = true;
+            Message msg = getFormattedWarning(ae.getMessageObject());
+            notifyListeners(msg);
+          }
+          else
+          {
+            throw ae;
+          }
+        }
       }
       if (errorOnRemoteOccurred)
       {
         status = UninstallProgressStep.FINISHED_WITH_ERROR_ON_REMOTE;
       }
+      else if (errorDeletingOccurred)
+      {
+        status = UninstallProgressStep.FINISHED_WITH_ERROR_DELETING;
+      }
       else
       {
         status = UninstallProgressStep.FINISHED_SUCCESSFULLY;

--
Gitblit v1.10.0