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

Jean-Noël Rouvignac
04.24.2016 eb384076c69a10db7dc66fb97b8c9c7db28dd273
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/datamodel/CustomSearchResult.java
@@ -16,21 +16,13 @@
 */
package org.opends.guitools.controlpanel.datamodel;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.SortedSet;
import java.util.TreeSet;
import javax.naming.NamingException;
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;
import org.forgerock.opendj.ldap.LinkedAttribute;
import org.forgerock.opendj.ldap.LinkedHashMapEntry;
import org.forgerock.opendj.ldap.responses.SearchResultEntry;
import org.opends.server.types.OpenDsException;
@@ -75,28 +67,6 @@
    return entry.getName();
  }
  /**
   * Returns the values for a given attribute.  It returns an empty Set if
   * the attribute is not defined.
   * @param name the name of the attribute.
   * @return the values for a given attribute.  It returns an empty Set if
   * the attribute is not defined.
   */
  public List<ByteString> getAttributeValues(String name) {
    Attribute attr = entry.getAttribute(name);
    return attr != null ? toList(attr) : Collections.<ByteString> emptyList();
  }
  private List<ByteString> toList(Attribute attr)
  {
    final List<ByteString> results = new ArrayList<>();
    for (ByteString value : attr)
    {
      results.add(value);
    }
    return results;
  }
  public Attribute getAttribute(AttributeDescription attributeDescription)
  {
    return entry.getAttribute(attributeDescription);
@@ -117,19 +87,6 @@
    return entry;
  }
  /**
   * Returns all the attribute names of the entry.
   * @return the attribute names of the entry.
   */
  public SortedSet<String> getAttributeNames() {
    SortedSet<String> results = new TreeSet<>();
    for (Attribute attr : entry.getAllAttributes())
    {
      results.add(attr.getAttributeDescriptionAsString());
    }
    return results;
  }
  @Override
  public int compareTo(CustomSearchResult o) {
    if (this.equals(o))
@@ -163,15 +120,12 @@
    return entry.hashCode();
  }
  /**
   * Sets the values for a given attribute name.
   * @param attrName the name of the attribute.
   * @param values the values for the attribute.
  /**
   * Sets the given attribute.
   * @param attr the attribute.
   */
  public void set(String attrName, List<ByteString> values)
  public void set(final Attribute attr)
  {
    final LinkedAttribute attr = new LinkedAttribute(attrName);
    attr.addAll(values);
    entry.removeAttribute(attr.getAttributeDescription());
    entry.addAttribute(attr);
  }
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/ManageTasksPanel.java
@@ -18,7 +18,6 @@
import static org.forgerock.util.Utils.*;
import static org.opends.messages.AdminToolMessages.*;
import static org.opends.server.util.CollectionUtils.*;
import java.awt.Component;
import java.awt.GridBagConstraints;
@@ -51,8 +50,8 @@
import org.forgerock.i18n.LocalizableMessage;
import org.forgerock.i18n.slf4j.LocalizedLogger;
import org.forgerock.opendj.ldap.ByteString;
import org.forgerock.opendj.ldap.DN;
import org.forgerock.opendj.ldap.LinkedAttribute;
import org.opends.guitools.controlpanel.datamodel.ControlPanelInfo;
import org.opends.guitools.controlpanel.datamodel.CustomSearchResult;
import org.opends.guitools.controlpanel.datamodel.ServerDescriptor;
@@ -496,8 +495,9 @@
      };
      for (int j=0; j < attrNames.length; j++)
      {
        ByteString o = ByteString.valueOfUtf8(values[j] + r.nextInt());
        csr.set(attrNames[j], newArrayList(o));
        final LinkedAttribute attr = new LinkedAttribute(attrNames[j]);
        attr.add(values[j] + r.nextInt());
        csr.set(attr);
      }
      try
      {
@@ -559,8 +559,9 @@
      };
      for (int j=0; j < attrNames.length; j++)
      {
        ByteString o = ByteString.valueOfUtf8(values[j]);
        csr.set(attrNames[j], newArrayList(o));
        final LinkedAttribute attr = new LinkedAttribute(attrNames[j]);
        attr.add(values[j]);
        csr.set(attr);
      }
      try
      {
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/SimplifiedViewEntryPanel.java
@@ -73,9 +73,11 @@
import org.forgerock.i18n.LocalizableMessage;
import org.forgerock.i18n.LocalizableMessageBuilder;
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;
import org.forgerock.opendj.ldap.LinkedAttribute;
import org.forgerock.opendj.ldap.RDN;
import org.forgerock.opendj.ldap.schema.AttributeType;
import org.forgerock.opendj.ldap.schema.ObjectClass;
@@ -436,13 +438,14 @@
    requiredAttrs.clear();
    // Build the attributes panel.
    Collection<String> sortedAttributes = getSortedAttributes(sr, isReadOnly);
    Collection<AttributeDescription> sortedAttributes = getSortedAttributes(sr, isReadOnly);
    if (isReadOnly)
    {
      for (String attrName : sortedAttributes)
      for (AttributeDescription attrDesc : sortedAttributes)
      {
        String attrName = attrDesc.toString();
        JLabel label = getLabelForAttribute(attrName, sr);
        List<ByteString> values = toList(sr.getAttribute(attrName));
        List<ByteString> values = toList(sr.getAttribute(attrDesc));
        JComponent comp = getReadOnlyComponent(attrName, values);
        gbc.weightx = 0.0;
        gbc.anchor = anchor1(values);
@@ -458,16 +461,17 @@
    }
    else
    {
      for (final String attrName : sortedAttributes)
      for (AttributeDescription attrDesc : sortedAttributes)
      {
        final String attrName = attrDesc.toString();
        String lcAttr = attrName.toLowerCase();
        JLabel label = getLabelForAttribute(attrName, sr);
        if (isRequired(attrName, sr))
        if (isRequired(attrDesc, sr))
        {
          Utilities.setRequiredIcon(label);
          requiredAttrs.add(lcAttr);
        }
        List<ByteString> values = toList(sr.getAttribute(attrName));
        List<ByteString> values = toList(sr.getAttribute(attrDesc));
        if (values.isEmpty())
        {
          values = newArrayList(ByteString.empty());
@@ -662,20 +666,20 @@
    return Utilities.createPrimaryLabel(l.toMessage());
  }
  private Collection<String> getSortedAttributes(CustomSearchResult sr, boolean isReadOnly)
  private LinkedHashSet<AttributeDescription> getSortedAttributes(CustomSearchResult sr, boolean isReadOnly)
  {
    // Get all attributes that the entry can have
    Set<String> attributes = new LinkedHashSet<>();
    List<String> entryAttrs = new ArrayList<>(sr.getAttributeNames());
    List<AttributeDescription> entryAttrs = new ArrayList<>();
    List<String> attrsWithNoOptions = new ArrayList<>();
    for (String attr : entryAttrs)
    for (Attribute attr : sr.getSdkEntry().getAllAttributes())
    {
      AttributeDescription attrDesc = AttributeDescription.valueOf(attr);
      AttributeDescription attrDesc = attr.getAttributeDescription();
      entryAttrs.add(attrDesc);
      attrsWithNoOptions.add(attrDesc.getNameOrOID().toLowerCase());
    }
    // Put first the attributes associated with the objectclass in hmOrderedAttrNames
    LinkedHashSet<String> attrNames = new LinkedHashSet<>();
    LinkedHashSet<AttributeDescription> attrNames = new LinkedHashSet<>();
    for (ByteString ocName : sr.getAttribute(OBJECTCLASS_ATTRIBUTE_TYPE_NAME))
    {
      String[] attrs = hmOrdereredAttrNames.get(ocName.toString().toLowerCase());
@@ -684,7 +688,7 @@
        for (String attr : attrs)
        {
          int index = attrsWithNoOptions.indexOf(attr.toLowerCase());
          attrNames.add(index != -1 ? entryAttrs.get(index) : attr);
          attrNames.add(index != -1 ? entryAttrs.get(index) : AttributeDescription.valueOf(attr));
        }
      }
    }
@@ -696,11 +700,11 @@
    {
      List<String> attrsNotToAdd = Arrays.asList("entryuuid", "hassubordinates",
          "numsubordinates", "subschemasubentry", "entrydn");
      for (String attr : sr.getAttributeNames())
      for (AttributeDescription attrDesc : entryAttrs)
      {
        if (!find(attrNames, attr) && !find(attrsNotToAdd, attr))
        if (!attrNames.contains(attrDesc) && !contains(attrsNotToAdd, attrDesc))
        {
          attrNames.add(attr);
          attrNames.add(attrDesc);
        }
      }
    }
@@ -711,8 +715,8 @@
      // alphabetical order) the attributes with no friendly name.  Finally
      // do the same with the other attributes.
      SortedSet<String> requiredAttributes = new TreeSet<>();
      SortedSet<String> allowedAttributes = new TreeSet<>();
      SortedSet<AttributeType> requiredAttributes = new TreeSet<>();
      SortedSet<AttributeType> allowedAttributes = new TreeSet<>();
      if (schema != null)
      {
@@ -723,11 +727,11 @@
          {
            for (AttributeType attr : objectClass.getRequiredAttributes())
            {
              requiredAttributes.add(attr.getNameOrOID());
              requiredAttributes.add(attr);
            }
            for (AttributeType attr : objectClass.getOptionalAttributes())
            {
              allowedAttributes.add(attr.getNameOrOID());
              allowedAttributes.add(attr);
            }
          }
        }
@@ -735,11 +739,12 @@
      // Now try to put first the attributes for which we have a friendly
      // name (the most common ones).
      Set<AttributeDescription> attributes = new LinkedHashSet<>();
      updateAttributes(attributes, requiredAttributes, entryAttrs, attrsWithNoOptions);
      updateAttributes(attributes, allowedAttributes, entryAttrs, attrsWithNoOptions);
      attributes.addAll(entryAttrs);
      attributes.add("aci");
      attributes.add(AttributeDescription.valueOf("aci"));
      // In read-only mode display only the attributes with values
      if (isReadOnly)
@@ -747,10 +752,9 @@
        attributes.retainAll(entryAttrs);
      }
      for (String attr : attributes)
      for (AttributeDescription attr : attributes)
      {
        boolean canAdd = isEditable(AttributeDescription.valueOf(attr), schema);
        if (canAdd && !find(attrNames, attr))
        if (isEditable(attr, schema) && !attrNames.contains(attr))
        {
          attrNames.add(attr);
        }
@@ -759,11 +763,11 @@
    return attrNames;
  }
  private boolean find(Collection<String> attrNames, String attrNameToFind)
  private boolean contains(List<String> attrNames, AttributeDescription attrDesc)
  {
    for (String attrName : attrNames)
    {
      if (attrName.equalsIgnoreCase(attrNameToFind))
      if (attrDesc.getAttributeType().hasName(attrName))
      {
        return true;
      }
@@ -772,37 +776,37 @@
  }
  private void updateAttributes(
      Collection<String> attributes,
      Set<String> newAttributes,
      List<String> entryAttrs,
      Collection<AttributeDescription> attributes,
      Set<AttributeType> newAttributes,
      List<AttributeDescription> entryAttrs,
      List<String> attrsWithNoOptions)
  {
    for (String attr : newAttributes)
    for (AttributeType attr : newAttributes)
    {
      int index = attrsWithNoOptions.indexOf(attr.toLowerCase());
      int index = attrsWithNoOptions.indexOf(attr.getNameOrOID().toLowerCase());
      if (index != -1)
      {
        attributes.add(entryAttrs.get(index));
      }
      else if (hasCertificateSyntax(attr))
      {
        attributes.add(attr + ";binary");
        attributes.add(AttributeDescription.create(attr).withOption("binary"));
      }
      else
      {
        attributes.add(attr);
        attributes.add(AttributeDescription.create(attr));
      }
    }
  }
  private boolean hasCertificateSyntax(String attrName)
  private boolean hasCertificateSyntax(AttributeType attrType)
  {
    Schema schema = getInfo().getServerDescriptor().getSchema();
    boolean isCertificate = false;
    // Check all the attributes that we consider binaries.
    if (schema != null)
    {
      String attributeName = AttributeDescription.valueOf(attrName).getNameOrOID().toLowerCase();
      String attributeName = attrType.getNameOrOID().toLowerCase();
      if (schema.hasAttributeType(attributeName))
      {
        AttributeType attr = schema.getAttributeType(attributeName);
@@ -1135,12 +1139,11 @@
    return false;
  }
  private boolean isRequired(String attrName, CustomSearchResult sr)
  private boolean isRequired(AttributeDescription attrDesc, CustomSearchResult sr)
  {
    Schema schema = getInfo().getServerDescriptor().getSchema();
    if (schema != null)
    {
      AttributeDescription attrDesc = AttributeDescription.valueOf(attrName, schema.getSchemaNG());
      AttributeType attrType = attrDesc.getAttributeType();
      if (!attrType.isPlaceHolder())
      {
@@ -1304,8 +1307,8 @@
        List<String> newPwds = getNewPasswords(attrName);
        if (newPwds.equals(lastUserPasswords.get(attrName.toLowerCase())))
        {
          List<ByteString> oldValues = searchResult.getAttributeValues(attrName);
          if (!oldValues.isEmpty())
          Attribute oldValues = searchResult.getAttribute(attrName);
          if (oldValues != null && !oldValues.isEmpty())
          {
            appendLDIFLines(sb, attrName, oldValues);
          }
@@ -1325,8 +1328,8 @@
    // Add the attributes that are not displayed
    for (String attrName : schemaReadOnlyAttributesLowerCase)
    {
      List<ByteString> values = searchResult.getAttributeValues(attrName);
      if (!values.isEmpty())
      Attribute values = searchResult.getAttribute(attrName);
      if (values != null && !values.isEmpty())
      {
        appendLDIFLines(sb, attrName, values);
      }
@@ -1391,7 +1394,7 @@
    appendLDIFLines(sb, attrName, getValues(attrName));
  }
  private void appendLDIFLines(StringBuilder sb, String attrName, List<?> values)
  private void appendLDIFLines(StringBuilder sb, String attrName, Iterable<?> values)
  {
    for (Object value : values)
    {
@@ -1593,10 +1596,10 @@
    for (String attrName : schemaReadOnlyAttributesLowerCase)
    {
      List<ByteString> values = searchResult.getAttributeValues(attrName);
      if (!values.isEmpty())
      Attribute attr = searchResult.getAttribute(attrName);
      if (attr != null && !attr.isEmpty())
      {
        newResult.set(attrName, values);
        newResult.set(new LinkedAttribute(attr));
      }
    }
    ignoreEntryChangeEvents = true;
@@ -1645,8 +1648,8 @@
          List<String> newPwds = getNewPasswords(attrName);
          if (newPwds.equals(lastUserPasswords.get(attrName)))
          {
            List<ByteString> oldValues = searchResult.getAttributeValues(attrName);
            newResult.set(attrName, oldValues);
            Attribute oldValues = searchResult.getAttribute(attrName);
            newResult.set(oldValues != null ? new LinkedAttribute(oldValues) : new LinkedAttribute(attrName));
          }
          else
          {
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/TableViewEntryPanel.java
@@ -51,6 +51,7 @@
import org.forgerock.opendj.ldap.AttributeDescription;
import org.forgerock.opendj.ldap.ByteString;
import org.forgerock.opendj.ldap.DN;
import org.forgerock.opendj.ldap.LinkedAttribute;
import org.forgerock.opendj.ldap.RDN;
import org.forgerock.opendj.ldap.schema.AttributeType;
import org.forgerock.opendj.ldap.schema.ObjectClass;
@@ -721,10 +722,10 @@
      for (String attrName : schemaReadOnlyAttributesLowerCase)
      {
        List<ByteString> values = searchResult.getAttributeValues(attrName);
        if (!values.isEmpty())
        Attribute attr = searchResult.getAttribute(attrName);
        if (attr != null && !attr.isEmpty())
        {
          newResult.set(attrName, values);
          newResult.set(new LinkedAttribute(attr));
        }
      }
      ignoreEntryChangeEvents = true;
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/ViewEntryPanel.java
@@ -40,6 +40,7 @@
import org.forgerock.opendj.ldap.AttributeDescription;
import org.forgerock.opendj.ldap.ByteString;
import org.forgerock.opendj.ldap.DN;
import org.forgerock.opendj.ldap.LinkedAttribute;
import org.forgerock.opendj.ldap.schema.AttributeType;
import org.forgerock.opendj.ldap.schema.ObjectClass;
import org.forgerock.opendj.ldap.schema.ObjectClassType;
@@ -443,7 +444,7 @@
  protected void setValues(CustomSearchResult sr, String attrName)
  {
    List<Object> values = getValues(attrName);
    List<ByteString> valuesToSet = new ArrayList<>();
    final LinkedAttribute attr = new LinkedAttribute(attrName);
    for (Object value : values)
    {
      if (value instanceof ObjectClassValue)
@@ -451,23 +452,23 @@
        ObjectClassValue ocValue = (ObjectClassValue)value;
        if (ocValue.getStructural() != null)
        {
          valuesToSet.add(ByteString.valueOfUtf8(ocValue.getStructural()));
          attr.add(ocValue.getStructural());
        }
        SortedSet<String> auxiliaries = ocValue.getAuxiliary();
        for (String auxiliary : auxiliaries)
        {
          valuesToSet.add(ByteString.valueOfUtf8(auxiliary));
          attr.add(auxiliary);
        }
      }
      else if (value instanceof byte[])
      {
        valuesToSet.add(ByteString.wrap((byte[]) value));
        attr.add((byte[]) value);
      }
      else if (value instanceof BinaryValue)
      {
        try
        {
          valuesToSet.add(ByteString.wrap(((BinaryValue) value).getBytes()));
          attr.add(((BinaryValue) value).getBytes());
        }
        catch (ParseException pe)
        {
@@ -479,13 +480,13 @@
        String s = String.valueOf(value);
        if (s.trim().length() > 0)
        {
          valuesToSet.add(ByteString.valueOfUtf8(s));
          attr.add(s);
        }
      }
    }
    if (!valuesToSet.isEmpty())
    if (!attr.isEmpty())
    {
      sr.set(attrName, valuesToSet);
      sr.set(attr);
    }
  }