From 7a79845d216f2efbc447c3ba4c5c3a992be0f42f Mon Sep 17 00:00:00 2001
From: Gaetan Boismal <gaetan.boismal@forgerock.com>
Date: Mon, 11 Apr 2016 17:22:17 +0000
Subject: [PATCH] Code cleanup: Merge Installer and OfflineInstaller
---
opendj-server-legacy/src/main/java/org/opends/server/tools/dsreplication/ReplicationCliMain.java | 3
/dev/null | 23 --
opendj-server-legacy/src/main/java/org/opends/quicksetup/Application.java | 4
opendj-server-legacy/src/main/java/org/opends/server/tools/InstallDS.java | 4
opendj-server-legacy/src/main/java/org/opends/quicksetup/installer/Installer.java | 487 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
opendj-server-legacy/src/main/java/org/opends/quicksetup/installer/SetupLauncher.java | 4
opendj-server-legacy/src/main/java/org/opends/quicksetup/ApplicationException.java | 3
7 files changed, 493 insertions(+), 35 deletions(-)
diff --git a/opendj-server-legacy/src/main/java/org/opends/quicksetup/Application.java b/opendj-server-legacy/src/main/java/org/opends/quicksetup/Application.java
index 49634ab..78e7df7 100644
--- a/opendj-server-legacy/src/main/java/org/opends/quicksetup/Application.java
+++ b/opendj-server-legacy/src/main/java/org/opends/quicksetup/Application.java
@@ -707,7 +707,7 @@
/**
* This class is used to notify the ProgressUpdateListeners of events
- * that are written to the standard error. It is used in OfflineInstaller.
+ * that are written to the standard error. It is used in Installer.
* These classes just create a ErrorPrintStream and
* then they do a call to System.err with it.
*
@@ -737,7 +737,7 @@
/**
* This class is used to notify the ProgressUpdateListeners of events
* that are written to the standard output. It is used in WebStartInstaller
- * and in OfflineInstaller. These classes just create a OutputPrintStream and
+ * and in Installer. These classes just create a OutputPrintStream and
* then they do a call to System.out with it.
*
* The class just reads what is written to the standard output, obtains an
diff --git a/opendj-server-legacy/src/main/java/org/opends/quicksetup/ApplicationException.java b/opendj-server-legacy/src/main/java/org/opends/quicksetup/ApplicationException.java
index f584958..8b9ab25 100644
--- a/opendj-server-legacy/src/main/java/org/opends/quicksetup/ApplicationException.java
+++ b/opendj-server-legacy/src/main/java/org/opends/quicksetup/ApplicationException.java
@@ -12,7 +12,7 @@
* information: "Portions Copyright [year] [name of copyright owner]".
*
* Copyright 2006-2008 Sun Microsystems, Inc.
- * Portions Copyright 2014-2015 ForgeRock AS.
+ * Portions Copyright 2014-2016 ForgeRock AS.
*/
package org.opends.quicksetup;
import org.forgerock.i18n.LocalizableMessage;
@@ -24,7 +24,6 @@
* during the installation.
*
* @see org.opends.quicksetup.installer.Installer
- * @see org.opends.quicksetup.installer.offline.OfflineInstaller
*/
public class ApplicationException extends OpenDsException {
diff --git a/opendj-server-legacy/src/main/java/org/opends/quicksetup/installer/Installer.java b/opendj-server-legacy/src/main/java/org/opends/quicksetup/installer/Installer.java
index 048c34a..57d4252 100644
--- a/opendj-server-legacy/src/main/java/org/opends/quicksetup/installer/Installer.java
+++ b/opendj-server-legacy/src/main/java/org/opends/quicksetup/installer/Installer.java
@@ -16,6 +16,7 @@
*/
package org.opends.quicksetup.installer;
+import static com.forgerock.opendj.util.OperatingSystem.isWindows;
import static org.forgerock.util.Utils.*;
import static org.opends.admin.ads.ServerDescriptor.*;
import static org.opends.admin.ads.ServerDescriptor.ServerProperty.*;
@@ -33,7 +34,9 @@
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
+import java.io.PrintStream;
import java.net.URI;
+import java.security.KeyStoreException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
@@ -117,6 +120,7 @@
import org.opends.quicksetup.ui.UIFactory;
import org.opends.quicksetup.util.FileManager;
import org.opends.quicksetup.util.IncompatibleVersionException;
+import org.opends.quicksetup.util.ServerController;
import org.opends.quicksetup.util.Utils;
import org.opends.server.tools.BackendTypeHelper;
import org.opends.server.tools.BackendTypeHelper.BackendTypeUIAdapter;
@@ -145,7 +149,7 @@
* Note that we can use freely the class org.opends.server.util.SetupUtils as
* it is included in quicksetup.jar.
*/
-public abstract class Installer extends GuiApplication
+public class Installer extends GuiApplication
{
/** The minimum integer value that can be used for a port. */
public static final int MIN_PORT_VALUE = 1;
@@ -222,6 +226,487 @@
*/
public static final int THRESHOLD_CLOCK_DIFFERENCE_WARNING = 5;
+ /** This map contains the ratio associated with each step. */
+ private final Map<ProgressStep, Integer> hmRatio = new HashMap<>();
+ /** This map contains the summary associated with each step. */
+ private final Map<ProgressStep, LocalizableMessage> hmSummary = new HashMap<>();
+
+ private ApplicationException runError;
+
+ /**
+ * Actually performs the install in this thread. The thread is blocked.
+ */
+ @Override
+ public void run()
+ {
+ runError = null;
+ PrintStream origErr = System.err;
+ PrintStream origOut = System.out;
+ try
+ {
+ initMaps();
+ System.setErr(getApplicationErrorStream());
+ System.setOut(getApplicationOutputStream());
+ checkAbort();
+
+ setCurrentProgressStep(InstallProgressStep.CONFIGURING_SERVER);
+ notifyListenersOfLog(false);
+ notifyListeners(getLineBreak());
+ configureServer();
+ checkAbort();
+
+ LicenseFile.createFileLicenseApproved(getInstallationPath());
+ checkAbort();
+
+ createData();
+ checkAbort();
+
+ if (isWindows() && getUserData().getEnableWindowsService())
+ {
+ if (isVerbose())
+ {
+ notifyListeners(getTaskSeparator());
+ }
+ setCurrentProgressStep(InstallProgressStep.ENABLING_WINDOWS_SERVICE);
+ enableWindowsService();
+ checkAbort();
+ }
+
+ if (mustStart())
+ {
+ if (isStartVerbose())
+ {
+ notifyListeners(getTaskSeparator());
+ }
+ setCurrentProgressStep(InstallProgressStep.STARTING_SERVER);
+ PointAdder pointAdder = new PointAdder();
+ if (!isStartVerbose())
+ {
+ notifyListeners(getFormattedProgress(
+ INFO_PROGRESS_STARTING_NON_VERBOSE.get()));
+ pointAdder.start();
+ }
+ try
+ {
+ new ServerController(this).startServer(!isStartVerbose());
+ }
+ finally
+ {
+ if (!isStartVerbose())
+ {
+ pointAdder.stop();
+ }
+ }
+ if (!isStartVerbose())
+ {
+ notifyListeners(getFormattedDoneWithLineBreak());
+ }
+ else
+ {
+ notifyListeners(getLineBreak());
+ }
+ checkAbort();
+ }
+
+ if (mustCreateAds())
+ {
+ if (isVerbose())
+ {
+ notifyListeners(getTaskSeparator());
+ }
+ setCurrentProgressStep(InstallProgressStep.CONFIGURING_ADS);
+ updateADS();
+ checkAbort();
+ }
+
+ if (mustConfigureReplication())
+ {
+ if (isVerbose())
+ {
+ notifyListeners(getTaskSeparator());
+ }
+ setCurrentProgressStep(InstallProgressStep.CONFIGURING_REPLICATION);
+ createReplicatedBackendsIfRequired();
+ configureReplication();
+ checkAbort();
+ }
+
+ if (mustInitializeSuffixes())
+ {
+ if (isVerbose())
+ {
+ notifyListeners(getTaskSeparator());
+ }
+ setCurrentProgressStep(
+ InstallProgressStep.INITIALIZE_REPLICATED_SUFFIXES);
+ initializeSuffixes();
+ checkAbort();
+ }
+
+ if (mustStop())
+ {
+ if (isVerbose())
+ {
+ notifyListeners(getTaskSeparator());
+ }
+ setCurrentProgressStep(InstallProgressStep.STOPPING_SERVER);
+ if (!isVerbose())
+ {
+ notifyListeners(getFormattedWithPoints(
+ INFO_PROGRESS_STOPPING_NON_VERBOSE.get()));
+ }
+ new ServerController(this).stopServer(!isVerbose());
+ if (!isVerbose())
+ {
+ notifyListeners(getFormattedDoneWithLineBreak());
+ }
+ }
+
+ checkAbort();
+ updateSummaryWithServerState(hmSummary, true);
+ setCurrentProgressStep(InstallProgressStep.FINISHED_SUCCESSFULLY);
+ notifyListeners(null);
+ tempLogFile.deleteLogFileAfterSuccess();
+ } catch (ApplicationException ex)
+ {
+ logger.error(LocalizableMessage.raw("Caught exception: "+ex, ex));
+ if (ReturnCode.CANCELED.equals(ex.getType())) {
+ uninstall();
+ setCurrentProgressStep(InstallProgressStep.FINISHED_CANCELED);
+ notifyListeners(null);
+ } else {
+ // Stop the server if necessary
+ Installation installation = getInstallation();
+ if (installation.getStatus().isServerRunning()) {
+ try {
+ if (!isVerbose())
+ {
+ notifyListeners(getFormattedWithPoints(
+ INFO_PROGRESS_STOPPING_NON_VERBOSE.get()));
+ }
+ new ServerController(installation).stopServer(!isVerbose());
+ if (!isVerbose())
+ {
+ notifyListeners(getFormattedDoneWithLineBreak());
+ }
+ } catch (Throwable t) {
+ logger.info(LocalizableMessage.raw("error stopping server", t));
+ }
+ }
+ notifyListeners(getLineBreak());
+ updateSummaryWithServerState(hmSummary, true);
+ setCurrentProgressStep(InstallProgressStep.FINISHED_WITH_ERROR);
+ LocalizableMessage html = getFormattedError(ex, true);
+ notifyListeners(html);
+ logger.error(LocalizableMessage.raw("Error installing.", ex));
+ notifyListeners(getLineBreak());
+ notifyListenersOfLog(true);
+ }
+ runError = ex;
+ }
+ catch (Throwable t)
+ {
+ // Stop the server if necessary
+ Installation installation = getInstallation();
+ if (installation.getStatus().isServerRunning()) {
+ try {
+ if (!isVerbose())
+ {
+ notifyListeners(getFormattedWithPoints(
+ INFO_PROGRESS_STOPPING_NON_VERBOSE.get()));
+ }
+ new ServerController(installation).stopServer(!isVerbose());
+ if (!isVerbose())
+ {
+ notifyListeners(getFormattedDoneWithLineBreak());
+ }
+ } catch (Throwable t2) {
+ logger.info(LocalizableMessage.raw("error stopping server", t2));
+ }
+ }
+ notifyListeners(getLineBreak());
+ updateSummaryWithServerState(hmSummary, true);
+ setCurrentProgressStep(InstallProgressStep.FINISHED_WITH_ERROR);
+ ApplicationException ex = new ApplicationException(
+ ReturnCode.BUG,
+ getThrowableMsg(INFO_BUG_MSG.get(), t), t);
+ LocalizableMessage msg = getFormattedError(ex, true);
+ notifyListeners(msg);
+ logger.error(LocalizableMessage.raw("Error installing.", t));
+ notifyListeners(getLineBreak());
+ notifyListenersOfLog(true);
+ runError = ex;
+ }
+ finally
+ {
+ System.setErr(origErr);
+ System.setOut(origOut);
+ }
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public Integer getRatio(ProgressStep status)
+ {
+ return hmRatio.get(status);
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public LocalizableMessage getSummary(ProgressStep status)
+ {
+ return hmSummary.get(status);
+ }
+
+ /**
+ * Returns the exception from the run() method, if any.
+ * @return the ApplicationException raised during the run() method, if any.
+ * null otherwise.
+ */
+ public ApplicationException getRunError()
+ {
+ return runError;
+ }
+
+ /**
+ * Called when the user elects to cancel this operation.
+ */
+ protected void uninstall() {
+
+ notifyListeners(getTaskSeparator());
+ if (!isVerbose())
+ {
+ notifyListeners(getFormattedWithPoints(INFO_PROGRESS_CANCELING.get()));
+ }
+ else
+ {
+ notifyListeners(
+ getFormattedProgressWithLineBreak(INFO_SUMMARY_CANCELING.get()));
+ }
+ Installation installation = getInstallation();
+ FileManager fm = new FileManager(this);
+
+ // Stop the server if necessary
+ if (installation.getStatus().isServerRunning()) {
+ try {
+ if (!isVerbose())
+ {
+ notifyListeners(getFormattedWithPoints(
+ INFO_PROGRESS_STOPPING_NON_VERBOSE.get()));
+ }
+ new ServerController(installation).stopServer(!isVerbose());
+ if (!isVerbose())
+ {
+ notifyListeners(getFormattedDoneWithLineBreak());
+ }
+ } catch (ApplicationException e) {
+ logger.info(LocalizableMessage.raw("error stopping server", e));
+ }
+ }
+
+ uninstallServices();
+
+ // Revert to the base configuration
+ try {
+ File newConfig = fm.copy(installation.getBaseConfigurationFile(),
+ installation.getConfigurationDirectory(),
+ /*overwrite=*/true);
+ fm.rename(newConfig, installation.getCurrentConfigurationFile());
+
+ } catch (ApplicationException ae) {
+ logger.info(LocalizableMessage.raw("failed to restore base configuration", ae));
+ }
+
+ // Cleanup SSL if necessary
+ SecurityOptions sec = getUserData().getSecurityOptions();
+ if (sec.getEnableSSL() || sec.getEnableStartTLS()) {
+ if (SecurityOptions.CertificateType.SELF_SIGNED_CERTIFICATE.equals(
+ sec.getCertificateType())) {
+ CertificateManager cm = new CertificateManager(
+ getSelfSignedKeystorePath(),
+ CertificateManager.KEY_STORE_TYPE_JKS,
+ getSelfSignedCertificatePwd());
+ try {
+ for (String alias : SELF_SIGNED_CERT_ALIASES)
+ {
+ if (cm.aliasInUse(alias))
+ {
+ cm.removeCertificate(alias);
+ }
+ }
+ } catch (KeyStoreException e) {
+ logger.info(LocalizableMessage.raw("Error deleting self signed certification", e));
+ }
+ }
+
+ File keystore = new File(installation.getConfigurationDirectory(),
+ "keystore");
+ if (keystore.exists()) {
+ try {
+ fm.delete(keystore);
+ } catch (ApplicationException e) {
+ logger.info(LocalizableMessage.raw("Failed to delete keystore", e));
+ }
+ }
+
+ File keystorePin = new File(installation.getConfigurationDirectory(),
+ "keystore.pin");
+ if (keystorePin.exists()) {
+ try {
+ fm.delete(keystorePin);
+ } catch (ApplicationException e) {
+ logger.info(LocalizableMessage.raw("Failed to delete keystore.pin", e));
+ }
+ }
+
+ File truststore = new File(installation.getConfigurationDirectory(),
+ "truststore");
+ if (truststore.exists()) {
+ try {
+ fm.delete(truststore);
+ } catch (ApplicationException e) {
+ logger.info(LocalizableMessage.raw("Failed to delete truststore", e));
+ }
+ }
+ }
+
+ // Remove the databases
+ try {
+ fm.deleteChildren(installation.getDatabasesDirectory());
+ } catch (ApplicationException e) {
+ logger.info(LocalizableMessage.raw("Error deleting databases", e));
+ }
+
+ if (!isVerbose())
+ {
+ notifyListeners(getFormattedDoneWithLineBreak());
+ }
+ }
+
+ private void initMaps()
+ {
+ initSummaryMap(hmSummary, true);
+
+ /*
+ * hmTime contains the relative time that takes for each task to be
+ * accomplished. For instance if downloading takes twice the time of
+ * extracting, the value for downloading will be the double of the value for
+ * extracting.
+ */
+ Map<ProgressStep, Integer> hmTime = new HashMap<>();
+ hmTime.put(InstallProgressStep.CONFIGURING_SERVER, 5);
+ hmTime.put(InstallProgressStep.CREATING_BASE_ENTRY, 10);
+ hmTime.put(InstallProgressStep.IMPORTING_LDIF, 20);
+ hmTime.put(InstallProgressStep.IMPORTING_AUTOMATICALLY_GENERATED, 20);
+ hmTime.put(InstallProgressStep.CONFIGURING_REPLICATION, 10);
+ hmTime.put(InstallProgressStep.ENABLING_WINDOWS_SERVICE, 5);
+ hmTime.put(InstallProgressStep.STARTING_SERVER, 10);
+ hmTime.put(InstallProgressStep.STOPPING_SERVER, 5);
+ hmTime.put(InstallProgressStep.CONFIGURING_ADS, 5);
+ hmTime.put(InstallProgressStep.INITIALIZE_REPLICATED_SUFFIXES, 25);
+
+ int totalTime = 0;
+ List<InstallProgressStep> steps = new ArrayList<>();
+ totalTime += hmTime.get(InstallProgressStep.CONFIGURING_SERVER);
+ steps.add(InstallProgressStep.CONFIGURING_SERVER);
+ if (createNotReplicatedSuffix())
+ {
+ switch (getUserData().getNewSuffixOptions().getType())
+ {
+ case CREATE_BASE_ENTRY:
+ steps.add(InstallProgressStep.CREATING_BASE_ENTRY);
+ totalTime += hmTime.get(InstallProgressStep.CREATING_BASE_ENTRY);
+ break;
+ case IMPORT_FROM_LDIF_FILE:
+ steps.add(InstallProgressStep.IMPORTING_LDIF);
+ totalTime += hmTime.get(InstallProgressStep.IMPORTING_LDIF);
+ break;
+ case IMPORT_AUTOMATICALLY_GENERATED_DATA:
+ steps.add(InstallProgressStep.IMPORTING_AUTOMATICALLY_GENERATED);
+ totalTime += hmTime.get(
+ InstallProgressStep.IMPORTING_AUTOMATICALLY_GENERATED);
+ break;
+ }
+ }
+
+ if (isWindows() && getUserData().getEnableWindowsService())
+ {
+ totalTime += hmTime.get(InstallProgressStep.ENABLING_WINDOWS_SERVICE);
+ steps.add(InstallProgressStep.ENABLING_WINDOWS_SERVICE);
+ }
+
+ if (mustStart())
+ {
+ totalTime += hmTime.get(InstallProgressStep.STARTING_SERVER);
+ steps.add(InstallProgressStep.STARTING_SERVER);
+ }
+
+ if (mustCreateAds())
+ {
+ totalTime += hmTime.get(InstallProgressStep.CONFIGURING_ADS);
+ steps.add(InstallProgressStep.CONFIGURING_ADS);
+ }
+
+ if (mustConfigureReplication())
+ {
+ steps.add(InstallProgressStep.CONFIGURING_REPLICATION);
+ totalTime += hmTime.get(InstallProgressStep.CONFIGURING_REPLICATION);
+ }
+
+ if (mustInitializeSuffixes())
+ {
+ totalTime += hmTime.get(
+ InstallProgressStep.INITIALIZE_REPLICATED_SUFFIXES);
+ steps.add(InstallProgressStep.INITIALIZE_REPLICATED_SUFFIXES);
+ }
+
+ if (mustStop())
+ {
+ totalTime += hmTime.get(InstallProgressStep.STOPPING_SERVER);
+ steps.add(InstallProgressStep.STOPPING_SERVER);
+ }
+
+ int cumulatedTime = 0;
+ for (InstallProgressStep s : steps)
+ {
+ Integer statusTime = hmTime.get(s);
+ hmRatio.put(s, (100 * cumulatedTime) / totalTime);
+ if (statusTime != null)
+ {
+ cumulatedTime += statusTime;
+ }
+ }
+ hmRatio.put(InstallProgressStep.FINISHED_SUCCESSFULLY, 100);
+ hmRatio.put(InstallProgressStep.FINISHED_WITH_ERROR, 100);
+ hmRatio.put(InstallProgressStep.FINISHED_CANCELED, 100);
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public String getInstallationPath()
+ {
+ return Utils.getInstallPathFromClasspath();
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public String getInstancePath()
+ {
+ String installPath = Utils.getInstallPathFromClasspath();
+ return Utils.getInstancePathFromInstallPath(installPath);
+ }
+
+ private void notifyListenersOfLog(final boolean isError)
+ {
+ if (tempLogFile.isEnabled())
+ {
+ final String tempLogFilePath = tempLogFile.getPath();
+ notifyListeners(getFormattedProgress(isError ? INFO_GENERAL_PROVIDE_LOG_IN_ERROR.get(tempLogFilePath)
+ : INFO_GENERAL_SEE_FOR_DETAILS.get(tempLogFilePath)));
+ notifyListeners(getLineBreak());
+ }
+ }
+
/** Creates a default instance. */
public Installer()
{
diff --git a/opendj-server-legacy/src/main/java/org/opends/quicksetup/installer/SetupLauncher.java b/opendj-server-legacy/src/main/java/org/opends/quicksetup/installer/SetupLauncher.java
index c023961..cdeaa67 100644
--- a/opendj-server-legacy/src/main/java/org/opends/quicksetup/installer/SetupLauncher.java
+++ b/opendj-server-legacy/src/main/java/org/opends/quicksetup/installer/SetupLauncher.java
@@ -25,7 +25,6 @@
import org.opends.quicksetup.Installation;
import org.opends.quicksetup.Launcher;
import org.opends.quicksetup.ReturnCode;
-import org.opends.quicksetup.installer.offline.OfflineInstaller;
import org.opends.quicksetup.util.IncompatibleVersionException;
import org.opends.quicksetup.util.Utils;
import org.opends.server.tools.InstallDS;
@@ -149,8 +148,7 @@
@Override
protected void willLaunchGui() {
System.out.println(INFO_SETUP_LAUNCHER_LAUNCHING_GUI.get());
- System.setProperty("org.opends.quicksetup.Application.class",
- OfflineInstaller.class.getName());
+ System.setProperty("org.opends.quicksetup.Application.class", Installer.class.getName());
}
@Override
diff --git a/opendj-server-legacy/src/main/java/org/opends/quicksetup/installer/offline/OfflineInstaller.java b/opendj-server-legacy/src/main/java/org/opends/quicksetup/installer/offline/OfflineInstaller.java
deleted file mode 100644
index 0b158fe..0000000
--- a/opendj-server-legacy/src/main/java/org/opends/quicksetup/installer/offline/OfflineInstaller.java
+++ /dev/null
@@ -1,558 +0,0 @@
-/*
- * The contents of this file are subject to the terms of the Common Development and
- * Distribution License (the License). You may not use this file except in compliance with the
- * License.
- *
- * You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the
- * specific language governing permission and limitations under the License.
- *
- * When distributing Covered Software, include this CDDL Header Notice in each file and include
- * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
- * Header, with the fields enclosed by brackets [] replaced by your own identifying
- * information: "Portions Copyright [year] [name of copyright owner]".
- *
- * Copyright 2006-2010 Sun Microsystems, Inc.
- * Portions Copyright 2011-2016 ForgeRock AS.
- */
-package org.opends.quicksetup.installer.offline;
-
-import org.forgerock.i18n.LocalizableMessage;
-import static org.opends.messages.QuickSetupMessages.*;
-import static com.forgerock.opendj.util.OperatingSystem.isWindows;
-import static com.forgerock.opendj.cli.Utils.getThrowableMsg;
-
-import java.io.PrintStream;
-import java.io.File;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.forgerock.i18n.slf4j.LocalizedLogger;
-import java.security.KeyStoreException;
-
-import org.opends.quicksetup.ApplicationException;
-import org.opends.quicksetup.LicenseFile;
-import org.opends.quicksetup.ReturnCode;
-import org.opends.quicksetup.ProgressStep;
-import org.opends.quicksetup.Installation;
-import org.opends.quicksetup.SecurityOptions;
-import org.opends.quicksetup.installer.InstallProgressStep;
-import org.opends.quicksetup.installer.Installer;
-import org.opends.quicksetup.util.Utils;
-import org.opends.quicksetup.util.ServerController;
-import org.opends.quicksetup.util.FileManager;
-import org.opends.server.util.CertificateManager;
-
-/**
- * This is an implementation of the Installer class that is used to install
- * the Directory Server from a zip file. The installer assumes that the zip
- * file contents have been unzipped.
- *
- * It just takes a UserData object and based on that installs OpenDS.
- *
- * When there is an update during the installation it will notify the
- * ProgressUpdateListener objects that have been added to it. The notification
- * will send a ProgressUpdateEvent.
- *
- * This class is supposed to be fully independent of the graphical layout.
- *
- */
-public class OfflineInstaller extends Installer
-{
- private static final LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass();
-
- /** This map contains the ratio associated with each step. */
- private final Map<ProgressStep, Integer> hmRatio = new HashMap<>();
- /** This map contains the summary associated with each step. */
- private final Map<ProgressStep, LocalizableMessage> hmSummary = new HashMap<>();
-
- private ApplicationException runError;
-
- /**
- * Actually performs the install in this thread. The thread is blocked.
- */
- @Override
- public void run()
- {
- runError = null;
- PrintStream origErr = System.err;
- PrintStream origOut = System.out;
- try
- {
- initMaps();
-
- System.setErr(getApplicationErrorStream());
- System.setOut(getApplicationOutputStream());
-
- checkAbort();
-
- setCurrentProgressStep(InstallProgressStep.CONFIGURING_SERVER);
-
- notifyListenersOfLog(false);
- notifyListeners(getLineBreak());
-
- configureServer();
-
- checkAbort();
-
- // create license accepted file
- LicenseFile.createFileLicenseApproved(getInstallationPath());
-
- checkAbort() ;
-
- createData();
-
- checkAbort();
-
- if (isWindows() && getUserData().getEnableWindowsService())
- {
- if (isVerbose())
- {
- notifyListeners(getTaskSeparator());
- }
- setCurrentProgressStep(InstallProgressStep.ENABLING_WINDOWS_SERVICE);
- enableWindowsService();
- checkAbort();
- }
-
- if (mustStart())
- {
- if (isStartVerbose())
- {
- notifyListeners(getTaskSeparator());
- }
- setCurrentProgressStep(InstallProgressStep.STARTING_SERVER);
- PointAdder pointAdder = new PointAdder();
- if (!isStartVerbose())
- {
- notifyListeners(getFormattedProgress(
- INFO_PROGRESS_STARTING_NON_VERBOSE.get()));
- pointAdder.start();
- }
- try
- {
- new ServerController(this).startServer(!isStartVerbose());
- }
- finally
- {
- if (!isStartVerbose())
- {
- pointAdder.stop();
- }
- }
- if (!isStartVerbose())
- {
- notifyListeners(getFormattedDoneWithLineBreak());
- }
- else
- {
- notifyListeners(getLineBreak());
- }
- checkAbort();
- }
-
- if (mustCreateAds())
- {
- if (isVerbose())
- {
- notifyListeners(getTaskSeparator());
- }
- setCurrentProgressStep(InstallProgressStep.CONFIGURING_ADS);
- updateADS();
- checkAbort();
- }
-
- if (mustConfigureReplication())
- {
- if (isVerbose())
- {
- notifyListeners(getTaskSeparator());
- }
- setCurrentProgressStep(InstallProgressStep.CONFIGURING_REPLICATION);
- createReplicatedBackendsIfRequired();
- configureReplication();
- checkAbort();
- }
-
- if (mustInitializeSuffixes())
- {
- if (isVerbose())
- {
- notifyListeners(getTaskSeparator());
- }
- setCurrentProgressStep(
- InstallProgressStep.INITIALIZE_REPLICATED_SUFFIXES);
- initializeSuffixes();
- checkAbort();
- }
-
- if (mustStop())
- {
- if (isVerbose())
- {
- notifyListeners(getTaskSeparator());
- }
- setCurrentProgressStep(InstallProgressStep.STOPPING_SERVER);
- if (!isVerbose())
- {
- notifyListeners(getFormattedWithPoints(
- INFO_PROGRESS_STOPPING_NON_VERBOSE.get()));
- }
- new ServerController(this).stopServer(!isVerbose());
- if (!isVerbose())
- {
- notifyListeners(getFormattedDoneWithLineBreak());
- }
- }
-
- checkAbort();
- updateSummaryWithServerState(hmSummary, true);
- setCurrentProgressStep(InstallProgressStep.FINISHED_SUCCESSFULLY);
- notifyListeners(null);
- tempLogFile.deleteLogFileAfterSuccess();
- } catch (ApplicationException ex)
- {
- logger.error(LocalizableMessage.raw("Caught exception: "+ex, ex));
- if (ReturnCode.CANCELED.equals(ex.getType())) {
- uninstall();
- setCurrentProgressStep(InstallProgressStep.FINISHED_CANCELED);
- notifyListeners(null);
- } else {
- // Stop the server if necessary
- Installation installation = getInstallation();
- if (installation.getStatus().isServerRunning()) {
- try {
- if (!isVerbose())
- {
- notifyListeners(getFormattedWithPoints(
- INFO_PROGRESS_STOPPING_NON_VERBOSE.get()));
- }
- new ServerController(installation).stopServer(!isVerbose());
- if (!isVerbose())
- {
- notifyListeners(getFormattedDoneWithLineBreak());
- }
- } catch (Throwable t) {
- logger.info(LocalizableMessage.raw("error stopping server", t));
- }
- }
- notifyListeners(getLineBreak());
- updateSummaryWithServerState(hmSummary, true);
- setCurrentProgressStep(InstallProgressStep.FINISHED_WITH_ERROR);
- LocalizableMessage html = getFormattedError(ex, true);
- notifyListeners(html);
- logger.error(LocalizableMessage.raw("Error installing.", ex));
- notifyListeners(getLineBreak());
- notifyListenersOfLog(true);
- }
- runError = ex;
- }
- catch (Throwable t)
- {
- // Stop the server if necessary
- Installation installation = getInstallation();
- if (installation.getStatus().isServerRunning()) {
- try {
- if (!isVerbose())
- {
- notifyListeners(getFormattedWithPoints(
- INFO_PROGRESS_STOPPING_NON_VERBOSE.get()));
- }
- new ServerController(installation).stopServer(!isVerbose());
- if (!isVerbose())
- {
- notifyListeners(getFormattedDoneWithLineBreak());
- }
- } catch (Throwable t2) {
- logger.info(LocalizableMessage.raw("error stopping server", t2));
- }
- }
- notifyListeners(getLineBreak());
- updateSummaryWithServerState(hmSummary, true);
- setCurrentProgressStep(InstallProgressStep.FINISHED_WITH_ERROR);
- ApplicationException ex = new ApplicationException(
- ReturnCode.BUG,
- getThrowableMsg(INFO_BUG_MSG.get(), t), t);
- LocalizableMessage msg = getFormattedError(ex, true);
- notifyListeners(msg);
- logger.error(LocalizableMessage.raw("Error installing.", t));
- notifyListeners(getLineBreak());
- notifyListenersOfLog(true);
- runError = ex;
- }
- finally
- {
- System.setErr(origErr);
- System.setOut(origOut);
- }
- }
-
- /** {@inheritDoc} */
- @Override
- public Integer getRatio(ProgressStep status)
- {
- return hmRatio.get(status);
- }
-
- /** {@inheritDoc} */
- @Override
- public LocalizableMessage getSummary(ProgressStep status)
- {
- return hmSummary.get(status);
- }
-
- /**
- * Returns the exception from the run() method, if any.
- * @return the ApplicationException raised during the run() method, if any.
- * null otherwise.
- */
- public ApplicationException getRunError()
- {
- return runError;
- }
-
- /**
- * Called when the user elects to cancel this operation.
- */
- protected void uninstall() {
-
- notifyListeners(getTaskSeparator());
- if (!isVerbose())
- {
- notifyListeners(getFormattedWithPoints(INFO_PROGRESS_CANCELING.get()));
- }
- else
- {
- notifyListeners(
- getFormattedProgressWithLineBreak(INFO_SUMMARY_CANCELING.get()));
- }
- Installation installation = getInstallation();
- FileManager fm = new FileManager(this);
-
- // Stop the server if necessary
- if (installation.getStatus().isServerRunning()) {
- try {
- if (!isVerbose())
- {
- notifyListeners(getFormattedWithPoints(
- INFO_PROGRESS_STOPPING_NON_VERBOSE.get()));
- }
- new ServerController(installation).stopServer(!isVerbose());
- if (!isVerbose())
- {
- notifyListeners(getFormattedDoneWithLineBreak());
- }
- } catch (ApplicationException e) {
- logger.info(LocalizableMessage.raw("error stopping server", e));
- }
- }
-
- uninstallServices();
-
- // Revert to the base configuration
- try {
- File newConfig = fm.copy(installation.getBaseConfigurationFile(),
- installation.getConfigurationDirectory(),
- /*overwrite=*/true);
- fm.rename(newConfig, installation.getCurrentConfigurationFile());
-
- } catch (ApplicationException ae) {
- logger.info(LocalizableMessage.raw("failed to restore base configuration", ae));
- }
-
- // Cleanup SSL if necessary
- SecurityOptions sec = getUserData().getSecurityOptions();
- if (sec.getEnableSSL() || sec.getEnableStartTLS()) {
- if (SecurityOptions.CertificateType.SELF_SIGNED_CERTIFICATE.equals(
- sec.getCertificateType())) {
- CertificateManager cm = new CertificateManager(
- getSelfSignedKeystorePath(),
- CertificateManager.KEY_STORE_TYPE_JKS,
- getSelfSignedCertificatePwd());
- try {
- for (String alias : SELF_SIGNED_CERT_ALIASES)
- {
- if (cm.aliasInUse(alias))
- {
- cm.removeCertificate(alias);
- }
- }
- } catch (KeyStoreException e) {
- logger.info(LocalizableMessage.raw("Error deleting self signed certification", e));
- }
- }
-
- File keystore = new File(installation.getConfigurationDirectory(),
- "keystore");
- if (keystore.exists()) {
- try {
- fm.delete(keystore);
- } catch (ApplicationException e) {
- logger.info(LocalizableMessage.raw("Failed to delete keystore", e));
- }
- }
-
- File keystorePin = new File(installation.getConfigurationDirectory(),
- "keystore.pin");
- if (keystorePin.exists()) {
- try {
- fm.delete(keystorePin);
- } catch (ApplicationException e) {
- logger.info(LocalizableMessage.raw("Failed to delete keystore.pin", e));
- }
- }
-
- File truststore = new File(installation.getConfigurationDirectory(),
- "truststore");
- if (truststore.exists()) {
- try {
- fm.delete(truststore);
- } catch (ApplicationException e) {
- logger.info(LocalizableMessage.raw("Failed to delete truststore", e));
- }
- }
- }
-
- // Remove the databases
- try {
- fm.deleteChildren(installation.getDatabasesDirectory());
- } catch (ApplicationException e) {
- logger.info(LocalizableMessage.raw("Error deleting databases", e));
- }
-
- if (!isVerbose())
- {
- notifyListeners(getFormattedDoneWithLineBreak());
- }
-
- }
-
- /**
- * Initialize the different map used in this class.
- *
- */
- protected void initMaps()
- {
- initSummaryMap(hmSummary, true);
-
- /*
- * hmTime contains the relative time that takes for each task to be
- * accomplished. For instance if downloading takes twice the time of
- * extracting, the value for downloading will be the double of the value for
- * extracting.
- */
- Map<ProgressStep, Integer> hmTime = new HashMap<>();
- hmTime.put(InstallProgressStep.CONFIGURING_SERVER, 5);
- hmTime.put(InstallProgressStep.CREATING_BASE_ENTRY, 10);
- hmTime.put(InstallProgressStep.IMPORTING_LDIF, 20);
- hmTime.put(InstallProgressStep.IMPORTING_AUTOMATICALLY_GENERATED, 20);
- hmTime.put(InstallProgressStep.CONFIGURING_REPLICATION, 10);
- hmTime.put(InstallProgressStep.ENABLING_WINDOWS_SERVICE, 5);
- hmTime.put(InstallProgressStep.STARTING_SERVER, 10);
- hmTime.put(InstallProgressStep.STOPPING_SERVER, 5);
- hmTime.put(InstallProgressStep.CONFIGURING_ADS, 5);
- hmTime.put(InstallProgressStep.INITIALIZE_REPLICATED_SUFFIXES, 25);
-
- int totalTime = 0;
- List<InstallProgressStep> steps = new ArrayList<>();
- totalTime += hmTime.get(InstallProgressStep.CONFIGURING_SERVER);
- steps.add(InstallProgressStep.CONFIGURING_SERVER);
- if (createNotReplicatedSuffix())
- {
- switch (getUserData().getNewSuffixOptions().getType())
- {
- case CREATE_BASE_ENTRY:
- steps.add(InstallProgressStep.CREATING_BASE_ENTRY);
- totalTime += hmTime.get(InstallProgressStep.CREATING_BASE_ENTRY);
- break;
- case IMPORT_FROM_LDIF_FILE:
- steps.add(InstallProgressStep.IMPORTING_LDIF);
- totalTime += hmTime.get(InstallProgressStep.IMPORTING_LDIF);
- break;
- case IMPORT_AUTOMATICALLY_GENERATED_DATA:
- steps.add(InstallProgressStep.IMPORTING_AUTOMATICALLY_GENERATED);
- totalTime += hmTime.get(
- InstallProgressStep.IMPORTING_AUTOMATICALLY_GENERATED);
- break;
- }
- }
-
- if (isWindows() && getUserData().getEnableWindowsService())
- {
- totalTime += hmTime.get(InstallProgressStep.ENABLING_WINDOWS_SERVICE);
- steps.add(InstallProgressStep.ENABLING_WINDOWS_SERVICE);
- }
-
- if (mustStart())
- {
- totalTime += hmTime.get(InstallProgressStep.STARTING_SERVER);
- steps.add(InstallProgressStep.STARTING_SERVER);
- }
-
- if (mustCreateAds())
- {
- totalTime += hmTime.get(InstallProgressStep.CONFIGURING_ADS);
- steps.add(InstallProgressStep.CONFIGURING_ADS);
- }
-
- if (mustConfigureReplication())
- {
- steps.add(InstallProgressStep.CONFIGURING_REPLICATION);
- totalTime += hmTime.get(InstallProgressStep.CONFIGURING_REPLICATION);
- }
-
- if (mustInitializeSuffixes())
- {
- totalTime += hmTime.get(
- InstallProgressStep.INITIALIZE_REPLICATED_SUFFIXES);
- steps.add(InstallProgressStep.INITIALIZE_REPLICATED_SUFFIXES);
- }
-
- if (mustStop())
- {
- totalTime += hmTime.get(InstallProgressStep.STOPPING_SERVER);
- steps.add(InstallProgressStep.STOPPING_SERVER);
- }
-
- int cumulatedTime = 0;
- for (InstallProgressStep s : steps)
- {
- Integer statusTime = hmTime.get(s);
- hmRatio.put(s, (100 * cumulatedTime) / totalTime);
- if (statusTime != null)
- {
- cumulatedTime += statusTime;
- }
- }
- hmRatio.put(InstallProgressStep.FINISHED_SUCCESSFULLY, 100);
- hmRatio.put(InstallProgressStep.FINISHED_WITH_ERROR, 100);
- hmRatio.put(InstallProgressStep.FINISHED_CANCELED, 100);
- }
-
- /** {@inheritDoc} */
- @Override
- public String getInstallationPath()
- {
- return Utils.getInstallPathFromClasspath();
- }
-
- /** {@inheritDoc} */
- @Override
- public String getInstancePath()
- {
- String installPath = Utils.getInstallPathFromClasspath();
- return Utils.getInstancePathFromInstallPath(installPath);
- }
-
- private void notifyListenersOfLog(final boolean isError)
- {
- if (tempLogFile.isEnabled())
- {
- final String tempLogFilePath = tempLogFile.getPath();
- notifyListeners(getFormattedProgress(isError ? INFO_GENERAL_PROVIDE_LOG_IN_ERROR.get(tempLogFilePath)
- : INFO_GENERAL_SEE_FOR_DETAILS.get(tempLogFilePath)));
- notifyListeners(getLineBreak());
- }
- }
-}
diff --git a/opendj-server-legacy/src/main/java/org/opends/quicksetup/installer/offline/package-info.java b/opendj-server-legacy/src/main/java/org/opends/quicksetup/installer/offline/package-info.java
deleted file mode 100644
index e0b4c52..0000000
--- a/opendj-server-legacy/src/main/java/org/opends/quicksetup/installer/offline/package-info.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * The contents of this file are subject to the terms of the Common Development and
- * Distribution License (the License). You may not use this file except in compliance with the
- * License.
- *
- * You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the
- * specific language governing permission and limitations under the License.
- *
- * When distributing Covered Software, include this CDDL Header Notice in each file and include
- * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
- * Header, with the fields enclosed by brackets [] replaced by your own identifying
- * information: "Portions Copyright [year] [name of copyright owner]".
- *
- * Copyright 2008 Sun Microsystems, Inc.
- */
-
-
-/**
- * Defines the specific classes for the offline installer (the one that can be
- * launched after unzipping the OpenDS zip file).
- *
- */
-package org.opends.quicksetup.installer.offline;
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/tools/InstallDS.java b/opendj-server-legacy/src/main/java/org/opends/server/tools/InstallDS.java
index 54a0aef..23770f0 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/tools/InstallDS.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/tools/InstallDS.java
@@ -63,8 +63,8 @@
import org.opends.quicksetup.UserDataException;
import org.opends.quicksetup.event.ProgressUpdateEvent;
import org.opends.quicksetup.event.ProgressUpdateListener;
+import org.opends.quicksetup.installer.Installer;
import org.opends.quicksetup.installer.NewSuffixOptions;
-import org.opends.quicksetup.installer.offline.OfflineInstaller;
import org.opends.quicksetup.util.PlainTextProgressMessageFormatter;
import org.opends.quicksetup.util.Utils;
import org.opends.server.types.InitializationException;
@@ -363,7 +363,7 @@
System.setProperty(Constants.CLI_JAVA_PROPERTY, "true");
- final OfflineInstaller installer = new OfflineInstaller();
+ final Installer installer = new Installer();
installer.setTempLogFile(tempLogFile);
installer.setUserData(uData);
installer.setProgressMessageFormatter(formatter);
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/tools/dsreplication/ReplicationCliMain.java b/opendj-server-legacy/src/main/java/org/opends/server/tools/dsreplication/ReplicationCliMain.java
index 432b2e5..4e2e960 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/tools/dsreplication/ReplicationCliMain.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/tools/dsreplication/ReplicationCliMain.java
@@ -109,7 +109,6 @@
import org.opends.quicksetup.installer.Installer;
import org.opends.quicksetup.installer.InstallerHelper;
import org.opends.quicksetup.installer.PeerNotFoundException;
-import org.opends.quicksetup.installer.offline.OfflineInstaller;
import org.opends.quicksetup.util.PlainTextProgressMessageFormatter;
import org.opends.server.core.DirectoryServer;
import org.opends.server.tasks.PurgeConflictsHistoricalTask;
@@ -7211,7 +7210,7 @@
REPLICATIONID_NOT_FOUND, null);
}
- OfflineInstaller installer = new OfflineInstaller();
+ final Installer installer = new Installer();
installer.setProgressMessageFormatter(formatter);
installer.addProgressUpdateListener(new ProgressUpdateListener()
{
--
Gitblit v1.10.0