From 5360b07bd36e6b3479c1bb3f911bb34f8d661b1f Mon Sep 17 00:00:00 2001
From: Nicolas Capponi <nicolas.capponi@forgerock.com>
Date: Wed, 21 Sep 2016 15:15:44 +0000
Subject: [PATCH] OPENDJ-2413 Apply PR comments: remove builders in parameters classes, simplify configuration retrieval Include also other minor changes and renaming

---
 opendj-server-legacy/src/test/java/org/opends/server/TestCaseUtils.java                                  |   28 
 opendj-server-legacy/src/main/java/org/opends/server/util/embedded/EmbeddedDirectoryServerException.java |    3 
 opendj-embedded-server-examples/src/site/xdoc/index.xml.vm                                               |   29 -
 opendj-server-legacy/src/main/java/org/opends/server/util/embedded/EmbeddedDirectoryServer.java          |  376 ++++---------
 opendj-server-legacy/src/main/java/org/opends/server/util/embedded/ImportParameters.java                 |   81 --
 opendj-server-legacy/src/main/java/org/opends/server/util/embedded/ConnectionParameters.java             |  243 ++++----
 opendj-embedded-server-examples/src/main/java/org/forgerock/opendj/examples/StartStopServer.java         |   10 
 opendj-server-legacy/src/main/java/org/opends/server/util/StaticUtils.java                               |    2 
 opendj-embedded-server-examples/src/main/assembly/examples.xml                                           |    2 
 opendj-server-legacy/src/main/java/org/opends/server/util/embedded/package-info.java                     |    4 
 opendj-embedded-server-examples/README                                                                   |   31 
 opendj-embedded-server-examples/src/main/java/org/forgerock/opendj/examples/ConfigureServer.java         |   63 +-
 opendj-server-legacy/src/main/java/org/opends/server/util/embedded/ConfigParameters.java                 |  142 ++---
 /dev/null                                                                                                |   20 
 opendj-server-legacy/src/main/java/org/opends/server/tools/dsreplication/LocalPurgeHistorical.java       |    7 
 opendj-embedded-server-examples/src/main/java/org/forgerock/opendj/examples/SetupServer.java             |   17 
 opendj-server-legacy/src/main/java/org/opends/server/util/embedded/SetupParameters.java                  |  124 ++--
 opendj-server-legacy/src/messages/org/opends/messages/utility.properties                                 |   36 
 opendj-server-legacy/src/main/java/org/opends/server/util/embedded/RebuildIndexParameters.java           |   53 -
 opendj-server-legacy/src/main/java/org/opends/server/util/embedded/UpgradeParameters.java                |   57 -
 opendj-server-legacy/src/test/java/org/opends/server/util/EmbeddedDirectoryServerTestCase.java           |   71 +-
 opendj-server-legacy/src/main/java/org/opends/server/util/embedded/ReplicationParameters.java            |  179 ++---
 22 files changed, 628 insertions(+), 950 deletions(-)

diff --git a/opendj-embedded-server-examples/README b/opendj-embedded-server-examples/README
old mode 100644
new mode 100755
index f25349a..0d70067
--- a/opendj-embedded-server-examples/README
+++ b/opendj-embedded-server-examples/README
@@ -1,22 +1,33 @@
-To run the examples in this module:
+#! /bin/sh
 
-# Build the whole opendj project
-> maven clean install
+# To run the examples in this module, you can either type the following instructions
+# in a terminal or run this file
 
-# Go to the opendj-embedded-server-examples directory
-> cd opendj-embedded-server-examples
+# Build the whole opendj project and then start from the opendj-embedded-server-examples directory
+echo ">>> Building OpenDJ project"
+#cd ..
+#mvn clean install
+#cd opendj-embedded-server-examples
 
-# define the class patch to use
+# Define the class path to use
 export CLASSPATH=target/opendj-embedded-server-examples-4.0.0-SNAPSHOT.jar:../opendj-server-legacy/target/package/opendj/lib/opendj-slf4j-adapter.jar
+echo ">>> classpath set to: $CLASSPATH"
+
+# Choose a location for the root directory (where the directory server will be installed)
+export EXAMPLE_ROOT_DIR=`pwd`/target/examples/opendj
+echo ">>> root directory set to: $EXAMPLE_ROOT_DIR"
 
 # Setup a server from the OpenDJ archive resulting from the build
-# /path/to/opendj will be the root directory  
-java -cp $CLASSPATH org.forgerock.opendj.examples.SetupServer ../opendj-server-legacy/target/package/opendj-4.0.0-SNAPSHOT.zip /path/to/opendj
+echo ">>> Example 1: setup a server"
+java -cp $CLASSPATH org.forgerock.opendj.examples.SetupServer \
+ ../opendj-server-legacy/target/package/opendj-4.0.0-SNAPSHOT.zip $EXAMPLE_ROOT_DIR
 
 # Then you can run any of the example using the installed server
 
 # Start and stop the server
-java -cp $CLASSPATH /path/to/opendj
+echo ">>> Example 2: start and stop the server"
+java -cp $CLASSPATH org.forgerock.opendj.examples.StartStopServer $EXAMPLE_ROOT_DIR
 
 # Read and update the configuration of the server
-java -cp $CLASSPATH /path/to/opendj "dc=example,dc=com"
\ No newline at end of file
+echo ">>> Example 3: read and update configuration of the server"
+java -cp $CLASSPATH org.forgerock.opendj.examples.ConfigureServer $EXAMPLE_ROOT_DIR "dc=example,dc=com"
\ No newline at end of file
diff --git a/opendj-embedded-server-examples/src/license/THIRD-PARTY.properties b/opendj-embedded-server-examples/src/license/THIRD-PARTY.properties
deleted file mode 100644
index f982865..0000000
--- a/opendj-embedded-server-examples/src/license/THIRD-PARTY.properties
+++ /dev/null
@@ -1,20 +0,0 @@
-# Generated by org.codehaus.mojo.license.AddThirdPartyMojo
-#-------------------------------------------------------------------------------
-# Already used licenses in project :
-# - Apache Software License, Version 2.0
-# - BSD
-# - Common Development and Distribution License 1.0
-# - Common Development and Distribution License 1.1
-# - Dual licensed (CDDL and GPL)
-# - Dual licensed (CDDL and GPLv2+CE)
-# - The GNU Lesser General Public License, version 2.0 with Classpath Exception
-# - The GNU Lesser General Public License, version 2.1
-# - The GNU Lesser General Public License, version 3.0
-# - The MIT License
-# - The Sleepycat License
-#-------------------------------------------------------------------------------
-# Please fill the missing licenses for dependencies :
-#
-#
-#Mon Sep 12 13:43:47 CEST 2016
-com.sleepycat--je--5.0.104=The Sleepycat License
diff --git a/opendj-embedded-server-examples/src/main/assembly/examples.xml b/opendj-embedded-server-examples/src/main/assembly/examples.xml
index 7690580..d1cb685 100644
--- a/opendj-embedded-server-examples/src/main/assembly/examples.xml
+++ b/opendj-embedded-server-examples/src/main/assembly/examples.xml
@@ -18,7 +18,7 @@
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2
                               http://maven.apache.org/xsd/assembly-1.1.2.xsd">
-  <id>examples</id>
+  <id>opendj-embedded-server-examples</id>
 
   <includeBaseDirectory>false</includeBaseDirectory>
 
diff --git a/opendj-embedded-server-examples/src/main/java/org/forgerock/opendj/examples/ConfigureServer.java b/opendj-embedded-server-examples/src/main/java/org/forgerock/opendj/examples/ConfigureServer.java
index 2a679d6..4eff283 100644
--- a/opendj-embedded-server-examples/src/main/java/org/forgerock/opendj/examples/ConfigureServer.java
+++ b/opendj-embedded-server-examples/src/main/java/org/forgerock/opendj/examples/ConfigureServer.java
@@ -19,17 +19,26 @@
 import static java.util.Arrays.asList;
 import static org.opends.server.util.embedded.ConfigParameters.configParams;
 import static org.opends.server.util.embedded.ConnectionParameters.connectionParams;
-import static org.opends.server.util.embedded.EmbeddedDirectoryServer.defineServer;
+import static org.opends.server.util.embedded.EmbeddedDirectoryServer.manageEmbeddedDirectoryServer;
 
 import java.io.File;
+import java.io.IOException;
+import java.util.ConcurrentModificationException;
 import java.util.SortedSet;
 
+import org.forgerock.opendj.config.AdminException;
+import org.forgerock.opendj.config.DefinitionDecodingException;
+import org.forgerock.opendj.config.ManagedObjectAlreadyExistsException;
+import org.forgerock.opendj.config.ManagedObjectNotFoundException;
+import org.forgerock.opendj.config.client.ManagedObjectDecodingException;
+import org.forgerock.opendj.config.client.ManagementContext;
+import org.forgerock.opendj.config.client.MissingMandatoryPropertiesException;
+import org.forgerock.opendj.config.client.OperationRejectedException;
 import org.forgerock.opendj.ldap.DN;
+import org.forgerock.opendj.ldap.LdapException;
 import org.forgerock.opendj.server.config.client.BackendCfgClient;
 import org.forgerock.opendj.server.config.client.RootCfgClient;
 import org.opends.server.util.embedded.EmbeddedDirectoryServer;
-import org.opends.server.util.embedded.EmbeddedDirectoryServer.DirectoryConfigReader;
-import org.opends.server.util.embedded.EmbeddedDirectoryServer.DirectoryConfigUpdater;
 import org.opends.server.util.embedded.EmbeddedDirectoryServerException;
 
 /**
@@ -50,8 +59,15 @@
      *            The command line arguments: serverRootDir newBaseDn [ldapPort]
      * @throws EmbeddedDirectoryServerException
      *          If an error occurs
+     * @throws org.forgerock.opendj.config.client.ConcurrentModificationException
+     * @throws ManagedObjectNotFoundException
+     * @throws ManagedObjectDecodingException
+     * @throws DefinitionDecodingException
+     * @throws OperationRejectedException
+     * @throws MissingMandatoryPropertiesException
+     * @throws ManagedObjectAlreadyExistsException
      */
-    public static void main(final String[] args) throws EmbeddedDirectoryServerException {
+    public static void main(final String[] args) {
         if (args.length != 2 && args.length != 3) {
             System.err.println("Usage: serverRootDir newBaseDn [ldapPort]");
             System.exit(1);
@@ -61,41 +77,28 @@
         final int ldapPort = args.length > 2 ? Integer.parseInt(args[2]) : 1500;
 
         EmbeddedDirectoryServer server =
-                defineServer(
+                manageEmbeddedDirectoryServer(
                         configParams()
                             .serverRootDirectory(serverRootDir)
-                            .configurationFile(serverRootDir + File.separator + "config/config.ldif")
-                            .build(),
+                            .configurationFile(serverRootDir + File.separator + "config/config.ldif"),
                         connectionParams()
                             .hostName("localhost")
                             .ldapPort(ldapPort)
                             .bindDn("cn=Directory Manager")
-                            .bindPassword("password")
-                            .build(),
+                            .bindPassword("password"),
                         System.out,
                         System.err);
 
-        // read the current base DN(s) of user backend
-        SortedSet<DN> baseDns = server.readConfiguration(new DirectoryConfigReader<SortedSet<DN>>() {
-            @Override
-            public SortedSet<DN> read(RootCfgClient rootConfig) throws Exception {
-                BackendCfgClient userRoot = rootConfig.getBackend("userRoot");
-                return userRoot.getBaseDN();
-            }
-        });
-        System.out.println("The current base Dn(s) of the user backend are: " + baseDns);
-
-        // modify the base DN of the user backend
-        server.updateConfiguration(new DirectoryConfigUpdater() {
-            @Override
-            public void update(RootCfgClient rootConfig) throws Exception {
-                BackendCfgClient userRoot = rootConfig.getBackend("userRoot");
-                userRoot.setBaseDN(asList(DN.valueOf(newBaseDn)));
-                userRoot.commit();
-            }
-        });
-        System.out.println("The base Dn of the user backend has been set to: " + newBaseDn);
-
+        // read the current base DN(s) of user backend and update it
+        try (ManagementContext config = server.getConfiguration()) {
+            BackendCfgClient userRoot = config.getRootConfiguration().getBackend("userRoot");
+            System.out.println("The current base Dn(s) of the user backend are: " + userRoot.getBaseDN());
+            userRoot.setBaseDN(asList(DN.valueOf(newBaseDn)));
+            userRoot.commit();
+            System.out.println("The base Dn of the user backend has been set to: " + newBaseDn);
+        } catch (AdminException | IOException | EmbeddedDirectoryServerException e) {
+            System.err.println("A problem occured when reading/updating configuration: " + e.toString());
+        }
     }
 
     private ConfigureServer() {
diff --git a/opendj-embedded-server-examples/src/main/java/org/forgerock/opendj/examples/SetupServer.java b/opendj-embedded-server-examples/src/main/java/org/forgerock/opendj/examples/SetupServer.java
index 09bec93..9844be1 100644
--- a/opendj-embedded-server-examples/src/main/java/org/forgerock/opendj/examples/SetupServer.java
+++ b/opendj-embedded-server-examples/src/main/java/org/forgerock/opendj/examples/SetupServer.java
@@ -18,7 +18,7 @@
 
 import static org.opends.server.util.embedded.ConfigParameters.configParams;
 import static org.opends.server.util.embedded.ConnectionParameters.connectionParams;
-import static org.opends.server.util.embedded.EmbeddedDirectoryServer.defineServer;
+import static org.opends.server.util.embedded.EmbeddedDirectoryServer.manageEmbeddedDirectoryServer;
 import static org.opends.server.util.embedded.SetupParameters.setupParams;
 
 import java.io.File;
@@ -73,28 +73,25 @@
             final String backendType, final int ldapPort, final int adminPort, final int jmxPort)
             throws EmbeddedDirectoryServerException {
         EmbeddedDirectoryServer server =
-                defineServer(
+                manageEmbeddedDirectoryServer(
                         configParams()
                             .serverRootDirectory(serverRootDir)
-                            .configurationFile(serverRootDir + File.separator + "config/config.ldif")
-                            .build(),
+                            .configurationFile(serverRootDir + File.separator + "config/config.ldif"),
                         connectionParams()
                             .hostName("localhost")
                             .ldapPort(ldapPort)
                             .bindDn("cn=Directory Manager")
                             .bindPassword("password")
-                            .adminPort(adminPort)
-                            .build(),
+                            .adminPort(adminPort),
                         System.out,
                         System.err);
 
-        server.setupFromArchive(
-                new File(openDJArchive),
+        server.extractArchiveForSetup(new File(openDJArchive));
+        server.setup(
                 setupParams()
                     .baseDn(baseDn)
                     .backendType(backendType)
-                    .jmxPort(jmxPort)
-                    .build());
+                    .jmxPort(jmxPort));
     }
 
     private SetupServer() {
diff --git a/opendj-embedded-server-examples/src/main/java/org/forgerock/opendj/examples/StartStopServer.java b/opendj-embedded-server-examples/src/main/java/org/forgerock/opendj/examples/StartStopServer.java
index 34e953f..71aacc0 100644
--- a/opendj-embedded-server-examples/src/main/java/org/forgerock/opendj/examples/StartStopServer.java
+++ b/opendj-embedded-server-examples/src/main/java/org/forgerock/opendj/examples/StartStopServer.java
@@ -17,9 +17,10 @@
 package org.forgerock.opendj.examples;
 
 import static org.opends.server.util.embedded.ConfigParameters.configParams;
-import static org.opends.server.util.embedded.EmbeddedDirectoryServer.defineServerForStartStopOperations;
+import static org.opends.server.util.embedded.EmbeddedDirectoryServer.manageEmbeddedDirectoryServerForStartStop;
 
-import java.io.File;
+import java.nio.file.Paths;
+
 import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.util.embedded.EmbeddedDirectoryServer;
 import org.opends.server.util.embedded.EmbeddedDirectoryServerException;
@@ -47,11 +48,10 @@
         final String serverRootDir = args[0];
 
         final EmbeddedDirectoryServer server =
-                defineServerForStartStopOperations(
+                manageEmbeddedDirectoryServerForStartStop(
                         configParams()
                             .serverRootDirectory(serverRootDir)
-                            .configurationFile(serverRootDir + File.separator + "config/config.ldif")
-                            .build(),
+                            .configurationFile(Paths.get(serverRootDir, "config", "config.ldif").toString()),
                             System.out,
                             System.err);
 
diff --git a/opendj-embedded-server-examples/src/site/xdoc/index.xml.vm b/opendj-embedded-server-examples/src/site/xdoc/index.xml.vm
index 2f1c062..8d56de9 100644
--- a/opendj-embedded-server-examples/src/site/xdoc/index.xml.vm
+++ b/opendj-embedded-server-examples/src/site/xdoc/index.xml.vm
@@ -43,34 +43,5 @@
       </ul>
 
     </section>
-<!--
-    <section name="Documentation for ${project.name}">
-      <p>
-        Javadoc for this module can be found <a href="apidocs/index.html">here</a>.
-      </p>
-    </section>
-    <section name="Get ${project.name}">
-      <p>
-        You can get ${project.name} using any of the following methods:
-      </p>
-      <subsection name="Download">
-        <p>
-          Pre-built binaries can be downloaded directly from the ForgeRock Maven
-          repository:
-        </p>
-        <ul>
-          <li><a href="${mavenRepoReleases}/org/forgerock/opendj/${project.artifactId}">Stable releases</a></li>
-          <li><a href="${mavenRepoSnapshots}/org/forgerock/opendj/${project.artifactId}/${project.version}">Latest development snapshot</a></li>
-        </ul>
-      </subsection>
-      <subsection name="Build">
-        <p>
-          For the DIY enthusiasts you can build it yourself by checking out the
-          latest code using <a href="source-repository.html">Subversion</a> and
-          building it with Maven 3.
-        </p>
-      </subsection>
-    </section>
--->
   </body>
 </document>
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/tools/dsreplication/LocalPurgeHistorical.java b/opendj-server-legacy/src/main/java/org/opends/server/tools/dsreplication/LocalPurgeHistorical.java
index 82bc01a..9f29680 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/tools/dsreplication/LocalPurgeHistorical.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/tools/dsreplication/LocalPurgeHistorical.java
@@ -17,7 +17,7 @@
 package org.opends.server.tools.dsreplication;
 
 import static org.opends.server.util.embedded.ConfigParameters.configParams;
-import static org.opends.server.util.embedded.EmbeddedDirectoryServer.defineServerForStartStopOperations;
+import static org.opends.server.util.embedded.EmbeddedDirectoryServer.manageEmbeddedDirectoryServerForStartStop;
 import static org.opends.messages.AdminToolMessages.*;
 
 import org.forgerock.i18n.LocalizableMessage;
@@ -89,11 +89,10 @@
 
     try
     {
-      EmbeddedDirectoryServer server = defineServerForStartStopOperations(
+      EmbeddedDirectoryServer server = manageEmbeddedDirectoryServerForStartStop(
           configParams()
             .configurationFile(configFile)
-            .disableConnectionHandlers(true)
-            .build());
+            .disableConnectionHandlers(true));
       server.start();
     }
     catch (OpenDsException ode)
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/util/StaticUtils.java b/opendj-server-legacy/src/main/java/org/opends/server/util/StaticUtils.java
index 5a7c773..19549f7 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/util/StaticUtils.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/util/StaticUtils.java
@@ -2503,7 +2503,7 @@
       ZipEntry fileEntry;
       while ((fileEntry = zipStream.getNextEntry()) != null)
       {
-        File targetFile = new File(targetDirectory.getPath() + File.separator +  fileEntry.getName());
+        File targetFile = new File(targetDirectory.getPath(), fileEntry.getName());
 
         if (fileEntry.isDirectory())
         {
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/ConfigParameters.java b/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/ConfigParameters.java
index 4bc1d8b..23fc905 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/ConfigParameters.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/ConfigParameters.java
@@ -15,11 +15,7 @@
  */
 package org.opends.server.util.embedded;
 
-import org.forgerock.util.Reject;
-
-/**
- * Parameters to configure a directory server.
- */
+/** Parameters to configure a directory server. */
 public final class ConfigParameters
 {
   private String serverRootDirectory;
@@ -29,17 +25,17 @@
 
   private ConfigParameters()
   {
-    // private constructor to force usage of the associated Builder
+    // prefer usage of static method for creation
   }
 
   /**
-   * Creates a builder for the configuration parameters.
+   * Creates configuration parameters.
    *
-   * @return a builder
+   * @return the parameters
    */
-  public static Builder configParams()
+  public static ConfigParameters configParams()
   {
-    return new Builder();
+    return new ConfigParameters();
   }
 
   String getServerRootDirectory()
@@ -47,7 +43,7 @@
     return serverRootDirectory;
   }
 
-  /** This value may be {@code null}, it must always  be checked. */
+  /** This value may be {@code null}, it must always be checked. */
   String getServerInstanceDirectory()
   {
     return serverInstanceDirectory;
@@ -64,86 +60,58 @@
   }
 
   /**
-   * Builder for this class.
+   * Sets the server root directory of the directory server.
+   * <p>
+   * The server root is the location where the binaries and default configuration is stored.
+   *
+   * @param dir
+   *          the server root directory
+   * @return this builder
    */
-  public static final class Builder
+  public ConfigParameters serverRootDirectory(String dir)
   {
-    private ConfigParameters params;
+    serverRootDirectory = dir;
+    return this;
+  }
 
-    private Builder()
-    {
-      params = new ConfigParameters();
-    }
+  /**
+   * Sets the install root directory of the directory server.
+   * <p>
+   * The install root is the location where the data and live configuration is stored.
+   *
+   * @param dir
+   *          the install root directory
+   * @return this builder
+   */
+  public ConfigParameters serverInstanceDirectory(String dir)
+  {
+    serverInstanceDirectory = dir;
+    return this;
+  }
 
-    /**
-     * Generates the parameters from this builder.
-     * <p>
-     * After this call, the builder is reset and can be used to generate other parameters.
-     *
-     * @return the replication parameters
-     */
-    public ConfigParameters toParams()
-    {
-      ConfigParameters p = params;
-      Reject.ifNull(p.serverRootDirectory, p.configurationFile);
-      this.params = new ConfigParameters();
-      return p;
-    }
+  /**
+   * Sets the path of the configuration file of the directory server.
+   *
+   * @param file
+   *          the configuration file
+   * @return this builder
+   */
+  public ConfigParameters configurationFile(String file)
+  {
+    configurationFile = file;
+    return this;
+  }
 
-    /**
-     * Sets the server root directory of the directory server.
-     * <p>
-     * The server root is the location where the binaries and default configuration is stored.
-     *
-     * @param dir
-     *          the server root directory
-     * @return this builder
-     */
-    public Builder serverRootDirectory(String dir)
-    {
-      params.serverRootDirectory = dir;
-      return this;
-    }
-
-    /**
-     * Sets the install root directory of the directory server.
-     * <p>
-     * The install root is the location where the data and live configuration is stored.
-     *
-     * @param dir
-     *          the install root directory
-     * @return this builder
-     */
-    public Builder serverInstanceDirectory(String dir)
-    {
-      params.serverInstanceDirectory = dir;
-      return this;
-    }
-
-    /**
-     * Sets the path of the configuration file of the directory server.
-     *
-     * @param file
-     *          the configuration file
-     * @return this builder
-     */
-    public Builder configurationFile(String file)
-    {
-      params.configurationFile = file;
-      return this;
-    }
-
-    /**
-     * Sets the indicator allowing to disable the connection handlers.
-     *
-     * @param disable
-     *          {@code true} to disable the connection handlers
-     * @return this builder
-     */
-    public Builder disableConnectionHandlers(boolean disable)
-    {
-      params.disableConnectionHandlers = disable;
-      return this;
-    }
+  /**
+   * Sets the indicator allowing to disable the connection handlers.
+   *
+   * @param disable
+   *          {@code true} to disable the connection handlers
+   * @return this builder
+   */
+  public ConfigParameters disableConnectionHandlers(boolean disable)
+  {
+    disableConnectionHandlers = disable;
+    return this;
   }
 }
\ No newline at end of file
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/ConnectionParameters.java b/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/ConnectionParameters.java
index 61d32cc..de16150 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/ConnectionParameters.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/ConnectionParameters.java
@@ -15,9 +15,7 @@
  */
 package org.opends.server.util.embedded;
 
-/**
- * Parameters to establish connections to a directory server.
- */
+/** Parameters to establish connections to a directory server. */
 public final class ConnectionParameters
 {
   private String adminPassword;
@@ -25,22 +23,24 @@
   private String adminUid;
   private String bindDn;
   private String bindPassword;
-  private String hostname;
+  private String hostName;
   private Integer ldapPort;
+  private Integer ldapsPort;
+  private boolean enableStartTLS;
 
   private ConnectionParameters()
   {
-    // private constructor to force usage of the associated Builder
+    // prefer usage of static method for creation
   }
 
   /**
-   * Creates a builder for the connection parameters.
+   * Creates connection parameters.
    *
-   * @return a builder
+   * @return the parameters
    */
-  public static Builder connectionParams()
+  public static ConnectionParameters connectionParams()
   {
-    return new Builder();
+    return new ConnectionParameters();
   }
 
   String getAdminPassword()
@@ -68,9 +68,9 @@
     return bindPassword;
   }
 
-  String getHostname()
+  String getHostName()
   {
-    return hostname;
+    return hostName;
   }
 
   Integer getLdapPort()
@@ -78,121 +78,130 @@
     return ldapPort;
   }
 
-  /**
-   * Builder for the ConnectionParameters class.
-   */
-  public static final class Builder
+  Integer getLdapSecurePort()
   {
-    private ConnectionParameters params;
+    return ldapsPort;
+  }
 
-    private Builder()
-    {
-      params = new ConnectionParameters();
-    }
+  boolean isStartTLSEnabled()
+  {
+    return enableStartTLS;
+  }
 
-    /**
-     * Generates the parameters from this builder.
-     * <p>
-     * After this call, the builder is reset and can be used to generate other parameters.
-     *
-     * @return the replication parameters
-     */
-    public ConnectionParameters toParams()
-    {
-      ConnectionParameters p = params;
-      this.params = new ConnectionParameters();
-      return p;
-    }
+  /**
+   * Sets the password of the Global Administrator to use to bind to the server.
+   *
+   * @param password
+   *          the password
+   * @return this builder
+   */
+  public ConnectionParameters adminPassword(String password)
+  {
+    adminPassword = password;
+    return this;
+  }
 
-    /**
-     * Sets the password of the Global Administrator to use to bind to the server.
-     *
-     * @param password
-     *          the password
-     * @return this builder
-     */
-    public Builder adminPassword(String password)
-    {
-      params.adminPassword = password;
-      return this;
-    }
+  /**
+   * Sets the port for directory server administration.
+   *
+   * @param port
+   *          the admin port
+   * @return this builder
+   */
+  public ConnectionParameters adminPort(int port)
+  {
+    adminPort = port;
+    return this;
+  }
 
-    /**
-     * Sets the port for directory server administration.
-     *
-     *  @param port
-     *          the admin port
-     * @return this builder
-     */
-    public Builder adminPort(int port)
-    {
-      params.adminPort = port;
-      return this;
-    }
+  /**
+   * Sets the user id of the Global Administrator to use to bind to the server.
+   *
+   * @param uid
+   *          the user id
+   * @return this builder
+   */
+  public ConnectionParameters adminUid(String uid)
+  {
+    adminUid = uid;
+    return this;
+  }
 
-    /**
-     * Sets the user id of the Global Administrator to use to bind to the server.
-     *
-     * @param uid
-     *          the user id
-     * @return this builder
-     */
-    public Builder adminUid(String uid)
-    {
-      params.adminUid = uid;
-      return this;
-    }
+  /**
+   * Sets the Dn to use to bind to the directory server.
+   *
+   * @param dn
+   *          the bind Dn
+   * @return this builder
+   */
+  public ConnectionParameters bindDn(String dn)
+  {
+    bindDn = dn;
+    return this;
+  }
 
-    /**
-     * Sets the Dn to use to bind to the directory server.
-     *
-     * @param dn
-     *          the bind Dn
-     * @return this builder
-     */
-    public Builder bindDn(String dn)
-    {
-      params.bindDn = dn;
-      return this;
-    }
+  /**
+   * Sets the password to use to bind to the directory server.
+   *
+   * @param password
+   *          the bind password
+   * @return this builder
+   */
+  public ConnectionParameters bindPassword(String password)
+  {
+    bindPassword = password;
+    return this;
+  }
 
-    /**
-     * Sets the password to use to bind to the directory server.
-     *
-     * @param password
-     *          the bind password
-     * @return this builder
-     */
-    public Builder bindPassword(String password)
-    {
-      params.bindPassword = password;
-      return this;
-    }
+  /**
+   * Sets the start TLS indicator.
+   *
+   * @param startTLS
+   *          the indicator which should be {@code true} to enable StartTLS, {@code false} otherwise
+   * @return this builder
+   */
+  public ConnectionParameters enableStartTLS(boolean startTLS)
+  {
+    enableStartTLS = startTLS;
+    return this;
+  }
 
-    /**
-     * Sets the the fully-qualified directory server host name.
-     *
-     * @param hostname
-     *          the hostname of the server
-     * @return this builder
-     */
-    public Builder hostname(String hostname)
-    {
-      params.hostname = hostname;
-      return this;
-    }
+  /**
+   * Sets the the fully-qualified directory server host name.
+   *
+   * @param hostName
+   *          the hostName of the server
+   * @return this builder
+   */
+  public ConnectionParameters hostName(String hostName)
+  {
+    this.hostName = hostName;
+    return this;
+  }
 
-    /**
-     * Sets the port on which the directory server listen for LDAP communication.
-     *
-     * @param port
-     *          the LDAP port
-     * @return this builder
-     */
-    public Builder ldapPort(int port)
-    {
-      params.ldapPort = port;
-      return this;
-    }
+  /**
+   * Sets the port on which the directory server listens for LDAP communication.
+   *
+   * @param port
+   *          the LDAP port
+   * @return this builder
+   */
+  public ConnectionParameters ldapPort(int port)
+  {
+    ldapPort = port;
+    return this;
+  }
+
+  /**
+   * Sets the port on which the directory server listens for LDAPS (secure) communication.
+   *
+   * @param port
+   *          the LDAPS port
+   * @return this builder
+   */
+  public ConnectionParameters ldapSecurePort(int port)
+  {
+    ldapsPort = port;
+    return this;
   }
 }
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/EmbeddedDirectoryServer.java b/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/EmbeddedDirectoryServer.java
index 708295b..11edee5 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/EmbeddedDirectoryServer.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/EmbeddedDirectoryServer.java
@@ -15,6 +15,7 @@
  */
 package org.opends.server.util.embedded;
 
+import static org.opends.messages.UtilityMessages.ERR_EMBEDDED_SERVER_LDIF_MANAGEMENT_CONTEXT;
 import static org.opends.server.util.ServerConstants.*;
 import static org.forgerock.opendj.config.client.ldap.LDAPManagementContext.newManagementContext;
 import static org.forgerock.opendj.config.client.ldap.LDAPManagementContext.newLDIFManagementContext;
@@ -23,6 +24,7 @@
 import java.io.File;
 import java.io.IOException;
 import java.io.OutputStream;
+import java.nio.file.Paths;
 
 import org.forgerock.i18n.LocalizableMessage;
 import org.forgerock.opendj.adapter.server3x.Adapters;
@@ -34,10 +36,10 @@
 import org.forgerock.opendj.ldap.LDAPConnectionFactory;
 import org.forgerock.opendj.ldap.requests.Requests;
 import org.forgerock.opendj.ldap.requests.SimpleBindRequest;
-import org.forgerock.opendj.server.config.client.RootCfgClient;
 import org.forgerock.util.Options;
-import org.forgerock.util.Pair;
+import org.forgerock.util.Reject;
 import org.opends.quicksetup.TempLogFile;
+import org.opends.server.config.ConfigConstants;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.protocols.internal.InternalClientConnection;
 import org.opends.server.tools.ImportLDIF;
@@ -48,6 +50,7 @@
 import org.opends.server.types.DirectoryEnvironmentConfig;
 import org.opends.server.types.DirectoryException;
 import org.opends.server.types.InitializationException;
+import org.opends.server.util.DynamicConstants;
 import org.opends.server.util.StaticUtils;
 
 /**
@@ -57,9 +60,9 @@
 public class EmbeddedDirectoryServer
 {
   private static final String EMBEDDED_OPEN_DJ_PREFIX = "embeddedOpenDJ";
-
+  private static final String ARCHIVE_ROOT_DIRECTORY = DynamicConstants.SHORT_NAME.toLowerCase();
   private static final String QUICKSETUP_ROOT_PROPERTY = "org.opends.quicksetup.Root";
-  private static final String QUICKSETUP_INSTANCE_PROPERTY = "org.opends.quicksetup.Root";
+  private static final String QUICKSETUP_INSTANCE_PROPERTY = "org.opends.quicksetup.instance";
 
   /** The parameters for install and instance directories, and configuration file of the server. */
   private final ConfigParameters configParams;
@@ -76,22 +79,23 @@
   /** The error stream used for feedback during operations on server. */
   private final OutputStream errStream;
 
-  /**
-   * Defines an embedded directory server, providing the output and error streams used for
-   * giving feedback during operations on the server.
-   *
-   * @param configParams
-   *          The basic configuration parameters for the server.
-   * @param connParams
-   *          The connection parameters for the server.
-   * @param out
-   *          Output stream used for feedback during operations on server
-   * @param err
-   *          Error stream used for feedback during operations on server
-   */
   private EmbeddedDirectoryServer(ConfigParameters configParams, ConnectionParameters connParams,
       OutputStream out, OutputStream err)
   {
+    Reject.ifNull(configParams.getServerRootDirectory());
+    if (connParams != null)
+    {
+      Reject.ifNull(
+        connParams.getHostName(),
+        connParams.getLdapPort(),
+        connParams.getBindDn(),
+        connParams.getBindPassword());
+    }
+    if (configParams.getConfigurationFile() == null)
+    {
+      // use the default path if configuration file is not provided
+      configParams.configurationFile(getDefaultConfigurationFilePath(configParams.getServerRootDirectory()));
+    }
     this.configParams = configParams;
     this.connectionParams = connParams;
     this.outStream = out;
@@ -101,7 +105,7 @@
       SimpleBindRequest authRequest = Requests.newSimpleBindRequest(
           connectionParams.getBindDn(), connectionParams.getBindPassword().toCharArray());
       ldapConnectionFactory = new LDAPConnectionFactory(
-          connectionParams.getHostname(),
+          connectionParams.getHostName(),
           connectionParams.getLdapPort(),
           Options.defaultOptions().set(LDAPConnectionFactory.AUTHN_BIND_REQUEST, authRequest));
     }
@@ -111,23 +115,21 @@
     }
   }
 
-  /**
-   * Defines an embedded directory server.
-   * <p>
-   * Output/error streams used for giving feedback during operations are default system ones.
-   *
-   * @param configParams
-   *          The basic configuration parameters for the server.
-   * @param connParams
-   *          The connection parameters for the server.
-   */
   private EmbeddedDirectoryServer(ConfigParameters configParams, ConnectionParameters connParams)
   {
     this(configParams, connParams, System.out, System.err);
   }
 
+  private static String getDefaultConfigurationFilePath(String serverRootDirectory)
+  {
+    return Paths.get(serverRootDirectory)
+        .resolve(ConfigConstants.CONFIG_DIR_NAME)
+        .resolve(ConfigConstants.CONFIG_FILE_NAME)
+        .toString();
+  }
+
   /**
-   * Defines an embedded directory server for any operation.
+   * Creates an instance of an embedded directory server for any operation.
    *
    * @param configParams
    *          The basic configuration parameters for the server.
@@ -137,16 +139,16 @@
    *          Output stream used for feedback during operations on server
    * @param err
    *          Error stream used for feedback during operations on server
-   * @return the directory server
+   * @return the embedded directory server
    */
-  public static EmbeddedDirectoryServer defineServer(ConfigParameters configParams,
+  public static EmbeddedDirectoryServer manageEmbeddedDirectoryServer(ConfigParameters configParams,
       ConnectionParameters connParams, OutputStream out, OutputStream err)
   {
     return new EmbeddedDirectoryServer(configParams, connParams, out, err);
   }
 
   /**
-   * Defines an embedded directory server for start/stop operation.
+   * Creates an instance of an embedded directory server for start/stop operation.
    * <p>
    * To be able to perform any operation on the server, use the alternative {@code defineServer()}
    * method.
@@ -159,14 +161,14 @@
    *          Error stream used for feedback during operations on server
    * @return the directory server
    */
-  public static EmbeddedDirectoryServer defineServerForStartStopOperations(ConfigParameters configParams,
+  public static EmbeddedDirectoryServer manageEmbeddedDirectoryServerForStartStop(ConfigParameters configParams,
       OutputStream out, OutputStream err)
   {
     return new EmbeddedDirectoryServer(configParams, null, out, err);
   }
 
   /**
-   * Defines an embedded directory server for start/stop operation.
+   * Creates an instance of an embedded directory server for start/stop operation.
    * <p>
    * To be able to perform any operation on the server, use the alternative {@code defineServer()}
    * method.
@@ -175,41 +177,17 @@
    *          The basic configuration parameters for the server.
    * @return the directory server
    */
-  public static EmbeddedDirectoryServer defineServerForStartStopOperations(ConfigParameters configParams)
+  public static EmbeddedDirectoryServer manageEmbeddedDirectoryServerForStartStop(
+      ConfigParameters configParams)
   {
     return new EmbeddedDirectoryServer(configParams, null, System.out, System.err);
   }
 
   /**
-   * Displays the replication status on the output stream defined for this server.
-   * <p>
-   * Displays a list with the basic replication configuration of all base DNs of
-   * the servers defined in the registration information.
-   *
-   * @param parameters
-   *            The parameters for the replication.
-   * @throws EmbeddedDirectoryServerException
-   *            If a problem occurs.
-   */
-  public void displayReplicationStatus(ReplicationParameters parameters) throws EmbeddedDirectoryServerException
-  {
-    checkConnectionParameters();
-    int returnCode = ReplicationCliMain.mainCLI(
-        parameters.toCommandLineArgumentsStatus(configParams.getConfigurationFile(), connectionParams),
-        !isRunning(), outStream, errStream);
-
-    if (returnCode != 0)
-    {
-      throw new EmbeddedDirectoryServerException(
-          ERR_EMBEDDED_SERVER_DISPLAY_REPLICATION_STATUS.get(configParams.getServerRootDirectory(), returnCode));
-    }
-  }
-
-  /**
-   * Enables replication between this directory server (first server) and another server
+   * Configures replication between this directory server (first server) and another server
    * (second server).
    * <p>
-   * Updates the configuration of the servers to replicate the data under the
+   * This method updates the configuration of the servers to replicate the data under the
    * base DN specified in the parameters.
    *
    * @param parameters
@@ -217,18 +195,70 @@
    * @throws EmbeddedDirectoryServerException
    *            If a problem occurs.
    */
-  public void enableReplication(ReplicationParameters parameters) throws EmbeddedDirectoryServerException
+  public void configureReplication(ReplicationParameters parameters) throws EmbeddedDirectoryServerException
   {
-    checkConnectionParameters();
+    Reject.checkNotNull(connectionParams);
     int returnCode = ReplicationCliMain.mainCLI(
-        parameters.toCommandLineArgumentsEnable(configParams.getConfigurationFile(), connectionParams),
+        parameters.toCommandLineArgumentsConfiguration(configParams.getConfigurationFile(), connectionParams),
         !isRunning(), outStream, errStream);
 
     if (returnCode != 0)
     {
-      throw new EmbeddedDirectoryServerException(ERR_EMBEDDED_SERVER_ENABLE_REPLICATION.get(
-          configParams.getServerRootDirectory(), parameters.getReplicationPort1(), parameters.getHostname2(),
-          parameters.getReplicationPort2(), returnCode));
+      throw new EmbeddedDirectoryServerException(ERR_EMBEDDED_SERVER_CONFIGURE_REPLICATION.get(
+          configParams.getServerRootDirectory(), parameters.getReplicationPortSource(),
+          parameters.getHostnameDestination(), parameters.getReplicationPortDestination(), returnCode));
+    }
+  }
+
+  /**
+   * Returns the configuration of this server, which can be read or updated.
+   * <p>
+   * The returned object is an instance of {@code ManagementContext} class, which allow access to the
+   * root configuration object using its {@code getRootConfiguration()} method.
+   * Starting from the root configuration, it is possible to access any configuration object, in order
+   * to perform read or update operations.
+   * <p>
+   * Note that {@code ManagementContext} instance must be closed after usage. It is recommended to use
+   * it inside a try-with-resource statement.
+   * <p>
+   * Example reading configuration:
+   * <pre>
+   *   try(ManagementContext config = server.getConfiguration()) {
+   *      List<String> syncProviders = config.getRootConfiguration().listSynchronizationProviders();
+   *      System.out.println("sync providers=" + syncProviders);
+   *   }
+   * </pre>
+   * <p>
+   * Example updating configuration:
+   * <pre>
+   *   try(ManagementContext config = server.getConfiguration()) {
+   *      JEBackendCfgClient userRoot = (JEBackendCfgClient) config.getRootConfiguration().getBackend("userRoot");
+   *      userRoot.setBaseDN(Arrays.asList(DN.valueOf("dc=example,dc=com")));
+   *      userRoot.setDBCachePercent(70);
+   *      // changes must be committed to be effective
+   *      userRoot.commit();
+   *   }
+   * </pre>
+   * @return the management context object which gives direct access to the root configuration of the server
+   * @throws EmbeddedDirectoryServerException
+   *            If the retrieval of the configuration fails
+   */
+  @SuppressWarnings("resource")
+  public ManagementContext getConfiguration() throws EmbeddedDirectoryServerException
+  {
+    try
+    {
+      if (isRunning())
+      {
+        Connection ldapConnection = ldapConnectionFactory.getConnection();
+        return newManagementContext(ldapConnection, LDAPProfile.getInstance());
+      }
+      return newLDIFManagementContext(new File(configParams.getConfigurationFile()));
+    }
+    catch (IOException e)
+    {
+      throw new EmbeddedDirectoryServerException(
+          ERR_EMBEDDED_SERVER_LDIF_MANAGEMENT_CONTEXT.get(configParams.getConfigurationFile()));
     }
   }
 
@@ -263,11 +293,10 @@
    * @throws EmbeddedDirectoryServerException
    *            If the import fails
    */
-  public void importData(ImportParameters parameters) throws EmbeddedDirectoryServerException
+  public void importLDIF(ImportParameters parameters) throws EmbeddedDirectoryServerException
   {
     checkServerIsRunning();
-    checkConnectionParameters();
-    int returnCode = ImportLDIF.mainImportLDIF(
+    Reject.checkNotNull(connectionParams);    int returnCode = ImportLDIF.mainImportLDIF(
         parameters.toCommandLineArguments(configParams.getConfigurationFile(), connectionParams),
         !isRunning(), outStream, errStream);
 
@@ -288,7 +317,7 @@
    */
   public void initializeReplication(ReplicationParameters parameters) throws EmbeddedDirectoryServerException
   {
-    checkConnectionParameters();
+    Reject.checkNotNull(connectionParams);
     int returnCode = ReplicationCliMain.mainCLI(
         parameters.toCommandLineArgumentsInitialize(configParams.getConfigurationFile(), connectionParams),
         !isRunning(), outStream, errStream);
@@ -296,12 +325,28 @@
     if (returnCode != 0)
     {
       throw new EmbeddedDirectoryServerException(ERR_EMBEDDED_SERVER_INITIALIZE_REPLICATION.get(
-          configParams.getServerRootDirectory(), connectionParams.getAdminPort(), parameters.getHostname2(),
-          parameters.getAdminPort2(), returnCode));
+          configParams.getServerRootDirectory(), connectionParams.getAdminPort(), parameters.getHostnameDestination(),
+          parameters.getAdminPortDestination(), returnCode));
     }
   }
 
   /**
+   * Indicates whether replication is currently running for the embedded server.
+   *
+   * @param parameters
+   *            The parameters for the replication.
+   * @return {@code true} if replication is running, {@code false} otherwise
+   */
+  public boolean isReplicationRunning(ReplicationParameters parameters)
+  {
+    Reject.checkNotNull(connectionParams);
+    int returnCode = ReplicationCliMain.mainCLI(
+        parameters.toCommandLineArgumentsStatus(configParams.getConfigurationFile(), connectionParams),
+        !isRunning(), outStream, errStream);
+    return returnCode == 0;
+  }
+
+  /**
    * Indicates whether this server is currently running.
    *
    * @return {@code true} if the server is currently running, or {@code false} if not.
@@ -312,50 +357,7 @@
   }
 
   /**
-   * Reads the configuration of this server with the provided configuration reader.
-   * <p>
-   * The configuration reader provides access to the root configuration of the directory,
-   * which can then be used to read any configuration object and return the result as an
-   * arbitrary object.
-   * <p>
-   * Example:
-   * <pre>
-   * server.readConfiguration(new DirectoryConfigReader<List<String>>() {
-   *   public List<String> read(RootCfgClient rootConfig) {
-   *    return Arrays.asList(rootConfig.listSynchronizationProviders());
-   *   }
-   * });
-   * </pre>
-   * @param <R>
-   *          the type of the returned result
-   * @param configReader
-   *          the reader of the configuration
-   * @return the result of the read
-   * @throws EmbeddedDirectoryServerException
-   *            If the read fails
-   */
-  public <R> R readConfiguration(DirectoryConfigReader<R> configReader) throws EmbeddedDirectoryServerException
-  {
-    checkConnectionParameters();
-    Pair<ManagementContext, Connection> contextAndConnection = getManagementContext();
-    try
-    {
-      RootCfgClient rootConfig = contextAndConnection.getFirst().getRootConfiguration();
-      return configReader.read(rootConfig);
-    }
-    catch (Exception e)
-    {
-      throw new EmbeddedDirectoryServerException(ERR_EMBEDDED_SERVER_READ_CONFIG.get(
-          configParams.getServerRootDirectory(), StaticUtils.stackTraceToSingleLineString(e)));
-    }
-    finally
-    {
-      StaticUtils.close(contextAndConnection.getFirst(), contextAndConnection.getSecond());
-    }
-  }
-
-  /**
-   * Setups this server from the root directory.
+   * Set this server up from the root directory.
    * <p>
    * As a pre-requisite, the OpenDJ archive must have been previously extracted to some
    * directory. To perform a setup directly from an archive, see {@code setupFromArchive()}.
@@ -367,8 +369,7 @@
    */
   public void setup(SetupParameters parameters) throws EmbeddedDirectoryServerException
   {
-    checkConnectionParameters();
-
+    Reject.checkNotNull(connectionParams);
     System.setProperty(PROPERTY_SERVER_ROOT, configParams.getServerRootDirectory());
     System.setProperty(QUICKSETUP_ROOT_PROPERTY, configParams.getServerRootDirectory());
     String instanceDir = configParams.getServerInstanceDirectory() != null ?
@@ -388,27 +389,26 @@
   }
 
   /**
-   * Setups this server from the provided archive.
+   * Extracts the provided archive to the appropriate root directory of the server.
    * <p>
    * As the DJ archive includes the "opendj" directory, it is mandatory to have
-   * the root directory named "opendj" when using this method.
+   * the root directory named after it when using this method.
    *
    * @param openDJZipFile
    *            The OpenDJ server archive.
-   * @param parameters
-   *            The installation parameters.
    * @throws EmbeddedDirectoryServerException
-   *            If the setup fails for any reason.
+   *            If the extraction of the archive fails.
    */
-  public void setupFromArchive(File openDJZipFile, SetupParameters parameters) throws EmbeddedDirectoryServerException
+  public void extractArchiveForSetup(File openDJZipFile) throws EmbeddedDirectoryServerException
   {
-    checkConnectionParameters();
+    Reject.checkNotNull(connectionParams);
     try
     {
       File serverRoot = new File(configParams.getServerRootDirectory());
-      if (!serverRoot.getName().equals("opendj"))
+      if (!ARCHIVE_ROOT_DIRECTORY.equals(serverRoot.getName()))
       {
-        throw new EmbeddedDirectoryServerException(LocalizableMessage.raw("Wrong server root directory" + serverRoot));
+        throw new EmbeddedDirectoryServerException(
+            ERR_EMBEDDED_SERVER_ARCHIVE_SETUP_WRONG_ROOT_DIRECTORY.get(ARCHIVE_ROOT_DIRECTORY, serverRoot));
       }
       // the directory where the zip file is extracted should be one level up from the server root.
       File deployDirectory = serverRoot.getParentFile();
@@ -419,7 +419,6 @@
       throw new EmbeddedDirectoryServerException(ERR_EMBEDDED_SERVER_SETUP_EXTRACT_ARCHIVE.get(
           openDJZipFile, configParams.getServerRootDirectory(), StaticUtils.stackTraceToSingleLineString(e)));
     }
-    setup(parameters);
   }
 
   /**
@@ -522,47 +521,6 @@
   }
 
   /**
-   * Configures this server with the provided configuration updater.
-   * <p>
-   * The configuration updater provides access to the root configuration of the directory server,
-   * which can then be used to perform one or more modifications on any configuration object.
-   * <p>
-   * Example:
-   * <pre>
-   * server.configure(new DirectoryConfigUpdater() {
-   *
-   *   public void update(RootCfgClient rootConfig) {
-   *     JEBackendCfgClient userRoot = (JEBackendCfgClient) rootConfig.getBackend("userRoot");
-   *     userRoot.setBaseDN(Arrays.asList(DN.valueOf("dc=example,dc=com")));
-   *     userRoot.setDBCachePercent(70);
-   *     userRoot.commit();
-   *   }
-   * });
-   * </pre>
-   *
-   * @param configUpdater
-   *            updates the configuration
-   * @throws EmbeddedDirectoryServerException
-   *            If an error occurs.
-   */
-  public void updateConfiguration(DirectoryConfigUpdater configUpdater) throws EmbeddedDirectoryServerException
-  {
-    checkConnectionParameters();
-    Pair<ManagementContext, Connection> contextAndConnection = getManagementContext();
-    try {
-      RootCfgClient rootConfig = contextAndConnection.getFirst().getRootConfiguration();
-      configUpdater.update(rootConfig);
-    } catch (Exception e) {
-      throw new EmbeddedDirectoryServerException(ERR_EMBEDDED_SERVER_UPDATE_CONFIG.get(
-          configParams.getServerRootDirectory(), StaticUtils.stackTraceToSingleLineString(e)));
-    }
-    finally
-    {
-      StaticUtils.close(contextAndConnection.getFirst(), contextAndConnection.getSecond());
-    }
-  }
-
-  /**
    * Upgrades this server.
    * <p>
    * Upgrades the server configuration and application data so that it is compatible
@@ -585,56 +543,11 @@
     }
   }
 
-  /**
-   * Interface to update the configuration of the directory server.
-   */
-  public interface DirectoryConfigUpdater
-  {
-    /**
-     * Updates the configuration, provided the root configuration object of the directory server.
-     *
-     * @param rootConfig
-     *          The root configuration of the server.
-     * @throws Exception
-     *          If an error occurs.
-     */
-    public void update(RootCfgClient rootConfig) throws Exception;
-  }
-
-  /**
-   * Interface to read the configuration of the directory server.
-   *
-   * @param <R>
-   *            The type of the result returned by the read operation.
-   */
-  public interface DirectoryConfigReader<R>
-  {
-    /**
-     * Reads the configuration, provided the root configuration object of the directory server.
-     *
-     * @param rootConfig
-     *          The root configuration of the server.
-     * @return the result of the read operation
-     * @throws Exception
-     *          If an error occurs.
-     */
-    public R read(RootCfgClient rootConfig) throws Exception;
-  }
-
-  private void checkConnectionParameters() throws EmbeddedDirectoryServerException
-  {
-    if (connectionParams == null)
-    {
-      throw new EmbeddedDirectoryServerException(LocalizableMessage.raw("Operation is not permitted"));
-    }
-  }
-
   private void checkServerIsRunning() throws EmbeddedDirectoryServerException
   {
     if (!isRunning())
     {
-      throw new EmbeddedDirectoryServerException(LocalizableMessage.raw(
-          "This operation is only available when server is online"));
+      throw new EmbeddedDirectoryServerException(ERR_EMBEDDED_SERVER_IMPORT_DATA_SERVER_IS_NOT_RUNNING.get());
     }
   }
 
@@ -642,35 +555,8 @@
   {
     if (isRunning())
     {
-      throw new EmbeddedDirectoryServerException(LocalizableMessage.raw(
-          "This operation is only available when server is offline"));
-    }
-  }
+      throw new EmbeddedDirectoryServerException(ERR_EMBEDDED_SERVER_REBUILD_INDEX_SERVER_IS_RUNNING.get());
 
-  /**
-   * Retrieves the management context, and optionally a connection if the server is running, in order to
-   * give access to the configuration of the server.
-   */
-  private Pair<ManagementContext, Connection> getManagementContext() throws EmbeddedDirectoryServerException
-  {
-    Connection ldapConnection = null;
-    ManagementContext ctx = null;
-    try
-    {
-      if (isRunning())
-      {
-        ldapConnection = ldapConnectionFactory.getConnection();
-        ctx = newManagementContext(ldapConnection, LDAPProfile.getInstance());
-      }
-      else
-      {
-        ctx = newLDIFManagementContext(new File(configParams.getConfigurationFile()));
-      }
-      return Pair.of(ctx, ldapConnection);
-    }
-    catch (IOException e)
-    {
-      throw new EmbeddedDirectoryServerException(LocalizableMessage.raw("Error when initialising LDIF mgt ctx"));
     }
   }
 }
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/EmbeddedDirectoryServerException.java b/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/EmbeddedDirectoryServerException.java
index aa1b871..3afa6fe 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/EmbeddedDirectoryServerException.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/EmbeddedDirectoryServerException.java
@@ -22,11 +22,10 @@
  * Exception that may be thrown by an embedded directory server if a problem occurs while
  * performing an operation on the server.
  */
+@SuppressWarnings("serial")
 public final class EmbeddedDirectoryServerException extends OpenDsException
 {
 
-  private static final long serialVersionUID = 1L;
-
   /**
    * Creates a new exception with the provided message.
    *
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/ImportParameters.java b/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/ImportParameters.java
index 2449d96..e65aa6c 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/ImportParameters.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/ImportParameters.java
@@ -15,9 +15,7 @@
  */
 package org.opends.server.util.embedded;
 
-/**
- * Parameters to import LDIF data to a directory server.
- */
+/** Parameters to import LDIF data to a directory server. */
 public final class ImportParameters
 {
   private String backendID;
@@ -25,17 +23,17 @@
 
   private ImportParameters()
   {
-    // private constructor to force usage of the associated Builder
+    // prefer usage of static method for creation
   }
 
   /**
-   * Creates a builder for the import parameters.
+   * Creates the import parameters.
    *
-   * @return a builder
+   * @return parameters
    */
-  public static Builder importParams()
+  public static ImportParameters importParams()
   {
-    return new Builder();
+    return new ImportParameters();
   }
 
   /**
@@ -62,55 +60,28 @@
   }
 
   /**
-   * Builder for this class.
+   * Sets the backend id of the backend to import.
+   *
+   * @param id
+   *          the backend id
+   * @return this builder
    */
-  public static final class Builder
+  public ImportParameters backendId(String id)
   {
-    private ImportParameters params;
+    backendID = id;
+    return this;
+  }
 
-    private Builder()
-    {
-      params = new ImportParameters();
-    }
-
-    /**
-     * Generates the parameters from this builder.
-     * <p>
-     * After this call, the builder is reset and can be used to generate other parameters.
-     *
-     * @return the replication parameters
-     */
-    public ImportParameters toParams()
-    {
-      ImportParameters p = params;
-      this.params = new ImportParameters();
-      return p;
-    }
-
-    /**
-     * Sets the backend id of the backend to import.
-     *
-     * @param id
-     *          the backend id
-     * @return this builder
-     */
-    public Builder backendId(String id)
-    {
-      params.backendID = id;
-      return this;
-    }
-
-    /**
-     * Sets the path to the LDIF file to be imported.
-     *
-     * @param ldifFile
-     *          The path to the LDIF file
-     * @return this builder
-     */
-    public Builder ldifFile(String ldifFile)
-    {
-      params.ldifFile = ldifFile;
-      return this;
-    }
+  /**
+   * Sets the path to the LDIF file to be imported.
+   *
+   * @param ldifFile
+   *          The path to the LDIF file
+   * @return this builder
+   */
+  public ImportParameters ldifFile(String ldifFile)
+  {
+    this.ldifFile = ldifFile;
+    return this;
   }
 }
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/RebuildIndexParameters.java b/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/RebuildIndexParameters.java
index 8c8769c..eb80ea2 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/RebuildIndexParameters.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/RebuildIndexParameters.java
@@ -15,16 +15,14 @@
  */
 package org.opends.server.util.embedded;
 
-/**
- * Parameters to rebuild the indexes of a directory server.
- */
+/** Parameters to rebuild the indexes of a directory server. */
 public final class RebuildIndexParameters
 {
   private String baseDN;
 
   private RebuildIndexParameters()
   {
-    // private constructor to force usage of the associated Builder
+    // prefer usage of static method for creation
   }
 
   /**
@@ -32,9 +30,9 @@
    *
    * @return a builder
    */
-  public static Builder rebuildIndexParams()
+  public static RebuildIndexParameters rebuildIndexParams()
   {
-    return new Builder();
+    return new RebuildIndexParameters();
   }
 
   /**
@@ -53,42 +51,15 @@
   }
 
   /**
-   * Builder for this class.
+   * Sets the base Dn for user information in the directory server.
+   *
+   * @param baseDN
+   *          the baseDN
+   * @return this builder
    */
-  public static final class Builder
+  public RebuildIndexParameters baseDN(String baseDN)
   {
-    private RebuildIndexParameters params;
-
-    private Builder()
-    {
-      params = new RebuildIndexParameters();
-    }
-
-    /**
-     * Generates the parameters from this builder.
-     * <p>
-     * After this call, the builder is reset and can be used to generate other parameters.
-     *
-     * @return the rebuild index parameters
-     */
-    public RebuildIndexParameters toParams()
-    {
-      RebuildIndexParameters p = params;
-      this.params = new RebuildIndexParameters();
-      return p;
-    }
-
-    /**
-     * Sets the base Dn for user information in the directory server.
-     *
-     * @param baseDN
-     *          the baseDN
-     * @return this builder
-     */
-    public Builder baseDN(String baseDN)
-    {
-      params.baseDN = baseDN;
-      return this;
-    }
+    this.baseDN = baseDN;
+    return this;
   }
 }
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/ReplicationParameters.java b/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/ReplicationParameters.java
index 28934fc..0c1db55 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/ReplicationParameters.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/ReplicationParameters.java
@@ -15,19 +15,17 @@
  */
 package org.opends.server.util.embedded;
 
-/**
- * Parameters for replication operations on a directory server.
- */
+/** Parameters for replication operations on a directory server. */
 public final class ReplicationParameters
 {
   private String baseDn;
-  private Integer replicationPort1;
-  private Integer replicationPort2;
-  private ConnectionParameters connParamsForHost2;
+  private Integer replicationPortSource;
+  private Integer replicationPortDestination;
+  private ConnectionParameters connParamsForDestination;
 
   private ReplicationParameters()
   {
-    // private constructor to force usage of the associated Builder
+    // prefer usage of static method for creation
   }
 
   /**
@@ -35,32 +33,32 @@
    *
    * @return a builder
    */
-  public static Builder replicationParams()
+  public static ReplicationParameters replicationParams()
   {
-    return new Builder();
+    return new ReplicationParameters();
   }
 
   /**
-   * Generates the command-line arguments for enabling replication, from the parameters.
+   * Generates the command-line arguments for configuring replication, from the parameters.
    *
    * @return command-line arguments
    */
-  String[] toCommandLineArgumentsEnable(String configurationFile, ConnectionParameters connParams)
+  String[] toCommandLineArgumentsConfiguration(String configurationFile, ConnectionParameters connParams)
   {
     return new String[] {
       "enable",
       "--no-prompt",
       "--configFile", configurationFile,
-      "--host1", connParams.getHostname(),
+      "--host1", connParams.getHostName(),
       "--port1", s(connParams.getAdminPort()),
       "--bindDN1", connParams.getBindDn(),
       "--bindPassword1", connParams.getBindPassword(),
-      "--replicationPort1", s(replicationPort1),
-      "--host2", connParamsForHost2.getHostname(),
-      "--port2", s(connParamsForHost2.getAdminPort()),
-      "--bindDN2", connParamsForHost2.getBindDn(),
-      "--bindPassword2", connParamsForHost2.getBindPassword(),
-      "--replicationPort2", s(replicationPort2),
+      "--replicationPort1", s(replicationPortSource),
+      "--host2", connParamsForDestination.getHostName(),
+      "--port2", s(connParamsForDestination.getAdminPort()),
+      "--bindDN2", connParamsForDestination.getBindDn(),
+      "--bindPassword2", connParamsForDestination.getBindPassword(),
+      "--replicationPort2", s(replicationPortDestination),
       "--adminUID", connParams.getAdminUid(),
       "--adminPassword", connParams.getAdminPassword(),
       "--baseDN", baseDn,
@@ -79,10 +77,10 @@
       "initialize",
       "--no-prompt",
       "--configFile", configurationFile,
-      "--hostSource", connParams.getHostname(),
+      "--hostSource", connParams.getHostName(),
       "--portSource", s(connParams.getAdminPort()),
-      "--hostDestination", connParamsForHost2.getHostname(),
-      "--portDestination", s(connParamsForHost2.getAdminPort()),
+      "--hostDestination", connParamsForDestination.getHostName(),
+      "--portDestination", s(connParamsForDestination.getAdminPort()),
       "--adminUID", connParams.getAdminUid(),
       "--adminPassword", connParams.getAdminPassword(),
       "--baseDN", baseDn,
@@ -101,7 +99,7 @@
       "status",
       "--no-prompt",
       "--configFile", configurationFile,
-      "--hostname", connParams.getHostname(),
+      "--hostname", connParams.getHostName(),
       "--port", s(connParams.getAdminPort()),
       "--adminUID", connParams.getAdminUid(),
       "--adminPassword", connParams.getAdminPassword(),
@@ -109,24 +107,24 @@
       "--noPropertiesFile" };
   }
 
-  int getReplicationPort1()
+  int getReplicationPortSource()
   {
-    return replicationPort1;
+    return replicationPortSource;
   }
 
-  int getReplicationPort2()
+  int getReplicationPortDestination()
   {
-    return replicationPort2;
+    return replicationPortDestination;
   }
 
-  String getHostname2()
+  String getHostnameDestination()
   {
-    return connParamsForHost2.getHostname();
+    return connParamsForDestination.getHostName();
   }
 
-  int getAdminPort2()
+  int getAdminPortDestination()
   {
-    return connParamsForHost2.getAdminPort();
+    return connParamsForDestination.getAdminPort();
   }
 
   /** Convert an integer to a String. */
@@ -136,84 +134,57 @@
   }
 
   /**
-   * Builder for this class.
+   * Sets the base Dn of the data to be replicated.
+   *
+   * @param baseDn
+   *          the base Dn
+   * @return this builder
    */
-  public static final class Builder
+  public ReplicationParameters baseDn(String baseDn)
   {
-    private ReplicationParameters params;
+    this.baseDn = baseDn;
+    return this;
+  }
 
-    private Builder()
-    {
-      params = new ReplicationParameters();
-    }
+  /**
+   * Sets the replication port of the first server (source) whose contents will be replicated.
+   * <p>
+   * The source server should correspond to the embedded server on which the replication operation is
+   * applied.
+   *
+   * @param port
+   *          the replication port
+   * @return this builder
+   */
+  public ReplicationParameters replicationPortSource(int port)
+  {
+    this.replicationPortSource = port;
+    return this;
+  }
 
-    /**
-     * Generates the parameters from this builder.
-     * <p>
-     * After this call, the builder is reset and can be used to generate other parameters.
-     *
-     * @return the replication parameters
-     */
-    public ReplicationParameters toParams()
-    {
-      ReplicationParameters p = params;
-      this.params = new ReplicationParameters();
-      return p;
-    }
+  /**
+   * Sets the replication port of the second server (destination) whose contents will be replicated.
+   *
+   * @param port
+   *          the replication port
+   * @return this builder
+   */
+  public ReplicationParameters replicationPortDestination(int port)
+  {
+    this.replicationPortDestination = port;
+    return this;
+  }
 
-    /**
-     * Sets the base Dn of the data to be replicated.
-     *
-     * @param baseDn
-     *          the base Dn
-     * @return this builder
-     */
-    public Builder baseDn(String baseDn)
-    {
-      params.baseDn = baseDn;
-      return this;
-    }
-
-    /**
-     * Sets the replication port of the first server whose contents will be replicated.
-     * <p>
-     * The first server should correspond to the embedded server on which the replication
-     * operation is applied.
-     *
-     * @param port
-     *          the replication port
-     * @return this builder
-     */
-    public Builder replicationPort1(int port)
-    {
-      params.replicationPort1 = port;
-      return this;
-    }
-
-    /**
-     * Sets the replication port of the second server whose contents will be replicated.
-     *
-     * @param port
-     *          the replication port
-     * @return this builder
-     */
-    public Builder replicationPort2(int port)
-    {
-      params.replicationPort2 = port;
-      return this;
-    }
-
-    /**
-     * Sets the connection parameters of the second server whose contents will be replicated.
-     *
-     * @param host2Params
-     *          The connection parameters
-     * @return this builder
-     */
-    public Builder connectionParamsForHost2(ConnectionParameters.Builder host2Params)
-    {
-      params.connParamsForHost2 = host2Params.toParams();
-      return this;
-    }
+  /**
+   * Sets the connection parameters of the second server (destination) whose contents will be replicated.
+   *
+   * @param destinationParams
+   *          The connection parameters for destination server
+   * @return this builder
+   */
+  public ReplicationParameters connectionParamsForDestination(ConnectionParameters destinationParams)
+  {
+    this.connParamsForDestination = destinationParams;
+    return this;
   }
 }
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/SetupParameters.java b/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/SetupParameters.java
index 0edd54e..7ceafa0 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/SetupParameters.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/SetupParameters.java
@@ -15,9 +15,11 @@
  */
 package org.opends.server.util.embedded;
 
-/**
- * Parameters to setup a directory server.
- */
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/** Parameters to setup a directory server. */
 public final class SetupParameters
 {
   private String baseDn;
@@ -26,7 +28,7 @@
 
   private SetupParameters()
   {
-    // private constructor to force usage of the associated Builder
+    // prefer usage of static method for creation
   }
 
   /**
@@ -34,9 +36,9 @@
    *
    * @return a builder
    */
-  public static Builder setupParams()
+  public static SetupParameters setupParams()
   {
-    return new Builder();
+    return new SetupParameters();
   }
 
   /**
@@ -46,14 +48,14 @@
    */
   String[] toCommandLineArguments(ConnectionParameters connParams)
   {
-    return new String[] {
+    String[] baseArgs = new String[] {
       "--cli",
       "--noPropertiesFile",
       "--no-prompt",
       "--doNotStart",
       "--skipPortCheck",
       "--baseDN", baseDn,
-      "--hostname", connParams.getHostname(),
+      "--hostname", connParams.getHostName(),
       "--rootUserDN", connParams.getBindDn(),
       "--rootUserPassword", connParams.getBindPassword(),
       "--ldapPort", s(connParams.getLdapPort()),
@@ -61,6 +63,21 @@
       "--jmxPort", s(jmxPort),
       "--backendType", backendType
     };
+    List<String> args = new ArrayList<>(Arrays.asList(baseArgs));
+    if (connParams.getLdapSecurePort() != null)
+    {
+      args.add("--ldapsPort");
+      args.add(s(connParams.getLdapSecurePort()));
+    }
+    if (connParams.isStartTLSEnabled())
+    {
+      args.add("--enableStartTLS");
+    }
+    if (connParams.getLdapSecurePort() != null || connParams.isStartTLSEnabled())
+    {
+      args.add("--generateSelfSignedCertificate");
+    }
+    return args.toArray(new String[args.size()]);
   }
 
   String getBaseDn()
@@ -80,68 +97,41 @@
   }
 
   /**
-   * Builder for this class.
+   * Sets the base Dn for user information in the directory server.
+   *
+   * @param baseDn
+   *          the base Dn
+   * @return this builder
    */
-  public static final class Builder
+  public SetupParameters baseDn(String baseDn)
   {
-    private SetupParameters params;
+    this.baseDn = baseDn;
+    return this;
+  }
 
-    private Builder()
-    {
-      params = new SetupParameters();
-    }
+  /**
+   * Sets the port on which the directory server should listen for JMX communication.
+   *
+   * @param jmxPort
+   *          the JMX port
+   * @return this builder
+   */
+  public SetupParameters jmxPort(int jmxPort)
+  {
+    this.jmxPort = jmxPort;
+    return this;
+  }
 
-    /**
-     * Generates the parameters from this builder.
-     * <p>
-     * After this call, the builder is reset and can be used to generate other parameters.
-     *
-     * @return the replication parameters
-     */
-    public SetupParameters toParams()
-    {
-      SetupParameters p = params;
-      this.params = new SetupParameters();
-      return p;
-    }
-
-    /**
-     * Sets the base Dn for user information in the directory server.
-     *
-     * @param baseDn
-     *          the base Dn
-     * @return this builder
-     */
-    public Builder baseDn(String baseDn)
-    {
-      params.baseDn = baseDn;
-      return this;
-    }
-
-    /**
-     * Sets the port on which the directory server should listen for JMX communication.
-     *
-     * @param jmxPort
-     *          the JMX port
-     * @return this builder
-     */
-    public Builder jmxPort(int jmxPort)
-    {
-      params.jmxPort = jmxPort;
-      return this;
-    }
-
-    /**
-     * Sets the type of the backend containing user information.
-     *
-     * @param backendType
-     *          the backend type (e.g. je, pdb)
-     * @return this builder
-     */
-    public Builder backendType(String backendType)
-    {
-      params.backendType = backendType;
-      return this;
-    }
+  /**
+   * Sets the type of the backend containing user information.
+   *
+   * @param backendType
+   *          the backend type (e.g. je, pdb)
+   * @return this builder
+   */
+  public SetupParameters backendType(String backendType)
+  {
+    this.backendType = backendType;
+    return this;
   }
 }
\ No newline at end of file
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/UpgradeParameters.java b/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/UpgradeParameters.java
index 44e042b..965da50 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/UpgradeParameters.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/UpgradeParameters.java
@@ -18,16 +18,14 @@
 import java.util.ArrayList;
 import java.util.List;
 
-/**
- * Parameters to upgrade a Directory Server.
- */
+/** Parameters to upgrade a Directory Server. */
 public final class UpgradeParameters
 {
   private boolean ignoreErrors;
 
   private UpgradeParameters()
   {
-    // private constructor to force usage of the associated Builder
+    // prefer usage of static method for creation
   }
 
   /**
@@ -35,9 +33,9 @@
    *
    * @return this builder
    */
-  public static Builder upgradeParams()
+  public static UpgradeParameters upgradeParams()
   {
-    return new Builder();
+    return new UpgradeParameters();
   }
 
   /**
@@ -60,43 +58,18 @@
   }
 
   /**
-   * Builder for the UpgradeParameters class.
+   * Indicates whether errors should be ignored during the upgrade.
+   * <p>
+   * This option should be used with caution and may be useful in automated deployments where
+   * potential errors are known in advance and resolved after the upgrade has completed
+   *
+   * @param ignore
+   *          indicates whether errors should be ignored
+   * @return this builder
    */
-  public static final class Builder
+  public UpgradeParameters isIgnoreErrors(boolean ignore)
   {
-    private UpgradeParameters params;
-
-    private Builder()
-    {
-      params = new UpgradeParameters();
-    }
-
-    /**
-     * Returns the fully initialized parameters.
-     *
-     * @return the parameters
-     */
-    public UpgradeParameters toParams()
-    {
-      UpgradeParameters p = params;
-      this.params = new UpgradeParameters();
-      return p;
-    }
-
-    /**
-     * Indicates whether errors should be ignored during the upgrade.
-     * <p>
-     * This option should be used with caution and may be useful in automated deployments where
-     * potential errors are known in advance and resolved after the upgrade has completed
-     *
-     * @param ignore
-     *          indicates whether errors should be ignored
-     * @return this builder
-     */
-    public Builder isIgnoreErrors(boolean ignore)
-    {
-      params.ignoreErrors = ignore;
-      return this;
-    }
+    ignoreErrors = ignore;
+    return this;
   }
 }
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/package-info.java b/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/package-info.java
index 67c491c..d6eca0f 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/package-info.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/package-info.java
@@ -13,7 +13,5 @@
  *
  * Copyright 2016 ForgeRock AS.
  */
-/**
- * Provides support for an embedded directory server.
- */
+/** Provides support for an embedded directory server. */
 package org.opends.server.util.embedded;
\ No newline at end of file
diff --git a/opendj-server-legacy/src/messages/org/opends/messages/utility.properties b/opendj-server-legacy/src/messages/org/opends/messages/utility.properties
index 9cf169c..8a75da5 100644
--- a/opendj-server-legacy/src/messages/org/opends/messages/utility.properties
+++ b/opendj-server-legacy/src/messages/org/opends/messages/utility.properties
@@ -406,34 +406,36 @@
 ERR_BACKUP_CANNOT_CREATE_SAVE_DIRECTORY_326=An error occurred while \
  attempting to create a save directory with base path %s before restore of \
  backup of %s: %s
-ERR_EMBEDDED_SERVER_DISPLAY_REPLICATION_STATUS_327=An error occurred while attempting \
- to display replication status of embedded server with server root '%s'. Error code \
- is: %s
-ERR_EMBEDDED_SERVER_ENABLE_REPLICATION_328=An error occurred while attempting \
- to enable replication between embedded server with server root '%s' and replication \
- port1 '%s' and second server with hostname '%s' and replication port2 '%s'. Error code \
- is: %s
+ERR_EMBEDDED_SERVER_CONFIGURE_REPLICATION_328=An error occurred while attempting \
+ to configure replication between embedded server with server root '%s' and source replication \
+ port '%s' and destination server with hostname '%s' and destination replication port '%s'. Error code \
+ is: %d
 ERR_EMBEDDED_SERVER_IMPORT_DATA_329=An error occurred while attempting \
  to import LDIF file '%s' into embedded server with server root '%s'. Error code \
- is: %s
+ is: %d
 ERR_EMBEDDED_SERVER_INITIALIZE_REPLICATION_330=An error occurred while attempting \
  to initialize replication between embedded server with server root '%s' and admin \
- port1 '%s' and second server with hostname '%s' and admin port2 '%s'. Error code \
- is: %s
-ERR_EMBEDDED_SERVER_READ_CONFIG_331=An error occurred while attempting \
- to read configuration of embedded server with server root '%s' : %s
+ source port '%s' and destination server with hostname '%s' and destination admin port '%s'. Error code \
+ is: %d
 ERR_EMBEDDED_SERVER_SETUP_332=An error occurred while attempting \
  to setup the embedded server with server root '%s', base DN '%s' and backend type '%s'. \
- Error code is: %s
+ Error code is: %d
 ERR_EMBEDDED_SERVER_SETUP_EXTRACT_ARCHIVE_333=An error occurred while attempting \
  to extract server archive '%s' before setup of embedded server with server root '%s': %s
 ERR_EMBEDDED_SERVER_REBUILD_INDEX_334=An error occurred while attempting \
- to rebuild index of embedded server with server root '%s'. Error code is: %s
-ERR_EMBEDDED_SERVER_UPDATE_CONFIG_335=An error occurred while attempting \
- to update configuration of embedded server with server root '%s' : %s
+ to rebuild index of embedded server with server root '%s'. Error code is: %d
 ERR_EMBEDDED_SERVER_START_336=An error occurred while attempting \
  to start the embedded server with server root '%s' : %s
 ERR_EMBEDDED_SERVER_UPGRADE_337=An error occurred while attempting \
  to upgrade the embedded server with server root '%s' : %s
 ERR_EMBEDDED_SERVER_INTERNAL_CONNECTION=An error occurred while attempting to retrieve \
- an internal connection to the server with the user DN '%s'
\ No newline at end of file
+ an internal connection to the server with the user DN '%s'
+ERR_EMBEDDED_SERVER_ARCHIVE_SETUP_WRONG_ROOT_DIRECTORY=The setup from an archive \
+ can only be done with a server root directory named after the root directory contained \
+ in the archive: '%s'. The provided server root was: '%s'
+ERR_EMBEDDED_SERVER_IMPORT_DATA_SERVER_IS_NOT_RUNNING=The import data operation could \
+ not be performed on the embedded server because it is not running
+ERR_EMBEDDED_SERVER_REBUILD_INDEX_SERVER_IS_RUNNING=The rebuild index operation could \
+ not be performed on the embedded server because it is running
+ERR_EMBEDDED_SERVER_LDIF_MANAGEMENT_CONTEXT=An error occurred while attempting to \
+ read the configuration file '%s'
\ No newline at end of file
diff --git a/opendj-server-legacy/src/test/java/org/opends/server/TestCaseUtils.java b/opendj-server-legacy/src/test/java/org/opends/server/TestCaseUtils.java
index 0cee274..fdb2cf5 100644
--- a/opendj-server-legacy/src/test/java/org/opends/server/TestCaseUtils.java
+++ b/opendj-server-legacy/src/test/java/org/opends/server/TestCaseUtils.java
@@ -17,7 +17,7 @@
  */
 package org.opends.server;
 
-import static org.opends.server.util.embedded.EmbeddedDirectoryServer.defineServer;
+import static org.opends.server.util.embedded.EmbeddedDirectoryServer.manageEmbeddedDirectoryServer;
 import static org.opends.server.util.embedded.ConnectionParameters.connectionParams;
 import static org.opends.server.util.embedded.ConfigParameters.configParams;
 import static org.opends.server.loggers.TextAccessLogPublisher.getStartupTextAccessPublisher;
@@ -266,10 +266,13 @@
       String buildDirStr = System.getProperty(PROPERTY_BUILD_DIR, buildRoot + File.separator + "target");
       buildDir = new File(buildDirStr);
       unitRoot  = new File(buildDir, "unit-tests");
-      if (installedRoot == null) {
+      if (installedRoot == null)
+      {
          testInstallRoot = new File(unitRoot, "package-install");
          testInstanceRoot = new File(unitRoot, "package-instance");
-      } else {
+      }
+      else
+      {
          testInstallRoot = new File(unitRoot, "package");
          testInstanceRoot = testInstallRoot;
       }
@@ -309,24 +312,15 @@
         return;
       }
       InvocationCounterPlugin.resetStartupCalled();
-
       initializePortsAndServer();
-
       deployDirectoryDirsAndFiles();
-
       setupLoggers();
-
       writeBuildInfoFile();
-
       server.start();
-
       assertTrue(InvocationCounterPlugin.startupCalled());
-
       // Save config.ldif for when we restart the server
       backupServerConfigLdif();
-
       SERVER_STARTED = true;
-
       initializeTestBackend(true);
     }
     catch (Exception e)
@@ -340,19 +334,17 @@
   {
     ports = new TestPorts();
     hostname = InetAddress.getLocalHost().getHostName();
-    server = defineServer(
+    server = manageEmbeddedDirectoryServer(
         configParams()
           .serverRootDirectory(paths.testInstallRoot.getPath())
           .serverInstanceDirectory(paths.testInstanceRoot.getPath())
-          .configurationFile(paths.configFile.getPath())
-          .toParams(),
+          .configurationFile(paths.configFile.getPath()),
         connectionParams()
           .bindDn("cn=Directory Manager")
           .bindPassword("password")
-          .hostname(hostname)
+          .hostName(hostname)
           .ldapPort(ports.serverLdapPort)
-          .adminPort(ports.serverAdminPort)
-          .toParams(),
+          .adminPort(ports.serverAdminPort),
          System.out,
          System.err);
   }
diff --git a/opendj-server-legacy/src/test/java/org/opends/server/util/EmbeddedDirectoryServerTestCase.java b/opendj-server-legacy/src/test/java/org/opends/server/util/EmbeddedDirectoryServerTestCase.java
index 9d9c437..f6ee6c1 100644
--- a/opendj-server-legacy/src/test/java/org/opends/server/util/EmbeddedDirectoryServerTestCase.java
+++ b/opendj-server-legacy/src/test/java/org/opends/server/util/EmbeddedDirectoryServerTestCase.java
@@ -15,9 +15,10 @@
  */
 package org.opends.server.util;
 
+import static org.opends.server.util.embedded.SetupParameters.setupParams;
 import static org.opends.server.util.embedded.ConfigParameters.configParams;
 import static org.opends.server.util.embedded.ConnectionParameters.connectionParams;
-import static org.opends.server.util.embedded.EmbeddedDirectoryServer.defineServer;
+import static org.opends.server.util.embedded.EmbeddedDirectoryServer.manageEmbeddedDirectoryServer;
 import static org.opends.server.util.embedded.ImportParameters.importParams;
 import static org.opends.server.util.embedded.UpgradeParameters.upgradeParams;
 import static org.opends.server.util.embedded.RebuildIndexParameters.rebuildIndexParams;
@@ -29,17 +30,14 @@
 import java.util.SortedSet;
 
 import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.opendj.config.client.ManagementContext;
 import org.forgerock.opendj.ldap.DN;
 import org.forgerock.opendj.server.config.client.BackendCfgClient;
-import org.forgerock.opendj.server.config.client.RootCfgClient;
 import org.opends.server.TestCaseUtils;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.types.DirectoryEnvironmentConfig;
 import org.opends.server.util.embedded.EmbeddedDirectoryServer;
-import org.opends.server.util.embedded.EmbeddedDirectoryServer.DirectoryConfigReader;
-import org.opends.server.util.embedded.EmbeddedDirectoryServer.DirectoryConfigUpdater;
 import org.opends.server.util.embedded.EmbeddedDirectoryServerException;
-import org.opends.server.util.embedded.SetupParameters;
 import org.testng.annotations.AfterClass;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
@@ -116,16 +114,13 @@
     }
   }
 
-  private void readConfiguration(EmbeddedDirectoryServer server) throws EmbeddedDirectoryServerException
+  private void readConfiguration(EmbeddedDirectoryServer server) throws Exception
   {
-    SortedSet<DN> dns = server.readConfiguration(new DirectoryConfigReader<SortedSet<DN>>() {
-          @Override
-          public SortedSet<DN> read(RootCfgClient rootConfig) throws Exception
-          {
-            return rootConfig.getBackend(USER_ROOT).getBaseDN();
-          }
-        });
-    assertThat(dns).containsExactly(DN.valueOf("dc=example,dc=com"));
+    try (ManagementContext config = server.getConfiguration())
+    {
+      SortedSet<DN> dns = config.getRootConfiguration().getBackend(USER_ROOT).getBaseDN();
+      assertThat(dns).containsExactly(DN.valueOf("dc=example,dc=com"));
+    }
   }
 
   public void testReadConfigurationOnline() throws Exception
@@ -148,16 +143,12 @@
 
   private void toggleBackendActivation(EmbeddedDirectoryServer server, final boolean enabled) throws Exception
   {
-    server.updateConfiguration(new DirectoryConfigUpdater()
+    try (ManagementContext config = server.getConfiguration())
     {
-      @Override
-      public void update(RootCfgClient rootConfig) throws Exception
-      {
-        BackendCfgClient backend = rootConfig.getBackend(USER_ROOT);
-        backend.setEnabled(enabled);
-        backend.commit();
-      }
-    });
+      BackendCfgClient backend = config.getRootConfiguration().getBackend(USER_ROOT);
+      backend.setEnabled(enabled);
+      backend.commit();
+    }
   }
 
   /**
@@ -170,7 +161,7 @@
     server.stop(getClass().getSimpleName(), LocalizableMessage.raw("stopping for rebuild index test"));
     try
     {
-      server.rebuildIndex(rebuildIndexParams().baseDN("dc=example,dc=com").build());
+      server.rebuildIndex(rebuildIndexParams().baseDN("dc=example,dc=com"));
     }
     finally
     {
@@ -182,7 +173,7 @@
   @Test(expectedExceptions = EmbeddedDirectoryServerException.class)
   public void testRebuildIndexOnline() throws Exception
   {
-    getServer().rebuildIndex(rebuildIndexParams().baseDN("dc=example,dc=com").build());
+    getServer().rebuildIndex(rebuildIndexParams().baseDN("dc=example,dc=com"));
   }
 
   /**
@@ -195,7 +186,7 @@
     server.stop(getClass().getSimpleName(), LocalizableMessage.raw("stopping for upgrade test"));
     try
     {
-      server.upgrade(upgradeParams().isIgnoreErrors(false).build());
+      server.upgrade(upgradeParams().isIgnoreErrors(false));
     }
     finally
     {
@@ -209,16 +200,15 @@
    */
   public void testUpgradeOnline() throws Exception
   {
-    getServer().upgrade(upgradeParams().isIgnoreErrors(false).build());
+    getServer().upgrade(upgradeParams().isIgnoreErrors(false));
   }
 
   public void testImportDataOnline() throws Exception
   {
     EmbeddedDirectoryServer server = getServer();
-    server.importData(importParams()
+    server.importLDIF(importParams()
         .backendId("userRoot")
-        .ldifFile(TestCaseUtils.getTestResource("test-import-file.ldif").getPath())
-        .build());
+        .ldifFile(TestCaseUtils.getTestResource("test-import-file.ldif").getPath()));
   }
 
   /** Import data is not implemented for offline use in EmbeddedDirectoryServer.*/
@@ -229,10 +219,9 @@
     server.stop(getClass().getSimpleName(), LocalizableMessage.raw("stopping for import data test"));
     try
     {
-      server.importData(importParams()
+      server.importLDIF(importParams()
           .backendId("userRoot")
-          .ldifFile(TestCaseUtils.getTestResource("test-import-file.ldif").getPath())
-          .build());
+          .ldifFile(TestCaseUtils.getTestResource("test-import-file.ldif").getPath()));
     }
     finally
     {
@@ -251,27 +240,25 @@
       StaticUtils.recursiveDelete(rootDir);
 
       final int[] ports = TestCaseUtils.findFreePorts(3);
-      EmbeddedDirectoryServer tempServer = defineServer(
+      EmbeddedDirectoryServer tempServer = manageEmbeddedDirectoryServer(
         configParams()
           .serverRootDirectory(rootDir.getPath())
-          .configurationFile(rootDir.toPath().resolve("config").resolve("config.ldif").toString())
-          .build(),
+          .configurationFile(rootDir.toPath().resolve("config").resolve("config.ldif").toString()),
         connectionParams()
           .bindDn("cn=Directory Manager")
           .bindPassword("password")
           .hostName("localhost")
           .ldapPort(ports[0])
-          .adminPort(ports[1])
-          .build(),
+          .adminPort(ports[1]),
          System.out,
          System.err);
 
-      tempServer.setupFromArchive(TestCaseUtils.getOpenDJArchivePath(),
-          SetupParameters.setupParams()
+      tempServer.extractArchiveForSetup(TestCaseUtils.getOpenDJArchivePath());
+      tempServer.setup(
+          setupParams()
             .backendType("pdb")
             .baseDn("dc=example,dc=com")
-            .jmxPort(ports[2])
-            .build());
+            .jmxPort(ports[2]));
       tempServer.start();
       tempServer.stop(getClass().getSimpleName(), LocalizableMessage.raw("stopping temp server for setup test"));
     }

--
Gitblit v1.10.0