From 2fef5aa0046548cb88034553f522d907195a19f7 Mon Sep 17 00:00:00 2001
From: Nicolas Capponi <nicolas.capponi@forgerock.com>
Date: Mon, 02 Dec 2013 10:47:18 +0000
Subject: [PATCH] OpenDJ 3 : config framework
---
opendj-admin/src/main/java/org/opends/server/admin/RelationDefinition.java | 633 ++++++++++++++++++++++++++-------------------------------
1 files changed, 286 insertions(+), 347 deletions(-)
diff --git a/opendj-admin/src/main/java/org/opends/server/admin/RelationDefinition.java b/opendj-admin/src/main/java/org/opends/server/admin/RelationDefinition.java
index bc6a863..5567526 100644
--- a/opendj-admin/src/main/java/org/opends/server/admin/RelationDefinition.java
+++ b/opendj-admin/src/main/java/org/opends/server/admin/RelationDefinition.java
@@ -26,396 +26,335 @@
*/
package org.opends.server.admin;
-import org.opends.messages.Message;
-
-
-import static org.opends.server.util.Validator.*;
+import static com.forgerock.opendj.util.Validator.*;
import java.util.EnumSet;
import java.util.Locale;
import java.util.MissingResourceException;
import java.util.Set;
-
+import org.forgerock.i18n.LocalizableMessage;
/**
- * Relation definitions define relationships between types of managed
- * objects. In addition they define the ownership model:
+ * Relation definitions define relationships between types of managed objects.
+ * In addition they define the ownership model:
* <ul>
- * <li>composition - referenced managed objects are owned by the
- * parent managed object and are deleted when the parent is deleted
- * <li>aggregation - referenced managed objects are not owned by the
- * parent managed object. Instead they are shared by other managed
- * objects.
+ * <li>composition - referenced managed objects are owned by the parent managed
+ * object and are deleted when the parent is deleted
+ * <li>aggregation - referenced managed objects are not owned by the parent
+ * managed object. Instead they are shared by other managed objects.
* </ul>
- * Relations define how clients interact with the configuration. For
- * example, clients manage aggregated managed objects in a shared
- * location and attach them to parent managed objects. Composed
- * managed objects, on the other hand, would be created directly
- * beneath the parent managed object and destroyed with it too.
+ * Relations define how clients interact with the configuration. For example,
+ * clients manage aggregated managed objects in a shared location and attach
+ * them to parent managed objects. Composed managed objects, on the other hand,
+ * would be created directly beneath the parent managed object and destroyed
+ * with it too.
* <p>
- * Within the server, listeners can choose to request notification of
- * managed objects being added or removed from relations.
+ * Within the server, listeners can choose to request notification of managed
+ * objects being added or removed from relations.
* <p>
* In LDAP, compositions are represented as follows:
* <ul>
- * <li>singleton relations (one to one): a referenced managed object
- * is represented using a child entry directly beneath the parent
- * <li>optional relations (one to zero or one): a referenced managed
- * object is represented using a child entry directly beneath the
- * parent
- * <li>instantiable relations (one to many): the relation is
- * represented using a child entry directly beneath the parent.
- * Referenced managed objects are represented using child entries of
- * this "relation entry" and are named by the user
- * <li>set relations (one to many): the relation is
- * represented using a child entry directly beneath the parent.
- * Referenced managed objects are represented using child entries of
- * this "relation entry" whose name is the type of the managed object.
- * </ul>
- * Whereas, aggregations are represented by storing the DNs of the
- * referenced managed objects in an attribute of the aggregating
+ * <li>singleton relations (one to one): a referenced managed object is
+ * represented using a child entry directly beneath the parent
+ * <li>optional relations (one to zero or one): a referenced managed object is
+ * represented using a child entry directly beneath the parent
+ * <li>instantiable relations (one to many): the relation is represented using a
+ * child entry directly beneath the parent. Referenced managed objects are
+ * represented using child entries of this "relation entry" and are named by the
+ * user
+ * <li>set relations (one to many): the relation is represented using a child
+ * entry directly beneath the parent. Referenced managed objects are represented
+ * using child entries of this "relation entry" whose name is the type of the
* managed object.
+ * </ul>
+ * Whereas, aggregations are represented by storing the DNs of the referenced
+ * managed objects in an attribute of the aggregating managed object.
*
* @param <C>
- * The type of client managed object configuration that this
- * relation definition refers to.
+ * The type of client managed object configuration that this relation
+ * definition refers to.
* @param <S>
- * The type of server managed object configuration that this
- * relation definition refers to.
+ * The type of server managed object configuration that this relation
+ * definition refers to.
*/
-public abstract class RelationDefinition
- <C extends ConfigurationClient, S extends Configuration> {
+public abstract class RelationDefinition<C extends ConfigurationClient, S extends Configuration> {
- /**
- * An interface for incrementally constructing relation definitions.
- *
- * @param <C>
- * The type of client managed object configuration that
- * this relation definition refers to.
- * @param <S>
- * The type of server managed object configuration that
- * this relation definition refers to.
- * @param <D>
- * The type of relation definition constructed by this
- * builder.
- */
- protected abstract static class AbstractBuilder
- <C extends ConfigurationClient, S extends Configuration,
- D extends RelationDefinition<C, S>> {
+ /**
+ * An interface for incrementally constructing relation definitions.
+ *
+ * @param <C>
+ * The type of client managed object configuration that this
+ * relation definition refers to.
+ * @param <S>
+ * The type of server managed object configuration that this
+ * relation definition refers to.
+ * @param <D>
+ * The type of relation definition constructed by this builder.
+ */
+ protected abstract static class AbstractBuilder<C extends ConfigurationClient, S extends Configuration, D extends RelationDefinition<C, S>> {
+
+ // Common fields.
+ private final Common<C, S> common;
+
+ /**
+ * Create a property definition builder.
+ *
+ * @param pd
+ * The parent managed object definition.
+ * @param name
+ * The name of the relation.
+ * @param cd
+ * The child managed object definition.
+ */
+ protected AbstractBuilder(AbstractManagedObjectDefinition<?, ?> pd, String name,
+ AbstractManagedObjectDefinition<C, S> cd) {
+ this.common = new Common<C, S>(pd, name, cd);
+ }
+
+ /**
+ * Construct a relation definition based on the properties of this
+ * builder.
+ *
+ * @return The new relation definition.
+ */
+ public final D getInstance() {
+ return buildInstance(common);
+ }
+
+ /**
+ * Add a relation definition option.
+ *
+ * @param option
+ * The relation option.
+ */
+ public final void setOption(RelationOption option) {
+ ensureNotNull(option);
+ common.options.add(option);
+ }
+
+ /**
+ * Build a relation definition based on the properties of this builder.
+ *
+ * @param common
+ * The common fields of the new relation definition.
+ * @return The new relation definition.
+ */
+ protected abstract D buildInstance(Common<C, S> common);
+ }
+
+ /**
+ * Opaque structure containing fields common to all relation definition
+ * types.
+ *
+ * @param <C>
+ * The type of client managed object configuration that this
+ * relation definition refers to.
+ * @param <S>
+ * The type of server managed object configuration that this
+ * relation definition refers to.
+ */
+ protected static final class Common<C extends ConfigurationClient, S extends Configuration> {
+
+ // The definition of the child managed object.
+ private final AbstractManagedObjectDefinition<C, S> cd;
+
+ // The name of the relation.
+ private final String name;
+
+ // Options applicable to this definition.
+ private final Set<RelationOption> options;
+
+ // The definition of the parent managed object.
+ private final AbstractManagedObjectDefinition<?, ?> pd;
+
+ // Private constructor.
+ private Common(AbstractManagedObjectDefinition<?, ?> pd, String name, AbstractManagedObjectDefinition<C, S> cd) {
+ this.name = name;
+ this.pd = pd;
+ this.cd = cd;
+ this.options = EnumSet.noneOf(RelationOption.class);
+ }
+ }
// Common fields.
private final Common<C, S> common;
-
-
/**
- * Create a property definition builder.
- *
- * @param pd
- * The parent managed object definition.
- * @param name
- * The name of the relation.
- * @param cd
- * The child managed object definition.
- */
- protected AbstractBuilder(AbstractManagedObjectDefinition<?, ?> pd,
- String name, AbstractManagedObjectDefinition<C, S> cd) {
- this.common = new Common<C, S>(pd, name, cd);
- }
-
-
-
- /**
- * Construct a relation definition based on the properties of this
- * builder.
- *
- * @return The new relation definition.
- */
- public final D getInstance() {
- return buildInstance(common);
- }
-
-
-
- /**
- * Add a relation definition option.
- *
- * @param option
- * The relation option.
- */
- public final void setOption(RelationOption option) {
- ensureNotNull(option);
- common.options.add(option);
- }
-
-
-
- /**
- * Build a relation definition based on the properties of this
- * builder.
+ * Create a new managed object relation definition with the specified common
+ * fields.
*
* @param common
- * The common fields of the new relation definition.
- * @return The new relation definition.
+ * The common fields of the new relation definition.
*/
- protected abstract D buildInstance(Common<C, S> common);
- }
-
-
-
- /**
- * Opaque structure containing fields common to all relation
- * definition types.
- *
- * @param <C>
- * The type of client managed object configuration that
- * this relation definition refers to.
- * @param <S>
- * The type of server managed object configuration that
- * this relation definition refers to.
- */
- protected static final class Common
- <C extends ConfigurationClient, S extends Configuration> {
-
- // The definition of the child managed object.
- private final AbstractManagedObjectDefinition<C, S> cd;
-
- // The name of the relation.
- private final String name;
-
- // Options applicable to this definition.
- private final Set<RelationOption> options;
-
- // The definition of the parent managed object.
- private final AbstractManagedObjectDefinition<?, ?> pd;
-
-
-
- // Private constructor.
- private Common(AbstractManagedObjectDefinition<?, ?> pd, String name,
- AbstractManagedObjectDefinition<C, S> cd) {
- this.name = name;
- this.pd = pd;
- this.cd = cd;
- this.options = EnumSet.noneOf(RelationOption.class);
+ protected RelationDefinition(Common<C, S> common) {
+ this.common = common;
}
- }
- // Common fields.
- private final Common<C, S> common;
+ /**
+ * Apply a visitor to this relation definition.
+ *
+ * @param <R>
+ * The return type of the visitor's methods.
+ * @param <P>
+ * The type of the additional parameters to the visitor's
+ * methods.
+ * @param v
+ * The relation definition visitor.
+ * @param p
+ * Optional additional visitor parameter.
+ * @return Returns a result as specified by the visitor.
+ */
+ public abstract <R, P> R accept(RelationDefinitionVisitor<R, P> v, P p);
-
-
- /**
- * Create a new managed object relation definition with the
- * specified common fields.
- *
- * @param common
- * The common fields of the new relation definition.
- */
- protected RelationDefinition(Common<C, S> common) {
- this.common = common;
- }
-
-
-
- /**
- * Apply a visitor to this relation definition.
- *
- * @param <R>
- * The return type of the visitor's methods.
- * @param <P>
- * The type of the additional parameters to the visitor's
- * methods.
- * @param v
- * The relation definition visitor.
- * @param p
- * Optional additional visitor parameter.
- * @return Returns a result as specified by the visitor.
- */
- public abstract <R, P> R accept(RelationDefinitionVisitor<R, P> v, P p);
-
-
-
- /**
- * Get the definition of the child managed object.
- *
- * @return Returns the definition of the child managed object.
- */
- public final AbstractManagedObjectDefinition<C, S> getChildDefinition() {
- return common.cd;
- }
-
-
-
- /**
- * Gets the optional description of this relation definition in the
- * default locale.
- *
- * @return Returns the description of this relation definition in
- * the default locale, or <code>null</code> if there is no
- * description.
- */
- public final Message getDescription() {
- return getDescription(Locale.getDefault());
- }
-
-
-
- /**
- * Gets the optional description of this relation definition in the
- * specified locale.
- *
- * @param locale
- * The locale.
- * @return Returns the description of this relation definition in
- * the specified locale, or <code>null</code> if there is
- * no description.
- */
- public final Message getDescription(Locale locale) {
- try {
- String property = "relation." + common.name + ".description";
- return ManagedObjectDefinitionI18NResource.getInstance().getMessage(
- getParentDefinition(), property, locale);
- } catch (MissingResourceException e) {
- return null;
+ /**
+ * Get the definition of the child managed object.
+ *
+ * @return Returns the definition of the child managed object.
+ */
+ public final AbstractManagedObjectDefinition<C, S> getChildDefinition() {
+ return common.cd;
}
- }
+ /**
+ * Gets the optional description of this relation definition in the default
+ * locale.
+ *
+ * @return Returns the description of this relation definition in the
+ * default locale, or <code>null</code> if there is no description.
+ */
+ public final LocalizableMessage getDescription() {
+ return getDescription(Locale.getDefault());
+ }
+ /**
+ * Gets the optional description of this relation definition in the
+ * specified locale.
+ *
+ * @param locale
+ * The locale.
+ * @return Returns the description of this relation definition in the
+ * specified locale, or <code>null</code> if there is no
+ * description.
+ */
+ public final LocalizableMessage getDescription(Locale locale) {
+ try {
+ String property = "relation." + common.name + ".description";
+ return ManagedObjectDefinitionI18NResource.getInstance()
+ .getMessage(getParentDefinition(), property, locale);
+ } catch (MissingResourceException e) {
+ return null;
+ }
+ }
- /**
- * Get the name of the relation.
- *
- * @return Returns the name of the relation.
- */
- public final String getName() {
- return common.name;
- }
+ /**
+ * Get the name of the relation.
+ *
+ * @return Returns the name of the relation.
+ */
+ public final String getName() {
+ return common.name;
+ }
+ /**
+ * Get the definition of the parent managed object.
+ *
+ * @return Returns the definition of the parent managed object.
+ */
+ public final AbstractManagedObjectDefinition<?, ?> getParentDefinition() {
+ return common.pd;
+ }
+ /**
+ * Gets the synopsis of this relation definition in the default locale.
+ *
+ * @return Returns the synopsis of this relation definition in the default
+ * locale.
+ */
+ public final LocalizableMessage getSynopsis() {
+ return getSynopsis(Locale.getDefault());
+ }
- /**
- * Get the definition of the parent managed object.
- *
- * @return Returns the definition of the parent managed object.
- */
- public final AbstractManagedObjectDefinition<?, ?> getParentDefinition() {
- return common.pd;
- }
+ /**
+ * Gets the synopsis of this relation definition in the specified locale.
+ *
+ * @param locale
+ * The locale.
+ * @return Returns the synopsis of this relation definition in the specified
+ * locale.
+ */
+ public final LocalizableMessage getSynopsis(Locale locale) {
+ String property = "relation." + common.name + ".synopsis";
+ return ManagedObjectDefinitionI18NResource.getInstance().getMessage(getParentDefinition(), property, locale);
+ }
+ /**
+ * Gets the user friendly name of this relation definition in the default
+ * locale.
+ *
+ * @return Returns the user friendly name of this relation definition in the
+ * default locale.
+ */
+ public final LocalizableMessage getUserFriendlyName() {
+ return getUserFriendlyName(Locale.getDefault());
+ }
+ /**
+ * Gets the user friendly name of this relation definition in the specified
+ * locale.
+ *
+ * @param locale
+ * The locale.
+ * @return Returns the user friendly name of this relation definition in the
+ * specified locale.
+ */
+ public final LocalizableMessage getUserFriendlyName(Locale locale) {
+ String property = "relation." + common.name + ".user-friendly-name";
+ return ManagedObjectDefinitionI18NResource.getInstance().getMessage(getParentDefinition(), property, locale);
+ }
- /**
- * Gets the synopsis of this relation definition in the default
- * locale.
- *
- * @return Returns the synopsis of this relation definition in the
- * default locale.
- */
- public final Message getSynopsis() {
- return getSynopsis(Locale.getDefault());
- }
+ /**
+ * Check if the specified option is set for this relation definition.
+ *
+ * @param option
+ * The option to test.
+ * @return Returns <code>true</code> if the option is set, or
+ * <code>false</code> otherwise.
+ */
+ public final boolean hasOption(RelationOption option) {
+ return common.options.contains(option);
+ }
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public final String toString() {
+ StringBuilder builder = new StringBuilder();
+ toString(builder);
+ return builder.toString();
+ }
+ /**
+ * Append a string representation of the managed object relation to the
+ * provided string builder.
+ *
+ * @param builder
+ * The string builder where the string representation should be
+ * appended.
+ */
+ public abstract void toString(StringBuilder builder);
- /**
- * Gets the synopsis of this relation definition in the specified
- * locale.
- *
- * @param locale
- * The locale.
- * @return Returns the synopsis of this relation definition in the
- * specified locale.
- */
- public final Message getSynopsis(Locale locale) {
- String property = "relation." + common.name + ".synopsis";
- return ManagedObjectDefinitionI18NResource.getInstance().getMessage(
- getParentDefinition(), property, locale);
- }
-
-
-
- /**
- * Gets the user friendly name of this relation definition in the
- * default locale.
- *
- * @return Returns the user friendly name of this relation
- * definition in the default locale.
- */
- public final Message getUserFriendlyName() {
- return getUserFriendlyName(Locale.getDefault());
- }
-
-
-
- /**
- * Gets the user friendly name of this relation definition in the
- * specified locale.
- *
- * @param locale
- * The locale.
- * @return Returns the user friendly name of this relation
- * definition in the specified locale.
- */
- public final Message getUserFriendlyName(Locale locale) {
- String property = "relation." + common.name + ".user-friendly-name";
- return ManagedObjectDefinitionI18NResource.getInstance().getMessage(
- getParentDefinition(), property, locale);
- }
-
-
-
- /**
- * Check if the specified option is set for this relation
- * definition.
- *
- * @param option
- * The option to test.
- * @return Returns <code>true</code> if the option is set, or
- * <code>false</code> otherwise.
- */
- public final boolean hasOption(RelationOption option) {
- return common.options.contains(option);
- }
-
-
-
- /**
- * {@inheritDoc}
- */
- @Override
- public final String toString() {
- StringBuilder builder = new StringBuilder();
- toString(builder);
- return builder.toString();
- }
-
-
-
- /**
- * Append a string representation of the managed object relation to
- * the provided string builder.
- *
- * @param builder
- * The string builder where the string representation
- * should be appended.
- */
- public abstract void toString(StringBuilder builder);
-
-
-
- /**
- * Performs any run-time initialization required by this relation
- * definition. This may include resolving managed object paths and
- * property names.
- *
- * @throws Exception
- * If this relation definition could not be initialized.
- */
- protected void initialize() throws Exception {
- // No implementation required.
- }
+ /**
+ * Performs any run-time initialization required by this relation
+ * definition. This may include resolving managed object paths and property
+ * names.
+ *
+ * @throws Exception
+ * If this relation definition could not be initialized.
+ */
+ protected void initialize() throws Exception {
+ // No implementation required.
+ }
}
--
Gitblit v1.10.0