mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

Gaetan Boismal
17.54.2015 334fa0a1bbf2e529f296842cbee5b24f9ff70f31
OPENDJ-1929 Use SearchScope API in control panel

CR-6632
To avoid LocalDBVLVIndexDefn.Scope dependency in UI, we need to use a general API for VLV index scopes.
* org.opends.guitools.controlpanel.datamodel.VLVIndexDescriptor.java
** Replace LocalDBLocalDBVLVIndexCfgDefn.Scope by SearchScope as the scope class

* org.opends.guitools.controlpanel.datamodel.VLVIndexTableModel.java
** Use IllegalArgumentException instead of RuntimeException to be more consistent.

* org.opends.guitools.controlpanel.ui.VLVIndexPanel.java
** Use this change to take the opportunity to change the selectScopeRadioButton parameter type (use straight SearchScope instead of VLVIndexDescriptor)

* org.opends.guitools.controlpanel.ui.AbstractVLVIndexPanel.java
** Use SearchScope in getScope() method
** Use straight return
** throw a IllegalStateException instead of fall back on WHOLE_SUBTREE.

* Others modified files are consequences of modifications described above.
7 files modified
234 ■■■■ changed files
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/datamodel/VLVIndexDescriptor.java 118 ●●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/datamodel/VLVIndexTableModel.java 41 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/AbstractVLVIndexPanel.java 19 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/NewVLVIndexPanel.java 14 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/VLVIndexPanel.java 33 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/util/ConfigFromDirContext.java 4 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/util/ConfigFromFile.java 5 ●●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/datamodel/VLVIndexDescriptor.java
@@ -30,7 +30,9 @@
import java.util.Collections;
import java.util.List;
import org.opends.server.admin.std.meta.LocalDBVLVIndexCfgDefn.Scope;
import org.forgerock.opendj.ldap.SearchScope;
import org.opends.server.admin.std.meta.BackendVLVIndexCfgDefn;
import org.opends.server.admin.std.meta.LocalDBVLVIndexCfgDefn;
import org.opends.server.types.DN;
/**
@@ -39,7 +41,7 @@
public class VLVIndexDescriptor extends AbstractIndexDescriptor
{
  private final DN baseDN;
  private final Scope scope;
  private final SearchScope scope;
  private final String filter;
  private List<VLVSortOrder> sortOrder = Collections.emptyList();
  private final int maxBlockSize;
@@ -63,7 +65,7 @@
   * @param maxBlockSize
   *          the maximum block size of the VLV index.
   */
  public VLVIndexDescriptor(String name, BackendDescriptor backend, DN baseDN, Scope scope, String filter,
  public VLVIndexDescriptor(String name, BackendDescriptor backend, DN baseDN, SearchScope scope, String filter,
      List<VLVSortOrder> sortOrder, int maxBlockSize)
  {
    super(name, backend);
@@ -113,7 +115,7 @@
   *
   * @return the scope of the search indexed by the VLV index.
   */
  public Scope getScope()
  public SearchScope getScope()
  {
    return scope;
  }
@@ -184,4 +186,112 @@
    return maxBlockSize;
  }
  /**
   * Returns the equivalent {@code BackendVLVIndexCfgDefn.Scope} to the provided
   * search scope.
   *
   * @param scope
   *          The {@code SearchScope} to convert.
   * @return the equivalent {@code BackendVLVIndexCfgDefn.Scope} to the provided
   *         search scope.
   */
  public static BackendVLVIndexCfgDefn.Scope getPluggableBackendVLVIndexScope(final SearchScope scope)
  {
    switch (scope.asEnum())
    {
    case BASE_OBJECT:
      return BackendVLVIndexCfgDefn.Scope.BASE_OBJECT;
    case SINGLE_LEVEL:
      return BackendVLVIndexCfgDefn.Scope.SINGLE_LEVEL;
    case SUBORDINATES:
      return BackendVLVIndexCfgDefn.Scope.SUBORDINATE_SUBTREE;
    case WHOLE_SUBTREE:
      return BackendVLVIndexCfgDefn.Scope.WHOLE_SUBTREE;
    case UNKNOWN:
    default:
      throw new IllegalArgumentException("Unsupported SearchScope: " + scope);
    }
  }
  // FIXME: Remove once local-db backend will be pluggable.
  /**
   * Returns the equivalent {@code LocalDBVLVIndexCfgDefn.Scope} to the provided
   * search scope.
   *
   * @param scope
   *          The {@code SearchScope} to convert.
   * @return the equivalent {@code LocalDBVLVIndexCfgDefn.Scope} to the provided
   *         search scope.
   */
  public static LocalDBVLVIndexCfgDefn.Scope getLocalDBVLVIndexScope(final SearchScope scope)
  {
    switch (scope.asEnum())
    {
    case BASE_OBJECT:
      return LocalDBVLVIndexCfgDefn.Scope.BASE_OBJECT;
    case SINGLE_LEVEL:
      return LocalDBVLVIndexCfgDefn.Scope.SINGLE_LEVEL;
    case SUBORDINATES:
      return LocalDBVLVIndexCfgDefn.Scope.SUBORDINATE_SUBTREE;
    case WHOLE_SUBTREE:
      return LocalDBVLVIndexCfgDefn.Scope.WHOLE_SUBTREE;
    case UNKNOWN:
    default:
      throw new IllegalArgumentException("Unsupported SearchScope: " + scope);
    }
  }
  /**
   * Convert the provided {@code BackendVLVIndexCfgDefn.Scope} to
   * {@code SearchScope}.
   *
   * @param scope
   *          The scope to convert.
   * @return the provided {@code BackendVLVIndexCfgDefn.Scope} to
   *         {@code SearchScope}
   */
  public static SearchScope toSearchScope(final BackendVLVIndexCfgDefn.Scope scope)
  {
    switch (scope)
    {
    case BASE_OBJECT:
      return SearchScope.BASE_OBJECT;
    case SINGLE_LEVEL:
      return SearchScope.SINGLE_LEVEL;
    case SUBORDINATE_SUBTREE:
      return SearchScope.SUBORDINATES;
    case WHOLE_SUBTREE:
      return SearchScope.WHOLE_SUBTREE;
    default:
      throw new IllegalArgumentException("Unsupported BackendVLVIndexCfgDefn.Scope: " + scope);
    }
  }
  // FIXME: Remove once local-db backend will be pluggable.
  /**
   * Convert the provided {@code LocalDBVLVIndexCfgDefn.Scope} to
   * {@code SearchScope}.
   *
   * @param scope
   *          The scope to convert.
   * @return the provided {@code LocalDBVLVIndexCfgDefn.Scope} to
   *         {@code SearchScope}
   */
  public static SearchScope toSearchScope(final LocalDBVLVIndexCfgDefn.Scope scope)
  {
    switch (scope)
    {
    case BASE_OBJECT:
      return SearchScope.BASE_OBJECT;
    case SINGLE_LEVEL:
      return SearchScope.SINGLE_LEVEL;
    case SUBORDINATE_SUBTREE:
      return SearchScope.SUBORDINATES;
    case WHOLE_SUBTREE:
      return SearchScope.WHOLE_SUBTREE;
    default:
      throw new IllegalArgumentException("Unsupported LocalDBVLVIndexCfgDefn.Scope: " + scope);
    }
  }
}
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/datamodel/VLVIndexTableModel.java
@@ -29,6 +29,7 @@
import static org.opends.messages.AdminToolMessages.*;
import org.forgerock.opendj.ldap.SearchScope;
import org.opends.guitools.controlpanel.util.Utilities;
/**
@@ -114,43 +115,41 @@
  }
  /**
   * Returns the VLV index scope value in String format.  This is the value used
   * Returns the VLV index scope value in String format. This is the value used
   * to make String comparisons.
   * @param i the VLV index.
   *
   * @param scope
   *          the VLV index.
   * @return the VLV index scope value in String format.
   */
  private String getScopeStringValue(VLVIndexDescriptor i)
  private String toUIString(final SearchScope scope)
  {
    String s;
    switch (i.getScope())
    switch (scope.asEnum())
    {
    case BASE_OBJECT:
      s = "Base Object";
      break;
      return INFO_CTRL_PANEL_VLV_INDEX_BASE_OBJECT_LABEL.get().toString();
    case SINGLE_LEVEL:
      s = "Single Level";
      break;
      return INFO_CTRL_PANEL_VLV_INDEX_SINGLE_LEVEL_LABEL.get().toString();
    case SUBORDINATES:
      return INFO_CTRL_PANEL_VLV_INDEX_SUBORDINATE_SUBTREE_LABEL.get().toString();
    case WHOLE_SUBTREE:
      s = "Whole Subtree";
      break;
    case SUBORDINATE_SUBTREE:
      s = "Subordinate Subtree";
      break;
      return INFO_CTRL_PANEL_VLV_INDEX_WHOLE_SUBTREE_LABEL.get().toString();
    default:
      throw new RuntimeException("Unknown scope: "+i.getScope());
      throw new IllegalArgumentException("Unknown scope: " + scope);
    }
    return s;
  }
  /**
   * Returns the VLV index scope display value in String format.  This is the
   * Returns the VLV index scope display value in String format. This is the
   * value to be stored in the table model.
   * @param i the VLV index.
   *
   * @param i
   *          the VLV index.
   * @return the VLV index DN value in String format.
   */
  private String getScopeDisplayValue(VLVIndexDescriptor i)
  private String getScopeDisplayValue(final VLVIndexDescriptor i)
  {
    return "<html>"+getScopeStringValue(i);
    return "<html>" + toUIString(i.getScope());
  }
  /**
@@ -205,7 +204,7 @@
  private int compareScopes(VLVIndexDescriptor i1, VLVIndexDescriptor i2)
  {
    return getScopeStringValue(i1).compareTo(getScopeStringValue(i2));
    return toUIString(i1.getScope()).compareTo(toUIString(i2.getScope()));
  }
  private int compareFilters(VLVIndexDescriptor i1, VLVIndexDescriptor i2)
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/AbstractVLVIndexPanel.java
@@ -61,6 +61,7 @@
import javax.swing.event.ListSelectionListener;
import org.forgerock.i18n.LocalizableMessage;
import org.forgerock.opendj.ldap.SearchScope;
import org.opends.guitools.controlpanel.datamodel.BackendDescriptor;
import org.opends.guitools.controlpanel.datamodel.BaseDNDescriptor;
import org.opends.guitools.controlpanel.datamodel.CategorizedComboBoxElement;
@@ -77,7 +78,6 @@
import org.opends.guitools.controlpanel.util.Utilities;
import org.opends.server.admin.DefinedDefaultBehaviorProvider;
import org.opends.server.admin.std.meta.LocalDBVLVIndexCfgDefn;
import org.opends.server.admin.std.meta.LocalDBVLVIndexCfgDefn.Scope;
import org.opends.server.protocols.ldap.LDAPFilter;
import org.opends.server.types.AttributeType;
import org.opends.server.types.DN;
@@ -251,6 +251,7 @@
    lines.add("ds-cfg-filter: " + filter.getText().trim());
    lines.add("ds-cfg-sort-order: " + getSortOrderStringValue(getSortOrder()));
    lines.add("ds-cfg-base-dn: " + getBaseDN());
    lines.add("ds-cfg-scope: " + VLVIndexDescriptor.getLocalDBVLVIndexScope(getScope()));
    lines.add("ds-cfg-max-block-size: " + maxBlockSize.getText().trim());
    StringBuilder sb = new StringBuilder();
    for (String line : lines)
@@ -266,26 +267,26 @@
   *
   * @return the scope of the VLV index as it appears on the panel.
   */
  protected Scope getScope()
  protected SearchScope getScope()
  {
    Scope scope;
    if (baseObject.isSelected())
    {
      scope = Scope.BASE_OBJECT;
      return SearchScope.BASE_OBJECT;
    }
    else if (singleLevel.isSelected())
    {
      scope = Scope.SINGLE_LEVEL;
      return SearchScope.SINGLE_LEVEL;
    }
    else if (subordinateSubtree.isSelected())
    {
      scope = Scope.SUBORDINATE_SUBTREE;
      return SearchScope.SUBORDINATES;
    }
    else
    else if (wholeSubtree.isSelected())
    {
      scope = Scope.WHOLE_SUBTREE;
      return SearchScope.WHOLE_SUBTREE;
    }
    return scope;
    throw new IllegalStateException("At least one scope should be selected");
  }
  /**
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/NewVLVIndexPanel.java
@@ -44,6 +44,7 @@
import javax.swing.SwingUtilities;
import org.forgerock.i18n.LocalizableMessage;
import org.forgerock.opendj.ldap.SearchScope;
import org.opends.guitools.controlpanel.datamodel.BackendDescriptor;
import org.opends.guitools.controlpanel.datamodel.ControlPanelInfo;
import org.opends.guitools.controlpanel.datamodel.ServerDescriptor;
@@ -60,7 +61,6 @@
import org.opends.server.admin.std.client.LocalDBVLVIndexCfgClient;
import org.opends.server.admin.std.client.RootCfgClient;
import org.opends.server.admin.std.meta.LocalDBVLVIndexCfgDefn;
import org.opends.server.admin.std.meta.LocalDBVLVIndexCfgDefn.Scope;
import org.opends.server.core.DirectoryServer;
import org.opends.server.types.DN;
import org.opends.server.types.DirectoryException;
@@ -165,7 +165,7 @@
  {
    private final Set<String> backendSet;
    private final String indexName;
    private final Scope scope;
    private final SearchScope searchScope;
    private final List<VLVSortOrder> sortOrder;
    private final String baseDN;
    private final String filterValue;
@@ -192,7 +192,7 @@
      sortOrder = getSortOrder();
      baseDN = getBaseDN();
      filterValue = filter.getText().trim();
      scope = getScope();
      searchScope = getScope();
      backendID = backendName.getText();
      ldif = getIndexLDIF(indexName);
      sortOrderStringValue = getSortOrderStringValue(sortOrder);
@@ -363,7 +363,7 @@
      index.setFilter(filter.getText().trim());
      index.setSortOrder(getSortOrderStringValue(getSortOrder()));
      index.setBaseDN(DN.valueOf(getBaseDN()));
      index.setScope(getScope());
      index.setScope(VLVIndexDescriptor.getLocalDBVLVIndexScope(getScope()));
      index.setMaxBlockSize(Integer.parseInt(maxBlockSize.getText().trim()));
      index.commit();
    }
@@ -405,8 +405,8 @@
        {
          if (backend.getBackendID().equalsIgnoreCase(backendID))
          {
            newIndex =
               new VLVIndexDescriptor(indexName, backend, DN.valueOf(baseDN), scope, filterValue, sortOrder, maxBlock);
            newIndex = new VLVIndexDescriptor(
                indexName, backend, DN.valueOf(baseDN), searchScope, filterValue, sortOrder, maxBlock);
            getInfo().registerModifiedIndex(newIndex);
            notifyConfigurationElementCreated(newIndex);
            break;
@@ -449,7 +449,7 @@
      args.add("filter:" + filterValue);
      args.add("--set");
      args.add("scope:" + scope);
      args.add("scope:" + VLVIndexDescriptor.getLocalDBVLVIndexScope(searchScope));
      args.add("--set");
      args.add("sort-order:" + sortOrderStringValue);
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/VLVIndexPanel.java
@@ -60,6 +60,9 @@
import javax.swing.event.ListDataEvent;
import javax.swing.event.ListDataListener;
import org.forgerock.i18n.LocalizableMessage;
import org.forgerock.opendj.config.server.ConfigException;
import org.forgerock.opendj.ldap.SearchScope;
import org.opends.guitools.controlpanel.datamodel.AbstractIndexDescriptor;
import org.opends.guitools.controlpanel.datamodel.CategorizedComboBoxElement;
import org.opends.guitools.controlpanel.datamodel.ControlPanelInfo;
@@ -73,15 +76,12 @@
import org.opends.guitools.controlpanel.task.Task;
import org.opends.guitools.controlpanel.util.ConfigReader;
import org.opends.guitools.controlpanel.util.Utilities;
import org.forgerock.i18n.LocalizableMessage;
import org.forgerock.opendj.config.server.ConfigException;
import org.opends.server.admin.client.ManagementContext;
import org.opends.server.admin.client.ldap.JNDIDirContextAdaptor;
import org.opends.server.admin.client.ldap.LDAPManagementContext;
import org.opends.server.admin.std.client.LocalDBBackendCfgClient;
import org.opends.server.admin.std.client.LocalDBVLVIndexCfgClient;
import org.opends.server.admin.std.client.RootCfgClient;
import org.opends.server.admin.std.meta.LocalDBVLVIndexCfgDefn.Scope;
import org.opends.server.core.DirectoryServer;
import org.opends.server.types.DN;
import org.opends.server.types.Entry;
@@ -456,7 +456,8 @@
      baseDN.setText(dn);
      baseDNs.setSelectedItem(OTHER_BASE_DN);
    }
    selectScopeRadioButton(index);
    selectScopeRadioButton(index.getScope());
    filter.setText(index.getFilter());
    // Simulate a remove to update the attribute combo box and add them again.
@@ -509,9 +510,9 @@
    scrollListener.updateBorder();
  }
  private void selectScopeRadioButton(final VLVIndexDescriptor index)
  private void selectScopeRadioButton(final SearchScope indexScope)
  {
    switch (index.getScope())
    switch (indexScope.asEnum())
    {
    case BASE_OBJECT:
      baseObject.setSelected(true);
@@ -519,12 +520,14 @@
    case SINGLE_LEVEL:
      singleLevel.setSelected(true);
      break;
    case SUBORDINATE_SUBTREE:
    case SUBORDINATES:
      subordinateSubtree.setSelected(true);
      break;
    case WHOLE_SUBTREE:
      wholeSubtree.setSelected(true);
      break;
    default:
      break;
    }
  }
@@ -532,7 +535,7 @@
  {
    try
    {
      return !index.getBaseDN().equals(DN.valueOf(getBaseDN())) || index.getScope() != getScope()
      return !index.getBaseDN().equals(DN.valueOf(getBaseDN())) || !index.getScope().equals(getScope())
          || !index.getFilter().equals(filter.getText().trim()) || !index.getSortOrder().equals(getSortOrder())
          || !Integer.toString(index.getMaxBlockSize()).equals(maxBlockSize.getText().trim());
    }
@@ -552,7 +555,7 @@
    private final String indexName;
    private final String baseDN;
    private final String filterValue;
    private final Scope scope;
    private final SearchScope searchScope;
    private final List<VLVSortOrder> sortOrder;
    private final String backendID;
    private final String sortOrderStringValue;
@@ -579,7 +582,7 @@
      sortOrder = getSortOrder();
      baseDN = getBaseDN();
      filterValue = filter.getText().trim();
      scope = getScope();
      searchScope = getScope();
      sortOrderStringValue = getSortOrderStringValue(sortOrder);
      ldif = getIndexLDIF(indexName);
      maxBlock = Integer.parseInt(maxBlockSize.getText());
@@ -754,9 +757,9 @@
        index.setFilter(filterValue);
      }
      if (indexToModify.getScope() != scope)
      if (indexToModify.getScope() != searchScope)
      {
        index.setScope(scope);
        index.setScope(VLVIndexDescriptor.getLocalDBVLVIndexScope(searchScope));
      }
      if (!indexToModify.getSortOrder().equals(sortOrder))
@@ -797,7 +800,7 @@
      {
        updateConfiguration();
        modifiedIndex =
            new VLVIndexDescriptor(indexName, indexToModify.getBackend(), DN.valueOf(baseDN), scope, filterValue,
            new VLVIndexDescriptor(indexName, indexToModify.getBackend(), DN.valueOf(baseDN), searchScope, filterValue,
                sortOrder, maxBlock);
        getInfo().registerModifiedIndex(modifiedIndex);
        state = State.FINISHED_SUCCESSFULLY;
@@ -842,10 +845,10 @@
        throw new RuntimeException("Unexpected error parsing DN " + getBaseDN() + ": " + odse, odse);
      }
      if (indexToModify.getScope() != scope)
      if (indexToModify.getScope() != searchScope)
      {
        args.add("--set");
        args.add("scope:" + scope);
        args.add("scope:" + VLVIndexDescriptor.getLocalDBVLVIndexScope(searchScope));
      }
      if (!indexToModify.getFilter().equals(filterValue))
      {
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/util/ConfigFromDirContext.java
@@ -501,8 +501,8 @@
        String s = index.getSortOrder();
        List<VLVSortOrder> sortOrder = getVLVSortOrder(s);
        vlvIndexes.add(new VLVIndexDescriptor(
            index.getName(), null, index.getBaseDN(), index.getScope(), index.getFilter(),
            sortOrder, index.getMaxBlockSize()));
            index.getName(), null, index.getBaseDN(), VLVIndexDescriptor.toSearchScope(index.getScope()),
            index.getFilter(), sortOrder, index.getMaxBlockSize()));
      }
    }
    catch (OpenDsException oe)
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/util/ConfigFromFile.java
@@ -255,8 +255,9 @@
              final LocalDBVLVIndexCfg index = db.getLocalDBVLVIndex(vlvIndexName);
              final String s = index.getSortOrder();
              final List<VLVSortOrder> sortOrder = getVLVSortOrder(s);
              vlvIndexes.add(new VLVIndexDescriptor(index.getName(), null, index.getBaseDN(),
                  index.getScope(), index.getFilter(), sortOrder, index.getMaxBlockSize()));
              vlvIndexes.add(new VLVIndexDescriptor(
                  index.getName(), null, index.getBaseDN(), VLVIndexDescriptor.toSearchScope(index.getScope()),
                  index.getFilter(), sortOrder, index.getMaxBlockSize()));
            }
          }
          catch (final ConfigException ce)