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,6 +262,12 @@ args.add("--baseDN"); args.add(baseDN); if (rebuildAll()) { args.add("--rebuildAll"); } else { for (AbstractIndexDescriptor index : indexes) { args.add("--index"); @@ -267,6 +281,7 @@ args.add(index.getName()); } } } boolean isLocal = getInfo().getServerDescriptor().isLocal(); if (!isLocal) @@ -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; } } opendj-sdk/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; } }