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

Jean-Noel Rouvignac
05.15.2014 a8cf1d7f28463692f51f50dcaf945406cdc77613
opendj-sdk/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/DeleteSchemaElementsTask.java
@@ -172,6 +172,7 @@
  /**
   * {@inheritDoc}
   */
  @Override
  public Set<String> getBackends()
  {
    return Collections.emptySet();
@@ -180,6 +181,7 @@
  /**
   * {@inheritDoc}
   */
  @Override
  public boolean canLaunch(Task taskToBeLaunched,
      Collection<LocalizableMessage> incompatibilityReasons)
  {
@@ -199,6 +201,7 @@
  /**
   * {@inheritDoc}
   */
  @Override
  public Type getType()
  {
    return Type.NEW_SCHEMA_ELEMENT;
@@ -207,6 +210,7 @@
  /**
   * {@inheritDoc}
   */
  @Override
  public void runTask()
  {
    state = State.RUNNING;
@@ -227,6 +231,7 @@
  /**
   * {@inheritDoc}
   */
  @Override
  protected String getCommandLinePath()
  {
    return null;
@@ -235,6 +240,7 @@
  /**
   * {@inheritDoc}
   */
  @Override
  protected List<String> getCommandLineArguments()
  {
    return Collections.emptyList();
@@ -243,6 +249,7 @@
  /**
   * {@inheritDoc}
   */
  @Override
  public LocalizableMessage getTaskDescription()
  {
    return INFO_CTRL_PANEL_DELETE_SCHEMA_ELEMENT_TASK_DESCRIPTION.get();
@@ -262,6 +269,7 @@
      final ObjectClass fObjectclass = objectClass;
      SwingUtilities.invokeLater(new Runnable()
      {
        @Override
        public void run()
        {
          if (!isFirst[0])
@@ -305,6 +313,7 @@
      final int fNumberDeleted = numberDeleted;
      SwingUtilities.invokeLater(new Runnable()
      {
        @Override
        public void run()
        {
          getProgressDialog().getProgressBar().setIndeterminate(false);
@@ -321,6 +330,7 @@
      final AttributeType fAttribute = attribute;
      SwingUtilities.invokeLater(new Runnable()
      {
        @Override
        public void run()
        {
          if (!isFirst[0])
@@ -366,6 +376,7 @@
      final int fNumberDeleted = numberDeleted;
      SwingUtilities.invokeLater(new Runnable()
      {
        @Override
        public void run()
        {
          getProgressDialog().getProgressBar().setIndeterminate(false);
@@ -381,6 +392,7 @@
    {
      SwingUtilities.invokeLater(new Runnable()
      {
        @Override
        public void run()
        {
          getProgressDialog().appendProgressHtml(Utilities.applyFont(
@@ -486,7 +498,7 @@
   */
  private String getSchemaFileAttributeValue(CommonSchemaElements element)
  {
    return element.getDefinition();
    return element.toString();
  }
  /**
opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/SchemaBackend.java
@@ -58,6 +58,7 @@
import org.forgerock.opendj.ldap.ByteString;
import org.forgerock.opendj.ldap.ConditionResult;
import org.forgerock.opendj.ldap.ModificationType;
import org.forgerock.opendj.ldap.ResultCode;
import org.forgerock.opendj.ldap.SearchScope;
import org.forgerock.opendj.ldap.schema.ObjectClassType;
import org.forgerock.util.Reject;
@@ -86,7 +87,6 @@
import org.opends.server.schema.NameFormSyntax;
import org.opends.server.schema.ObjectClassSyntax;
import org.opends.server.types.*;
import org.forgerock.opendj.ldap.ResultCode;
import org.opends.server.util.DynamicConstants;
import org.opends.server.util.LDIFException;
import org.opends.server.util.LDIFReader;
@@ -3121,8 +3121,8 @@
    // We allow only unimplemented syntaxes to be substituted.
    if(schema.getSyntax(oid) !=null)
    {
      LocalizableMessage message = ERR_ATTR_SYNTAX_INVALID_LDAP_SYNTAX.get(
              ldapSyntaxDesc.getDefinition(),oid);
      LocalizableMessage message =
          ERR_ATTR_SYNTAX_INVALID_LDAP_SYNTAX.get(ldapSyntaxDesc, oid);
      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
                                     message);
    }
@@ -3259,7 +3259,7 @@
      if (schemaFile.equals(getSchemaFile(ldapSyntax)))
      {
        values.add(AttributeValues.create(ldapSyntaxesType,
                ldapSyntax.getDefinition()));
                ldapSyntax.toString()));
      }
    }
@@ -3329,8 +3329,7 @@
      {
        if (schemaFile.equals(getSchemaFile(nf)))
        {
          values.add(AttributeValues.create(
              nameFormsType, nf.getDefinition()));
          values.add(AttributeValues.create(nameFormsType, nf.toString()));
        }
      }
    }
@@ -3354,7 +3353,7 @@
      if (schemaFile.equals(getSchemaFile(dcr)))
      {
        values.add(AttributeValues.create(ditContentRulesType,
                                      dcr.getDefinition()));
                                      dcr.toString()));
      }
    }
@@ -3401,7 +3400,7 @@
      if (schemaFile.equals(getSchemaFile(mru)))
      {
        values.add(AttributeValues.create(matchingRuleUsesType,
                                      mru.getDefinition()));
                                      mru.toString()));
      }
    }
@@ -3485,7 +3484,7 @@
    }
    values.add(AttributeValues.create(attributeTypesType,
                                  attributeType.getDefinition()));
                                  attributeType.toString()));
    addedTypes.add(attributeType);
  }
@@ -3536,7 +3535,7 @@
      }
    }
    values.add(AttributeValues.create(objectClassesType,
                                  objectClass.getDefinition()));
                                  objectClass.toString()));
    addedClasses.add(objectClass);
  }
@@ -3587,7 +3586,7 @@
    }
    values.add(AttributeValues.create(ditStructureRulesType,
                                  ditStructureRule.getDefinition()));
                                  ditStructureRule.toString()));
    addedDSRs.add(ditStructureRule);
  }
@@ -3712,20 +3711,7 @@
    {
      logger.traceException(e);
      for (File f : installedFileList)
      {
        try
        {
          if (f.exists())
          {
            f.delete();
          }
        }
        catch (Exception e2)
        {
          logger.traceException(e2);
        }
      }
      deleteFiles(installedFileList);
      boolean allRestored = true;
      for (int i=0; i < installedFileList.size(); i++)
@@ -3772,38 +3758,28 @@
      }
    }
    deleteFiles(origFileList);
    deleteFiles(tempFileList);
  }
    // At this point, we're committed to the schema change, so we can't throw
    // any more exceptions, but all we have left is to clean up the original and
    // temporary files.
    for (File f : origFileList)
  private void deleteFiles(Iterable<File> files)
  {
    if (files != null)
    {
      try
      for (File f : files)
      {
        if (f.exists())
        try
        {
          f.delete();
          if (f.exists())
          {
            f.delete();
          }
        }
      }
      catch (Exception e)
      {
        logger.traceException(e);
      }
    }
    for (File f : tempFileList)
    {
      try
      {
        if (f.exists())
        catch (Exception e)
        {
          f.delete();
          logger.traceException(e);
        }
      }
      catch (Exception e)
      {
        logger.traceException(e);
      }
    }
  }
@@ -3852,25 +3828,7 @@
   */
  private void cleanUpTempSchemaFiles(HashMap<String,File> tempSchemaFiles)
  {
    if ((tempSchemaFiles == null) || tempSchemaFiles.isEmpty())
    {
      return;
    }
    for (File f : tempSchemaFiles.values())
    {
      try
      {
        if (f.exists())
        {
          f.delete();
        }
      }
      catch (Exception e)
      {
        logger.traceException(e);
      }
    }
    deleteFiles(tempSchemaFiles.values());
  }
opendj-sdk/opendj3-server-dev/src/server/org/opends/server/types/AttributeType.java
@@ -390,21 +390,6 @@
  /**
   * Retrieves the definition string used to create this attribute
   * type.
   *
   * @return  The definition string used to create this attribute
   *          type.
   */
  @Override
  public String getDefinition()
  {
    return definition;
  }
  /**
   * Retrieves the superior type for this attribute type.
   *
   * @return  The superior type for this attribute type, or
@@ -639,74 +624,11 @@
    return isObjectClassType;
  }
  /**
   * Appends a string representation of this schema definition's
   * non-generic properties to the provided buffer.
   *
   * @param  buffer  The buffer to which the information should be
   *                 appended.
   */
  /** {@inheritDoc} */
  @Override
  protected void toStringContent(StringBuilder buffer)
  public String toString()
  {
    if (superiorType != null)
    {
      buffer.append(" SUP ");
      buffer.append(superiorType.getNameOrOID());
    }
    if (equalityMatchingRule != null)
    {
      buffer.append(" EQUALITY ");
      buffer.append(equalityMatchingRule.getNameOrOID());
    }
    if (orderingMatchingRule != null)
    {
      buffer.append(" ORDERING ");
      buffer.append(orderingMatchingRule.getNameOrOID());
    }
    if (substringMatchingRule != null)
    {
      buffer.append(" SUBSTR ");
      buffer.append(substringMatchingRule.getNameOrOID());
    }
    // NOTE -- We will not include any approximate matching rule
    // information here because it would break the standard and
    // anything that depends on it.
    // FIXME -- Should we encode this into one of the "extra"
    // properties?
    if (syntax != null)
    {
      buffer.append(" SYNTAX ");
      buffer.append(syntax.getOID());
    }
    if (isSingleValue)
    {
      buffer.append(" SINGLE-VALUE");
    }
    if (isCollective)
    {
      buffer.append(" COLLECTIVE");
    }
    if (isNoUserModification)
    {
      buffer.append(" NO-USER-MODIFICATION");
    }
    if (attributeUsage != null)
    {
      buffer.append(" USAGE ");
      buffer.append(attributeUsage.toString());
    }
    return definition;
  }
  /**
opendj-sdk/opendj3-server-dev/src/server/org/opends/server/types/CommonSchemaElements.java
@@ -28,7 +28,6 @@
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.LinkedHashMap;
import java.util.List;
@@ -545,122 +544,6 @@
    return hashCode;
  }
  /**
   * Retrieves the string representation of this schema definition in
   * the form specified in RFC 2252.
   *
   * @return The string representation of this schema definition in
   *         the form specified in RFC 2252.
   */
  @Override
  public final String toString() {
    StringBuilder buffer = new StringBuilder();
    toString(buffer, true);
    return buffer.toString();
  }
  /**
   * Appends a string representation of this schema definition in the
   * form specified in RFC 2252 to the provided buffer.
   *
   * @param buffer
   *          The buffer to which the information should be appended.
   * @param includeFileElement
   *          Indicates whether to include an "extra" property that
   *          specifies the path to the schema file from which this
   *          schema definition was loaded.
   */
  private final void toString(StringBuilder buffer, boolean includeFileElement)
  {
    buffer.append("( ");
    buffer.append(oid);
    if (!names.isEmpty()) {
      Iterator<String> iterator = names.values().iterator();
      String firstName = iterator.next();
      if (iterator.hasNext()) {
        buffer.append(" NAME ( '");
        buffer.append(firstName);
        while (iterator.hasNext()) {
          buffer.append("' '");
          buffer.append(iterator.next());
        }
        buffer.append("' )");
      } else {
        buffer.append(" NAME '");
        buffer.append(firstName);
        buffer.append("'");
      }
    }
    if ((description != null) && (description.length() > 0)) {
      buffer.append(" DESC '");
      buffer.append(description);
      buffer.append("'");
    }
    if (isObsolete) {
      buffer.append(" OBSOLETE");
    }
    // Delegate remaining string output to sub-class.
    toStringContent(buffer);
    if (!extraProperties.isEmpty()) {
      for (Map.Entry<String, List<String>> e : extraProperties
          .entrySet()) {
        String property = e.getKey();
        if (!includeFileElement
            && property.equals(SCHEMA_PROPERTY_FILENAME)) {
          // Don't include the schema file if it was not requested.
          continue;
        }
        List<String> valueList = e.getValue();
        buffer.append(" ");
        buffer.append(property);
        if (valueList.size() == 1) {
          buffer.append(" '");
          buffer.append(valueList.get(0));
          buffer.append("'");
        } else {
          buffer.append(" ( ");
          for (String value : valueList) {
            buffer.append("'");
            buffer.append(value);
            buffer.append("' ");
          }
          buffer.append(")");
        }
      }
    }
    buffer.append(" )");
  }
  /**
   * Appends a string representation of this schema definition's
   * non-generic properties to the provided buffer.
   *
   * @param buffer
   *          The buffer to which the information should be appended.
   */
  protected abstract void toStringContent(StringBuilder buffer);
  /**
   * Retrieves the definition string used to create this attribute
   * type and including the X-SCHEMA-FILE extension.
@@ -672,7 +555,7 @@
  public static String getDefinitionWithFileName(SchemaFileElement elem)
  {
    final String schemaFile = getSchemaFile(elem);
    final String definition = elem.getDefinition();
    final String definition = elem.toString();
    if (schemaFile != null)
    {
      int pos = definition.lastIndexOf(')');
opendj-sdk/opendj3-server-dev/src/server/org/opends/server/types/DITContentRule.java
@@ -225,21 +225,6 @@
  /**
   * Retrieves the definition string used to create this DIT content
   * rule.
   *
   * @return  The definition string used to create this DIT content
   *          rule.
   */
  @Override
  public String getDefinition()
  {
    return definition;
  }
  /**
   * Retrieves the structural objectclass for this DIT content rule.
   *
   * @return  The structural objectclass for this DIT content rule.
@@ -520,209 +505,7 @@
  @Override
  public String toString()
  {
    StringBuilder buffer = new StringBuilder();
    toString(buffer, true);
    return buffer.toString();
    return definition;
  }
  /**
   * Appends a string representation of this attribute type in the
   * form specified in RFC 2252 to the provided buffer.
   *
   * @param  buffer              The buffer to which the information
   *                             should be appended.
   * @param  includeFileElement  Indicates whether to include an
   *                             "extra" property that specifies the
   *                             path to the schema file from which
   *                             this DIT content rule was loaded.
   */
  public void toString(StringBuilder buffer,
  boolean includeFileElement)
  {
    buffer.append("( ");
    buffer.append(structuralClass.getOID());
    if (! names.isEmpty())
    {
      Iterator<String> iterator = names.values().iterator();
      String firstName = iterator.next();
      if (iterator.hasNext())
      {
        buffer.append(" NAME ( '");
        buffer.append(firstName);
        while (iterator.hasNext())
        {
          buffer.append("' '");
          buffer.append(iterator.next());
        }
        buffer.append("' )");
      }
      else
      {
        buffer.append(" NAME '");
        buffer.append(firstName);
        buffer.append("'");
      }
    }
    if ((description != null) && (description.length() > 0))
    {
      buffer.append(" DESC '");
      buffer.append(description);
      buffer.append("'");
    }
    if (isObsolete)
    {
      buffer.append(" OBSOLETE");
    }
    if (! auxiliaryClasses.isEmpty())
    {
      Iterator<ObjectClass> iterator = auxiliaryClasses.iterator();
      String firstClass = iterator.next().getNameOrOID();
      if (iterator.hasNext())
      {
        buffer.append(" AUX (");
        buffer.append(firstClass);
        while (iterator.hasNext())
        {
          buffer.append(" $ ");
          buffer.append(iterator.next());
        }
        buffer.append(" )");
      }
      else
      {
        buffer.append(" AUX ");
        buffer.append(firstClass);
      }
    }
    if (! requiredAttributes.isEmpty())
    {
      Iterator<AttributeType> iterator =
           requiredAttributes.iterator();
      String firstName = iterator.next().getNameOrOID();
      if (iterator.hasNext())
      {
        buffer.append(" MUST ( ");
        buffer.append(firstName);
        while (iterator.hasNext())
        {
          buffer.append(" $ ");
          buffer.append(iterator.next().getNameOrOID());
        }
        buffer.append(" )");
      }
      else
      {
        buffer.append(" MUST ");
        buffer.append(firstName);
      }
    }
    if (! optionalAttributes.isEmpty())
    {
      Iterator<AttributeType> iterator =
           optionalAttributes.iterator();
      String firstName = iterator.next().getNameOrOID();
      if (iterator.hasNext())
      {
        buffer.append(" MAY ( ");
        buffer.append(firstName);
        while (iterator.hasNext())
        {
          buffer.append(" $ ");
          buffer.append(iterator.next().getNameOrOID());
        }
        buffer.append(" )");
      }
      else
      {
        buffer.append(" MAY ");
        buffer.append(firstName);
      }
    }
    if (! prohibitedAttributes.isEmpty())
    {
      Iterator<AttributeType> iterator =
           prohibitedAttributes.iterator();
      String firstName = iterator.next().getNameOrOID();
      if (iterator.hasNext())
      {
        buffer.append(" NOT ( ");
        buffer.append(firstName);
        while (iterator.hasNext())
        {
          buffer.append(" $ ");
          buffer.append(iterator.next().getNameOrOID());
        }
        buffer.append(" )");
      }
      else
      {
        buffer.append(" NOT ");
        buffer.append(firstName);
      }
    }
    if (! extraProperties.isEmpty())
    {
      for (String property : extraProperties.keySet())
      {
        if ((! includeFileElement) &&
            property.equals(SCHEMA_PROPERTY_FILENAME))
        {
          continue;
        }
        List<String> valueList = extraProperties.get(property);
        buffer.append(" ");
        buffer.append(property);
        if (valueList.size() == 1)
        {
          buffer.append(" '");
          buffer.append(valueList.get(0));
          buffer.append("'");
        }
        else
        {
          buffer.append(" ( ");
          for (String value : valueList)
          {
            buffer.append("'");
            buffer.append(value);
            buffer.append("' ");
          }
          buffer.append(")");
        }
      }
    }
    buffer.append(" )");
  }
}
opendj-sdk/opendj3-server-dev/src/server/org/opends/server/types/DITStructureRule.java
@@ -26,7 +26,6 @@
 */
package org.opends.server.types;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
@@ -175,21 +174,6 @@
  /**
   * Retrieves the definition string used to create this DIT structure
   * rule.
   *
   * @return  The definition string used to create this DIT structure
   *          rule.
   */
  @Override
  public String getDefinition()
  {
    return definition;
  }
  /**
   * Retrieves the set of names that may be used to reference this DIT
   * structure rule.  The returned mapping will be between an all
   * lower-case form of the name and a name in the user-defined form
@@ -400,133 +384,7 @@
  @Override
  public String toString()
  {
    StringBuilder buffer = new StringBuilder();
    toString(buffer, true);
    return buffer.toString();
    return definition;
  }
  /**
   * Appends a string representation of this attribute type in the
   * form specified in RFC 2252 to the provided buffer.
   *
   * @param  buffer              The buffer to which the information
   *                             should be appended.
   * @param  includeFileElement  Indicates whether to include an
   *                             "extra" property that specifies the
   *                             path to the schema file from which
   *                             this DIT structure rule was loaded.
   */
  private void toString(StringBuilder buffer, boolean includeFileElement)
  {
    buffer.append("( ");
    buffer.append(ruleID);
    if (! names.isEmpty())
    {
      Iterator<String> iterator = names.values().iterator();
      String firstName = iterator.next();
      if (iterator.hasNext())
      {
        buffer.append(" NAME ( '");
        buffer.append(firstName);
        while (iterator.hasNext())
        {
          buffer.append("' '");
          buffer.append(iterator.next());
        }
        buffer.append("' )");
      }
      else
      {
        buffer.append(" NAME '");
        buffer.append(firstName);
        buffer.append("'");
      }
    }
    if ((description != null) && (description.length() > 0))
    {
      buffer.append(" DESC '");
      buffer.append(description);
      buffer.append("'");
    }
    if (isObsolete)
    {
      buffer.append(" OBSOLETE");
    }
    buffer.append(" FORM ");
    buffer.append(nameForm.getNameOrOID());
    if ((superiorRules != null) && (! superiorRules.isEmpty()))
    {
      Iterator<DITStructureRule> iterator = superiorRules.iterator();
      int firstRule = iterator.next().getRuleID();
      if (iterator.hasNext())
      {
        buffer.append(" SUP ( ");
        buffer.append(firstRule);
        while (iterator.hasNext())
        {
          buffer.append(" ");
          buffer.append(iterator.next().getRuleID());
        }
        buffer.append(" )");
      }
      else
      {
        buffer.append(" SUP ");
        buffer.append(firstRule);
      }
    }
    if (! extraProperties.isEmpty())
    {
      for (String property : extraProperties.keySet())
      {
        if ((! includeFileElement) &&
            property.equals(SCHEMA_PROPERTY_FILENAME))
        {
          continue;
        }
        List<String> valueList = extraProperties.get(property);
        buffer.append(" ");
        buffer.append(property);
        if (valueList.size() == 1)
        {
          buffer.append(" '");
          buffer.append(valueList.get(0));
          buffer.append("'");
        }
        else
        {
          buffer.append(" ( ");
          for (String value : valueList)
          {
            buffer.append("'");
            buffer.append(value);
            buffer.append("' ");
          }
          buffer.append(")");
        }
      }
    }
    buffer.append(" )");
  }
}
opendj-sdk/opendj3-server-dev/src/server/org/opends/server/types/LDAPSyntaxDescription.java
@@ -137,21 +137,6 @@
    /**
   * Retrieves the definition string used to create this ldap syntax
   * description.
   *
   * @return  The definition string used to create this ldap syntax
     *            description.
   */
  @Override
  public String getDefinition()
  {
    return definition;
  }
   /**
   * Retrieves the ldap syntax description syntax associated with
    * this ldap syntax.
@@ -299,74 +284,7 @@
  @Override
  public String toString()
  {
    StringBuilder buffer = new StringBuilder();
    toString(buffer, true);
    return buffer.toString();
    return definition;
  }
  /**
   * Appends a string representation of this ldap syntax in the form
   * specified in RFC 2252 to the provided buffer.
   *
   * @param  buffer              The buffer to which the information
   *                             should be appended.
   * @param  includeFileElement  Indicates whether to include an
   *                             "extra" property that specifies the
   *                             path to the schema file from which
   *                             this ldap syntax was loaded.
   */
  public void toString(StringBuilder buffer,
                       boolean includeFileElement)
  {
    buffer.append("( ");
    buffer.append(oid);
    if ((description != null) && (description.length() > 0))
    {
      buffer.append(" DESC '");
      buffer.append(description);
      buffer.append("'");
    }
    if (! extraProperties.isEmpty())
    {
      for (String property : extraProperties.keySet())
      {
        if ((! includeFileElement) &&
            property.equals(SCHEMA_PROPERTY_FILENAME))
        {
          continue;
        }
        List<String> valueList = extraProperties.get(property);
        buffer.append(" ");
        buffer.append(property);
        if (valueList.size() == 1)
        {
          buffer.append(" '");
          buffer.append(valueList.get(0));
          buffer.append("'");
        }
        else
        {
          buffer.append(" ( ");
          for (String value : valueList)
          {
            buffer.append("'");
            buffer.append(value);
            buffer.append("' ");
          }
          buffer.append(")");
        }
      }
    }
    buffer.append(" )");
  }
}
opendj-sdk/opendj3-server-dev/src/server/org/opends/server/types/MatchingRuleUse.java
@@ -26,7 +26,6 @@
 */
package org.opends.server.types;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
@@ -175,21 +174,6 @@
  /**
   * Retrieves the definition string used to create this matching rule
   * use.
   *
   * @return  The definition string used to create this matching rule
   *          use.
   */
  @Override
  public String getDefinition()
  {
    return definition;
  }
  /**
   * Retrieves the matching rule for this matching rule use.
   *
   * @return  The matching rule for this matching rule use.
@@ -379,126 +363,7 @@
  @Override
  public String toString()
  {
    StringBuilder buffer = new StringBuilder();
    toString(buffer, true);
    return buffer.toString();
    return definition;
  }
  /**
   * Appends a string representation of this matching rule use in the
   * form specified in RFC 2252 to the provided buffer.
   *
   * @param  buffer              The buffer to which the information
   *                             should be appended.
   * @param  includeFileElement  Indicates whether to include an
   *                             "extra" property that specifies the
   *                             path to the schema file from which
   *                             this matching rule use was loaded.
   */
  private void toString(StringBuilder buffer, boolean includeFileElement)
  {
    buffer.append("( ");
    buffer.append(matchingRule.getOID());
    if (! names.isEmpty())
    {
      Iterator<String> iterator = names.values().iterator();
      String firstName = iterator.next();
      if (iterator.hasNext())
      {
        buffer.append(" NAME ( '");
        buffer.append(firstName);
        while (iterator.hasNext())
        {
          buffer.append("' '");
          buffer.append(iterator.next());
        }
        buffer.append("' )");
      }
      else
      {
        buffer.append(" NAME '");
        buffer.append(firstName);
        buffer.append("'");
      }
    }
    if ((description != null) && (description.length() > 0))
    {
      buffer.append(" DESC '");
      buffer.append(description);
      buffer.append("'");
    }
    if (isObsolete)
    {
      buffer.append(" OBSOLETE");
    }
    buffer.append(" APPLIES ");
    Iterator<AttributeType> iterator = attributes.iterator();
    String firstName = iterator.next().getNameOrOID();
    if (iterator.hasNext())
    {
      buffer.append("( ");
      buffer.append(firstName);
      while (iterator.hasNext())
      {
        buffer.append(" $ ");
        buffer.append(iterator.next().getNameOrOID());
      }
      buffer.append(" )");
    }
    else
    {
      buffer.append(firstName);
    }
    if (! extraProperties.isEmpty())
    {
      for (String property : extraProperties.keySet())
      {
        if ((! includeFileElement) &&
            property.equals(SCHEMA_PROPERTY_FILENAME))
        {
          continue;
        }
        List<String> valueList = extraProperties.get(property);
        buffer.append(" ");
        buffer.append(property);
        if (valueList.size() == 1)
        {
          buffer.append(" '");
          buffer.append(valueList.get(0));
          buffer.append("'");
        }
        else
        {
          buffer.append(" ( ");
          for (String value : valueList)
          {
            buffer.append("'");
            buffer.append(value);
            buffer.append("' ");
          }
          buffer.append(")");
        }
      }
    }
    buffer.append(" )");
  }
}
opendj-sdk/opendj3-server-dev/src/server/org/opends/server/types/NameForm.java
@@ -26,7 +26,6 @@
 */
package org.opends.server.types;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
@@ -193,19 +192,6 @@
  /**
   * Retrieves the definition string used to create this name form.
   *
   * @return  The definition string used to create this name form.
   */
  @Override
  public String getDefinition()
  {
    return definition;
  }
  /**
   * Retrieves the set of names that may be used to reference this
   * name form.  The returned object will be a mapping between each
   * name in all lowercase characters and that name in a user-defined
@@ -489,160 +475,7 @@
  @Override
  public String toString()
  {
    StringBuilder buffer = new StringBuilder();
    toString(buffer, true);
    return buffer.toString();
    return definition;
  }
  /**
   * Appends a string representation of this name form in the form
   * specified in RFC 2252 to the provided buffer.
   *
   * @param  buffer              The buffer to which the information
   *                             should be appended.
   * @param  includeFileElement  Indicates whether to include an
   *                             "extra" property that specifies the
   *                             path to the schema file from which
   *                             this name form was loaded.
   */
  private void toString(StringBuilder buffer, boolean includeFileElement)
  {
    buffer.append("( ");
    buffer.append(oid);
    if (! names.isEmpty())
    {
      Iterator<String> iterator = names.values().iterator();
      String firstName = iterator.next();
      if (iterator.hasNext())
      {
        buffer.append(" NAME ( '");
        buffer.append(firstName);
        while (iterator.hasNext())
        {
          buffer.append("' '");
          buffer.append(iterator.next());
        }
        buffer.append("' )");
      }
      else
      {
        buffer.append(" NAME '");
        buffer.append(firstName);
        buffer.append("'");
      }
    }
    if ((description != null) && (description.length() > 0))
    {
      buffer.append(" DESC '");
      buffer.append(description);
      buffer.append("'");
    }
    if (isObsolete)
    {
      buffer.append(" OBSOLETE");
    }
    buffer.append(" OC ");
    buffer.append(structuralClass.getNameOrOID());
    if (! requiredAttributes.isEmpty())
    {
      Iterator<AttributeType> iterator =
           requiredAttributes.iterator();
      String firstName = iterator.next().getNameOrOID();
      if (iterator.hasNext())
      {
        buffer.append(" MUST ( ");
        buffer.append(firstName);
        while (iterator.hasNext())
        {
          buffer.append(" $ ");
          buffer.append(iterator.next().getNameOrOID());
        }
        buffer.append(" )");
      }
      else
      {
        buffer.append(" MUST ");
        buffer.append(firstName);
      }
    }
    if (! optionalAttributes.isEmpty())
    {
      Iterator<AttributeType> iterator =
           optionalAttributes.iterator();
      String firstName = iterator.next().getNameOrOID();
      if (iterator.hasNext())
      {
        buffer.append(" MAY ( ");
        buffer.append(firstName);
        while (iterator.hasNext())
        {
          buffer.append(" $ ");
          buffer.append(iterator.next().getNameOrOID());
        }
        buffer.append(" )");
      }
      else
      {
        buffer.append(" MAY ");
        buffer.append(firstName);
      }
    }
    if (! extraProperties.isEmpty())
    {
      for (String property : extraProperties.keySet())
      {
        if ((! includeFileElement) &&
            property.equals(SCHEMA_PROPERTY_FILENAME))
        {
          continue;
        }
        List<String> valueList = extraProperties.get(property);
        buffer.append(" ");
        buffer.append(property);
        if (valueList.size() == 1)
        {
          buffer.append(" '");
          buffer.append(valueList.get(0));
          buffer.append("'");
        }
        else
        {
          buffer.append(" ( ");
          for (String value : valueList)
          {
            buffer.append("'");
            buffer.append(value);
            buffer.append("' ");
          }
          buffer.append(")");
        }
      }
    }
    buffer.append(" )");
  }
}
opendj-sdk/opendj3-server-dev/src/server/org/opends/server/types/ObjectClass.java
@@ -29,7 +29,6 @@
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
@@ -268,19 +267,6 @@
  /**
   * Retrieves the definition string used to create this objectclass.
   *
   * @return  The definition string used to create this objectclass.
   */
  @Override
  public String getDefinition()
  {
    return definition;
  }
  /**
   * Retrieves an unmodifiable view of the set of direct superior
   * classes for this objectclass.
   *
@@ -470,84 +456,11 @@
    return isExtensibleObject;
  }
  /**
   * Appends a string representation of this schema definition's
   * non-generic properties to the provided buffer.
   *
   * @param  buffer  The buffer to which the information should be
   *                 appended.
   */
  /** {@inheritDoc} */
  @Override
  protected void toStringContent(StringBuilder buffer) {
    if (!superiorClasses.isEmpty()) {
      buffer.append(" SUP ");
      Iterator<ObjectClass> iterator = superiorClasses.iterator();
      ObjectClass oc =  iterator.next();
      if(iterator.hasNext()) {
        buffer.append("( ");
        buffer.append(oc.getNameOrOID());
        while(iterator.hasNext()) {
          buffer.append(" $ ");
          buffer.append(iterator.next().getNameOrOID());
        }
        buffer.append(" )");
      } else {
        buffer.append(oc.getNameOrOID());
      }
    }
    if (objectClassType != null) {
      buffer.append(" ");
      buffer.append(objectClassType.toString());
    }
    if (!requiredAttributes.isEmpty()) {
      Iterator<AttributeType> iterator = requiredAttributes
          .iterator();
      String firstName = iterator.next().getNameOrOID();
      if (iterator.hasNext()) {
        buffer.append(" MUST ( ");
        buffer.append(firstName);
        while (iterator.hasNext()) {
          buffer.append(" $ ");
          buffer.append(iterator.next().getNameOrOID());
        }
        buffer.append(" )");
      } else {
        buffer.append(" MUST ");
        buffer.append(firstName);
      }
    }
    if (!optionalAttributes.isEmpty()) {
      Iterator<AttributeType> iterator = optionalAttributes
          .iterator();
      String firstName = iterator.next().getNameOrOID();
      if (iterator.hasNext()) {
        buffer.append(" MAY ( ");
        buffer.append(firstName);
        while (iterator.hasNext()) {
          buffer.append(" $ ");
          buffer.append(iterator.next().getNameOrOID());
        }
        buffer.append(" )");
      } else {
        buffer.append(" MAY ");
        buffer.append(firstName);
      }
    }
  public String toString()
  {
    return definition;
  }
opendj-sdk/opendj3-server-dev/src/server/org/opends/server/types/Schema.java
@@ -450,16 +450,7 @@
      {
        registerSubordinateType(attributeType, superiorType);
      }
      // We'll use an attribute value including the normalized value
      // rather than the attribute type because otherwise it would use
      // a very expensive matching rule (OID first component match)
      // that would kill performance.
      String valueString = attributeType.getDefinition();
      ByteString rawValue = ByteString.valueOf(valueString);
      ByteString normValue = normalizeAttributeValue(rawValue);
      attributeTypeSet.add(AttributeValues.create(rawValue,
          normValue));
      attributeTypeSet.add(createAttrValueForAdd(attributeType));
    }
  }
@@ -506,34 +497,48 @@
      {
        deregisterSubordinateType(attributeType, superiorType);
      }
      // We'll use an attribute value including the normalized value
      // rather than the attribute type because otherwise it would use
      // a very expensive matching rule (OID first component match)
      // that would kill performance.
      try
      {
        String valueString = attributeType.getDefinition();
        ByteString rawValue = ByteString.valueOf(valueString);
        ByteString normValue = normalizeAttributeValue(rawValue);
        attributeTypeSet.remove(AttributeValues.create(rawValue,
                                                   normValue));
      }
      catch (Exception e)
      {
        String valueString = attributeType.getDefinition();
        ByteString rawValue = ByteString.valueOf(valueString);
        ByteString normValue =
            ByteString.valueOf(toLowerCase(valueString));
        attributeTypeSet.remove(AttributeValues.create(rawValue,
                                                   normValue));
      }
      attributeTypeSet.remove(createAttrValueForRemove(attributeType));
    }
  }
  /**
   * We'll use an attribute value including the normalized value rather than the
   * attribute type because otherwise it would use a very expensive matching
   * rule (OID first component match) that would kill performance.
   */
  private AttributeValue createAttrValueForRemove(Object elem)
  {
    final String valueString = elem.toString();
    final ByteString rawValue = ByteString.valueOf(valueString);
    final ByteString normValue = normalizeAttrValue(valueString, rawValue);
    return AttributeValues.create(rawValue, normValue);
  }
  private ByteString normalizeAttrValue(String valueString, ByteString rawValue)
  {
    try
    {
      return normalizeAttributeValue(rawValue);
    }
    catch (Exception e)
    {
      return ByteString.valueOf(toLowerCase(valueString));
    }
  }
  private AttributeValue createAttrValueForAdd(Object elem)
      throws DirectoryException
  {
    final String valueString = elem.toString();
    final ByteString rawValue = ByteString.valueOf(valueString);
    final ByteString normValue = normalizeAttributeValue(rawValue);
    return AttributeValues.create(rawValue, normValue);
  }
  /**
   * Registers the provided attribute type as a subtype of the given
   * superior attribute type, recursively following any additional
   * elements in the superior chain.
@@ -752,15 +757,7 @@
      {
        objectClasses.put(name, objectClass);
      }
      // We'll use an attribute value including the normalized value
      // rather than the attribute type because otherwise it would use
      // a very expensive matching rule (OID first component match)
      // that would kill performance.
      String valueString = objectClass.getDefinition();
      ByteString rawValue = ByteString.valueOf(valueString);
      ByteString normValue = normalizeAttributeValue(rawValue);
      objectClassSet.add(AttributeValues.create(rawValue, normValue));
      objectClassSet.add(createAttrValueForAdd(objectClass));
    }
  }
@@ -787,29 +784,7 @@
      {
        objectClasses.remove(name, objectClass);
      }
      // We'll use an attribute value including the normalized value
      // rather than the attribute type because otherwise it would use
      // a very expensive matching rule (OID first component match)
      // that would kill performance.
      try
      {
        String valueString = objectClass.getDefinition();
        ByteString rawValue = ByteString.valueOf(valueString);
        ByteString normValue = normalizeAttributeValue(rawValue);
        objectClassSet.remove(AttributeValues.create(rawValue,
                                                 normValue));
      }
      catch (Exception e)
      {
        String valueString = objectClass.getDefinition();
        ByteString rawValue = ByteString.valueOf(valueString);
        ByteString normValue =
            ByteString.valueOf(toLowerCase(valueString));
        objectClassSet.remove(AttributeValues.create(rawValue,
                                                 normValue));
      }
      objectClassSet.remove(createAttrValueForRemove(objectClass));
    }
  }
@@ -961,15 +936,7 @@
      }
      syntaxes.put(toLowerCase(syntax.getOID()), syntax);
      // We'll use an attribute value including the normalized value
      // rather than the attribute type because otherwise it would use
      // a very expensive matching rule (OID first component match)
      // that would kill performance.
      String valueString = syntax.toString();
      ByteString rawValue = ByteString.valueOf(valueString);
      ByteString normValue = normalizeAttributeValue(rawValue);
      syntaxSet.add(AttributeValues.create(rawValue, normValue));
      syntaxSet.add(createAttrValueForAdd(syntax));
    }
  }
@@ -987,26 +954,7 @@
    synchronized (syntaxes)
    {
      syntaxes.remove(toLowerCase(syntax.getOID()), syntax);
      // We'll use an attribute value including the normalized value
      // rather than the attribute type because otherwise it would use
      // a very expensive matching rule (OID first component match)
      // that would kill performance.
      try
      {
        String valueString = syntax.toString();
        ByteString rawValue = ByteString.valueOf(valueString);
        ByteString normValue = normalizeAttributeValue(rawValue);
        syntaxSet.remove(AttributeValues.create(rawValue, normValue));
      }
      catch (Exception e)
      {
        String valueString = syntax.toString();
        ByteString rawValue = ByteString.valueOf(valueString);
        ByteString normValue =
            ByteString.valueOf(toLowerCase(valueString));
        syntaxSet.remove(AttributeValues.create(rawValue, normValue));
      }
      syntaxSet.remove(createAttrValueForRemove(syntax));
    }
  }
@@ -1015,7 +963,7 @@
  /**
   * Retrieves the ldap syntax definitions for this schema, as a
   * mapping between the OID for the syntax and the ldap syntax
   * defition itself. Each ldap syntax should only be present once,
   * definition itself. Each ldap syntax should only be present once,
   * since its only key is its OID.  The contents of the returned
   * mapping must not be altered.
   *
@@ -1310,15 +1258,7 @@
            matchingRules.put(toLowerCase(name), matchingRule);
          }
        }
        // We'll use an attribute value including the normalized value
        // rather than the attribute type because otherwise it would
        // use a very expensive matching rule (OID first component
        // match) that would kill performance.
        String valueString = matchingRule.toString();
        ByteString rawValue = ByteString.valueOf(valueString);
        ByteString normValue = normalizeAttributeValue(rawValue);
        matchingRuleSet.add(
            AttributeValues.create(rawValue, normValue));
        matchingRuleSet.add(createAttrValueForAdd(matchingRule));
      }
    }
  }
@@ -1368,28 +1308,7 @@
            matchingRules.remove(toLowerCase(name), matchingRule);
          }
        }
        // We'll use an attribute value including the normalized value
        // rather than the attribute type because otherwise it would
        // use a very expensive matching rule (OID first component
        // match) that would kill performance.
        try
        {
          String valueString = matchingRule.toString();
          ByteString rawValue = ByteString.valueOf(valueString);
          ByteString normValue = normalizeAttributeValue(rawValue);
          matchingRuleSet.remove(AttributeValues.create(rawValue,
              normValue));
        }
        catch (Exception e)
        {
          String valueString = matchingRule.toString();
          ByteString rawValue = ByteString.valueOf(valueString);
          ByteString normValue =
              ByteString.valueOf(toLowerCase(valueString));
          matchingRuleSet.remove(AttributeValues.create(rawValue,
                                                    normValue));
        }
        matchingRuleSet.remove(createAttrValueForRemove(matchingRule));
      }
    }
  }
@@ -1503,15 +1422,7 @@
          matchingRules.put(name, matchingRule);
        }
      }
      // We'll use an attribute value including the normalized value
      // rather than the attribute type because otherwise it would use
      // a very expensive matching rule (OID first component match)
      // that would kill performance.
      String valueString = matchingRule.toString();
      ByteString rawValue = ByteString.valueOf(valueString);
      ByteString normValue = normalizeAttributeValue(rawValue);
      matchingRuleSet.add(AttributeValues.create(rawValue,
          normValue));
      matchingRuleSet.add(createAttrValueForAdd(matchingRule));
    }
  }
@@ -1542,27 +1453,7 @@
          matchingRules.remove(name, matchingRule);
        }
      }
      // We'll use an attribute value including the normalized value
      // rather than the attribute type because otherwise it would use
      // a very expensive matching rule (OID first component match)
      // that would kill performance.
      try
      {
        String valueString = matchingRule.toString();
        ByteString rawValue = ByteString.valueOf(valueString);
        ByteString normValue = normalizeAttributeValue(rawValue);
        matchingRuleSet.remove(AttributeValues.create(rawValue,
                                                  normValue));
      }
      catch (Exception e)
      {
        String valueString = matchingRule.toString();
        ByteString rawValue = ByteString.valueOf(valueString);
        ByteString normValue =
            ByteString.valueOf(toLowerCase(valueString));
        matchingRuleSet.remove(AttributeValues.create(rawValue,
                                                  normValue));
      }
      matchingRuleSet.remove(createAttrValueForRemove(matchingRule));
    }
  }
@@ -1675,15 +1566,7 @@
          matchingRules.put(name, matchingRule);
        }
      }
      // We'll use an attribute value including the normalized value
      // rather than the attribute type because otherwise it would use
      // a very expensive matching rule (OID first component match)
      // that would kill performance.
      String valueString = matchingRule.toString();
      ByteString rawValue = ByteString.valueOf(valueString);
      ByteString normValue = normalizeAttributeValue(rawValue);
      matchingRuleSet.add(AttributeValues.create(rawValue,
          normValue));
      matchingRuleSet.add(createAttrValueForAdd(matchingRule));
    }
  }
@@ -1714,28 +1597,7 @@
          matchingRules.remove(name, matchingRule);
        }
      }
      // We'll use an attribute value including the normalized value
      // rather than the attribute type because otherwise it would use
      // a very expensive matching rule (OID first component match)
      // that would kill performance.
      try
      {
        String valueString = matchingRule.toString();
        ByteString rawValue = ByteString.valueOf(valueString);
        ByteString normValue = normalizeAttributeValue(rawValue);
        matchingRuleSet.remove(AttributeValues.create(rawValue,
                                                  normValue));
      }
      catch (Exception e)
      {
        String valueString = matchingRule.toString();
        ByteString rawValue = ByteString.valueOf(valueString);
        ByteString normValue =
            ByteString.valueOf(toLowerCase(valueString));
        matchingRuleSet.remove(AttributeValues.create(rawValue,
                                                  normValue));
      }
      matchingRuleSet.remove(createAttrValueForRemove(matchingRule));
    }
  }
@@ -1847,15 +1709,7 @@
          matchingRules.put(name, matchingRule);
        }
      }
      // We'll use an attribute value including the normalized value
      // rather than the attribute type because otherwise it would use
      // a very expensive matching rule (OID first component match)
      // that would kill performance.
      String valueString = matchingRule.toString();
        ByteString rawValue = ByteString.valueOf(valueString);
        ByteString normValue = normalizeAttributeValue(rawValue);
      matchingRuleSet.add(AttributeValues.create(rawValue,
          normValue));
      matchingRuleSet.add(createAttrValueForAdd(matchingRule));
    }
  }
@@ -1886,27 +1740,7 @@
          matchingRules.remove(name, matchingRule);
        }
      }
      // We'll use an attribute value including the normalized value
      // rather than the attribute type because otherwise it would use
      // a very expensive matching rule (OID first component match)
      // that would kill performance.
      try
      {
        String valueString = matchingRule.toString();
        ByteString rawValue = ByteString.valueOf(valueString);
        ByteString normValue = normalizeAttributeValue(rawValue);
        matchingRuleSet.remove(AttributeValues.create(rawValue,
                                                  normValue));
      }
      catch (Exception e)
      {
        String valueString = matchingRule.toString();
        ByteString rawValue = ByteString.valueOf(valueString);
        ByteString normValue =
            ByteString.valueOf(toLowerCase(valueString));
        matchingRuleSet.remove(AttributeValues.create(rawValue,
                                                  normValue));
      }
      matchingRuleSet.remove(createAttrValueForRemove(matchingRule));
    }
  }
@@ -2018,15 +1852,7 @@
          matchingRules.put(name, matchingRule);
        }
      }
      // We'll use an attribute value including the normalized value
      // rather than the attribute type because otherwise it would use
      // a very expensive matching rule (OID first component match)
      // that would kill performance.
      String valueString = matchingRule.toString();
        ByteString rawValue = ByteString.valueOf(valueString);
        ByteString normValue = normalizeAttributeValue(rawValue);
      matchingRuleSet.add(AttributeValues.create(rawValue,
          normValue));
      matchingRuleSet.add(createAttrValueForAdd(matchingRule));
    }
  }
@@ -2057,27 +1883,7 @@
          matchingRules.remove(name, matchingRule);
        }
      }
      // We'll use an attribute value including the normalized value
      // rather than the attribute type because otherwise it would use
      // a very expensive matching rule (OID first component match)
      // that would kill performance.
      try
      {
        String valueString = matchingRule.toString();
        ByteString rawValue = ByteString.valueOf(valueString);
        ByteString normValue = normalizeAttributeValue(rawValue);
        matchingRuleSet.remove(AttributeValues.create(rawValue,
                                                  normValue));
      }
      catch (Exception e)
      {
        String valueString = matchingRule.toString();
        ByteString rawValue = ByteString.valueOf(valueString);
        ByteString normValue =
            ByteString.valueOf(toLowerCase(valueString));
        matchingRuleSet.remove(AttributeValues.create(rawValue,
                                                  normValue));
      }
      matchingRuleSet.remove(createAttrValueForRemove(matchingRule));
    }
  }
@@ -2195,15 +2001,7 @@
          matchingRules.put(name, matchingRule);
        }
      }
      // We'll use an attribute value including the normalized value
      // rather than the attribute type because otherwise it would use
      // a very expensive matching rule (OID first component match)
      // that would kill performance.
      String valueString = matchingRule.toString();
      ByteString rawValue  = ByteString.valueOf(valueString);
      ByteString normValue = normalizeAttributeValue(rawValue);
      matchingRuleSet.add(
          AttributeValues.create(rawValue, normValue));
      matchingRuleSet.add(createAttrValueForAdd(matchingRule));
    }
  }
@@ -2234,27 +2032,7 @@
          matchingRules.remove(name, matchingRule);
        }
      }
      // We'll use an attribute value including the normalized value
      // rather than the attribute type because otherwise it would use
      // a very expensive matching rule (OID first component match)
      // that would kill performance.
      try
      {
        String valueString = matchingRule.toString();
        ByteString rawValue = ByteString.valueOf(valueString);
        ByteString normValue = normalizeAttributeValue(rawValue);
        matchingRuleSet.remove(AttributeValues.create(rawValue,
            normValue));
      }
      catch (Exception e)
      {
        String valueString = matchingRule.toString();
        ByteString rawValue = ByteString.valueOf(valueString);
        ByteString normValue =
            ByteString.valueOf(toLowerCase(valueString));
        matchingRuleSet.remove(AttributeValues.create(rawValue,
            normValue));
      }
      matchingRuleSet.remove(createAttrValueForRemove(matchingRule));
    }
  }
@@ -2364,16 +2142,7 @@
      }
      matchingRuleUses.put(matchingRule, matchingRuleUse);
      // We'll use an attribute value including the normalized value
      // rather than the attribute type because otherwise it would use
      // a very expensive matching rule (OID first component match)
      // that would kill performance.
      String valueString = matchingRuleUse.getDefinition();
      ByteString rawValue = ByteString.valueOf(valueString);
      ByteString normValue = normalizeAttributeValue(rawValue);
      matchingRuleUseSet.add(AttributeValues.create(rawValue,
          normValue));
      matchingRuleUseSet.add(createAttrValueForAdd(matchingRuleUse));
    }
  }
@@ -2393,28 +2162,7 @@
    {
      matchingRuleUses.remove(matchingRuleUse.getMatchingRule(),
                              matchingRuleUse);
      // We'll use an attribute value including the normalized value
      // rather than the attribute type because otherwise it would use
      // a very expensive matching rule (OID first component match)
      // that would kill performance.
      try
      {
        String valueString = matchingRuleUse.getDefinition();
        ByteString rawValue = ByteString.valueOf(valueString);
        ByteString normValue = normalizeAttributeValue(rawValue);
        matchingRuleUseSet.remove(AttributeValues.create(rawValue,
                                                     normValue));
      }
      catch (Exception e)
      {
        String valueString = matchingRuleUse.getDefinition();
        ByteString rawValue = ByteString.valueOf(valueString);
        ByteString normValue =
            ByteString.valueOf(toLowerCase(valueString));
        matchingRuleUseSet.remove(AttributeValues.create(rawValue,
                                                     normValue));
      }
      matchingRuleUseSet.remove(createAttrValueForRemove(matchingRuleUse));
    }
  }
@@ -2523,16 +2271,7 @@
      }
      ditContentRules.put(objectClass, ditContentRule);
      // We'll use an attribute value including the normalized value
      // rather than the attribute type because otherwise it would use
      // a very expensive matching rule (OID first component match)
      // that would kill performance.
      String valueString = ditContentRule.getDefinition();
      ByteString rawValue = ByteString.valueOf(valueString);
      ByteString normValue = normalizeAttributeValue(rawValue);
      ditContentRuleSet.add(AttributeValues.create(rawValue,
          normValue));
      ditContentRuleSet.add(createAttrValueForAdd(ditContentRule));
    }
  }
@@ -2551,28 +2290,7 @@
    {
      ditContentRules.remove(ditContentRule.getStructuralClass(),
                             ditContentRule);
      // We'll use an attribute value including the normalized value
      // rather than the attribute type because otherwise it would use
      // a very expensive matching rule (OID first component match)
      // that would kill performance.
      try
      {
        String valueString = ditContentRule.getDefinition();
        ByteString rawValue = ByteString.valueOf(valueString);
        ByteString normValue = normalizeAttributeValue(rawValue);
        ditContentRuleSet.remove(AttributeValues.create(rawValue,
                                                    normValue));
      }
      catch (Exception e)
      {
        String valueString = ditContentRule.getDefinition();
        ByteString rawValue = ByteString.valueOf(valueString);
        ByteString normValue =
            ByteString.valueOf(toLowerCase(valueString));
        ditContentRuleSet.remove(AttributeValues.create(rawValue,
                                                    normValue));
      }
      ditContentRuleSet.remove(createAttrValueForRemove(ditContentRule));
    }
  }
@@ -2750,16 +2468,7 @@
      ditStructureRulesByNameForm.put(nameForm, ditStructureRule);
      ditStructureRulesByID.put(ruleID, ditStructureRule);
      // We'll use an attribute value including the normalized value
      // rather than the attribute type because otherwise it would use
      // a very expensive matching rule (OID first component match)
      // that would kill performance.
      String valueString = ditStructureRule.getDefinition();
      ByteString rawValue = ByteString.valueOf(valueString);
      ByteString normValue = normalizeAttributeValue(rawValue);
      ditStructureRuleSet.add(AttributeValues.create(rawValue,
                                                 normValue));
      ditStructureRuleSet.add(createAttrValueForAdd(ditStructureRule));
    }
  }
@@ -2781,28 +2490,7 @@
           ditStructureRule.getNameForm(), ditStructureRule);
      ditStructureRulesByID.remove(ditStructureRule.getRuleID(),
                                   ditStructureRule);
      // We'll use an attribute value including the normalized value
      // rather than the attribute type because otherwise it would use
      // a very expensive matching rule (OID first component match)
      // that would kill performance.
      try
      {
        String valueString = ditStructureRule.getDefinition();
        ByteString rawValue = ByteString.valueOf(valueString);
        ByteString normValue = normalizeAttributeValue(rawValue);
        ditStructureRuleSet.remove(AttributeValues.create(rawValue,
                                                      normValue));
      }
      catch (Exception e)
      {
        String valueString = ditStructureRule.getDefinition();
        ByteString rawValue = ByteString.valueOf(valueString);
        ByteString normValue =
            ByteString.valueOf(toLowerCase(valueString));
        ditStructureRuleSet.remove(AttributeValues.create(rawValue,
                                                      normValue));
      }
      ditStructureRuleSet.remove(createAttrValueForRemove(ditStructureRule));
    }
  }
@@ -3001,15 +2689,7 @@
      {
        nameFormsByName.put(name, nameForm);
      }
      // We'll use an attribute value including the normalized value
      // rather than the attribute type because otherwise it would use
      // a very expensive matching rule (OID first component match)
      // that would kill performance.
      String valueString = nameForm.getDefinition();
      ByteString rawValue = ByteString.valueOf(valueString);
      ByteString normValue = normalizeAttributeValue(rawValue);
      nameFormSet.add(AttributeValues.create(rawValue, normValue));
      nameFormSet.add(createAttrValueForAdd(nameForm));
    }
  }
@@ -3042,28 +2722,7 @@
      {
        nameFormsByName.remove(name, nameForm);
      }
      // We'll use an attribute value including the normalized value
      // rather than the attribute type because otherwise it would use
      // a very expensive matching rule (OID first component match)
      // that would kill performance.
      try
      {
        String valueString = nameForm.getDefinition();
        ByteString rawValue = ByteString.valueOf(valueString);
        ByteString normValue = normalizeAttributeValue(rawValue);
        nameFormSet.remove(AttributeValues.create(rawValue,
            normValue));
      }
      catch (Exception e)
      {
        String valueString = nameForm.getDefinition();
        ByteString rawValue = ByteString.valueOf(valueString);
        ByteString normValue =
            ByteString.valueOf(toLowerCase(valueString));
        nameFormSet.remove(AttributeValues.create(rawValue,
            normValue));
      }
      nameFormSet.remove(createAttrValueForRemove(nameForm));
    }
  }
@@ -3186,8 +2845,8 @@
      if (StaticUtils.hasDescriptor(de.getMessageObject(),
          ERR_SCHEMA_CIRCULAR_DEPENDENCY_REFERENCE))
      {
        LocalizableMessage message = ERR_SCHEMA_CIRCULAR_DEPENDENCY_REFERENCE.
            get(element.getDefinition());
        LocalizableMessage message =
            ERR_SCHEMA_CIRCULAR_DEPENDENCY_REFERENCE.get(element);
        throw new DirectoryException(de.getResultCode(), message,
                                     de);
      }
@@ -3221,10 +2880,8 @@
    {
      // FIXME -- Is this an appropriate maximum depth for detecting
      // circular references?
      LocalizableMessage message = ERR_SCHEMA_CIRCULAR_DEPENDENCY_REFERENCE.get(
          element.getDefinition());
      throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
                                   message);
          ERR_SCHEMA_CIRCULAR_DEPENDENCY_REFERENCE.get(element));
    }
@@ -3370,7 +3027,7 @@
  private AttributeType recreateFromDefinition(AttributeType attrType)
      throws DirectoryException
  {
    ByteString value = ByteString.valueOf(attrType.getDefinition());
    ByteString value = ByteString.valueOf(attrType.toString());
    AttributeType copy =
        AttributeTypeSyntax.decodeAttributeType(value, this, false);
    setSchemaFile(copy, getSchemaFile(attrType));
@@ -3384,7 +3041,7 @@
  private DITContentRule recreateFromDefinition(DITContentRule dcr)
      throws DirectoryException
  {
    ByteString value = ByteString.valueOf(dcr.getDefinition());
    ByteString value = ByteString.valueOf(dcr.toString());
    DITContentRule copy =
        DITContentRuleSyntax.decodeDITContentRule(value, this, false);
    setSchemaFile(copy, getSchemaFile(dcr));
@@ -3394,7 +3051,7 @@
  private DITStructureRule recreateFromDefinition(DITStructureRule dsr)
      throws DirectoryException
  {
    ByteString value = ByteString.valueOf(dsr.getDefinition());
    ByteString value = ByteString.valueOf(dsr.toString());
    DITStructureRule copy =
        DITStructureRuleSyntax.decodeDITStructureRule(value, this, false);
    setSchemaFile(copy, getSchemaFile(dsr));
@@ -3404,7 +3061,7 @@
  private MatchingRuleUse recreateFromDefinition(MatchingRuleUse mru)
      throws DirectoryException
  {
    ByteString value = ByteString.valueOf(mru.getDefinition());
    ByteString value = ByteString.valueOf(mru.toString());
    MatchingRuleUse copy =
        MatchingRuleUseSyntax.decodeMatchingRuleUse(value, this, false);
    setSchemaFile(copy, getSchemaFile(mru));
@@ -3414,7 +3071,7 @@
  private NameForm recreateFromDefinition(NameForm nf)
      throws DirectoryException
  {
    ByteString value = ByteString.valueOf(nf.getDefinition());
    ByteString value = ByteString.valueOf(nf.toString());
    NameForm copy = NameFormSyntax.decodeNameForm(value, this, false);
    setSchemaFile(copy, getSchemaFile(nf));
    return copy;
@@ -3423,7 +3080,7 @@
  private ObjectClass recreateFromDefinition(ObjectClass oc)
      throws DirectoryException
  {
    ByteString value = ByteString.valueOf(oc.getDefinition());
    ByteString value = ByteString.valueOf(oc.toString());
    ObjectClass copy = ObjectClassSyntax.decodeObjectClass(value, this, false);
    setSchemaFile(copy, getSchemaFile(oc));
    return copy;
opendj-sdk/opendj3-server-dev/src/server/org/opends/server/types/SchemaFileElement.java
@@ -66,13 +66,4 @@
   */
  Map<String, List<String>> getExtraProperties();
  /**
   * Retrieves the definition string that is used to represent this
   * element in the schema configuration file.
   *
   * @return  The definition string that should be used to represent
   *          this element in the schema configuration file.
   */
  public String getDefinition();
}
opendj-sdk/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/types/TestAttributeType.java
@@ -27,19 +27,18 @@
package org.opends.server.types;
import java.util.Collection;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import org.forgerock.opendj.ldap.schema.AttributeUsage;
import org.forgerock.util.Utils;
import org.opends.server.api.ApproximateMatchingRule;
import org.opends.server.api.AttributeSyntax;
import org.opends.server.api.EqualityMatchingRule;
import org.opends.server.api.OrderingMatchingRule;
import org.opends.server.api.SubstringMatchingRule;
import org.opends.server.core.DirectoryServer;
import org.opends.server.util.ServerConstants;
import org.testng.Assert;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
@@ -151,33 +150,22 @@
      if (names != null)
      {
        for (String name : names)
        {
          nameSet.add(name);
        }
        nameSet.addAll(names);
      }
      if (! nameSet.isEmpty())
      {
        definition.append(" NAME ");
        if (nameSet.size() == 1)
        {
          definition.append(" NAME '");
          definition.append("'");
          definition.append(nameSet.iterator().next());
          definition.append("'");
        }
        else
        {
          Iterator<String> iterator = nameSet.iterator();
          definition.append(" NAME ( '");
          definition.append(iterator.next());
          while (iterator.hasNext())
          {
            definition.append("' '");
            definition.append(iterator.next());
          }
          definition.append("( '");
          definition.append(Utils.joinAsString("' '", nameSet));
          definition.append("' )");
        }
      }
@@ -242,7 +230,7 @@
      if (attributeUsage != null)
      {
        definition.append(" USAGE ");
        definition.append(attributeUsage.toString());
        definition.append(attributeUsage);
      }
      if (extraProperties != null)
@@ -785,56 +773,6 @@
    Assert.assertEquals(type.isOperational(), result);
  }
  /**
   * Check that the {@link AttributeType#toString()} method.
   *
   * @throws Exception
   *           If the test failed unexpectedly.
   */
  @Test
  public void testToStringDefault() throws Exception {
    AttributeTypeBuilder builder = new AttributeTypeBuilder(null,
        "1.2.3");
    AttributeType type = builder.getInstance();
    Assert.assertEquals(type.toString(), "( 1.2.3 "
        + "EQUALITY caseIgnoreMatch "
        + "ORDERING caseIgnoreOrderingMatch "
        + "SUBSTR caseIgnoreSubstringsMatch "
        + "SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 "
        + "USAGE userApplications )");
  }
  /**
   * Check that the {@link AttributeType#toString()} method.
   *
   * @throws Exception
   *           If the test failed unexpectedly.
   */
  @Test
  public void testToString() throws Exception {
    AttributeTypeBuilder builder = new AttributeTypeBuilder(
        "testType", "1.2.3");
    builder.addTypeNames("anotherName");
    builder.setAttributeUsage(AttributeUsage.DIRECTORY_OPERATION);
    builder.setSingleValue(true);
    builder.setSyntax(DirectoryServer.getDefaultBooleanSyntax());
    builder.addExtraProperty(
        ServerConstants.SCHEMA_PROPERTY_FILENAME, "/foo/bar");
    AttributeType type = builder.getInstance();
    Assert.assertEquals(type.toString(), "( 1.2.3 "
        + "NAME ( 'testType' 'anotherName' ) "
        + "EQUALITY booleanMatch "
        + "SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 " + "SINGLE-VALUE "
        + "USAGE directoryOperation " + "X-SCHEMA-FILE '/foo/bar' )");
  }
  /**
   * {@inheritDoc}
   */
opendj-sdk/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/types/TestObjectClass.java
@@ -36,9 +36,9 @@
import java.util.Set;
import org.forgerock.opendj.ldap.schema.ObjectClassType;
import org.forgerock.util.Utils;
import org.opends.server.core.DirectoryServer;
import org.opends.server.schema.SchemaConstants;
import org.opends.server.util.ServerConstants;
import org.testng.Assert;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.DataProvider;
@@ -125,33 +125,22 @@
      if (names != null)
      {
        for (String name : names)
        {
          nameSet.add(name);
        }
        nameSet.addAll(names);
      }
      if (! nameSet.isEmpty())
      {
        definition.append(" NAME ");
        if (nameSet.size() == 1)
        {
          definition.append(" NAME '");
          definition.append("'");
          definition.append(nameSet.iterator().next());
          definition.append("'");
        }
        else
        {
          Iterator<String> iterator = nameSet.iterator();
          definition.append(" NAME ( '");
          definition.append(iterator.next());
          while (iterator.hasNext())
          {
            definition.append("' '");
            definition.append(iterator.next());
          }
          definition.append("( '");
          definition.append(Utils.joinAsString("' '", nameSet));
          definition.append("' )");
        }
      }
@@ -196,56 +185,11 @@
      if (objectClassType != null)
      {
        definition.append(" ");
        definition.append(objectClassType.toString());
        definition.append(objectClassType);
      }
      if ((requiredAttributeTypes != null) &&
          (! requiredAttributeTypes.isEmpty()))
      {
        if (requiredAttributeTypes.size() == 1)
        {
          definition.append(" MUST ");
          definition.append(
               requiredAttributeTypes.iterator().next().getNameOrOID());
        }
        else
        {
          Iterator<AttributeType> iterator = requiredAttributeTypes.iterator();
          definition.append(" MUST ( ");
          definition.append(iterator.next().getNameOrOID());
          while (iterator.hasNext())
          {
            definition.append(" $ ");
            definition.append(iterator.next().getNameOrOID());
          }
          definition.append(" )");
        }
      }
      if ((optionalAttributeTypes != null) &&
          (! optionalAttributeTypes.isEmpty()))
      {
        if (optionalAttributeTypes.size() == 1)
        {
          definition.append(" MUST ");
          definition.append(
               optionalAttributeTypes.iterator().next().getNameOrOID());
        }
        else
        {
          Iterator<AttributeType> iterator = optionalAttributeTypes.iterator();
          definition.append(" MUST ( ");
          definition.append(iterator.next().getNameOrOID());
          while (iterator.hasNext())
          {
            definition.append(" $ ");
            definition.append(iterator.next().getNameOrOID());
          }
          definition.append(" )");
        }
      }
      append(definition, "MUST", requiredAttributeTypes);
      append(definition, "MAY", optionalAttributeTypes);
      if (extraProperties != null)
      {
@@ -293,6 +237,35 @@
    private void append(StringBuilder definition, String word,
        Set<AttributeType> attrTypes)
    {
      if ((attrTypes != null) && (!attrTypes.isEmpty()))
      {
        definition.append(" ");
        definition.append(word);
        definition.append(" ");
        if (attrTypes.size() == 1)
        {
          definition.append(attrTypes.iterator().next().getNameOrOID());
        }
        else
        {
          definition.append("( ");
          Iterator<AttributeType> iterator = attrTypes.iterator();
          definition.append(iterator.next().getNameOrOID());
          while (iterator.hasNext())
          {
            definition.append(" $ ");
            definition.append(iterator.next().getNameOrOID());
          }
          definition.append(" )");
        }
      }
    }
    /**
     * Set the objectClassType.
     *
@@ -1571,55 +1544,6 @@
    Assert.assertTrue(c.isRequiredOrOptional(types[1]));
  }
  /**
   * Check the {@link ObjectClass#toString()} method.
   *
   * @throws Exception
   *           If the test failed unexpectedly.
   */
  @Test
  public void testToStringDefault() throws Exception {
    ObjectClassBuilder builder = new ObjectClassBuilder(null, "1.2.3");
    ObjectClass type = builder.getInstance();
    Assert.assertEquals(type.toString(), "( 1.2.3 STRUCTURAL )");
  }
  /**
   * Check the {@link ObjectClass#toString()} method.
   *
   * @throws Exception
   *           If the test failed unexpectedly.
   */
  @Test
  public void testToString() throws Exception {
    ObjectClassBuilder builder = new ObjectClassBuilder(
        "parentClass", "1.2.1");
    ObjectClass parent = builder.getInstance();
    builder = new ObjectClassBuilder("childClass", "1.2.2");
    builder.addTypeNames("anotherName");
    builder.setDescription("A description");
    builder.setObjectClassType(ObjectClassType.ABSTRACT);
    builder.setObsolete(true);
    builder.setSuperior(Collections.singleton(parent));
    builder.addRequiredAttributeTypes(types[0], types[1], types[2]);
    builder.addOptionalAttributeTypes(types[3]);
    builder.addExtraProperty(
        ServerConstants.SCHEMA_PROPERTY_FILENAME, "/foo/bar");
    ObjectClass type = builder.getInstance();
    Assert.assertEquals(type.toString(), "( 1.2.2 "
        + "NAME ( 'childClass' 'anotherName' ) "
        + "DESC 'A description' " + "OBSOLETE " + "SUP parentClass "
        + "ABSTRACT " + "MUST ( testType0 $ testType1 $ testType2 ) "
        + "MAY testType3 " + "X-SCHEMA-FILE '/foo/bar' )");
  }
  /**
   * Create test data for testing different combinations of superiors.
   *