From 24ea516ccb0c967bf70d2326e9abc59fc2c238a6 Mon Sep 17 00:00:00 2001
From: jvergara <jvergara@localhost>
Date: Tue, 27 Oct 2009 18:04:55 +0000
Subject: [PATCH] Fix for issue 4323 (Indexes: remove id2children and id2subtree from control panel) Fix for issue 4322 (Indexes: rebuild-all not available in the control-panel) Identify the indexes and check whether rebuildAll should be called or not.

---
 opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/task/RebuildIndexTask.java |   88 +++++++++++++++++++++++++++++++++++++++----
 1 files changed, 79 insertions(+), 9 deletions(-)

diff --git a/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/task/RebuildIndexTask.java b/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/task/RebuildIndexTask.java
index a2ccac5..b654d02 100644
--- a/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/task/RebuildIndexTask.java
+++ b/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/task/RebuildIndexTask.java
@@ -31,6 +31,7 @@
 
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.HashSet;
 import java.util.Set;
 import java.util.SortedSet;
 import java.util.TreeSet;
@@ -40,6 +41,7 @@
 import org.opends.guitools.controlpanel.datamodel.AbstractIndexDescriptor;
 import org.opends.guitools.controlpanel.datamodel.BackendDescriptor;
 import org.opends.guitools.controlpanel.datamodel.ControlPanelInfo;
+import org.opends.guitools.controlpanel.datamodel.IndexDescriptor;
 import org.opends.guitools.controlpanel.datamodel.VLVIndexDescriptor;
 import org.opends.guitools.controlpanel.ui.ColorAndFontConstants;
 import org.opends.guitools.controlpanel.ui.ProgressDialog;
@@ -64,6 +66,12 @@
     new TreeSet<AbstractIndexDescriptor>();
 
   /**
+   * The indexes that must not be specified in the command-line.
+   */
+  public static final String[] INDEXES_NOT_TO_SPECIFY =
+  {"id2children", "id2subtree"};
+
+  /**
    * Constructor of the task.
    * @param info the control panel information.
    * @param dlg the progress dialog where the task progress will be displayed.
@@ -254,17 +262,24 @@
     args.add("--baseDN");
     args.add(baseDN);
 
-    for (AbstractIndexDescriptor index : indexes)
+    if (rebuildAll())
     {
-      args.add("--index");
-      if (index instanceof VLVIndexDescriptor)
+      args.add("--rebuildAll");
+    }
+    else
+    {
+      for (AbstractIndexDescriptor index : indexes)
       {
-        args.add(
-            Utilities.getVLVNameInCommandLine((VLVIndexDescriptor)index));
-      }
-      else
-      {
-        args.add(index.getName());
+        args.add("--index");
+        if (index instanceof VLVIndexDescriptor)
+        {
+          args.add(
+              Utilities.getVLVNameInCommandLine((VLVIndexDescriptor)index));
+        }
+        else
+        {
+          args.add(index.getName());
+        }
       }
     }
 
@@ -364,4 +379,59 @@
       }
     });
   }
+
+  private boolean rebuildAll()
+  {
+    boolean rebuildAll = true;
+    Set<BackendDescriptor> backends = new HashSet<BackendDescriptor>();
+    for (AbstractIndexDescriptor index : indexes)
+    {
+      backends.add(index.getBackend());
+    }
+    for (BackendDescriptor backend : backends)
+    {
+      Set<AbstractIndexDescriptor> allIndexes =
+        new HashSet<AbstractIndexDescriptor>();
+      allIndexes.addAll(backend.getIndexes());
+      allIndexes.addAll(backend.getVLVIndexes());
+      for (AbstractIndexDescriptor index : allIndexes)
+      {
+        if (!ignoreIndex(index))
+        {
+          boolean found = false;
+          for (AbstractIndexDescriptor indexToRebuild : indexes)
+          {
+            if (indexToRebuild.equals(index))
+            {
+              found = true;
+              break;
+            }
+          }
+          if (!found)
+          {
+            rebuildAll = false;
+            break;
+          }
+        }
+      }
+    }
+    return rebuildAll;
+  }
+
+  private boolean ignoreIndex(AbstractIndexDescriptor index)
+  {
+    boolean ignoreIndex = false;
+    if (index instanceof IndexDescriptor)
+    {
+      for (String name : INDEXES_NOT_TO_SPECIFY)
+      {
+        if (name.equalsIgnoreCase(index.getName()))
+        {
+          ignoreIndex = true;
+          break;
+        }
+      }
+    }
+    return ignoreIndex;
+  }
 }

--
Gitblit v1.10.0