From 2a52b482ba335b393356c00fac36d9ae597c8441 Mon Sep 17 00:00:00 2001
From: matthew_swift <matthew_swift@localhost>
Date: Fri, 20 Jul 2007 08:43:07 +0000
Subject: [PATCH] Fix issues 1966 and 1792.

---
 opends/src/server/org/opends/server/admin/InstantiableRelationDefinition.java |  100 +++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 79 insertions(+), 21 deletions(-)

diff --git a/opends/src/server/org/opends/server/admin/InstantiableRelationDefinition.java b/opends/src/server/org/opends/server/admin/InstantiableRelationDefinition.java
index 2035206..89228f7 100644
--- a/opends/src/server/org/opends/server/admin/InstantiableRelationDefinition.java
+++ b/opends/src/server/org/opends/server/admin/InstantiableRelationDefinition.java
@@ -29,6 +29,8 @@
 
 
 
+import static org.opends.server.util.Validator.*;
+
 import java.util.Locale;
 
 
@@ -48,6 +50,79 @@
     <C extends ConfigurationClient, S extends Configuration>
     extends RelationDefinition<C, S> {
 
+  /**
+   * An interface for incrementally constructing instantiable 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.
+   */
+  public static class Builder
+      <C extends ConfigurationClient, S extends Configuration>
+      extends AbstractBuilder<C, S, InstantiableRelationDefinition<C, S>> {
+
+    // The optional naming property definition.
+    private PropertyDefinition<?> namingPropertyDefinition;
+
+    // The plural name of the relation.
+    private final String pluralName;
+
+
+
+    /**
+     * Creates a new builder which can be used to incrementally build
+     * an instantiable relation definition.
+     *
+     * @param pd
+     *          The parent managed object definition.
+     * @param name
+     *          The name of the relation.
+     * @param pluralName
+     *          The plural name of the relation.
+     * @param cd
+     *          The child managed object definition.
+     */
+    public Builder(AbstractManagedObjectDefinition<?, ?> pd, String name,
+        String pluralName, AbstractManagedObjectDefinition<C, S> cd) {
+      super(pd, name, cd);
+      this.pluralName = pluralName;
+    }
+
+
+
+    /**
+     * Sets the naming property for the instantiable relation
+     * definition.
+     *
+     * @param namingPropertyDefinition
+     *          The property of the child managed object definition
+     *          which should be used for naming, or <code>null</code>
+     *          if this relation does not use a property for naming.
+     */
+    public final void setNamingProperty(
+        PropertyDefinition<?> namingPropertyDefinition) {
+      ensureNotNull(namingPropertyDefinition);
+      this.namingPropertyDefinition = namingPropertyDefinition;
+    }
+
+
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    protected InstantiableRelationDefinition<C, S> buildInstance(
+        Common<C, S> common) {
+      return new InstantiableRelationDefinition<C, S>(common, pluralName,
+          namingPropertyDefinition);
+    }
+
+  }
+
   // The optional naming property definition.
   private final PropertyDefinition<?> namingPropertyDefinition;
 
@@ -56,27 +131,10 @@
 
 
 
-  /**
-   * Create a new instantiable managed object relation definition.
-   *
-   * @param pd
-   *          The parent managed object definition.
-   * @param name
-   *          The name of the relation.
-   * @param pluralName
-   *          The plural name of the relation.
-   * @param cd
-   *          The child managed object definition.
-   * @param namingPropertyDefinition
-   *          The property of the child managed object definition
-   *          which should be used for naming, or <code>null</code>
-   *          if this relation does not use a property for naming.
-   */
-  public InstantiableRelationDefinition(
-      AbstractManagedObjectDefinition<?, ?> pd, String name, String pluralName,
-      AbstractManagedObjectDefinition<C, S> cd,
-      PropertyDefinition<?> namingPropertyDefinition) {
-    super(pd, name, cd);
+  // Private constructor.
+  private InstantiableRelationDefinition(Common<C, S> common,
+      String pluralName, PropertyDefinition<?> namingPropertyDefinition) {
+    super(common);
     this.pluralName = pluralName;
     this.namingPropertyDefinition = namingPropertyDefinition;
   }

--
Gitblit v1.10.0