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

Nicolas Capponi
19.09.2016 b9e895852290799d8bdaa3ff81e4d47709bf2326
OPENDJ-2987 Adapt SomeSchemaElement and SchemaUtils
2 files modified
108 ■■■■■ changed files
opendj-server-legacy/src/main/java/org/opends/server/schema/SomeSchemaElement.java 63 ●●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/util/SchemaUtils.java 45 ●●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/schema/SomeSchemaElement.java
@@ -22,13 +22,13 @@
import java.util.Map;
import org.forgerock.opendj.ldap.schema.AttributeType;
import org.forgerock.opendj.ldap.schema.ObjectClass;
import org.forgerock.opendj.ldap.schema.Schema;
import org.forgerock.opendj.ldap.schema.SchemaBuilder;
import org.forgerock.opendj.ldap.schema.SchemaElement;
import org.opends.server.config.ConfigConstants;
import org.opends.server.core.ServerContext;
import org.opends.server.types.CommonSchemaElements;
import org.forgerock.opendj.ldap.schema.ObjectClass;
import org.opends.server.util.RemoveOnceSDKSchemaIsUsed;
import org.opends.server.util.ServerConstants;
@@ -43,7 +43,7 @@
    + " to manage in the same way SDK and server schema element classes")
public class SomeSchemaElement implements SchemaElement
{
  private final ObjectClass objectClass;
  private ObjectClass objectClass;
  private AttributeType attributeType;
  /**
@@ -100,14 +100,9 @@
    return attributeType != null;
  }
  /**
   * Returns whether the wrapped element is an object class.
   *
   * @return {@code true} when the wrapped element is an object class, {@code false} otherwise
   */
  public boolean isObjectClass()
  private SchemaElement asSchemaElement()
  {
    return objectClass != null;
    return attributeType != null ? attributeType : objectClass;
  }
  /**
@@ -137,19 +132,25 @@
   */
  public Iterable<String> getNames()
  {
    return attributeType != null ? attributeType.getNames() : objectClass.getNormalizedNames();
    return attributeType != null ? attributeType.getNames() : objectClass.getNames();
  }
  @Override
  public String getDescription()
  {
    return asSchemaElement().getDescription();
  }
  @Override
  public Map<String, List<String>> getExtraProperties()
  {
    return attributeType != null ? attributeType.getExtraProperties() : objectClass.getExtraProperties();
    return asSchemaElement().getExtraProperties();
  }
  @Override
  public String toString()
  {
    return attributeType != null ? attributeType.toString() : objectClass.toString();
    return asSchemaElement().toString();
  }
  /**
@@ -205,12 +206,7 @@
  private String getExtraPropertySingleValue(String schemaPropertyOrigin)
  {
    if (objectClass != null)
    {
      return CommonSchemaElements.getSingleValueProperty(objectClass, schemaPropertyOrigin);
    }
    List<String> values = attributeType.getExtraProperties().get(schemaPropertyOrigin);
    return values != null && !values.isEmpty() ? values.get(0) : null;
    return CommonSchemaElements.getSingleValueProperty(asSchemaElement(), schemaPropertyOrigin);
  }
  /**
@@ -219,7 +215,7 @@
   */
  public String getAttributeName()
  {
    return attributeType!= null ? ConfigConstants.ATTR_ATTRIBUTE_TYPES : ConfigConstants.ATTR_OBJECTCLASSES;
    return attributeType != null ? ConfigConstants.ATTR_ATTRIBUTE_TYPES : ConfigConstants.ATTR_OBJECTCLASSES;
  }
  /**
@@ -234,15 +230,8 @@
   */
  public void setExtraPropertySingleValue(ServerContext serverContext, String property, String value)
  {
    if (attributeType != null)
    {
      List<String> values = value != null ?  Arrays.asList(value) : null;
      setExtraPropertyMultipleValues(serverContext, property, values);
    }
    else
    {
      CommonSchemaElements.setExtraProperty(objectClass, property, value);
    }
    List<String> values = value != null ? Arrays.asList(value) : null;
    setExtraPropertyMultipleValues(serverContext, property, values);
  }
  /**
@@ -257,10 +246,10 @@
   */
  public void setExtraPropertyMultipleValues(ServerContext serverContext, String property, List<String> values)
  {
    Schema schemaNG = serverContext != null ? serverContext.getSchemaNG() : Schema.getDefaultSchema();
    SchemaBuilder schemaBuilder = new SchemaBuilder(schemaNG);
    if (attributeType != null)
    {
      SchemaBuilder schemaBuilder = serverContext != null ?
          new SchemaBuilder(serverContext.getSchemaNG()) : new SchemaBuilder(Schema.getDefaultSchema());
      AttributeType.Builder builder =
          schemaBuilder.buildAttributeType(attributeType).removeExtraProperty(property, (String) null);
      if (values != null  && !values.isEmpty())
@@ -271,7 +260,13 @@
    }
    else
    {
      objectClass.setExtraProperty(property, values);
      ObjectClass.Builder builder =
          schemaBuilder.buildObjectClass(objectClass).removeExtraProperty(property, (String) null);
      if (values != null && !values.isEmpty())
      {
        builder.extraProperties(property, values);
      }
      objectClass = builder.addToSchemaOverwrite().toSchema().getObjectClass(objectClass.getNameOrOID());
    }
  }
@@ -294,10 +289,4 @@
      .toSchema();
    return schema.getAttributeType(attributeType.getNameOrOID());
  }
  @Override
  public String getDescription()
  {
    return attributeType != null ? attributeType.getDescription() : objectClass.getDescription();
  }
}
opendj-server-legacy/src/main/java/org/opends/server/util/SchemaUtils.java
@@ -15,11 +15,16 @@
 */
package org.opends.server.util;
import org.forgerock.opendj.ldap.schema.AttributeType;
import static org.opends.server.schema.SchemaConstants.SYNTAX_AUTH_PASSWORD_OID;
import static org.opends.server.schema.SchemaConstants.SYNTAX_USER_PASSWORD_OID;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
import org.forgerock.opendj.ldap.schema.AttributeType;
import org.forgerock.opendj.ldap.schema.ObjectClass;
/** Utility methods related to schema. */
public class SchemaUtils
{
@@ -60,4 +65,40 @@
    }
    return PasswordType.NOT_A_PASSWORD;
  }
  /**
   * Returns a new collection with the result of calling {@link ObjectClass#getNameOrOID()} on each
   * element of the provided collection.
   *
   * @param objectClasses
   *          the schema elements on which to act
   * @return a new collection comprised of the names or OIDs of each element
   */
  public static Collection<String> getNameOrOIDsForOCs(Collection<ObjectClass> objectClasses)
  {
    Set<String> results = new HashSet<>(objectClasses.size());
    for (ObjectClass objectClass : objectClasses)
    {
      results.add(objectClass.getNameOrOID());
    }
    return results;
  }
  /**
   * Returns a new collection with the result of calling {@link AttributeType#getNameOrOID()} on
   * each element of the provided collection.
   *
   * @param attributeTypes
   *          the schema elements on which to act
   * @return a new collection comprised of the names or OIDs of each element
   */
  public static Collection<String> getNameOrOIDsForATs(Collection<AttributeType> attributeTypes)
  {
    Set<String> results = new HashSet<>(attributeTypes.size());
    for (AttributeType attrType : attributeTypes)
    {
      results.add(attrType.getNameOrOID());
    }
    return results;
  }
}