opendj-server-legacy/src/main/java/org/opends/server/schema/ServerSchemaElement.java
@@ -15,7 +15,10 @@ */ package org.opends.server.schema; import static org.opends.server.util.ServerConstants.SCHEMA_PROPERTY_FILENAME; import java.util.List; import java.util.Map; import org.forgerock.opendj.ldap.schema.AttributeType; import org.forgerock.opendj.ldap.schema.Schema; @@ -30,6 +33,7 @@ public class ServerSchemaElement { /** The underlying schema element. */ private final SchemaElement element; /** @@ -44,13 +48,56 @@ } /** * Returns the schema file of the provided schema element. * Retrieves the definition string used to create this schema element * and including the X-SCHEMA-FILE extension. * * @return the schema file of the provided schema element. * @return The definition string used to create this attribute * type including the X-SCHEMA-FILE extension. */ public String getSchemaFile() public String getDefinitionWithFileName() { return getExtraPropertySingleValue(ServerConstants.SCHEMA_PROPERTY_FILENAME); final String schemaFile = getSchemaFile(); final String definition = element.toString(); if (schemaFile != null) { int pos = definition.lastIndexOf(')'); return definition.substring(0, pos).trim() + " " + SCHEMA_PROPERTY_FILENAME + " '" + schemaFile + "' )"; } return definition; } /** * Returns the description of this schema element. * * @return The description of this schema element, or the empty string if it does not have a description. */ public String getDescription() { return element.getDescription(); } /** * Returns a map of extra properties of this schema element. * * @return An unmodifiable map containing all of the extra properties associated with this schema element. */ public Map<String, List<String>> getExtraProperties() { return element.getExtraProperties(); } /** * Returns the single value of the provided extra property. * * @param property * The name of property to retrieve. * @return the single value of the property */ public String getExtraPropertyAsSingleValue(String property) { List<String> values = element.getExtraProperties().get(property); return values != null && !values.isEmpty() ? values.get(0) : null; } /** @@ -60,13 +107,17 @@ */ public String getOrigin() { return getExtraPropertySingleValue(ServerConstants.SCHEMA_PROPERTY_ORIGIN); return getExtraPropertyAsSingleValue(ServerConstants.SCHEMA_PROPERTY_ORIGIN); } private String getExtraPropertySingleValue(String property) /** * Returns the schema file of the provided schema element. * * @return the schema file of the provided schema element. */ public String getSchemaFile() { List<String> values = element.getExtraProperties().get(property); return values != null && !values.isEmpty() ? values.get(0) : null; return getExtraPropertyAsSingleValue(ServerConstants.SCHEMA_PROPERTY_FILENAME); } /** opendj-server-legacy/src/main/java/org/opends/server/schema/SomeSchemaElement.java
@@ -28,23 +28,20 @@ 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.opends.server.util.RemoveOnceSDKSchemaIsUsed; import org.opends.server.util.ServerConstants; /** * Represents a schema element which is either a SDK attribute type or an objectclass from the server. * Represents a schema element which is either an attribute type or an object class. * <p> * In absence of a common interface, this class allows to process all elements in the same way, * and to provide useful server-oriented methods like {@code getSchemaFile()} or * {@code getOrigin()}. * Allows to share the methods getOID(), getNameOrOID(), getNames() and a setter on extra properties. */ @RemoveOnceSDKSchemaIsUsed("This class is a temporary mechanism" + " to manage in the same way SDK and server schema element classes") @RemoveOnceSDKSchemaIsUsed("Some retrieval methods can be provided by ServerSchemaElement class. Others are only" + "necessary for the control panel code, including the setter methods: specific control panel class could handle it.") public class SomeSchemaElement implements SchemaElement { private ObjectClass objectClass; private AttributeType attributeType; private ServerSchemaElement element; /** * Builds SomeSchemaElement. @@ -100,9 +97,13 @@ return attributeType != null; } private SchemaElement asSchemaElement() private ServerSchemaElement asSchemaElement() { return attributeType != null ? attributeType : objectClass; if (element == null) { element = attributeType != null ? new ServerSchemaElement(attributeType) : new ServerSchemaElement(objectClass); } return element; } /** @@ -162,14 +163,7 @@ */ public String getDefinitionWithFileName() { final String schemaFile = getSchemaFile(); final String definition = toString(); if (schemaFile != null) { int pos = definition.lastIndexOf(')'); return definition.substring(0, pos).trim() + " " + SCHEMA_PROPERTY_FILENAME + " '" + schemaFile + "' )"; } return definition; return asSchemaElement().getDefinitionWithFileName(); } /** @@ -179,7 +173,7 @@ */ public String getSchemaFile() { return getExtraPropertySingleValue(ServerConstants.SCHEMA_PROPERTY_FILENAME); return asSchemaElement().getSchemaFile(); } /** @@ -201,12 +195,7 @@ */ public String getOrigin() { return getExtraPropertySingleValue(ServerConstants.SCHEMA_PROPERTY_ORIGIN); } private String getExtraPropertySingleValue(String schemaPropertyOrigin) { return CommonSchemaElements.getSingleValueProperty(asSchemaElement(), schemaPropertyOrigin); return asSchemaElement().getOrigin(); } /** opendj-server-legacy/src/main/java/org/opends/server/types/CommonSchemaElements.java
@@ -30,30 +30,15 @@ import org.opends.server.util.RemoveOnceSDKSchemaIsUsed; /** * An abstract base class for LDAP schema definitions which contain an * OID, optional names, description, an obsolete flag, and an optional * set of extra properties. * Utility class to retrieve information from a SchemaElement and to set extra property * for a SchemaElement. * <p> * This class defines common properties and behaviour of the various * types of schema definitions (e.g. object class definitions, and * attribute type definitions). * <p> * Any methods which accesses the set of names associated with this * definition, will retrieve the primary name as the first name, * regardless of whether it was contained in the original set * of <code>names</code> passed to the constructor. * <p> * Where ordered sets of names, or extra properties are provided, the * ordering will be preserved when the associated fields are accessed * via their getters or via the {@link #toString()} methods. * <p> * Note that these schema elements are not completely immutable, as * the set of extra properties for the schema element may be altered * after the element is created. Among other things, this allows the * associated schema file to be edited so that an element created over * protocol may be associated with a particular schema file. * Note that {@code setSchemaFile()} method works ONLY for non-SDK classes, because SDK schema * elements are immutable, so modifying the map fo extra properties has no effect on the actual * element. */ @RemoveOnceSDKSchemaIsUsed @RemoveOnceSDKSchemaIsUsed("All read methods can be provided by ServerSchemaElement class. Write method" + " has to rebuild fully the schema element within the schema, which means specific code for each element") public final class CommonSchemaElements { private CommonSchemaElements() @@ -147,8 +132,7 @@ * @param value The value for the "extra" property. If it is * {@code null}, then any existing definition will be removed. */ public static void setExtraProperty(SchemaElement elem, String name, String value) private static void setExtraProperty(SchemaElement elem, String name, String value) { ifNull(name);