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 ++++++++++++++++++++++++++++++---------------
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/Utils.java                      |    2 
 opendj-sdk/opends/src/messages/messages/admin_tool.properties                               |   26 ++++
 3 files changed, 174 insertions(+), 81 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);
+      }
     }
   }
 
diff --git a/opendj-sdk/opends/src/messages/messages/admin_tool.properties b/opendj-sdk/opends/src/messages/messages/admin_tool.properties
index 50c9df2..d90eec2 100644
--- a/opendj-sdk/opends/src/messages/messages/admin_tool.properties
+++ b/opendj-sdk/opends/src/messages/messages/admin_tool.properties
@@ -1713,20 +1713,40 @@
  reading the Java settings.  Details: %s
 MILD_ERR_CTRL_PANEL_ERR_READING_JAVA_SETTINGS_SUMMARY=Error reading Java \
  settings
-INFO_CTRL_PANEL_CHECKING_JAVA_ARGUMENTS_SUMMARY=Checking provided Java \
- arguments...
+INFO_CTRL_PANEL_CHECKING_JAVA_OPTIONS_SUMMARY=Checking provided Java \
+ options...
 MILD_ERR_CTRL_PANEL_JAVA_PATH_DOES_NOT_EXIST=Path '%s' does not exist.
 MILD_ERR_CTRL_PANEL_JAVA_PATH_NOT_A_DIRECTORY=Path '%s' is not a directory.  \
  You must specify the path to the Java installation to be used.
 MILD_ERR_CTRL_PANEL_JAVA_BINARY_NOT_FOUND=Could not find binary '%s'.  You \
  must specify the path to the Java installation to be used.
 #
-# Note that the following property contains line breaks in HTML format (<br>)
+# Note that the following five properties contain line breaks in HTML format
+# (<br>)
 #
 INFO_CTRL_PANEL_CONFIRM_NOT_WORKING_ARGUMENTS_DETAILS=The following Java \
  arguments could not be used with binary '%s':<br>%s\
  <br><br>The command-lines associated with those Java arguments may not \
  work.<br>Do you want to continue?
+INFO_CTRL_PANEL_CONFIRM_NOT_WORKING_FALLBACK_ARGUMENTS_DETAILS=The following \
+ Java arguments could not be used with binary '%s':<br>%s\
+ <br><br>These arguments will be used as fall back when OPENDS_JAVA_ARGS is \
+ not defined.  If you do not want to specify a fall back, leave those \
+ arguments empty.<br><br>The command-lines associated with those Java \
+ arguments may not work.<br>Do you want to continue?
+SEVERE_ERR_CTRL_PANEL_GENERIC_ERROR_FALLBACK_JAVAHOME=The Java home value '%s' \
+ is not valid.  This value will be used as fall back when the OPENDS_JAVA_HOME \
+ environment variable is not defined.  If you do not want to specify a fall \
+ back, leave the Java Home text field empty or specify a valid Java home.<br>\
+ Error details:<br>%s
+SEVERE_ERR_CTRL_PANEL_NOT_WORKING_JVM_DETAILS=The Java binary '%s' \
+ could not be used to launch the OpenDS scripts.<br>OpenDS cannot run using \
+ the provided Java Home.
+SEVERE_ERR_CTRL_PANEL_NOT_WORKING_FALLBACK_JVM_DETAILS=The Java binary '%s' \
+ could not be used to launch the OpenDS scripts.  This value will be used as \
+ fall back when the OPENDS_JAVA_HOME environment variable is not defined.  If \
+ you do not want to specify a fall back, leave the Java Home text field empty \
+ or specify a valid Java home.
 MILD_ERR_CTRL_PANEL_ERROR_CHECKING_JAVA_SETTINGS_SUMMARY=Error checking Java \
  settings
 MILD_ERR_CTRL_PANEL_ERROR_CHECKING_JAVA_SETTINGS_DETAILS=An unexpected error \
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/Utils.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/Utils.java
index 1db3a4d..6b89631 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/Utils.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/Utils.java
@@ -172,7 +172,7 @@
         env.put("DO_NOT_PAUSE", "true");
       }
       Process process = pb.start();
-      LOG.log(Level.INFO, "launching "+args);
+      LOG.log(Level.INFO, "launching "+args+ " with env: "+env);
       InputStream is = process.getInputStream();
       BufferedReader reader = new BufferedReader(new InputStreamReader(is));
       String line;

--
Gitblit v1.10.0