From 6dd1ed08c5a4fa7e10c25df99aa7125d05fdbdee Mon Sep 17 00:00:00 2001
From: jvergara <jvergara@localhost>
Date: Thu, 30 Apr 2009 15:33:14 +0000
Subject: [PATCH] Fix for issue 3963 (control panel Java Settings panel error messages not specific)

---
 opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/ui/JavaPropertiesPanel.java |  227 +++++++++++++++++++++++++++++++++++++-------------------
 1 files changed, 150 insertions(+), 77 deletions(-)

diff --git a/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/ui/JavaPropertiesPanel.java b/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/ui/JavaPropertiesPanel.java
index 6d72733..5b3c28c 100644
--- a/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/ui/JavaPropertiesPanel.java
+++ b/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/ui/JavaPropertiesPanel.java
@@ -44,6 +44,7 @@
 import java.util.Collection;
 import java.util.Comparator;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Properties;
 import java.util.Set;
 import java.util.TreeSet;
@@ -713,30 +714,30 @@
   {
     editor.stopCellEditing();
 
-    ArrayList<Message> errors = new ArrayList<Message>();
+    final ArrayList<Message> javaHomeErrors = new ArrayList<Message>();
     String f = javaHome.getText().trim();
     if (f.length() > 0)
     {
       File file = new File(f);
       if (!file.exists())
       {
-        errors.add(ERR_CTRL_PANEL_JAVA_PATH_DOES_NOT_EXIST.get(f));
+        javaHomeErrors.add(ERR_CTRL_PANEL_JAVA_PATH_DOES_NOT_EXIST.get(f));
       }
       else if (!file.isDirectory())
       {
-        errors.add(ERR_CTRL_PANEL_JAVA_PATH_NOT_A_DIRECTORY.get(f));
+        javaHomeErrors.add(ERR_CTRL_PANEL_JAVA_PATH_NOT_A_DIRECTORY.get(f));
       }
       else
       {
         File javaFile = getJavaFile(file);
         if (!javaFile.exists())
         {
-          errors.add(ERR_CTRL_PANEL_JAVA_BINARY_NOT_FOUND.get(
+          javaHomeErrors.add(ERR_CTRL_PANEL_JAVA_BINARY_NOT_FOUND.get(
               javaFile.toString()));
         }
       }
     }
-    if (errors.size() == 0)
+    if (javaHomeErrors.size() == 0)
     {
       final Set<String> providedArguments = new HashSet<String>();
       for (JavaArgumentsDescriptor cmd : getCurrentJavaArguments())
@@ -747,103 +748,175 @@
           providedArguments.add(args);
         }
       }
-      if (!providedArguments.isEmpty())
+
+      disableComponents();
+      lInitContents.setText(
+          INFO_CTRL_PANEL_CHECKING_JAVA_OPTIONS_SUMMARY.get().toString());
+      BackgroundTask<List<Message>> worker =
+        new BackgroundTask<List<Message>>()
       {
-        disableComponents();
-        lInitContents.setText(
-            INFO_CTRL_PANEL_CHECKING_JAVA_ARGUMENTS_SUMMARY.get().toString());
-        BackgroundTask<Set<String>> worker =
-          new BackgroundTask<Set<String>>()
+        private boolean isConfirmation = false;
+        @Override
+        public List<Message> processBackgroundTask() throws Throwable
         {
-          private String jvm;
-          @Override
-          public Set<String> processBackgroundTask() throws Throwable
+          String[] jvms;
+          String userJVM = javaHome.getText();
+          ArrayList<Message> errorMessages = new ArrayList<Message>();
+          ArrayList<Message> confirmationMessages = new ArrayList<Message>();
+          String defaultJVM = System.getenv(SetupUtils.OPENDS_JAVA_HOME);
+          if (defaultJVM == null)
+          {
+            defaultJVM = System.getProperty("java.home");
+          }
+          if (useSpecifiedJavaHome.isSelected())
+          {
+            jvms = new String[]{userJVM};
+          }
+          else if ((userJVM != null) && (userJVM.trim().length() > 0))
+          {
+            jvms = new String[]{defaultJVM, userJVM};
+          }
+          else
+          {
+            jvms = new String[]{defaultJVM};
+          }
+          for (String jvm : jvms)
           {
             Set<String> notWorkingArgs = new HashSet<String>();
-            jvm = javaHome.getText();
-            if (jvm.trim().length() == 0)
-            {
-              jvm = System.getProperty("java.home");
-              if ((jvm == null) || (jvm.length() == 0))
-              {
-                jvm = System.getenv(SetupUtils.OPENDS_JAVA_HOME);
-              }
-            }
 
             String installPath = getInfo().getServerDescriptor().
             getInstallPath().getAbsolutePath();
-            for (String arg : providedArguments)
+            if (!Utils.supportsOption("", jvm, installPath))
             {
-              if (!Utils.supportsOption(arg, jvm, installPath))
+              if (jvm == userJVM && !useSpecifiedJavaHome.isSelected())
               {
-                notWorkingArgs.add(arg);
+                errorMessages.add(
+                    ERR_CTRL_PANEL_NOT_WORKING_FALLBACK_JVM_DETAILS.get(jvm));
               }
-            }
-
-            return notWorkingArgs;
-          }
-          /**
-           * {@inheritDoc}
-           */
-          @Override
-          public void backgroundTaskCompleted(Set<String> returnValue,
-              Throwable t)
-          {
-            if (t == null)
-            {
-              boolean confirm = true;
-              if (!returnValue.isEmpty())
+              else
               {
-                File javaFile = getJavaFile(new File(jvm));
-                Message confirmationMessage =
-                  INFO_CTRL_PANEL_CONFIRM_NOT_WORKING_ARGUMENTS_DETAILS.get(
-                      javaFile.toString(),
-                      Utilities.getStringFromCollection(returnValue, "<br>-"));
-                confirm = displayConfirmationDialog(
-                    INFO_CTRL_PANEL_CONFIRMATION_REQUIRED_SUMMARY.get(),
-                    confirmationMessage);
-              }
-              if (confirm)
-              {
-                launchTask();
+                errorMessages.add(
+                    ERR_CTRL_PANEL_NOT_WORKING_JVM_DETAILS.get(jvm));
               }
             }
             else
             {
-              String arg;
-              if (t instanceof OpenDsException)
+              for (String arg : providedArguments)
               {
-                arg = ((OpenDsException)t).getMessageObject().toString();
+                if (!Utils.supportsOption(arg, jvm, installPath))
+                {
+                  notWorkingArgs.add(arg);
+                }
+              }
+            }
+            if (notWorkingArgs.size() > 0)
+            {
+              File javaFile = getJavaFile(new File(jvm));
+              Message confirmationMessage;
+              if (useSpecifiedJavaArgs.isSelected())
+              {
+                confirmationMessage =
+                  INFO_CTRL_PANEL_CONFIRM_NOT_WORKING_ARGUMENTS_DETAILS.get(
+                    javaFile.toString(),
+                    Utilities.getStringFromCollection(notWorkingArgs, "<br>-"));
               }
               else
               {
-                arg = t.toString();
+                confirmationMessage =
+             INFO_CTRL_PANEL_CONFIRM_NOT_WORKING_FALLBACK_ARGUMENTS_DETAILS.get(
+                    javaFile.toString(),
+                    Utilities.getStringFromCollection(notWorkingArgs, "<br>-"));
               }
-              Message title =
-                ERR_CTRL_PANEL_ERROR_CHECKING_JAVA_SETTINGS_SUMMARY.get();
-              Message details =
-                ERR_CTRL_PANEL_ERROR_CHECKING_JAVA_SETTINGS_DETAILS.get(arg);
-              updateErrorPane(errorPane, title,
-                  ColorAndFontConstants.errorTitleFont, details,
-                  errorPane.getFont());
-              packParentDialog();
-              errorPane.setVisible(true);
+              confirmationMessages.add(confirmationMessage);
             }
-            enableComponents();
-            lInitContents.setText(READING_JAVA_SETTINGS.toString());
           }
-        };
-        worker.startBackgroundTask();
-        return;
-      }
-    }
-    if (errors.size() == 0)
-    {
-      launchTask();
+          isConfirmation = errorMessages.isEmpty();
+          if (!errorMessages.isEmpty())
+          {
+            return errorMessages;
+          }
+          else
+          {
+            return confirmationMessages;
+          }
+        }
+        /**
+         * {@inheritDoc}
+         */
+        @Override
+        public void backgroundTaskCompleted(List<Message> returnValue,
+            Throwable t)
+        {
+          if (t == null)
+          {
+            boolean confirm = false;
+            if (isConfirmation && !returnValue.isEmpty())
+            {
+              confirm = displayConfirmationDialog(
+                  INFO_CTRL_PANEL_CONFIRMATION_REQUIRED_SUMMARY.get(),
+                  returnValue.iterator().next());
+            }
+            else if (!isConfirmation && !returnValue.isEmpty())
+            {
+              displayErrorDialog(returnValue);
+            }
+            else
+            {
+              confirm = true;
+            }
+
+            if (confirm)
+            {
+              launchTask();
+            }
+          }
+          else
+          {
+            String arg;
+            if (t instanceof OpenDsException)
+            {
+              arg = ((OpenDsException)t).getMessageObject().toString();
+            }
+            else
+            {
+              arg = t.toString();
+            }
+            Message title =
+              ERR_CTRL_PANEL_ERROR_CHECKING_JAVA_SETTINGS_SUMMARY.get();
+            Message details =
+              ERR_CTRL_PANEL_ERROR_CHECKING_JAVA_SETTINGS_DETAILS.get(arg);
+            updateErrorPane(errorPane, title,
+                ColorAndFontConstants.errorTitleFont, details,
+                errorPane.getFont());
+            packParentDialog();
+            errorPane.setVisible(true);
+          }
+          enableComponents();
+          lInitContents.setText(READING_JAVA_SETTINGS.toString());
+        }
+      };
+      worker.startBackgroundTask();
+      return;
     }
     else
     {
-      displayErrorDialog(errors);
+      if (useSpecifiedJavaHome.isSelected())
+      {
+        displayErrorDialog(javaHomeErrors);
+      }
+      else
+      {
+        ArrayList<String> s = new ArrayList<String>();
+        for (Message msg : javaHomeErrors)
+        {
+          s.add(msg.toString());
+        }
+        ArrayList<Message> msgs = new ArrayList<Message>();
+        Message msg = ERR_CTRL_PANEL_GENERIC_ERROR_FALLBACK_JAVAHOME.get(
+            f, Utilities.getStringFromCollection(s, "<br>-"));
+        msgs.add(msg);
+        displayErrorDialog(msgs);
+      }
     }
   }
 

--
Gitblit v1.10.0