mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

jvergara
30.33.2009 3cf1a6fccee9c44bf7171170f4bf21d01cbb020b
Fix for issue 3963 (control panel Java Settings panel error messages not specific)

Display a customized message depending on whether the invalid parameters are part of the fallback option (when the user chooses to use first the environment variables) or not.

Also add a check to validate the provided java binary.
3 files modified
255 ■■■■■ changed files
opends/src/guitools/org/opends/guitools/controlpanel/ui/JavaPropertiesPanel.java 227 ●●●●● patch | view | raw | blame | history
opends/src/messages/messages/admin_tool.properties 26 ●●●● patch | view | raw | blame | history
opends/src/quicksetup/org/opends/quicksetup/util/Utils.java 2 ●●● patch | view | raw | blame | history
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);
      }
    }
  }
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 \
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;