From c6772b9cf6b2cb14b1b8127dcf4ec22f9ec9513c Mon Sep 17 00:00:00 2001
From: Jean-Noël Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Mon, 08 Aug 2016 12:07:05 +0000
Subject: [PATCH] OPENDJ-3203 Control-panel: creating a new base dn does not complete

---
 opendj-server-legacy/src/main/java/org/opends/server/tools/BackendCreationHelper.java      |   87 ++++++++++++++++++++---------
 opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/NewBaseDNPanel.java |   76 +++++--------------------
 2 files changed, 75 insertions(+), 88 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/NewBaseDNPanel.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/NewBaseDNPanel.java
index 3dda6d7..d96a65e 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/NewBaseDNPanel.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/NewBaseDNPanel.java
@@ -32,7 +32,6 @@
 import java.util.Enumeration;
 import java.util.HashSet;
 import java.util.LinkedHashSet;
-import java.util.LinkedList;
 import java.util.List;
 import java.util.Set;
 import java.util.SortedSet;
@@ -62,11 +61,9 @@
 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.BackendIndexCfgClient;
-import org.forgerock.opendj.server.config.client.PluggableBackendCfgClient;
 import org.forgerock.opendj.server.config.client.RootCfgClient;
-import org.forgerock.opendj.server.config.meta.BackendIndexCfgDefn;
 import org.forgerock.opendj.server.config.meta.BackendIndexCfgDefn.IndexType;
+import org.opends.admin.ads.util.ConnectionWrapper;
 import org.opends.guitools.controlpanel.datamodel.BackendDescriptor;
 import org.opends.guitools.controlpanel.datamodel.BaseDNDescriptor;
 import org.opends.guitools.controlpanel.datamodel.ControlPanelInfo;
@@ -82,7 +79,7 @@
 import org.opends.quicksetup.installer.InstallerHelper;
 import org.opends.quicksetup.util.Utils;
 import org.opends.server.tools.BackendCreationHelper;
-import org.opends.server.tools.BackendCreationHelper.DefaultIndex;
+import org.opends.server.tools.BackendCreationHelper.CreateIndex;
 import org.opends.server.tools.BackendTypeHelper;
 import org.opends.server.tools.BackendTypeHelper.BackendTypeUIAdapter;
 import org.opends.server.tools.ImportLDIF;
@@ -863,12 +860,6 @@
       });
 
       performTask();
-      printTaskDone();
-      if (isNewBackend())
-      {
-        createAdditionalIndexes();
-      }
-      refreshProgressBar();
     }
 
     private void updateConfigurationOffline() throws Exception
@@ -877,8 +868,6 @@
       try
       {
         performTask();
-        printTaskDone();
-        refreshProgressBar();
       }
       finally
       {
@@ -907,12 +896,17 @@
       {
         printCreateNewBackendProgress(backendName);
         createBackend(backendName);
+        printTaskDone();
+        displayCreateAdditionalIndexesDsConfigCmdLine();
+        printTaskDone();
       }
       else
       {
         printCreateNewBaseDNProgress(backendName);
         addNewBaseDN(backendName);
+        printTaskDone();
       }
+      refreshProgressBar();
     }
 
     private void createBackend(String backendName) throws Exception
@@ -923,7 +917,7 @@
       }
       else
       {
-        createBackendOnline(backendName);
+        createBackendOnline(backendName, getInfo().getConnection());
       }
     }
 
@@ -940,10 +934,10 @@
       }
     }
 
-    private void createBackendOnline(String backendName) throws Exception
+    private void createBackendOnline(String backendName, ConnectionWrapper conn) throws Exception
     {
       Set<DN> baseDNs = Collections.singleton(DN.valueOf(newBaseDN));
-      BackendCreationHelper.createBackendOffline(backendName, baseDNs, getSelectedBackendType().getBackend());
+      BackendCreationHelper.createBackendOnline(backendName, baseDNs, getSelectedBackendType().getBackend(), conn);
     }
 
     private RootCfgClient getRootConfigurationClient() throws LdapException
@@ -987,33 +981,6 @@
       }
     }
 
-    private void createAdditionalIndexes() throws Exception
-    {
-      final String backendName = getBackendName();
-      displayCreateAdditionalIndexesDsConfigCmdLine();
-      final RootCfgClient root = getRootConfigurationClient();
-      addBackendDefaultIndexes((PluggableBackendCfgClient) root.getBackend(backendName));
-      displayCreateAdditionalIndexesDone();
-    }
-
-    private void addBackendDefaultIndexes(PluggableBackendCfgClient backendCfgClient) throws Exception
-    {
-      for (DefaultIndex defaultIndex : BackendCreationHelper.DEFAULT_INDEXES)
-      {
-        final BackendIndexCfgClient index = backendCfgClient.createBackendIndex(
-            BackendIndexCfgDefn.getInstance(), defaultIndex.getName(), null);
-
-        final List<IndexType> indexTypes = new LinkedList<>();
-        indexTypes.add(IndexType.EQUALITY);
-        if (defaultIndex.shouldCreateSubstringIndex())
-        {
-          indexTypes.add(IndexType.SUBSTRING);
-        }
-        index.setIndexType(indexTypes);
-        index.commit();
-      }
-    }
-
     private void printCreateNewBaseDNProgress(final String backendName) throws OpenDsException
     {
       SwingUtilities.invokeLater(new Runnable()
@@ -1060,9 +1027,9 @@
     private void displayCreateAdditionalIndexesDsConfigCmdLine()
     {
       final List<List<String>> argsArray = new ArrayList<>();
-      for (DefaultIndex defaultIndex : BackendCreationHelper.DEFAULT_INDEXES)
+      for (CreateIndex index : BackendCreationHelper.DEFAULT_INDEXES)
       {
-        argsArray.add(getCreateIndexCommandLineArguments(defaultIndex));
+        argsArray.add(getCreateIndexCommandLineArguments(index));
       }
 
       final StringBuilder sb = new StringBuilder();
@@ -1086,7 +1053,7 @@
       });
     }
 
-    private List<String> getCreateIndexCommandLineArguments(final DefaultIndex defaultIndex)
+    private List<String> getCreateIndexCommandLineArguments(final CreateIndex index)
     {
       final List<String> args = new ArrayList<>();
       args.add("create-backend-index");
@@ -1095,10 +1062,10 @@
       args.add("--type");
       args.add("generic");
       args.add("--index-name");
-      args.add(defaultIndex.getName());
+      args.add(index.getName());
       args.add("--set");
       args.add("index-type:" + IndexType.EQUALITY);
-      if (defaultIndex.shouldCreateSubstringIndex())
+      if (index.shouldCreateSubstringIndex())
       {
         args.add("--set");
         args.add("index-type:" + IndexType.SUBSTRING);
@@ -1110,19 +1077,6 @@
       return args;
     }
 
-    private void displayCreateAdditionalIndexesDone()
-    {
-      SwingUtilities.invokeLater(new Runnable()
-      {
-        @Override
-        public void run()
-        {
-          getProgressDialog().appendProgressHtml(
-              Utilities.getProgressDone(ColorAndFontConstants.progressFont) + "<br><br>");
-        }
-      });
-    }
-
     /**
      * Creates the data in the new base DN.
      *
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/tools/BackendCreationHelper.java b/opendj-server-legacy/src/main/java/org/opends/server/tools/BackendCreationHelper.java
index accb6d1..2e18413 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/tools/BackendCreationHelper.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/tools/BackendCreationHelper.java
@@ -32,6 +32,7 @@
 import org.forgerock.opendj.server.config.meta.BackendIndexCfgDefn;
 import org.forgerock.opendj.server.config.meta.BackendIndexCfgDefn.IndexType;
 import org.forgerock.opendj.server.config.server.BackendCfg;
+import org.opends.admin.ads.util.ConnectionWrapper;
 import org.opends.guitools.controlpanel.util.Utilities;
 import org.opends.quicksetup.Installation;
 
@@ -39,22 +40,22 @@
 public class BackendCreationHelper
 {
   /** Describes an attribute index which should be created during installation. */
-  public static final class DefaultIndex
+  public static final class CreateIndex
   {
-    private static DefaultIndex withEqualityAndSubstring(final String name)
+    private static CreateIndex withEqualityAndSubstring(final String name)
     {
-      return new DefaultIndex(name, true);
+      return new CreateIndex(name, true);
     }
 
-    private static DefaultIndex withEquality(final String name)
+    private static CreateIndex withEquality(final String name)
     {
-      return new DefaultIndex(name, false);
+      return new CreateIndex(name, false);
     }
 
     private final String name;
     private final boolean shouldCreateSubstringIndex;
 
-    private DefaultIndex(final String name, final boolean substringIndex)
+    private CreateIndex(final String name, final boolean substringIndex)
     {
       this.name = name;
       this.shouldCreateSubstringIndex = substringIndex;
@@ -81,18 +82,29 @@
     {
       return shouldCreateSubstringIndex;
     }
+
+    @Override
+    public String toString()
+    {
+      String className = getClass().getSimpleName();
+      if (shouldCreateSubstringIndex)
+      {
+        return className + "(" + name + ".equality" + ", " + name + ".substring" + ")";
+      }
+      return className + "(" + name + ".equality" + ")";
+    }
   }
 
   /** Default indexes to add in a new backend. */
-  public static final DefaultIndex[] DEFAULT_INDEXES = {
-    DefaultIndex.withEqualityAndSubstring("cn"),
-    DefaultIndex.withEqualityAndSubstring("givenName"),
-    DefaultIndex.withEqualityAndSubstring("mail"),
-    DefaultIndex.withEqualityAndSubstring("sn"),
-    DefaultIndex.withEqualityAndSubstring("telephoneNumber"),
-    DefaultIndex.withEquality("member"),
-    DefaultIndex.withEquality("uid"),
-    DefaultIndex.withEquality("uniqueMember")
+  public static final CreateIndex[] DEFAULT_INDEXES = {
+    CreateIndex.withEqualityAndSubstring("cn"),
+    CreateIndex.withEqualityAndSubstring("givenName"),
+    CreateIndex.withEqualityAndSubstring("mail"),
+    CreateIndex.withEqualityAndSubstring("sn"),
+    CreateIndex.withEqualityAndSubstring("telephoneNumber"),
+    CreateIndex.withEquality("member"),
+    CreateIndex.withEquality("uid"),
+    CreateIndex.withEquality("uniqueMember")
   };
 
   /**
@@ -119,6 +131,27 @@
   }
 
   /**
+   * Add a new backend with the provided name in the config.ldif file.
+   *
+   * @param backendName
+   *          The new backend name
+   * @param baseDNs
+   *          The base dns to add in the new backend.
+   * @param backendType
+   *          The backend type
+   * @param conn
+   *          The connection to the server
+   * @throws Exception
+   *           If any problems occurred
+   */
+  public static void createBackendOnline(String backendName, Collection<DN> baseDNs,
+      ManagedObjectDefinition<? extends BackendCfgClient, ? extends BackendCfg> backendType, ConnectionWrapper conn)
+      throws Exception
+  {
+    createBackend(conn.getRootConfiguration(), backendName, baseDNs, backendType);
+  }
+
+  /**
    * Create a backend with the provided name using the provided
    * {@code RootCfgClient}.
    *
@@ -136,31 +169,31 @@
   private static void createBackend(RootCfgClient rootConfiguration, String backendName, Collection<DN> baseDNs,
       ManagedObjectDefinition<? extends BackendCfgClient, ? extends BackendCfg> backendType) throws Exception
   {
-      final BackendCfgClient backendCfgClient = rootConfiguration.createBackend(backendType, backendName, null);
-      backendCfgClient.setEnabled(true);
-      backendCfgClient.setBaseDN(baseDNs);
-      backendCfgClient.setWritabilityMode(WritabilityMode.ENABLED);
-      backendCfgClient.commit();
+    final BackendCfgClient backendCfgClient = rootConfiguration.createBackend(backendType, backendName, null);
+    backendCfgClient.setEnabled(true);
+    backendCfgClient.setBaseDN(baseDNs);
+    backendCfgClient.setWritabilityMode(WritabilityMode.ENABLED);
+    backendCfgClient.commit();
 
-      addBackendDefaultIndexes((PluggableBackendCfgClient) backendCfgClient);
+    addBackendDefaultIndexes((PluggableBackendCfgClient) backendCfgClient);
   }
 
   private static void addBackendDefaultIndexes(PluggableBackendCfgClient backendCfgClient) throws Exception
   {
-    for (DefaultIndex defaultIndex : DEFAULT_INDEXES)
+    for (CreateIndex index : DEFAULT_INDEXES)
     {
-      final BackendIndexCfgClient index =
-          backendCfgClient.createBackendIndex(BackendIndexCfgDefn.getInstance(), defaultIndex.name, null);
+      final BackendIndexCfgClient indexCfg =
+          backendCfgClient.createBackendIndex(BackendIndexCfgDefn.getInstance(), index.name, null);
 
       final List<IndexType> indexTypes = new LinkedList<>();
       indexTypes.add(IndexType.EQUALITY);
-      if (defaultIndex.shouldCreateSubstringIndex)
+      if (index.shouldCreateSubstringIndex)
       {
         indexTypes.add(IndexType.SUBSTRING);
       }
-      index.setIndexType(indexTypes);
+      indexCfg.setIndexType(indexTypes);
 
-      index.commit();
+      indexCfg.commit();
     }
   }
 }

--
Gitblit v1.10.0