From c2d0d212b510d8e82b9b123b4d06a80b835c8cd4 Mon Sep 17 00:00:00 2001
From: Nicolas Capponi <nicolas.capponi@forgerock.com>
Date: Fri, 06 Dec 2013 16:52:01 +0000
Subject: [PATCH] OpenDJ 3 : config framework
---
opendj-admin/src/main/java/org/opends/server/admin/Reference.java | 342 +++++++++++++++++++++++++-------------------------------
1 files changed, 152 insertions(+), 190 deletions(-)
diff --git a/opendj-admin/src/main/java/org/opends/server/admin/Reference.java b/opendj-admin/src/main/java/org/opends/server/admin/Reference.java
index cf1cfbd..78a3ad9 100644
--- a/opendj-admin/src/main/java/org/opends/server/admin/Reference.java
+++ b/opendj-admin/src/main/java/org/opends/server/admin/Reference.java
@@ -26,220 +26,182 @@
*/
package org.opends.server.admin;
+import static com.forgerock.opendj.util.StaticUtils.*;
-
-import org.opends.server.types.AttributeValue;
import org.forgerock.opendj.ldap.DN;
-import org.opends.server.types.DirectoryException;
-import org.opends.server.types.RDN;
-import org.opends.server.util.StaticUtils;
-
-
+import org.forgerock.opendj.ldap.RDN;
/**
* A reference to another managed object.
*
* @param <C>
- * The type of client managed object configuration that this
- * reference refers to.
+ * The type of client managed object configuration that this
+ * reference refers to.
* @param <S>
- * The type of server managed object configuration that this
- * reference refers to.
+ * The type of server managed object configuration that this
+ * reference refers to.
*/
-public final class Reference<C extends ConfigurationClient,
- S extends Configuration> {
+public final class Reference<C extends ConfigurationClient, S extends Configuration> {
- /**
- * Parses a DN string value as a reference using the provided
- * managed object path and relation definition.
- *
- * @param <C>
- * The type of client managed object configuration that
- * this reference refers to.
- * @param <S>
- * The type of server managed object configuration that
- * this reference refers to.
- * @param p
- * The path of the referenced managed object's parent.
- * @param rd
- * The instantiable relation in the parent which contains
- * the referenced managed object.
- * @param s
- * The DN string value.
- * @return Returns the new reference based on the provided DN string
- * value.
- * @throws IllegalArgumentException
- * If the DN string value could not be decoded as a DN or
- * if the provided DN did not correspond to the provided
- * path and relation.
- */
- public static <C extends ConfigurationClient, S extends Configuration>
- Reference<C, S> parseDN(
- ManagedObjectPath<?, ?> p, InstantiableRelationDefinition<C, S> rd,
- String s) throws IllegalArgumentException {
- AbstractManagedObjectDefinition<?, ?> d = p.getManagedObjectDefinition();
- RelationDefinition<?, ?> tmp = d.getRelationDefinition(rd.getName());
- if (tmp != rd) {
- throw new IllegalArgumentException("The relation \"" + rd.getName()
- + "\" is not associated with the definition \"" + d.getName() + "\"");
+ /**
+ * Parses a DN string value as a reference using the provided managed object
+ * path and relation definition.
+ *
+ * @param <C>
+ * The type of client managed object configuration that this
+ * reference refers to.
+ * @param <S>
+ * The type of server managed object configuration that this
+ * reference refers to.
+ * @param path
+ * The path of the referenced managed object's parent.
+ * @param relationDef
+ * The instantiable relation in the parent which contains the
+ * referenced managed object.
+ * @param dnAsString
+ * The DN string value.
+ * @return Returns the new reference based on the provided DN string value.
+ * @throws IllegalArgumentException
+ * If the DN string value could not be decoded as a DN or if the
+ * provided DN did not correspond to the provided path and
+ * relation.
+ */
+ public static <C extends ConfigurationClient, S extends Configuration> Reference<C, S> parseDN(
+ ManagedObjectPath<?, ?> path, InstantiableRelationDefinition<C, S> relationDef, String dnAsString)
+ throws IllegalArgumentException {
+ AbstractManagedObjectDefinition<?, ?> definition = path.getManagedObjectDefinition();
+ RelationDefinition<?, ?> tmp = definition.getRelationDefinition(relationDef.getName());
+ if (tmp != relationDef) {
+ // TODO : i18n ?
+ throw new IllegalArgumentException("The relation \"" + relationDef.getName()
+ + "\" is not associated with the definition \"" + definition.getName() + "\"");
+ }
+
+ DN dn = DN.valueOf(dnAsString);
+ RDN rdn = dn.rdn();
+ if (rdn == null) {
+ // TODO : i18n ?
+ throw new IllegalArgumentException("Unabled to decode the DN string: \"" + dnAsString + "\"");
+ }
+
+ // Check that the DN was valid.
+ String name = rdn.getFirstAVA().getAttributeValue().toString();
+ DN expected = path.child(relationDef, name).toDN();
+ if (!dn.equals(expected)) {
+ // TODO : i18n ?
+ throw new IllegalArgumentException("Unabled to decode the DN string: \"" + dnAsString + "\"");
+ }
+
+ return new Reference<C, S>(path, relationDef, name);
}
- DN dn;
- try {
- dn = DN.decode(s);
- } catch (DirectoryException e) {
- throw new IllegalArgumentException("Unabled to decode the DN string: \""
- + s + "\"");
+ /**
+ * Parses a name as a reference using the provided managed object path and
+ * relation definition.
+ *
+ * @param <C>
+ * The type of client managed object configuration that this
+ * reference refers to.
+ * @param <S>
+ * The type of server managed object configuration that this
+ * reference refers to.
+ * @param p
+ * The path of the referenced managed object's parent.
+ * @param rd
+ * The instantiable relation in the parent which contains the
+ * referenced managed object.
+ * @param s
+ * The name of the referenced managed object.
+ * @return Returns the new reference based on the provided name.
+ * @throws IllegalArgumentException
+ * If the relation is not associated with the provided parent's
+ * definition, or if the provided name is empty.
+ */
+ public static <C extends ConfigurationClient, S extends Configuration> Reference<C, S> parseName(
+ ManagedObjectPath<?, ?> p, InstantiableRelationDefinition<C, S> rd, String s)
+ throws IllegalArgumentException {
+ // Sanity checks.
+ AbstractManagedObjectDefinition<?, ?> d = p.getManagedObjectDefinition();
+ RelationDefinition<?, ?> tmp = d.getRelationDefinition(rd.getName());
+ if (tmp != rd) {
+ throw new IllegalArgumentException("The relation \"" + rd.getName()
+ + "\" is not associated with the definition \"" + d.getName() + "\"");
+ }
+
+ if (s.trim().length() == 0) {
+ throw new IllegalArgumentException("Empty names are not allowed");
+ }
+
+ return new Reference<C, S>(p, rd, s);
}
- RDN rdn = dn.getRDN();
- if (rdn == null) {
- throw new IllegalArgumentException("Unabled to decode the DN string: \""
- + s + "\"");
+ // The name of the referenced managed object.
+ private final String name;
+
+ // The path of the referenced managed object.
+ private final ManagedObjectPath<C, S> path;
+
+ // The instantiable relation in the parent which contains the
+ // referenced managed object.
+ private final InstantiableRelationDefinition<C, S> relation;
+
+ // Private constructor.
+ private Reference(ManagedObjectPath<?, ?> parent, InstantiableRelationDefinition<C, S> relation, String name)
+ throws IllegalArgumentException {
+ this.relation = relation;
+ this.name = name;
+ this.path = parent.child(relation, name);
}
- AttributeValue av = rdn.getAttributeValue(0);
- if (av == null) {
- throw new IllegalArgumentException("Unabled to decode the DN string: \""
- + s + "\"");
+ /**
+ * Gets the name of the referenced managed object.
+ *
+ * @return Returns the name of the referenced managed object.
+ */
+ public String getName() {
+ return name;
}
- String name = av.getValue().toString();
-
- // Check that the DN was valid.
- DN expected = p.child(rd, name).toDN();
- if (!dn.equals(expected)) {
- throw new IllegalArgumentException("Unabled to decode the DN string: \""
- + s + "\"");
+ /**
+ * Gets the normalized name of the referenced managed object.
+ *
+ * @return Returns the normalized name of the referenced managed object.
+ */
+ public String getNormalizedName() {
+ PropertyDefinition<?> pd = relation.getNamingPropertyDefinition();
+ return normalizeName(pd);
}
- return new Reference<C, S>(p, rd, name);
- }
-
-
-
- /**
- * Parses a name as a reference using the provided managed object
- * path and relation definition.
- *
- * @param <C>
- * The type of client managed object configuration that
- * this reference refers to.
- * @param <S>
- * The type of server managed object configuration that
- * this reference refers to.
- * @param p
- * The path of the referenced managed object's parent.
- * @param rd
- * The instantiable relation in the parent which contains
- * the referenced managed object.
- * @param s
- * The name of the referenced managed object.
- * @return Returns the new reference based on the provided name.
- * @throws IllegalArgumentException
- * If the relation is not associated with the provided
- * parent's definition, or if the provided name is empty.
- */
- public static <C extends ConfigurationClient, S extends Configuration>
- Reference<C, S> parseName(
- ManagedObjectPath<?, ?> p, InstantiableRelationDefinition<C, S> rd,
- String s) throws IllegalArgumentException {
- // Sanity checks.
- AbstractManagedObjectDefinition<?, ?> d = p.getManagedObjectDefinition();
- RelationDefinition<?, ?> tmp = d.getRelationDefinition(rd.getName());
- if (tmp != rd) {
- throw new IllegalArgumentException("The relation \"" + rd.getName()
- + "\" is not associated with the definition \"" + d.getName() + "\"");
+ /**
+ * Gets the DN of the referenced managed object.
+ *
+ * @return Returns the DN of the referenced managed object.
+ */
+ public DN toDN() {
+ return path.toDN();
}
- if (s.trim().length() == 0) {
- throw new IllegalArgumentException("Empty names are not allowed");
+ /**
+ * {@inheritDoc}
+ */
+ public String toString() {
+ return name;
}
- return new Reference<C, S>(p, rd, s);
- }
+ // Normalize a value using the specified naming property definition
+ // if defined.
+ private <T> String normalizeName(PropertyDefinition<T> pd) {
+ if (pd != null) {
+ try {
+ T tvalue = pd.decodeValue(name);
+ return pd.normalizeValue(tvalue);
+ } catch (IllegalPropertyValueStringException e) {
+ // Fall through to default normalization.
+ }
+ }
- // The name of the referenced managed object.
- private final String name;
-
- // The path of the referenced managed object.
- private final ManagedObjectPath<C, S> path;
-
- // The instantiable relation in the parent which contains the
- // referenced managed object.
- private final InstantiableRelationDefinition<C, S> relation;
-
-
-
- // Private constructor.
- private Reference(ManagedObjectPath<?, ?> parent,
- InstantiableRelationDefinition<C, S> relation, String name)
- throws IllegalArgumentException {
- this.relation = relation;
- this.name = name;
- this.path = parent.child(relation, name);
- }
-
-
-
- /**
- * Gets the name of the referenced managed object.
- *
- * @return Returns the name of the referenced managed object.
- */
- public String getName() {
- return name;
- }
-
-
-
- /**
- * Gets the normalized name of the referenced managed object.
- *
- * @return Returns the normalized name of the referenced managed
- * object.
- */
- public String getNormalizedName() {
- PropertyDefinition<?> pd = relation.getNamingPropertyDefinition();
- return normalizeName(pd);
- }
-
-
-
- /**
- * Gets the DN of the referenced managed object.
- *
- * @return Returns the DN of the referenced managed object.
- */
- public DN toDN() {
- return path.toDN();
- }
-
-
-
- /**
- * {@inheritDoc}
- */
- public String toString() {
- return name;
- }
-
-
-
- // Normalize a value using the specified naming property definition
- // if defined.
- private <T> String normalizeName(PropertyDefinition<T> pd) {
- if (pd != null) {
- try {
- T tvalue = pd.decodeValue(name);
- return pd.normalizeValue(tvalue);
- } catch (IllegalPropertyValueStringException e) {
- // Fall through to default normalization.
- }
+ // FIXME: should really use directory string normalizer.
+ String s = name.trim().replaceAll(" +", " ");
+ return toLowerCase(s);
}
-
- // FIXME: should really use directory string normalizer.
- String s = name.trim().replaceAll(" +", " ");
- return StaticUtils.toLowerCase(s);
- }
}
--
Gitblit v1.10.0