From 986733aa01992e78f973cddbd18f3d02bb62f60e Mon Sep 17 00:00:00 2001
From: Gaetan Boismal <gaetan.boismal@forgerock.com>
Date: Fri, 22 May 2015 12:52:57 +0000
Subject: [PATCH] OPENDJ-2017 (CR-7035) Setup GUI: Fix replication setup

---
 opendj-server-legacy/src/main/java/org/opends/quicksetup/installer/Installer.java |   95 +++++++++++++++++++++--------------------------
 1 files changed, 42 insertions(+), 53 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/opends/quicksetup/installer/Installer.java b/opendj-server-legacy/src/main/java/org/opends/quicksetup/installer/Installer.java
index 181ce8a..2fd9479 100644
--- a/opendj-server-legacy/src/main/java/org/opends/quicksetup/installer/Installer.java
+++ b/opendj-server-legacy/src/main/java/org/opends/quicksetup/installer/Installer.java
@@ -32,6 +32,7 @@
 import static org.opends.admin.ads.util.ConnectionUtils.*;
 import static org.opends.messages.QuickSetupMessages.*;
 import static org.opends.quicksetup.Step.*;
+import static org.opends.quicksetup.installer.DataReplicationOptions.Type.*;
 import static org.opends.quicksetup.util.Utils.*;
 
 import static com.forgerock.opendj.cli.ArgumentConstants.*;
@@ -125,7 +126,9 @@
 import org.opends.quicksetup.util.FileManager;
 import org.opends.quicksetup.util.IncompatibleVersionException;
 import org.opends.quicksetup.util.Utils;
+import org.opends.server.config.ConfigConstants;
 import org.opends.server.tools.BackendTypeHelper;
+import org.opends.server.tools.BackendTypeHelper.BackendTypeUIAdapter;
 import org.opends.server.util.CertificateManager;
 import org.opends.server.util.DynamicConstants;
 import org.opends.server.util.SetupUtils;
@@ -1545,56 +1548,40 @@
    */
   protected void createReplicatedBackendsIfRequired() throws ApplicationException
   {
-    final boolean isFirstInTopology = getUserData().getReplicationOptions().getType() ==
-                                      DataReplicationOptions.Type.FIRST_IN_TOPOLOGY;
-    final List<String> baseDns = getUserData().getNewSuffixOptions().getBaseDns();
-
-    if (isFirstInTopology && baseDns.isEmpty())
+    if (FIRST_IN_TOPOLOGY == getUserData().getReplicationOptions().getType())
     {
-      // There is nothing to do.
       return;
     }
     notifyListeners(getFormattedWithPoints(INFO_PROGRESS_CREATING_REPLICATED_BACKENDS.get()));
 
     // The keys are the backend IDs and the values the list of base DNs.
     final Map<String, Set<String>> hmBackendSuffix = new HashMap<>();
-    boolean deleteUserRoot = false;
-    if (isFirstInTopology)
-    {
-      hmBackendSuffix.put(ROOT_BACKEND_NAME, new HashSet<>(baseDns));
-    }
-    else
-    {
-      Set<SuffixDescriptor> suffixes = getUserData().getSuffixesToReplicateOptions().getSuffixes();
-      // The criteria to choose the name of the backend is to try to have the
-      // configuration of the other server.  The algorithm consists on putting
-      // the remote servers in a list and pick the backend as they appear on the list.
-      populateBackendsToCreate(hmBackendSuffix, suffixes);
-      deleteUserRoot = true;
-      for (String backendName : hmBackendSuffix.keySet())
-      {
-        if (ROOT_BACKEND_NAME.equalsIgnoreCase(backendName))
-        {
-          deleteUserRoot = false;
-          break;
-        }
-      }
-    }
-    createReplicatedBackends(hmBackendSuffix, deleteUserRoot);
+    final Map<String, BackendTypeUIAdapter> backendTypes = new HashMap<>();
+    final Set<SuffixDescriptor> suffixes = getUserData().getSuffixesToReplicateOptions().getSuffixes();
+
+    populateBackendsToCreate(hmBackendSuffix, suffixes, backendTypes);
+    createReplicatedBackends(hmBackendSuffix, backendTypes);
     notifyListeners(getFormattedDoneWithLineBreak());
     checkAbort();
   }
 
-  private void populateBackendsToCreate(Map<String, Set<String>> hmBackendSuffix, Set<SuffixDescriptor> suffixes)
+  /**
+   * The criteria to choose the name of the backend is to try to have the
+   * configuration of the other server. The algorithm consists on putting the
+   * remote servers in a list and pick the backend as they appear on the list.
+   */
+  private void populateBackendsToCreate(Map<String, Set<String>> hmBackendSuffix, Set<SuffixDescriptor> suffixes,
+      Map<String, BackendTypeUIAdapter> backendTypes)
   {
     Set<ServerDescriptor> serverList = getServerListFromSuffixes(suffixes);
     for (SuffixDescriptor suffix : suffixes)
     {
-      final String backendName = retrieveBackendNameForSuffix(serverList, suffix);
-      if (backendName != null)
+      final ReplicaDescriptor replica = retrieveReplicaForSuffix(serverList, suffix);
+      if (replica != null)
       {
-        final String backendNameKey = getOrAddBackend(hmBackendSuffix, backendName);
+        final String backendNameKey = getOrAddBackend(hmBackendSuffix, replica.getBackendName());
         hmBackendSuffix.get(backendNameKey).add(suffix.getDN());
+        backendTypes.put(backendNameKey, getBackendType(replica.getObjectClasses()));
       }
     }
   }
@@ -1612,7 +1599,7 @@
     return serverList;
   }
 
-  private String retrieveBackendNameForSuffix(Set<ServerDescriptor> serverList, SuffixDescriptor suffix)
+  private ReplicaDescriptor retrieveReplicaForSuffix(Set<ServerDescriptor> serverList, SuffixDescriptor suffix)
   {
     for (ServerDescriptor server : serverList)
     {
@@ -1620,13 +1607,27 @@
       {
         if (replica.getServer() == server)
         {
-          return replica.getBackendName();
+          return replica;
         }
       }
     }
     return null;
   }
 
+  private BackendTypeUIAdapter getBackendType(Set<String> objectClasses)
+  {
+    for (String objectClass : objectClasses)
+    {
+      BackendTypeUIAdapter adapter =
+          BackendTypeHelper.getBackendTypeAdapter(objectClass.replace(ConfigConstants.NAME_PREFIX_CFG, ""));
+      if (adapter != null)
+      {
+        return adapter;
+      }
+    }
+    return null;
+  }
+
   private String getOrAddBackend(Map<String, Set<String>> hmBackendSuffix, String backendName)
   {
     for (String storedBackend : hmBackendSuffix.keySet())
@@ -1640,30 +1641,18 @@
     return backendName;
   }
 
-  private void createReplicatedBackends(final Map<String, Set<String>> hmBackendSuffix, boolean deleteUserRoot)
-      throws ApplicationException
+  private void createReplicatedBackends(final Map<String, Set<String>> hmBackendSuffix,
+      final Map<String, BackendTypeUIAdapter> backendTypes) throws ApplicationException
   {
-    InstallerHelper helper = new InstallerHelper();
     InitialLdapContext ctx = null;
     try
     {
       ctx = createLocalContext();
-      if (deleteUserRoot)
-      {
-        // Delete the userRoot backend.
-        helper.deleteBackend(ctx, ROOT_BACKEND_NAME, ConnectionUtils.getHostPort(ctx));
-      }
+      final InstallerHelper helper = new InstallerHelper();
       for (String backendName : hmBackendSuffix.keySet())
       {
-        if (ROOT_BACKEND_NAME.equalsIgnoreCase(backendName))
-        {
-          helper.setBaseDns(ctx, backendName, hmBackendSuffix.get(backendName), ConnectionUtils.getHostPort(ctx));
-        }
-        else
-        {
-          helper.createLocalDBBackend(
-              ctx, backendName, hmBackendSuffix.get(backendName), ConnectionUtils.getHostPort(ctx));
-        }
+        helper.createBackend(ctx, backendName, hmBackendSuffix.get(backendName), ConnectionUtils.getHostPort(ctx),
+            backendTypes.get(backendName).getLegacyConfigurationFrameworkBackend());
       }
     }
     catch (NamingException ne)
@@ -2764,7 +2753,7 @@
     adminProperties.put(ADSContext.AdministratorProperty.UID, userData.getGlobalAdministratorUID());
     adminProperties.put(ADSContext.AdministratorProperty.PASSWORD, userData.getGlobalAdministratorPassword());
     adminProperties.put(ADSContext.AdministratorProperty.DESCRIPTION,
-                        INFO_GLOBAL_ADMINISTRATOR_DESCRIPTION.get());
+                        INFO_GLOBAL_ADMINISTRATOR_DESCRIPTION.get().toString());
     return adminProperties;
   }
 

--
Gitblit v1.10.0