From 8bf05d16714ec5ec23bec6d169b4b8201c463ce4 Mon Sep 17 00:00:00 2001
From: Gaetan Boismal <gaetan.boismal@forgerock.com>
Date: Mon, 28 Nov 2016 15:37:15 +0000
Subject: [PATCH] OPENDJ-3527 OPENDJ-3531 OPENDJ-1633 Fix tools bootstrap
---
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/JavaPropertiesPanel.java | 1360 ----------------------------------------------------------
1 files changed, 11 insertions(+), 1,349 deletions(-)
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/JavaPropertiesPanel.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/JavaPropertiesPanel.java
index 61c1024..29bff17 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/JavaPropertiesPanel.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/JavaPropertiesPanel.java
@@ -17,61 +17,15 @@
package org.opends.guitools.controlpanel.ui;
import static org.opends.messages.AdminToolMessages.*;
-import static org.opends.server.util.CollectionUtils.*;
-
-import static com.forgerock.opendj.util.OperatingSystem.isWindows;
import java.awt.Component;
import java.awt.GridBagConstraints;
-import java.awt.GridBagLayout;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.io.BufferedReader;
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileReader;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.util.ArrayList;
-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;
-import javax.swing.ButtonGroup;
-import javax.swing.JButton;
-import javax.swing.JCheckBox;
-import javax.swing.JComponent;
-import javax.swing.JEditorPane;
import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.JRadioButton;
-import javax.swing.JScrollPane;
-import javax.swing.JSeparator;
-import javax.swing.JTable;
-import javax.swing.JTextField;
-import javax.swing.SwingUtilities;
import org.forgerock.i18n.LocalizableMessage;
-import org.opends.guitools.controlpanel.datamodel.ControlPanelInfo;
-import org.opends.guitools.controlpanel.datamodel.SortableTableModel;
-import org.opends.guitools.controlpanel.event.BrowseActionListener;
import org.opends.guitools.controlpanel.event.ConfigurationChangeEvent;
-import org.opends.guitools.controlpanel.task.Task;
-import org.opends.guitools.controlpanel.ui.components.LabelWithHelpIcon;
-import org.opends.guitools.controlpanel.ui.renderer.AttributeCellEditor;
-import org.opends.guitools.controlpanel.ui.renderer.LDAPEntryTableCellRenderer;
-import org.opends.guitools.controlpanel.util.BackgroundTask;
import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.quicksetup.Installation;
-import org.opends.quicksetup.util.Utils;
-import org.opends.server.tools.JavaPropertiesTool;
-import org.opends.server.types.OpenDsException;
-import org.opends.server.util.SetupUtils;
-import org.opends.server.util.StaticUtils;
/**
* The panel where the user can specify the java arguments and java home to be
@@ -80,59 +34,10 @@
public class JavaPropertiesPanel extends StatusGenericPanel
{
private static final long serialVersionUID = -7886215660289880597L;
- private JTextField javaHome;
- private JRadioButton useOpenDSJavaHome;
- private JRadioButton useSpecifiedJavaHome;
- private JButton browse;
- private JLabel lJavaHome;
- private JRadioButton useOpenDSJavaArgs;
- private JRadioButton useSpecifiedJavaArgs;
- private JLabel lJavaArgs;
- private JTable argumentsTable;
- private JavaArgumentsTableModel argumentsTableModel;
- private JScrollPane argumentsScroll;
-
- private AttributeCellEditor editor;
-
- private JEditorPane lInitContents;
-
- private JCheckBox showAll;
-
- private Set<JavaArgumentsDescriptor> readJavaArguments = new HashSet<>();
- private Set<JavaArgumentsDescriptor> currentJavaArguments = new HashSet<>();
- private final Set<String> allScriptNames = newHashSet(
- "start-ds", "import-ldif.offline", "backup.online", "base64",
- "create-rc-script", "dsconfig", "dsreplication",
- "export-ldif.online", "import-ldif.online", "ldapcompare",
- "ldapdelete", "ldapmodify", "ldappasswordmodify", "ldapsearch",
- "list-backends", "manage-account", "manage-tasks", "restore.online",
- "stop-ds", "status", "control-panel", "uninstall", "setup",
- "backup.offline", "encode-password", "export-ldif.offline",
- "ldifdiff", "ldifmodify", "ldifsearch", "makeldif",
- "rebuild-index", "restore.offline", "upgrade",
- "verify-index", "backendstat"
- );
- private final Set<String> relevantScriptNames = newHashSet(
- "start-ds", "import-ldif.offline", "backup.offline",
- "export-ldif.offline",
- "ldifdiff", "makeldif", "rebuild-index", "restore.offline",
- "verify-index", "backendstat"
- );
-
- private String readJavaHome;
- private boolean readUseOpenDSJavaHome;
- private boolean readUseOpenDSJavaArgs;
-
+ private JLabel javaHome;
private boolean initialized;
- private boolean previousLocal = true;
-
- private final LocalizableMessage READING_JAVA_SETTINGS =
- INFO_CTRL_PANEL_READING_JAVA_SETTINGS_SUMMARY.get();
-
- private JComponent[] comps;
-
/** Default constructor. */
public JavaPropertiesPanel()
{
@@ -141,6 +46,12 @@
}
@Override
+ public void okClicked()
+ {
+ cancelClicked();
+ }
+
+ @Override
public LocalizableMessage getTitle()
{
return INFO_CTRL_PANEL_JAVA_PROPERTIES_TITLE.get();
@@ -158,267 +69,18 @@
return false;
}
- @Override
- public void setInfo(ControlPanelInfo info)
- {
- super.setInfo(info);
- if (editor != null)
- {
- editor.setInfo(info);
- }
- }
-
/** Creates the layout of the panel (but the contents are not populated here). */
private void createLayout()
{
GridBagConstraints gbc = new GridBagConstraints();
- lJavaHome = Utilities.createPrimaryLabel(
- INFO_CTRL_PANEL_JAVA_HOME_LABEL.get());
- useOpenDSJavaHome = Utilities.createRadioButton(LocalizableMessage.EMPTY);
- useOpenDSJavaHome.setOpaque(false);
- useOpenDSJavaHome.getAccessibleContext().setAccessibleName(
- INFO_CTRL_PANEL_USE_OPENDS_JAVA_HOME.get()+" "+
- INFO_CTRL_PANEL_USE_OPENDS_JAVA_HOME_HELP.get());
- lJavaHome.setLabelFor(useOpenDSJavaHome);
+ javaHome = Utilities.createPrimaryLabel(INFO_CTRL_PANEL_EDIT_JAVA_PROPERTIES_FILE.get());
gbc.gridx = 0;
gbc.gridy = 0;
gbc.weightx = 0.0;
gbc.anchor = GridBagConstraints.WEST;
gbc.gridwidth = 1;
- add(lJavaHome, gbc);
- gbc.insets.left = 10;
- gbc.gridx ++;
- add(useOpenDSJavaHome, gbc);
- gbc.gridwidth = 3;
- gbc.gridx ++;
- LabelWithHelpIcon useOpenDSJavaHomeLabel =
- new LabelWithHelpIcon(INFO_CTRL_PANEL_USE_OPENDS_JAVA_HOME.get(),
- INFO_CTRL_PANEL_USE_OPENDS_JAVA_HOME_HELP.get());
- gbc.insets.left = 0;
- add(useOpenDSJavaHomeLabel, gbc);
-
- gbc.gridx = 1;
- gbc.gridy ++;
- gbc.fill = GridBagConstraints.HORIZONTAL;
- gbc.weightx = 0.0;
- gbc.insets.top = 10;
- gbc.gridwidth = 1;
- useSpecifiedJavaHome = Utilities.createRadioButton(LocalizableMessage.EMPTY);
- useSpecifiedJavaHome.setOpaque(false);
- useSpecifiedJavaHome.getAccessibleContext().setAccessibleName(
- INFO_CTRL_PANEL_USE_SPECIFIED_OPENDS_JAVA_HOME.get() +
- " "+INFO_CTRL_PANEL_USE_SPECIFIED_OPENDS_JAVA_HOME_HELP.get());
- useOpenDSJavaHomeLabel.setLabelFor(useSpecifiedJavaHome);
- LabelWithHelpIcon useSpecifiedJavaHomeLabel = new LabelWithHelpIcon(
- INFO_CTRL_PANEL_USE_SPECIFIED_OPENDS_JAVA_HOME.get(),
- INFO_CTRL_PANEL_USE_SPECIFIED_OPENDS_JAVA_HOME_HELP.get());
- gbc.insets.left = 10;
- add(useSpecifiedJavaHome, gbc);
- gbc.gridx ++;
- gbc.insets.left = 0;
- add(useSpecifiedJavaHomeLabel, gbc);
- gbc.gridx ++;
- javaHome = Utilities.createTextField();
- useSpecifiedJavaHomeLabel.setLabelFor(javaHome);
- gbc.weightx = 1.0;
- gbc.insets.left = 5;
add(javaHome, gbc);
- gbc.weightx = 0.0;
- browse = Utilities.createButton(INFO_CTRL_PANEL_BROWSE_BUTTON_LABEL.get());
- browse.addActionListener(
- new BrowseActionListener(javaHome,
- BrowseActionListener.BrowseType.LOCATION_DIRECTORY, this));
- browse.setOpaque(false);
- gbc.gridx ++;
- add(browse, gbc);
-
- ButtonGroup group = new ButtonGroup();
- group.add(useSpecifiedJavaHome);
- group.add(useOpenDSJavaHome);
-
- gbc.insets.top = 10;
- gbc.insets.left = 0;
- gbc.gridx = 0;
- gbc.gridwidth = 5;
- gbc.gridy ++;
- add(new JSeparator(), gbc);
-
- gbc.gridy ++;
- JPanel p = new JPanel(new GridBagLayout());
- p.setOpaque(false);
- gbc.weightx = 1.0;
- gbc.weighty = 1.0;
- gbc.fill = GridBagConstraints.BOTH;
- add(p, gbc);
-
- gbc.insets.top = 10;
- gbc.weightx = 0.0;
- gbc.weighty = 0.0;
- gbc.gridx = 0;
- gbc.gridy = 0;
-
- lJavaArgs = Utilities.createPrimaryLabel(
- INFO_CTRL_PANEL_JAVA_ARGUMENTS_LABEL.get());
- useSpecifiedJavaArgs = Utilities.createRadioButton(LocalizableMessage.EMPTY);
- useSpecifiedJavaArgs.getAccessibleContext().setAccessibleName(
- INFO_CTRL_PANEL_USE_OPENDS_JAVA_ARGS.get() +
- " "+INFO_CTRL_PANEL_USE_OPENDS_JAVA_ARGS_HELP.get());
- useSpecifiedJavaArgs.setOpaque(false);
- useOpenDSJavaArgs = Utilities.createRadioButton(LocalizableMessage.EMPTY);
- useOpenDSJavaArgs.setOpaque(false);
- lJavaArgs.setLabelFor(useOpenDSJavaArgs);
- gbc.gridx = 0;
- gbc.gridy = 0;
- gbc.gridwidth = 1;
- gbc.fill = GridBagConstraints.HORIZONTAL;
- gbc.weightx = 0.0;
- gbc.insets.top = 10;
- p.add(lJavaArgs, gbc);
- gbc.insets.left = 10;
- gbc.gridx ++;
- gbc.gridwidth = 1;
- p.add(useOpenDSJavaArgs, gbc);
- gbc.gridx ++;
- LabelWithHelpIcon useOpenDSJavaArgsLabel = new LabelWithHelpIcon(
- INFO_CTRL_PANEL_USE_OPENDS_JAVA_ARGS.get(),
- INFO_CTRL_PANEL_USE_OPENDS_JAVA_ARGS_HELP.get());
- gbc.insets.left = 0;
- p.add(useOpenDSJavaArgsLabel, gbc);
-
- gbc.gridx = 1;
- gbc.gridy ++;
- gbc.insets.top = 10;
- gbc.insets.left = 10;
- p.add(useSpecifiedJavaArgs, gbc);
- useOpenDSJavaArgsLabel.setLabelFor(useSpecifiedJavaArgs);
- useSpecifiedJavaArgs.getAccessibleContext().setAccessibleName(
- INFO_CTRL_PANEL_USE_SPECIFIED_OPENDS_JAVA_ARGS.get() +
- " "+INFO_CTRL_PANEL_USE_SPECIFIED_OPENDS_JAVA_ARGS_HELP.get());
-
- gbc.gridx ++;
- LabelWithHelpIcon useSpecifiedJavaArgsLabel = new LabelWithHelpIcon(
- INFO_CTRL_PANEL_USE_SPECIFIED_OPENDS_JAVA_ARGS.get(),
- INFO_CTRL_PANEL_USE_SPECIFIED_OPENDS_JAVA_ARGS_HELP.get());
- gbc.insets.left = 0;
- p.add(useSpecifiedJavaArgsLabel, gbc);
-
- group = new ButtonGroup();
- group.add(useSpecifiedJavaArgs);
- group.add(useOpenDSJavaArgs);
- useSpecifiedJavaArgsLabel.setLabelFor(useOpenDSJavaArgs);
-
- argumentsTableModel = new JavaArgumentsTableModel();
- LDAPEntryTableCellRenderer renderer = new LDAPEntryTableCellRenderer();
- argumentsTable = Utilities.createSortableTable(argumentsTableModel,
- renderer);
- editor = new AttributeCellEditor();
- if (getInfo() != null)
- {
- editor.setInfo(getInfo());
- }
- argumentsTable.getColumnModel().getColumn(1).setCellEditor(editor);
- renderer.setTable(argumentsTable);
-
- gbc.weightx = 1.0;
- gbc.weighty = 1.0;
- gbc.gridx = 1;
- gbc.insets.top = 10;
- gbc.gridy ++;
- gbc.fill = GridBagConstraints.BOTH;
- gbc.gridwidth = 2;
- argumentsScroll = Utilities.createScrollPane(argumentsTable);
- p.add(argumentsScroll, gbc);
- lInitContents = Utilities.makePlainTextPane(
- READING_JAVA_SETTINGS.toString(),
- ColorAndFontConstants.defaultFont);
- gbc.fill = GridBagConstraints.NONE;
- gbc.anchor = GridBagConstraints.CENTER;
- p.add(lInitContents, gbc);
- lInitContents.setVisible(false);
- gbc.weightx = 0.0;
- gbc.weighty = 0.0;
- gbc.fill = GridBagConstraints.HORIZONTAL;
- gbc.weightx = 1.0;
- gbc.anchor = GridBagConstraints.WEST;
-
- showAll =
- Utilities.createCheckBox(INFO_CTRL_PANEL_DISPLAY_ALL_COMMAND_LINES.get());
- showAll.addActionListener(new ActionListener()
- {
- @Override
- public void actionPerformed(ActionEvent ev)
- {
- editor.stopCellEditing();
- currentJavaArguments = getCurrentJavaArguments();
- argumentsTableModel.setData(filterJavaArguments(currentJavaArguments));
- Utilities.updateTableSizes(argumentsTable, 7);
- }
- });
-
- gbc.gridy ++;
- gbc.insets.top = 5;
- p.add(showAll, gbc);
-
- JLabel inlineHelp = Utilities.createInlineHelpLabel(
- INFO_CTRL_PANEL_ONLINE_COMMAND_HELP.get());
- gbc.insets.top = 3;
- gbc.gridy ++;
- p.add(inlineHelp, gbc);
-
- inlineHelp = Utilities.createInlineHelpLabel(
- INFO_CTRL_PANEL_OFFLINE_COMMAND_HELP.get());
- gbc.gridy ++;
- p.add(inlineHelp, gbc);
-
- // Just to create space.
- Set<JavaArgumentsDescriptor> fakeArguments = new HashSet<>();
- fakeArguments.add(
- new JavaArgumentsDescriptor("start-ds", "-server -XM256j"));
- fakeArguments.add(
- new JavaArgumentsDescriptor("stop-ds", "-client"));
- fakeArguments.add(
- new JavaArgumentsDescriptor("import-ds.online", "-server"));
- fakeArguments.add(
- new JavaArgumentsDescriptor("import-ds.offline", "-server"));
- fakeArguments.add(
- new JavaArgumentsDescriptor("export-ds.online", "-server"));
-
- argumentsTableModel.setData(fakeArguments);
- Utilities.updateTableSizes(argumentsTable, 7);
-
- comps = new JComponent[] {
- javaHome, useOpenDSJavaHome, useSpecifiedJavaHome, browse,
- useOpenDSJavaArgs, useSpecifiedJavaArgs, showAll
- };
- }
-
- @Override
- public void configurationChanged(ConfigurationChangeEvent ev)
- {
- final boolean isLocal = ev.getNewDescriptor().isLocal();
- if (isLocal != previousLocal)
- {
- previousLocal = isLocal;
- SwingUtilities.invokeLater(new Runnable()
- {
- @Override
- public void run()
- {
- if (!isLocal)
- {
- displayErrorMessage(INFO_CTRL_PANEL_SERVER_REMOTE_SUMMARY.get(),
- INFO_CTRL_PANEL_SERVER_MUST_BE_LOCAL_JAVA_PROPERTIES_SUMMARY.get());
- setEnabledOK(false);
- }
- else
- {
- displayMainPanel();
- setEnabledOK(true);
- }
- }
- });
- }
}
@Override
@@ -429,1015 +91,15 @@
{
isLocal = getInfo().getServerDescriptor().isLocal();
}
- if (visible && isLocal && (!initialized || !updatedByUser()))
+ if (visible && isLocal && !initialized)
{
initialized = true;
- initContents();
}
}
- /**
- * Returns the names of all the command-line that can be displayed by this
- * panel.
- * @return the names of all the command-line that can be displayed by this
- * panel.
- */
- private Set<String> getAllCommandLineNames()
- {
- return allScriptNames;
- }
-
- /**
- * Returns the names of the most important command-line to be displayed by
- * this panel.
- * @return the names of the most important command-line to be displayed by
- * this panel.
- */
- private Set<String> getRelevantCommandLineNames()
- {
- return relevantScriptNames;
- }
-
-
-
- /**
- * Returns <CODE>true</CODE> if the user updated the contents and
- * <CODE>false</CODE> otherwise.
- * @return <CODE>true</CODE> if the user updated the contents and
- * <CODE>false</CODE> otherwise.
- */
- private boolean updatedByUser()
- {
- return !javaHome.getText().equals(readJavaHome)
- || useOpenDSJavaHome.isSelected() != readUseOpenDSJavaHome
- || useOpenDSJavaArgs.isSelected() != readUseOpenDSJavaArgs
- || !readJavaArguments.equals(getCurrentJavaArguments());
- }
-
- /**
- * Returns the java arguments specified by the user.
- * @return the java arguments specified by the user.
- */
- private Set<JavaArgumentsDescriptor> getCurrentJavaArguments()
- {
- HashSet<JavaArgumentsDescriptor> args = new HashSet<>(currentJavaArguments);
-
- HashSet<JavaArgumentsDescriptor> tableArgs = new HashSet<>();
- for (int i=0; i<argumentsTableModel.getRowCount(); i++)
- {
- tableArgs.add(argumentsTableModel.getJavaArguments(i));
- }
- for (JavaArgumentsDescriptor arg : tableArgs)
- {
- JavaArgumentsDescriptor foundJavaArgument = null;
- for (JavaArgumentsDescriptor arg1 : args)
- {
- if (arg1.getCommandName().equals(arg.getCommandName()))
- {
- foundJavaArgument = arg1;
- break;
- }
- }
- if (foundJavaArgument != null)
- {
- args.remove(foundJavaArgument);
- }
- args.add(arg);
- }
- return args;
- }
-
-
- /**
- * Filters the provided list of java arguments depending on the showing
- * options (basically whether the 'Show All Command-lines' is selected or
- * not).
- * @param args the list of java arguments.
- * @return a list of filtered java arguments (the ones that must be displayed
- * in the table).
- */
- private Set<JavaArgumentsDescriptor> filterJavaArguments(
- Set<JavaArgumentsDescriptor> args)
- {
- if (showAll.isSelected())
- {
- return args;
- }
- else
- {
- Set<JavaArgumentsDescriptor> filteredArgs = new HashSet<>();
- for (String relevantName : getRelevantCommandLineNames())
- {
- for (JavaArgumentsDescriptor arg : args)
- {
- if (arg.getCommandName().equals(relevantName))
- {
- filteredArgs.add(arg);
- break;
- }
- }
- }
- return filteredArgs;
- }
- }
-
- /** Inits the contents of the table in the background. */
- private void initContents()
- {
- disableComponents();
-
- BackgroundTask<Void> worker = new BackgroundTask<Void>()
- {
- @Override
- public Void processBackgroundTask() throws Throwable
- {
- String propertiesFile = getPropertiesFile();
- Properties properties = new Properties();
- BufferedReader reader = null;
- try
- {
- reader = new BufferedReader(new FileReader(propertiesFile));
- JavaPropertiesTool.updateProperties(reader, properties);
- }
- catch (Throwable t)
- {
- }
- finally
- {
- StaticUtils.close(reader);
- }
-
- String v = properties.getProperty("overwrite-env-java-home");
- readUseOpenDSJavaHome = v == null || "false".equalsIgnoreCase(v.trim());
- v = properties.getProperty("overwrite-env-java-args");
- readUseOpenDSJavaArgs = v == null || "false".equalsIgnoreCase(v.trim());
-
- readJavaHome = properties.getProperty("default.java-home");
- if (readJavaHome == null)
- {
- for (String script : getAllCommandLineNames())
- {
- readJavaHome = properties.getProperty(script+".java-home");
- if (readJavaHome != null)
- {
- break;
- }
- }
- }
-
- readJavaArguments.clear();
- for (String script : getAllCommandLineNames())
- {
- v = properties.getProperty(script+".java-args");
- if (v != null)
- {
- readJavaArguments.add(new JavaArgumentsDescriptor(script, v));
- }
- else
- {
- readJavaArguments.add(new JavaArgumentsDescriptor(script, ""));
- }
- }
-
- return null;
- }
-
- @Override
- public void backgroundTaskCompleted(Void returnValue, Throwable t)
- {
- if (t == null)
- {
- updateContentsOfPanelWithReadValues();
- Utilities.updateTableSizes(argumentsTable, 7);
- }
- else
- {
- String arg;
- if (t instanceof OpenDsException)
- {
- arg = ((OpenDsException)t).getMessageObject().toString();
- }
- else
- {
- arg = t.toString();
- }
- LocalizableMessage title =
- ERR_CTRL_PANEL_ERR_READING_JAVA_SETTINGS_SUMMARY.get();
- LocalizableMessage details =
- ERR_CTRL_PANEL_READING_JAVA_SETTINGS_DETAILS.get(arg);
- updateErrorPane(errorPane, title,
- ColorAndFontConstants.errorTitleFont, details,
- errorPane.getFont());
- packParentDialog();
- errorPane.setVisible(true);
- }
- enableComponents();
- }
- };
- worker.startBackgroundTask();
- }
-
- /**
- * Disables all the components. This is used when we are reading the
- * java settings in the background.
- */
- private void disableComponents()
- {
- setEnabledOK(false);
- lInitContents.setVisible(true);
- argumentsScroll.setVisible(false);
- for (JComponent comp : comps)
- {
- comp.setEnabled(false);
- }
- }
-
- /**
- * Enables all the components. This is used when we are reading the
- * java settings in the background.
- */
- private void enableComponents()
- {
- for (JComponent comp : comps)
- {
- comp.setEnabled(true);
- }
- lInitContents.setVisible(false);
- argumentsScroll.setVisible(true);
- setEnabledOK(true);
- }
-
@Override
- public void cancelClicked()
+ public void configurationChanged(final ConfigurationChangeEvent ev)
{
- updateContentsOfPanelWithReadValues();
- super.cancelClicked();
- }
-
- @Override
- public void okClicked()
- {
- editor.stopCellEditing();
-
- final ArrayList<LocalizableMessage> javaHomeErrors = new ArrayList<>();
- String f = javaHome.getText().trim();
- if (f.length() > 0)
- {
- File file = new File(f);
- if (!file.exists())
- {
- javaHomeErrors.add(ERR_CTRL_PANEL_JAVA_PATH_DOES_NOT_EXIST.get(f));
- }
- else if (!file.isDirectory())
- {
- javaHomeErrors.add(ERR_CTRL_PANEL_JAVA_PATH_NOT_A_DIRECTORY.get(f));
- }
- else
- {
- File javaFile = getJavaFile(file);
- if (!javaFile.exists())
- {
- javaHomeErrors.add(ERR_CTRL_PANEL_JAVA_BINARY_NOT_FOUND.get(javaFile));
- }
- }
- }
- if (javaHomeErrors.isEmpty())
- {
- final Set<String> providedArguments = new HashSet<>();
- for (JavaArgumentsDescriptor cmd : getCurrentJavaArguments())
- {
- String args = cmd.getJavaArguments().trim();
- if (args.length() > 0)
- {
- providedArguments.add(args);
- }
- }
-
- disableComponents();
- lInitContents.setText(
- INFO_CTRL_PANEL_CHECKING_JAVA_OPTIONS_SUMMARY.get().toString());
- BackgroundTask<List<LocalizableMessage>> worker =
- new BackgroundTask<List<LocalizableMessage>>()
- {
- private boolean isConfirmation = false;
- @Override
- public List<LocalizableMessage> processBackgroundTask() throws Throwable
- {
- String[] jvms;
- String userJVM = javaHome.getText();
- ArrayList<LocalizableMessage> errorMessages = new ArrayList<>();
- ArrayList<LocalizableMessage> confirmationMessages = new ArrayList<>();
- String defaultJVM = System.getenv(SetupUtils.OPENDJ_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 installPath = getInfo().getServerDescriptor().
- getInstallPath();
- if (!Utils.supportsOption("", jvm, installPath))
- {
- if (jvm == userJVM && !useSpecifiedJavaHome.isSelected())
- {
- errorMessages.add(
- ERR_CTRL_PANEL_NOT_WORKING_FALLBACK_JVM_DETAILS.get(jvm));
- }
- else
- {
- errorMessages.add(
- ERR_CTRL_PANEL_NOT_WORKING_JVM_DETAILS.get(jvm));
- }
- }
- else
- {
- for (String arg : providedArguments)
- {
- if (!Utils.supportsOption(arg, jvm, installPath))
- {
- notWorkingArgs.add(arg);
- }
- }
- }
- if (!notWorkingArgs.isEmpty())
- {
- File javaFile = getJavaFile(new File(jvm));
- LocalizableMessage confirmationMessage;
- if (useSpecifiedJavaArgs.isSelected())
- {
- confirmationMessage =
- INFO_CTRL_PANEL_CONFIRM_NOT_WORKING_ARGUMENTS_DETAILS.get(
- javaFile,
- Utilities.getStringFromCollection(notWorkingArgs, "<br>-"));
- }
- else
- {
- confirmationMessage =
- INFO_CTRL_PANEL_CONFIRM_NOT_WORKING_FALLBACK_ARGUMENTS_DETAILS.get(
- javaFile,
- Utilities.getStringFromCollection(notWorkingArgs, "<br>-"));
- }
- confirmationMessages.add(confirmationMessage);
- }
- }
- isConfirmation = errorMessages.isEmpty();
- if (!errorMessages.isEmpty())
- {
- return errorMessages;
- }
- else
- {
- return confirmationMessages;
- }
- }
-
- @Override
- public void backgroundTaskCompleted(List<LocalizableMessage> 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();
- }
- LocalizableMessage title =
- ERR_CTRL_PANEL_ERROR_CHECKING_JAVA_SETTINGS_SUMMARY.get();
- LocalizableMessage 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
- {
- if (useSpecifiedJavaHome.isSelected())
- {
- displayErrorDialog(javaHomeErrors);
- }
- else
- {
- ArrayList<String> s = new ArrayList<>();
- for (LocalizableMessage msg : javaHomeErrors)
- {
- s.add(msg.toString());
- }
- ArrayList<LocalizableMessage> msgs = new ArrayList<>();
- LocalizableMessage msg = ERR_CTRL_PANEL_GENERIC_ERROR_FALLBACK_JAVAHOME.get(
- f, Utilities.getStringFromCollection(s, "<br>-"));
- msgs.add(msg);
- displayErrorDialog(msgs);
- }
- }
- }
-
- /**
- * Returns the java binary (the executable) for a given java home.
- * @param javaHome the java home.
- * @return the java binary (the executable) for the provided java home.
- */
- private File getJavaFile(File javaHome)
- {
- File javaFile = new File(javaHome, "bin");
- if (isWindows())
- {
- javaFile = new File(javaFile, "java.exe");
- }
- else
- {
- javaFile = new File(javaFile, "java");
- }
- return javaFile;
- }
-
- private void launchTask()
- {
- ArrayList<LocalizableMessage> errors = new ArrayList<>();
- ProgressDialog dlg = new ProgressDialog(
- Utilities.createFrame(),
- Utilities.getParentDialog(this),
- INFO_CTRL_PANEL_JAVA_PROPERTIES_TITLE.get(), getInfo());
- JavaPropertiesTask newTask = new JavaPropertiesTask(getInfo(), dlg);
- for (Task task : getInfo().getTasks())
- {
- task.canLaunch(newTask, errors);
- }
- if (errors.isEmpty())
- {
- launchOperation(newTask,
- INFO_CTRL_PANEL_UPDATING_JAVA_SETTINGS_SUMMARY.get(),
- INFO_CTRL_PANEL_UPDATING_JAVA_SETTINGS_COMPLETE.get(),
- INFO_CTRL_PANEL_UPDATING_JAVA_SETTINGS_SUCCESSFUL.get(),
- ERR_CTRL_PANEL_UPDATING_JAVA_SETTINGS_ERROR_SUMMARY.get(),
- ERR_CTRL_PANEL_UPDATING_JAVA_SETTINGS_ERROR_DETAILS.get(),
- ERR_CTRL_PANEL_UPDATING_JAVA_SETTINGS_ERROR_CODE,
- dlg);
- dlg.setVisible(true);
- Utilities.getParentDialog(this).setVisible(false);
- readJavaHome = javaHome.getText();
- readUseOpenDSJavaHome = useOpenDSJavaHome.isSelected();
- readUseOpenDSJavaArgs = useOpenDSJavaArgs.isSelected();
- readJavaArguments = getCurrentJavaArguments();
- }
- else
- {
- displayErrorDialog(errors);
- }
- }
-
- /**
- * Returns the file containing the java properties.
- * @return the file containing the java properties.
- */
- private String getPropertiesFile()
- {
- String installPath = getInfo().getServerDescriptor().getInstancePath();
- return Utils.getPath(
- Utilities.getInstanceRootDirectory(installPath).getAbsolutePath(),
- Installation.RELATIVE_JAVA_PROPERTIES_FILE);
- }
-
- private void updateContentsOfPanelWithReadValues()
- {
- if (readJavaHome != null)
- {
- javaHome.setText(readJavaHome);
- }
- else
- {
- javaHome.setText("");
- }
- useOpenDSJavaHome.setSelected(readUseOpenDSJavaHome);
- useSpecifiedJavaHome.setSelected(!readUseOpenDSJavaHome);
- useOpenDSJavaArgs.setSelected(readUseOpenDSJavaArgs);
- useSpecifiedJavaArgs.setSelected(!readUseOpenDSJavaArgs);
- currentJavaArguments.clear();
- currentJavaArguments.addAll(readJavaArguments);
- argumentsTableModel.setData(
- filterJavaArguments(currentJavaArguments));
- }
-
- /** Class containing the command-name and the associated java arguments. */
- private class JavaArgumentsDescriptor
- {
- private String commandName;
- private String javaArguments;
- private int hashCode;
- private String toString;
- /**
- * Constructor of the arguments descriptor.
- * @param commandName the command-line name.
- * @param javaArguments the java arguments.
- */
- public JavaArgumentsDescriptor(String commandName, String javaArguments)
- {
- this.commandName = commandName;
- this.javaArguments = javaArguments;
- hashCode = commandName.hashCode() + javaArguments.hashCode();
- toString = commandName+ ": " +javaArguments;
- }
-
- /**
- * Returns the command-line name.
- * @return the command-line name.
- */
- public String getCommandName()
- {
- return commandName;
- }
- /**
- * Returns the java arguments associated with the command-line.
- * @return the java arguments associated with the command-line.
- */
- public String getJavaArguments()
- {
- return javaArguments;
- }
-
- @Override
- public int hashCode()
- {
- return hashCode;
- }
-
- @Override
- public String toString()
- {
- return toString;
- }
-
- @Override
- public boolean equals(Object o)
- {
- if (o == this)
- {
- return true;
- }
- if (!(o instanceof JavaArgumentsDescriptor))
- {
- return false;
- }
- JavaArgumentsDescriptor desc = (JavaArgumentsDescriptor)o;
- return commandName.equals(desc.getCommandName())
- && javaArguments.equals(desc.getJavaArguments());
- }
- }
-
- /** The table model used to display the java arguments. */
- private class JavaArgumentsTableModel extends SortableTableModel
- implements Comparator<JavaArgumentsDescriptor>
- {
- private static final long serialVersionUID = 8288418995255677560L;
- private final Set<JavaArgumentsDescriptor> data = new HashSet<>();
- private final ArrayList<String[]> dataArray = new ArrayList<>();
- private final ArrayList<JavaArgumentsDescriptor> argsArray = new ArrayList<>();
- private final String[] COLUMN_NAMES = new String[] {
- getHeader(INFO_CTRL_PANEL_COMMAND_LINE_NAME_COLUMN.get(), 40),
- getHeader(INFO_CTRL_PANEL_JAVA_ARGUMENTS_COLUMN.get(), 40)};
- private int sortColumn;
- private boolean sortAscending = true;
-
- /**
- * Sets the data for this table model.
- * @param newData the data for this table model.
- */
- public void setData(Set<JavaArgumentsDescriptor> newData)
- {
- if (!newData.equals(data))
- {
- data.clear();
- data.addAll(newData);
- updateDataArray();
- fireTableDataChanged();
- }
- }
-
- /**
- * Compares two java argument descriptors.
- * @param desc1 the first java argument descriptor.
- * @param desc2 the second java argument descriptor.
- * @return 1 if in terms of comparison the first element goes higher than
- * the second one. Returns 0 if both elements are equal in terms of
- * comparison. Returns -1 if the second element goes higher than the first
- * one.
- */
- @Override
- public int compare(JavaArgumentsDescriptor desc1,
- JavaArgumentsDescriptor desc2)
- {
- int result;
- int[] possibleResults = {
- desc1.getCommandName().compareTo(desc2.getCommandName()),
- desc1.getJavaArguments().compareTo(desc2.getJavaArguments())};
- result = possibleResults[sortColumn];
- if (result == 0)
- {
- for (int i : possibleResults)
- {
- if (i != 0)
- {
- result = i;
- break;
- }
- }
- }
- if (!sortAscending)
- {
- result = -result;
- }
- return result;
- }
-
- /**
- * Updates the table model contents and sorts its contents depending on the
- * sort options set by the user.
- */
- @Override
- public void forceResort()
- {
- updateDataArray();
- fireTableDataChanged();
- }
-
-
-
- @Override
- public int getColumnCount()
- {
- return COLUMN_NAMES.length;
- }
-
- @Override
- public int getRowCount()
- {
- return dataArray.size();
- }
-
- @Override
- public Object getValueAt(int row, int col)
- {
- return dataArray.get(row)[col];
- }
-
- @Override
- public String getColumnName(int col) {
- return COLUMN_NAMES[col];
- }
-
- /**
- * Returns the java argument descriptor in the provided row.
- * @param row the row number.
- * @return the java argument descriptor in the provided row.
- */
- private JavaArgumentsDescriptor getJavaArguments(int row)
- {
- return argsArray.get(row);
- }
-
-
- /**
- * Returns whether the sort is ascending or descending.
- * @return <CODE>true</CODE> if the sort is ascending and <CODE>false</CODE>
- * otherwise.
- */
- @Override
- public boolean isSortAscending()
- {
- return sortAscending;
- }
-
- /**
- * Sets whether to sort ascending of descending.
- * @param sortAscending whether to sort ascending or descending.
- */
- @Override
- public void setSortAscending(boolean sortAscending)
- {
- this.sortAscending = sortAscending;
- }
-
- /**
- * Returns the column index used to sort.
- * @return the column index used to sort.
- */
- @Override
- public int getSortColumn()
- {
- return sortColumn;
- }
-
- /**
- * Sets the column index used to sort.
- * @param sortColumn column index used to sort..
- */
- @Override
- public void setSortColumn(int sortColumn)
- {
- this.sortColumn = sortColumn;
- }
-
- @Override
- public boolean isCellEditable(int row, int col) {
- return col != 0;
- }
-
- @Override
- public void setValueAt(Object value, int row, int col)
- {
- dataArray.get(row)[col] = (String)value;
- JavaArgumentsDescriptor currentArg = argsArray.get(row);
- JavaArgumentsDescriptor newArg =
- new JavaArgumentsDescriptor(currentArg.getCommandName(), (String)value);
- argsArray.set(row, newArg);
- data.remove(currentArg);
- data.add(newArg);
- fireTableCellUpdated(row, col);
- }
-
- private void updateDataArray()
- {
- TreeSet<JavaArgumentsDescriptor> sortedSet = new TreeSet<>(this);
- sortedSet.addAll(data);
- dataArray.clear();
- argsArray.clear();
- for (JavaArgumentsDescriptor arg : sortedSet)
- {
- String[] s = getLine(arg);
- dataArray.add(s);
- argsArray.add(arg);
- }
- }
-
- /**
- * Returns an array of String with the String representation of the cells
- * in the table.
- * @param desc the java argument descriptor for which we want to get the
- * cells.
- * @return an array of String with the String representation of the cells
- * in the table.
- */
- private String[] getLine(JavaArgumentsDescriptor desc)
- {
- String cmd = desc.getCommandName();
- if (cmd.equalsIgnoreCase("start-ds"))
- {
- cmd = INFO_CTRL_PANEL_SERVER_RUNTIME_CELL.get(
- desc.getCommandName()).toString();
- }
- else if (cmd.endsWith(".online"))
- {
- int index = cmd.lastIndexOf(".online");
- cmd = INFO_CTRL_PANEL_ONLINE_COMMAND_LINE_CELL.get(
- cmd.substring(0, index)).toString();
- }
- else if (desc.getCommandName().endsWith(".offline"))
- {
- int index = cmd.lastIndexOf(".offline");
- cmd = INFO_CTRL_PANEL_OFFLINE_COMMAND_LINE_CELL.get(
- cmd.substring(0, index)).toString();
- }
- return new String[] {cmd, desc.getJavaArguments()};
- }
- }
-
- /** The task in charge of updating the java properties. */
- private class JavaPropertiesTask extends Task
- {
- private final Set<String> backendSet;
- private String defaultJavaHome;
- private final boolean overwriteOpenDSJavaHome;
- private final boolean overwriteOpenDSJavaArgs;
- private final Set<JavaArgumentsDescriptor> arguments;
-
- /**
- * The constructor of the task.
- * @param info the control panel info.
- * @param dlg the progress dialog that shows the progress of the task.
- */
- private JavaPropertiesTask(ControlPanelInfo info, ProgressDialog dlg)
- {
- super(info, dlg);
- backendSet = new HashSet<>();
- defaultJavaHome = javaHome.getText().trim();
- overwriteOpenDSJavaHome = useSpecifiedJavaHome.isSelected();
- overwriteOpenDSJavaArgs = useSpecifiedJavaArgs.isSelected();
- arguments = getCurrentJavaArguments();
- }
-
- @Override
- public Type getType()
- {
- return Type.JAVA_SETTINGS_UPDATE;
- }
-
- @Override
- public Set<String> getBackends()
- {
- return backendSet;
- }
-
- @Override
- public LocalizableMessage getTaskDescription()
- {
- return INFO_CTRL_PANEL_UPDATE_JAVA_SETTINGS_TASK_DESCRIPTION.get();
- }
-
- @Override
- public boolean canLaunch(Task taskToBeLaunched,
- Collection<LocalizableMessage> incompatibilityReasons)
- {
- if (!isServerRunning()
- && state == State.RUNNING
- && runningOnSameServer(taskToBeLaunched))
- {
- // All the operations are incompatible if they apply to this
- // backend for safety. This is a short operation so the limitation
- // has not a lot of impact.
- Set<String> backends = new TreeSet<>(taskToBeLaunched.getBackends());
- backends.retainAll(getBackends());
- if (!backends.isEmpty())
- {
- incompatibilityReasons.add(getIncompatibilityMessage(this, taskToBeLaunched));
- return false;
- }
- }
- return true;
- }
-
- @Override
- protected String getCommandLinePath()
- {
- return null;
- }
-
- @Override
- protected ArrayList<String> getCommandLineArguments()
- {
- return new ArrayList<>();
- }
-
- @Override
- public void runTask()
- {
- state = State.RUNNING;
- lastException = null;
-
- try
- {
- returnCode = updateJavaSettings();
- if (returnCode == 0)
- {
- state = State.FINISHED_SUCCESSFULLY;
- }
- else
- {
- state = State.FINISHED_WITH_ERROR;
- }
- }
- catch (Throwable t)
- {
- lastException = t;
- state = State.FINISHED_WITH_ERROR;
- }
- }
-
- private int updateJavaSettings() throws IOException
- {
- final String propertiesFile = getPropertiesFile();
- ArrayList<String> commentLines = new ArrayList<>();
- BufferedReader reader = null;
- try
- {
- reader = new BufferedReader(new FileReader(propertiesFile));
- String line;
- while ((line = reader.readLine()) != null)
- {
- String trimmedLine = line.trim();
- if (trimmedLine.startsWith("#") || trimmedLine.length() == 0)
- {
- commentLines.add(line);
- }
- else
- {
- break;
- }
- }
- }
- catch (IOException ioe)
- {
- // Not critical.
- }
- finally
- {
- StaticUtils.close(reader);
- }
-
- BufferedWriter writer = null;
- try
- {
- writer = new BufferedWriter(new FileWriter(propertiesFile, false));
- for (String comment : commentLines)
- {
- writer.write(comment);
- writer.newLine();
- }
- writer.newLine();
- writer.write("overwrite-env-java-home="+overwriteOpenDSJavaHome);
- writer.newLine();
- writer.write("overwrite-env-java-args="+overwriteOpenDSJavaArgs);
- writer.newLine();
- writer.newLine();
- if (defaultJavaHome != null && defaultJavaHome.length() > 0)
- {
- writer.write("default.java-home="+defaultJavaHome);
- writer.newLine();
- writer.newLine();
- }
- for (JavaArgumentsDescriptor desc : arguments)
- {
- String args = desc.getJavaArguments();
- if (args.trim().length() > 0)
- {
- writer.newLine();
- writer.write(desc.getCommandName()+".java-args="+args);
- }
- }
- }
- finally
- {
- StaticUtils.close(writer);
- }
- SwingUtilities.invokeLater(new Runnable()
- {
- @Override
- public void run()
- {
- getProgressDialog().appendProgressHtml(Utilities.applyFont(
- INFO_CTRL_PANEL_EQUIVALENT_ACTION_TO_UPDATE_JAVA_PROPERTIES.get(
- propertiesFile, getCommandLinePath("dsjavaproperties")).
- toString(),
- ColorAndFontConstants.progressFont));
- }
- });
-
- // Launch the script
- String[] args =
- {
- "--quiet"
- };
-
- return JavaPropertiesTool.mainCLI(args);
- }
+ // Nothing to do
}
}
--
Gitblit v1.10.0