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

Jean-Noël Rouvignac
04.45.2016 7a573aef4c0df5e52534320f8b911e54349f7921
Make CustomSearchResult closer to SDK's Entry

CustomSearchResult.java:
Added methods similar to SDK's Entry methods:
- getAttribute(AttributeDescription)
- getAttribute(String attributeDescription)
- getAllAttributes()
7 files modified
199 ■■■■■ changed files
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/datamodel/CustomSearchResult.java 16 ●●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/ModifyEntryTask.java 41 ●●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/DuplicateEntryPanel.java 19 ●●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/LDIFViewEntryPanel.java 11 ●●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/SimplifiedViewEntryPanel.java 19 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/TableViewEntryPanel.java 71 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/ViewEntryPanel.java 22 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/datamodel/CustomSearchResult.java
@@ -26,6 +26,7 @@
import org.forgerock.opendj.adapter.server3x.Converters;
import org.forgerock.opendj.ldap.Attribute;
import org.forgerock.opendj.ldap.AttributeDescription;
import org.forgerock.opendj.ldap.ByteString;
import org.forgerock.opendj.ldap.DN;
import org.forgerock.opendj.ldap.Entry;
@@ -96,6 +97,21 @@
    return results;
  }
  public Attribute getAttribute(AttributeDescription attributeDescription)
  {
    return entry.getAttribute(attributeDescription);
  }
  public Attribute getAttribute(String attributeDescription)
  {
    return entry.getAttribute(attributeDescription);
  }
  public Iterable<Attribute> getAllAttributes()
  {
    return entry.getAllAttributes();
  }
  /**
   * Returns all the attribute names of the entry.
   * @return the attribute names of the entry.
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/ModifyEntryTask.java
@@ -22,7 +22,6 @@
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
@@ -480,18 +479,17 @@
    for (org.opends.server.types.Attribute attr : newAttrs)
    {
      AttributeDescription attrDesc = attr.getAttributeDescription();
      String attrName = attrDesc.toString();
      if (!ViewEntryPanel.isEditable(attrName, schema))
      final String attrName = attrDesc.toString();
      if (!ViewEntryPanel.isEditable(attrDesc, schema))
      {
        continue;
      }
      List<ByteString> newValues = new ArrayList<>();
      Iterator<ByteString> it = attr.iterator();
      while (it.hasNext())
      for (ByteString v : attr)
      {
        newValues.add(it.next());
        newValues.add(v);
      }
      List<ByteString> oldValues = oldEntry.getAttributeValues(attrName);
      org.forgerock.opendj.ldap.Attribute oldAttr = oldEntry.getAttribute(attrDesc);
      ByteString rdnValue = null;
      for (AVA ava : newEntry.getName().rdn())
@@ -534,7 +532,7 @@
          break;
        }
      }
      if (oldValues == null)
      if (oldAttr == null)
      {
        Set<ByteString> vs = new HashSet<>(newValues);
        if (rdnValue != null)
@@ -548,6 +546,7 @@
              createAttribute(attrName, newValues)));
        }
      } else {
        final List<ByteString> oldValues = toList(oldAttr);
        List<ByteString> toDelete = disjunction(newValues, oldValues);
        if (oldRdnValueDeleted != null)
        {
@@ -592,37 +591,33 @@
    }
    /* Check if there are attributes to delete */
    for (String attrName : oldEntry.getAttributeNames())
    for (org.forgerock.opendj.ldap.Attribute attr : oldEntry.getAllAttributes())
    {
      if (!ViewEntryPanel.isEditable(attrName, schema))
      AttributeDescription attrDesc = attr.getAttributeDescription();
      if (!ViewEntryPanel.isEditable(attrDesc, schema))
      {
        continue;
      }
      List<ByteString> oldValues = oldEntry.getAttributeValues(attrName);
      AttributeDescription attrDesc = AttributeDescription.valueOf(attrName);
      org.forgerock.opendj.ldap.Attribute oldAttr = oldEntry.getAttribute(attrDesc);
      List<org.opends.server.types.Attribute> attrs = newEntry.getAttribute(attrDesc.getNameOrOID());
      if (!find(attrs, attrName) && !oldValues.isEmpty())
      if (!newEntry.hasAttribute(AttributeDescription.valueOf(attrDesc.getNameOrOID())) && !oldAttr.isEmpty())
      {
        modifications.add(new ModificationItem(
            DirContext.REMOVE_ATTRIBUTE,
            new BasicAttribute(attrName)));
            new BasicAttribute(attrDesc.toString())));
      }
    }
    return modifications;
  }
  private static boolean find(List<org.opends.server.types.Attribute> attrs, String attrName)
  private static List<ByteString> toList(org.forgerock.opendj.ldap.Attribute oldAttr)
  {
    // TODO JNR use Entry.hasAttribute(AttributeDescription) instead?
    for (org.opends.server.types.Attribute attr : attrs)
    List<ByteString> results = new ArrayList<>();
    for (ByteString v : oldAttr)
    {
      if (attr.getAttributeDescription().toString().equalsIgnoreCase(attrName))
      {
        return true;
      }
      results.add(v);
    }
    return false;
    return results;
  }
  /**
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/DuplicateEntryPanel.java
@@ -19,6 +19,7 @@
import static com.forgerock.opendj.cli.Utils.*;
import static org.forgerock.opendj.ldap.schema.CoreSchema.*;
import static org.opends.messages.AdminToolMessages.*;
import static org.opends.server.util.ServerConstants.*;
@@ -28,7 +29,6 @@
import java.awt.event.ActionListener;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JLabel;
@@ -39,6 +39,8 @@
import org.forgerock.i18n.LocalizableMessage;
import org.forgerock.i18n.LocalizedIllegalArgumentException;
import org.forgerock.opendj.ldap.Attribute;
import org.forgerock.opendj.ldap.AttributeDescription;
import org.forgerock.opendj.ldap.ByteString;
import org.forgerock.opendj.ldap.DN;
import org.opends.admin.ads.util.ConnectionWrapper;
@@ -344,10 +346,11 @@
    String dn = this.dn.getText();
    StringBuilder sb = new StringBuilder();
    sb.append("dn: ").append(dn);
    for (String attrName : entryToDuplicate.getAttributeNames())
    for (Attribute attr : entryToDuplicate.getAllAttributes())
    {
      List<ByteString> values = entryToDuplicate.getAttributeValues(attrName);
      if (attrName.equalsIgnoreCase(ATTR_USER_PASSWORD))
      AttributeDescription attrDesc = attr.getAttributeDescription();
      String attrName = attr.getAttributeDescriptionAsString();
      if (attrDesc.equals(getUserPasswordAttributeType()))
      {
        sb.append("\n");
        String pwd = new String(password.getPassword());
@@ -358,12 +361,12 @@
      }
      else if (!attrName.equalsIgnoreCase(rdnAttribute))
      {
        if (!ViewEntryPanel.isEditable(attrName,
        if (!ViewEntryPanel.isEditable(attrDesc,
            getInfo().getServerDescriptor().getSchema()))
        {
          continue;
        }
        for (ByteString value : values)
        for (ByteString value : attr)
        {
          sb.append("\n");
          if (isBinary(attrName))
@@ -380,7 +383,7 @@
      else
      {
        String newValue = getFirstValue(DN.valueOf(dn));
        if (values.size() == 1)
        if (attr.size() == 1)
        {
          sb.append("\n");
          sb.append(attrName).append(": ").append(newValue);
@@ -388,7 +391,7 @@
        else
        {
          String oldValue = getFirstValue(entryToDuplicate.getName());
          for (ByteString value : values)
          for (ByteString value : attr)
          {
            sb.append("\n");
            if (oldValue.equals(value))
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/LDIFViewEntryPanel.java
@@ -34,6 +34,7 @@
import javax.swing.tree.TreePath;
import org.forgerock.i18n.LocalizableMessage;
import org.forgerock.opendj.ldap.Attribute;
import org.forgerock.opendj.ldap.ByteString;
import org.opends.guitools.controlpanel.datamodel.CustomSearchResult;
import org.opends.guitools.controlpanel.task.OfflineUpdateException;
@@ -167,9 +168,10 @@
    if (isReadOnly)
    {
      editableScroll.setVisible(false);
      for (String attrName : sr.getAttributeNames())
      for (Attribute attr : sr.getAllAttributes())
      {
        for (ByteString v : sr.getAttributeValues(attrName))
        final String attrName = attr.getAttributeDescriptionAsString();
        for (ByteString v : attr)
        {
          sb.append("\n").append(getLDIFLine(attrName, v));
        }
@@ -183,11 +185,12 @@
    {
      editableScroll.setVisible(true);
      for (String attrName : sr.getAttributeNames())
      for (Attribute attr : sr.getAllAttributes())
      {
        String attrName = attr.getAttributeDescriptionAsString();
        if (!schemaReadOnlyAttributesLowerCase.contains(attrName.toLowerCase()))
        {
          for (ByteString v : sr.getAttributeValues(attrName))
          for (ByteString v : attr)
          {
            sb.append("\n").append(getLDIFLine(attrName, v));
          }
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/SimplifiedViewEntryPanel.java
@@ -442,7 +442,7 @@
      for (String attrName : sortedAttributes)
      {
        JLabel label = getLabelForAttribute(attrName, sr);
        List<ByteString> values = sr.getAttributeValues(attrName);
        List<ByteString> values = toList(sr.getAttribute(attrName));
        JComponent comp = getReadOnlyComponent(attrName, values);
        gbc.weightx = 0.0;
        gbc.anchor = anchor1(values);
@@ -467,7 +467,7 @@
          Utilities.setRequiredIcon(label);
          requiredAttrs.add(lcAttr);
        }
        List<ByteString> values = sr.getAttributeValues(attrName);
        List<ByteString> values = toList(sr.getAttribute(attrName));
        if (values.isEmpty())
        {
          values = newArrayList(ByteString.empty());
@@ -551,6 +551,19 @@
    });
  }
  private List<ByteString> toList(Iterable<ByteString> values)
  {
    final List<ByteString> results = new ArrayList<>();
    if (values != null)
    {
      for (ByteString v : values)
      {
        results.add(v);
      }
    }
    return results;
  }
  private int anchor2(final String attr, List<ByteString> values)
  {
    if (OBJECTCLASS_ATTRIBUTE_TYPE_NAME.equalsIgnoreCase(attr))
@@ -739,7 +752,7 @@
      for (String attr : attributes)
      {
        boolean canAdd = isEditable(attr, schema);
        boolean canAdd = isEditable(AttributeDescription.valueOf(attr), schema);
        if (canAdd && !find(attrNames, attr))
        {
          attrNames.add(attr);
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/TableViewEntryPanel.java
@@ -16,6 +16,7 @@
 */
package org.opends.guitools.controlpanel.ui;
import static org.forgerock.opendj.ldap.schema.CoreSchema.*;
import static org.opends.messages.AdminToolMessages.*;
import java.awt.Component;
@@ -46,6 +47,7 @@
import org.forgerock.i18n.LocalizableMessage;
import org.forgerock.opendj.ldap.AVA;
import org.forgerock.opendj.ldap.Attribute;
import org.forgerock.opendj.ldap.AttributeDescription;
import org.forgerock.opendj.ldap.ByteString;
import org.forgerock.opendj.ldap.DN;
@@ -421,7 +423,7 @@
    {
      int result;
      int[] possibleResults = {
          desc1.attrName.compareTo(desc2.attrName),
          desc1.attrDesc.compareTo(desc2.attrDesc),
          compareValues(desc1.value, desc2.value)};
      result = possibleResults[sortColumn];
      if (result == 0)
@@ -512,7 +514,7 @@
    public Object getValueAt(int row, int col)
    {
      AttributeValuePair attrValuePair = dataArray.get(row);
      return col == 0 ? attrValuePair.attrName : attrValuePair.value;
      return col == 0 ? attrValuePair.attrDesc.toString() : attrValuePair.value;
    }
    @Override
@@ -565,7 +567,7 @@
    public boolean isCellEditable(int row, int col) {
      return col != 0
          && !isReadOnly
          && !schemaReadOnlyAttributesLowerCase.contains(dataArray.get(row).attrName.toLowerCase());
          && !schemaReadOnlyAttributesLowerCase.contains(dataArray.get(row).attrDesc.toString().toLowerCase());
    }
    @Override
@@ -590,26 +592,26 @@
      requiredAttrs.clear();
      List<String> addedAttrs = new ArrayList<>();
      Schema schema = getInfo().getServerDescriptor().getSchema();
      List<ByteString> ocs = null;
      for (String attrName : searchResult.getAttributeNames())
      Attribute ocs = null;
      for (Attribute attr : searchResult.getAllAttributes())
      {
        if (ServerConstants.OBJECTCLASS_ATTRIBUTE_TYPE_NAME.equalsIgnoreCase(attrName))
        AttributeDescription attrDesc = attr.getAttributeDescription();
        if (attrDesc.equals(getObjectClassAttributeType()))
        {
          if (schema != null)
          {
            ocs = searchResult.getAttributeValues(attrName);
            ocs = attr;
            ObjectClassValue ocValue = getObjectClassDescriptor(ocs, schema);
            allSortedValues.add(new AttributeValuePair(attrName, ocValue));
            allSortedValues.add(new AttributeValuePair(attrDesc, ocValue));
          }
        }
        else
        {
          for (Object v : searchResult.getAttributeValues(attrName))
          for (Object v : attr)
          {
            allSortedValues.add(new AttributeValuePair(attrName, v));
            allSortedValues.add(new AttributeValuePair(attrDesc, v));
          }
        }
        AttributeDescription attrDesc = AttributeDescription.valueOf(attrName);
        addedAttrs.add(attrDesc.getNameOrOID().toLowerCase());
      }
      if (ocs != null && schema != null)
@@ -619,22 +621,20 @@
          ObjectClass objectClass = schema.getObjectClass(oc.toString());
          if (!objectClass.isPlaceHolder())
          {
            for (AttributeType attr : objectClass.getRequiredAttributes())
            for (AttributeType attrType : objectClass.getRequiredAttributes())
            {
              String attrName = attr.getNameOrOID();
              String lowerCase = attrName.toLowerCase();
              String lowerCase = attrType.getNameOrOID().toLowerCase();
              if (!addedAttrs.contains(lowerCase))
              {
                allSortedValues.add(newAttributeValuePair(attrName));
                allSortedValues.add(newAttributeValuePair(AttributeDescription.create(attrType)));
              }
              requiredAttrs.add(lowerCase);
            }
            for (AttributeType attr : objectClass.getOptionalAttributes())
            for (AttributeType attrType : objectClass.getOptionalAttributes())
            {
              String attrName = attr.getNameOrOID();
              if (!addedAttrs.contains(attrName.toLowerCase()))
              if (!addedAttrs.contains(attrType.getNameOrOID().toLowerCase()))
              {
                allSortedValues.add(newAttributeValuePair(attrName));
                allSortedValues.add(newAttributeValuePair(AttributeDescription.create(attrType)));
              }
            }
          }
@@ -652,15 +652,16 @@
      renderer.setRequiredAttrs(requiredAttrs);
    }
    private AttributeValuePair newAttributeValuePair(String attrName)
    private AttributeValuePair newAttributeValuePair(AttributeDescription attrDesc)
    {
      String attrName = attrDesc.toString();
      if (isBinary(attrName) || isPassword(attrName))
      {
        return new AttributeValuePair(attrName, new byte[] {});
        return new AttributeValuePair(attrDesc, new byte[] {});
      }
      else
      {
        return new AttributeValuePair(attrName, "");
        return new AttributeValuePair(attrDesc, "");
      }
    }
@@ -697,7 +698,7 @@
      List<Object> values = new ArrayList<>();
      for (AttributeValuePair valuePair : dataArray)
      {
        if (valuePair.attrName.equalsIgnoreCase(attrName)
        if (valuePair.attrDesc.equals(AttributeDescription.valueOf(attrName))
            && hasValue(valuePair))
        {
          if (valuePair.value instanceof Collection<?>)
@@ -762,12 +763,11 @@
        }
        for (AttributeValuePair currValue : allSortedValues)
        {
          AttributeDescription attrDesc = AttributeDescription.valueOf(currValue.attrName);
          String attrNoOptions = attrDesc.getNameOrOID().toLowerCase();
          String attrNoOptions = currValue.attrDesc.getNameOrOID().toLowerCase();
          if (attributes.contains(attrNoOptions)
              && !schemaReadOnlyAttributesLowerCase.contains(currValue.attrName.toLowerCase()))
              && !schemaReadOnlyAttributesLowerCase.contains(currValue.attrDesc.toString().toLowerCase()))
          {
            setValues(newResult, currValue.attrName);
            setValues(newResult, currValue.attrDesc.toString());
          }
        }
      }
@@ -779,8 +779,7 @@
    private boolean isRequired(AttributeValuePair value)
    {
      AttributeDescription attrDesc = AttributeDescription.valueOf(value.attrName.toLowerCase());
      return requiredAttrs.contains(attrDesc.getNameOrOID());
      return requiredAttrs.contains(value.attrDesc.getNameOrOID());
    }
    private boolean hasValue(AttributeValuePair value)
@@ -808,18 +807,12 @@
   */
  private static class AttributeValuePair
  {
    /** The attribute name. */
    private final String attrName;
    /** The value. */
    private final AttributeDescription attrDesc;
    private Object value;
    /**
     * Constructor.
     * @param attrName the attribute name.
     * @param value the value.
     */
    private AttributeValuePair(String attrName, Object value)
    private AttributeValuePair(AttributeDescription attrDesc, Object value)
    {
      this.attrName = attrName;
      this.attrDesc = attrDesc;
      this.value = value;
    }
  }
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/ViewEntryPanel.java
@@ -36,6 +36,7 @@
import org.forgerock.i18n.LocalizableMessage;
import org.forgerock.opendj.ldap.AVA;
import org.forgerock.opendj.ldap.Attribute;
import org.forgerock.opendj.ldap.AttributeDescription;
import org.forgerock.opendj.ldap.ByteString;
import org.forgerock.opendj.ldap.DN;
@@ -203,7 +204,7 @@
      title.setIcon(null);
    }
    List<ByteString> ocs = sr.getAttributeValues(OBJECTCLASS_ATTRIBUTE_TYPE_NAME);
    Attribute ocs = sr.getAttribute(OBJECTCLASS_ATTRIBUTE_TYPE_NAME);
    Schema schema = getInfo().getServerDescriptor().getSchema();
    if (!ocs.isEmpty() && schema != null)
    {
@@ -234,16 +235,16 @@
  /**
   * Returns an object class value representing all the object class values of
   * the entry.
   * @param ocValues the list of object class values.
   * @param ocAttr the list of object class values.
   * @param schema the schema.
   * @return an object class value representing all the object class values of
   * the entry.
   */
  protected ObjectClassValue getObjectClassDescriptor(List<ByteString> ocValues, Schema schema)
  protected ObjectClassValue getObjectClassDescriptor(Iterable<ByteString> ocAttr, Schema schema)
  {
    ObjectClass structuralObjectClass = null;
    SortedSet<String> auxiliaryClasses = new TreeSet<>();
    for (ByteString oc : ocValues)
    for (ByteString oc : ocAttr)
    {
      ObjectClass objectClass = schema.getObjectClass(oc.toString());
      if (!objectClass.isPlaceHolder())
@@ -489,16 +490,15 @@
  }
  /**
   * Returns <CODE>true</CODE> if the provided attribute name is an editable
   * attribute and <CODE>false</CODE> otherwise.
   * @param attrName the attribute name.
   * Returns whether the provided attribute name is an editable attribute.
   * @param attrDesc the attribute description.
   * @param schema the schema.
   * @return <CODE>true</CODE> if the provided attribute name is an editable
   * attribute and <CODE>false</CODE> otherwise.
   * @return {@code true} if the provided attribute name is an editable
   * attribute, {@code false} otherwise.
   */
  public static boolean isEditable(String attrName, Schema schema)
  public static boolean isEditable(AttributeDescription attrDesc, Schema schema)
  {
    attrName = AttributeDescription.valueOf(attrName).getNameOrOID();
    String attrName = attrDesc.getNameOrOID();
    if (schema != null && schema.hasAttributeType(attrName))
    {
      AttributeType attrType = schema.getAttributeType(attrName);