From 3183024b2a87ba76c47800ddfa312f0edbe3911b Mon Sep 17 00:00:00 2001
From: Gaetan Boismal <gaetan.boismal@forgerock.com>
Date: Fri, 17 Apr 2015 08:54:25 +0000
Subject: [PATCH] OPENDJ-1929 Add UI pluggable backend indexes view

---
 opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/datamodel/BackendDescriptor.java |    2 
 opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/util/ConfigFromDirContext.java   |   87 ++++++++++++++++++++++++++--
 opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/util/ConfigFromFile.java         |   75 ++++++++++++++++++++++++-
 3 files changed, 153 insertions(+), 11 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/datamodel/BackendDescriptor.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/datamodel/BackendDescriptor.java
index 1a876ff..7859642 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/datamodel/BackendDescriptor.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/datamodel/BackendDescriptor.java
@@ -61,6 +61,8 @@
     MONITOR,
     /** The backend is another type of backend (for instance user defined). */
     OTHER,
+    /** The backend is pluggable. */
+    PLUGGABLE,
     /** The backend is a task backend. */
     TASK
   }
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/util/ConfigFromDirContext.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/util/ConfigFromDirContext.java
index fead893..9314fb7 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/util/ConfigFromDirContext.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/util/ConfigFromDirContext.java
@@ -72,6 +72,8 @@
 import org.opends.server.admin.client.ldap.LDAPManagementContext;
 import org.opends.server.admin.std.client.AdministrationConnectorCfgClient;
 import org.opends.server.admin.std.client.BackendCfgClient;
+import org.opends.server.admin.std.client.BackendIndexCfgClient;
+import org.opends.server.admin.std.client.BackendVLVIndexCfgClient;
 import org.opends.server.admin.std.client.BackupBackendCfgClient;
 import org.opends.server.admin.std.client.ConnectionHandlerCfgClient;
 import org.opends.server.admin.std.client.HTTPConnectionHandlerCfgClient;
@@ -84,6 +86,7 @@
 import org.opends.server.admin.std.client.LocalDBVLVIndexCfgClient;
 import org.opends.server.admin.std.client.MemoryBackendCfgClient;
 import org.opends.server.admin.std.client.MonitorBackendCfgClient;
+import org.opends.server.admin.std.client.PluggableBackendCfgClient;
 import org.opends.server.admin.std.client.ReplicationDomainCfgClient;
 import org.opends.server.admin.std.client.ReplicationServerCfgClient;
 import org.opends.server.admin.std.client.ReplicationSynchronizationProviderCfgClient;
@@ -92,6 +95,7 @@
 import org.opends.server.admin.std.client.RootDNUserCfgClient;
 import org.opends.server.admin.std.client.SNMPConnectionHandlerCfgClient;
 import org.opends.server.admin.std.client.TaskBackendCfgClient;
+import org.opends.server.backends.pluggable.SuffixContainer;
 import org.opends.server.config.ConfigConstants;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.tools.tasks.TaskEntry;
@@ -423,6 +427,11 @@
           type = BackendDescriptor.Type.LOCAL_DB;
           refreshLocalDBBackendConfig(indexes, vlvIndexes, backend, errors);
         }
+        else if (backend instanceof PluggableBackendCfgClient)
+        {
+          type = BackendDescriptor.Type.PLUGGABLE;
+          refreshBackendConfig(indexes, vlvIndexes, backend, errors);
+        }
         else if (backend instanceof LDIFBackendCfgClient)
         {
           type = BackendDescriptor.Type.LDIF;
@@ -471,15 +480,70 @@
     }
   }
 
+  private void refreshBackendConfig(final Set<IndexDescriptor> indexes,
+      final Set<VLVIndexDescriptor> vlvIndexes, final BackendCfgClient backend, final List<OpenDsException> errors)
+  {
+    final PluggableBackendCfgClient db = (PluggableBackendCfgClient) backend;
+    readBackendIndexes(indexes, errors, db);
+    readBackendVLVIndexes(vlvIndexes, errors, db);
+  }
+
+  private void readBackendIndexes(final Set<IndexDescriptor> indexes, final List<OpenDsException> errors,
+      final PluggableBackendCfgClient db)
+  {
+    indexes.add(new IndexDescriptor(
+        SuffixContainer.DN2ID_INDEX_NAME, null, null, new TreeSet<IndexTypeDescriptor>(), -1));
+    // FIXME: Remove the two following indexes when they will be deleted
+    indexes.add(new IndexDescriptor(
+        SuffixContainer.ID2CHILDREN_INDEX_NAME, null, null, new TreeSet<IndexTypeDescriptor>(), -1));
+    indexes.add(new IndexDescriptor(
+        SuffixContainer.ID2SUBTREE_INDEX_NAME, null, null, new TreeSet<IndexTypeDescriptor>(), -1));
+    try
+    {
+      for (final String indexName : db.listBackendIndexes())
+      {
+        final BackendIndexCfgClient index = db.getBackendIndex(indexName);
+        indexes.add(new IndexDescriptor(
+            index.getAttribute().getNameOrOID(), index.getAttribute(),
+            null, IndexTypeDescriptor.fromBackendIndexTypes(index.getIndexType()), index.getIndexEntryLimit()));
+      }
+    }
+    catch (OpenDsException oe)
+    {
+      errors.add(oe);
+    }
+  }
+
+  private void readBackendVLVIndexes(final Set<VLVIndexDescriptor> vlvIndexes,
+      final List<OpenDsException> errors, final PluggableBackendCfgClient db)
+  {
+    try
+    {
+      for (final String vlvIndexName : db.listBackendVLVIndexes())
+      {
+        final BackendVLVIndexCfgClient index = db.getBackendVLVIndex(vlvIndexName);
+        final List<VLVSortOrder> sortOrder = getVLVSortOrder(index.getSortOrder());
+        vlvIndexes.add(new VLVIndexDescriptor(
+            index.getName(), null, index.getBaseDN(), VLVIndexDescriptor.toSearchScope(index.getScope()),
+            index.getFilter(), sortOrder));
+      }
+    }
+    catch (OpenDsException oe)
+    {
+      errors.add(oe);
+    }
+  }
+
+  // FIXME: Remove once local-db backend will be pluggable.
   private void refreshLocalDBBackendConfig(final Set<IndexDescriptor> indexes,
       final Set<VLVIndexDescriptor> vlvIndexes, final BackendCfgClient backend, final List<OpenDsException> errors)
   {
-    LocalDBBackendCfgClient db = (LocalDBBackendCfgClient)backend;
+    LocalDBBackendCfgClient localDBBackend = (LocalDBBackendCfgClient)backend;
     try
     {
-      for (String indexName : db.listLocalDBIndexes())
+      for (String indexName : localDBBackend.listLocalDBIndexes())
       {
-        LocalDBIndexCfgClient index = db.getLocalDBIndex(indexName);
+        LocalDBIndexCfgClient index = localDBBackend.getLocalDBIndex(indexName);
         indexes.add(new IndexDescriptor(
             index.getAttribute().getNameOrOID(), index.getAttribute(),
             null, IndexTypeDescriptor.fromLocalDBIndexTypes(index.getIndexType()), index.getIndexEntryLimit()));
@@ -489,15 +553,22 @@
     {
       errors.add(oe);
     }
-    indexes.add(new IndexDescriptor("dn2id", null, null, new TreeSet<IndexTypeDescriptor>(), -1));
-    indexes.add(new IndexDescriptor("id2children", null, null, new TreeSet<IndexTypeDescriptor>(), -1));
-    indexes.add(new IndexDescriptor("id2subtree", null, null, new TreeSet<IndexTypeDescriptor>(), -1));
+
+    indexes.add(new IndexDescriptor(
+        SuffixContainer.DN2ID_INDEX_NAME, null, null, new TreeSet<IndexTypeDescriptor>(), -1));
+    if (localDBBackend.isSubordinateIndexesEnabled())
+    {
+      indexes.add(new IndexDescriptor(
+          SuffixContainer.ID2CHILDREN_INDEX_NAME, null, null, new TreeSet<IndexTypeDescriptor>(), -1));
+      indexes.add(new IndexDescriptor(
+          SuffixContainer.ID2SUBTREE_INDEX_NAME, null, null, new TreeSet<IndexTypeDescriptor>(), -1));
+    }
 
     try
     {
-      for (String vlvIndexName : db.listLocalDBVLVIndexes())
+      for (String vlvIndexName : localDBBackend.listLocalDBVLVIndexes())
       {
-        LocalDBVLVIndexCfgClient index = db.getLocalDBVLVIndex(vlvIndexName);
+        LocalDBVLVIndexCfgClient index = localDBBackend.getLocalDBVLVIndex(vlvIndexName);
         String s = index.getSortOrder();
         List<VLVSortOrder> sortOrder = getVLVSortOrder(s);
         vlvIndexes.add(new VLVIndexDescriptor(
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/util/ConfigFromFile.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/util/ConfigFromFile.java
index 1f0a943..6035e22 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/util/ConfigFromFile.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/util/ConfigFromFile.java
@@ -55,6 +55,8 @@
 import org.opends.server.admin.server.ServerManagementContext;
 import org.opends.server.admin.std.server.AdministrationConnectorCfg;
 import org.opends.server.admin.std.server.BackendCfg;
+import org.opends.server.admin.std.server.BackendIndexCfg;
+import org.opends.server.admin.std.server.BackendVLVIndexCfg;
 import org.opends.server.admin.std.server.BackupBackendCfg;
 import org.opends.server.admin.std.server.ConnectionHandlerCfg;
 import org.opends.server.admin.std.server.CryptoManagerCfg;
@@ -68,6 +70,7 @@
 import org.opends.server.admin.std.server.LocalDBVLVIndexCfg;
 import org.opends.server.admin.std.server.MemoryBackendCfg;
 import org.opends.server.admin.std.server.MonitorBackendCfg;
+import org.opends.server.admin.std.server.PluggableBackendCfg;
 import org.opends.server.admin.std.server.ReplicationDomainCfg;
 import org.opends.server.admin.std.server.ReplicationServerCfg;
 import org.opends.server.admin.std.server.ReplicationSynchronizationProviderCfg;
@@ -76,6 +79,7 @@
 import org.opends.server.admin.std.server.RootDNUserCfg;
 import org.opends.server.admin.std.server.SNMPConnectionHandlerCfg;
 import org.opends.server.admin.std.server.TaskBackendCfg;
+import org.opends.server.backends.pluggable.SuffixContainer;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.types.DN;
 import org.opends.server.types.OpenDsException;
@@ -244,9 +248,15 @@
           {
             errors.add(toConfigException(ce));
           }
-          indexes.add(new IndexDescriptor("dn2id", null, null, new TreeSet<IndexTypeDescriptor>(), -1));
-          indexes.add(new IndexDescriptor("id2children", null, null, new TreeSet<IndexTypeDescriptor>(), -1));
-          indexes.add(new IndexDescriptor("id2subtree", null, null, new TreeSet<IndexTypeDescriptor>(), -1));
+          indexes.add(new IndexDescriptor(
+              SuffixContainer.DN2ID_INDEX_NAME, null, null, new TreeSet<IndexTypeDescriptor>(), -1));
+          if (db.isSubordinateIndexesEnabled())
+          {
+            indexes.add(new IndexDescriptor(
+                SuffixContainer.ID2CHILDREN_INDEX_NAME, null, null, new TreeSet<IndexTypeDescriptor>(), -1));
+            indexes.add(new IndexDescriptor(
+                SuffixContainer.ID2SUBTREE_INDEX_NAME, null, null, new TreeSet<IndexTypeDescriptor>(), -1));
+          }
 
           try
           {
@@ -265,6 +275,11 @@
             errors.add(toConfigException(ce));
           }
         }
+        else if (backend instanceof PluggableBackendCfg)
+        {
+          type = BackendDescriptor.Type.PLUGGABLE;
+          refreshBackendConfig(indexes, vlvIndexes, backend, errors);
+        }
         else if (backend instanceof LDIFBackendCfg)
         {
           type = BackendDescriptor.Type.LDIF;
@@ -309,6 +324,60 @@
     }
   }
 
+  private void refreshBackendConfig(final Set<IndexDescriptor> indexes,
+      final Set<VLVIndexDescriptor> vlvIndexes, final BackendCfg backend, final List<OpenDsException> errors)
+  {
+    final PluggableBackendCfg db = (PluggableBackendCfg) backend;
+    readBackendIndexes(indexes, errors, db);
+    readBackendVLVIndexes(vlvIndexes, errors, db);
+  }
+
+  private void readBackendIndexes(final Set<IndexDescriptor> indexes, final List<OpenDsException> errors,
+      final PluggableBackendCfg db)
+  {
+    indexes.add(new IndexDescriptor(
+        SuffixContainer.DN2ID_INDEX_NAME, null, null, new TreeSet<IndexTypeDescriptor>(), -1));
+    // FIXME: Remove the two following indexes when they will be deleted
+    indexes.add(new IndexDescriptor(
+        SuffixContainer.ID2CHILDREN_INDEX_NAME, null, null, new TreeSet<IndexTypeDescriptor>(), -1));
+    indexes.add(new IndexDescriptor(
+        SuffixContainer.ID2SUBTREE_INDEX_NAME, null, null, new TreeSet<IndexTypeDescriptor>(), -1));
+    try
+    {
+      for (final String indexName : db.listBackendIndexes())
+      {
+        final BackendIndexCfg index = db.getBackendIndex(indexName);
+        indexes.add(new IndexDescriptor(
+            index.getAttribute().getNameOrOID(), index.getAttribute(),
+            null, IndexTypeDescriptor.fromBackendIndexTypes(index.getIndexType()), index.getIndexEntryLimit()));
+      }
+    }
+    catch (ConfigException ce)
+    {
+      errors.add(toConfigException(ce));
+    }
+  }
+
+  private void readBackendVLVIndexes(final Set<VLVIndexDescriptor> vlvIndexes,
+      final List<OpenDsException> errors, final PluggableBackendCfg db)
+  {
+    try
+    {
+      for (final String vlvIndexName : db.listBackendVLVIndexes())
+      {
+        final BackendVLVIndexCfg index = db.getBackendVLVIndex(vlvIndexName);
+        final List<VLVSortOrder> sortOrder = getVLVSortOrder(index.getSortOrder());
+        vlvIndexes.add(new VLVIndexDescriptor(
+            index.getName(), null, index.getBaseDN(), VLVIndexDescriptor.toSearchScope(index.getScope()),
+            index.getFilter(), sortOrder));
+      }
+    }
+    catch (ConfigException ce)
+    {
+      errors.add(toConfigException(ce));
+    }
+  }
+
   private boolean readIfReplicationIsSecure(final RootCfg root, final List<OpenDsException> errors)
   {
     boolean isReplicationSecure = false;

--
Gitblit v1.10.0