From db131a4757955895f6eabd325dfd1126b2d6aa8c 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.

---
 opends/src/guitools/org/opends/guitools/controlpanel/ui/RebuildIndexPanel.java  |   44 ++++++++++++++
 opends/src/guitools/org/opends/guitools/controlpanel/task/RebuildIndexTask.java |   88 ++++++++++++++++++++++++++---
 2 files changed, 121 insertions(+), 11 deletions(-)

diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/task/RebuildIndexTask.java b/opends/src/guitools/org/opends/guitools/controlpanel/task/RebuildIndexTask.java
index a2ccac5..b654d02 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/task/RebuildIndexTask.java
+++ b/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;
+  }
 }
diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/ui/RebuildIndexPanel.java b/opends/src/guitools/org/opends/guitools/controlpanel/ui/RebuildIndexPanel.java
index 77ae9b9..0f09378 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/ui/RebuildIndexPanel.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/ui/RebuildIndexPanel.java
@@ -33,6 +33,7 @@
 import java.awt.GridBagConstraints;
 import java.awt.event.ItemEvent;
 import java.awt.event.ItemListener;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.LinkedHashSet;
@@ -49,6 +50,7 @@
 import org.opends.guitools.controlpanel.datamodel.BackendDescriptor;
 import org.opends.guitools.controlpanel.datamodel.CategorizedComboBoxElement;
 import org.opends.guitools.controlpanel.datamodel.ControlPanelInfo;
+import org.opends.guitools.controlpanel.datamodel.IndexDescriptor;
 import org.opends.guitools.controlpanel.datamodel.ServerDescriptor;
 import org.opends.guitools.controlpanel.datamodel.SortableListModel;
 import org.opends.guitools.controlpanel.event.ConfigurationChangeEvent;
@@ -230,7 +232,9 @@
    */
   private void refreshContents(final ServerDescriptor desc)
   {
-    updateIndexMap(desc, hmIndexes);
+    super.updateIndexMap(desc, hmIndexes);
+    filterIndexes(hmIndexes);
+
     updateBaseDNComboBoxModel((DefaultComboBoxModel)baseDNs.getModel(), desc);
 
     // Check that all backends
@@ -279,7 +283,7 @@
         addRemove.getSelectedList().repaint();
 
         Utilities.updateViewPositions(pos);
-        if (!desc.isLocal() && false)
+        if (!desc.isLocal())
         {
           displayErrorMessage(INFO_CTRL_PANEL_SERVER_REMOTE_SUMMARY.get(),
           INFO_CTRL_PANEL_SERVER_MUST_BE_LOCAL_REBUILD_INDEX_SUMMARY.get());
@@ -399,4 +403,40 @@
     }
     return dn;
   }
+
+  private void filterIndexes(
+      HashMap<String, SortedSet<AbstractIndexDescriptor>> hmIndexes)
+  {
+ // Remove the indexes that are not to be added.
+    for (SortedSet<AbstractIndexDescriptor> indexes : hmIndexes.values())
+    {
+      ArrayList<AbstractIndexDescriptor> toRemove =
+        new ArrayList<AbstractIndexDescriptor>();
+      for (AbstractIndexDescriptor index : indexes)
+      {
+        if (!mustBeDisplayed(index))
+        {
+          toRemove.add(index);
+        }
+      }
+      indexes.removeAll(toRemove);
+    }
+  }
+
+  private boolean mustBeDisplayed(AbstractIndexDescriptor index)
+  {
+    boolean mustBeDisplayed = true;
+    if (index instanceof IndexDescriptor)
+    {
+      for (String name : RebuildIndexTask.INDEXES_NOT_TO_SPECIFY)
+      {
+        if (name.equalsIgnoreCase(index.getName()))
+        {
+          mustBeDisplayed = false;
+          break;
+        }
+      }
+    }
+    return mustBeDisplayed;
+  }
 }

--
Gitblit v1.10.0