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