From 2de738aa8477211d74faeb8620da64054e085914 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.

---
 opendj-sdk/opends/src/server/org/opends/server/admin/AggregationRelationDefinition.java |  216 ++++++++++++++++++++++++++++++++++++-----------------
 1 files changed, 146 insertions(+), 70 deletions(-)

diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/AggregationRelationDefinition.java b/opendj-sdk/opends/src/server/org/opends/server/admin/AggregationRelationDefinition.java
index 9b0f159..dbd9300 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/AggregationRelationDefinition.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/admin/AggregationRelationDefinition.java
@@ -29,7 +29,7 @@
 
 
 
-import static org.opends.server.util.Validator.ensureNotNull;
+import static org.opends.server.util.Validator.*;
 
 
 
@@ -47,61 +47,137 @@
     <C extends ConfigurationClient, S extends Configuration>
     extends RelationDefinition<C, S> {
 
-  // The plural name of the relation.
-  private final String pluralName;
+  /**
+   * An interface for incrementally constructing aggregation 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, AggregationRelationDefinition<C, S>> {
+
+    // The maximum number of referenced managed objects.
+    private int maxOccurs = 0;
+
+    // The minimum number of referenced managed objects.
+    private int minOccurs = 0;
+
+    // The path identifying the location of the referenced managed
+    // objects.
+    private ManagedObjectPath path;
+
+    // The plural name of the relation.
+    private final String pluralName;
+
+
+
+    /**
+     * Creates a new builder which can be used to incrementally build
+     * an aggregation 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;
+    }
+
+
+
+    /**
+     * Set the maximum number of referenced managed objects.
+     *
+     * @param maxOccurs
+     *          The maximum number of referenced managed objects (or
+     *          zero if there is no upper limit).
+     */
+    public void setMaxOccurs(int maxOccurs) {
+      this.maxOccurs = maxOccurs;
+    }
+
+
+
+    /**
+     * Set the minimum number of referenced managed objects.
+     *
+     * @param minOccurs
+     *          The minimum number of referenced managed objects.
+     */
+    public void setMinOccurs(int minOccurs) {
+      this.minOccurs = minOccurs;
+    }
+
+
+
+    /**
+     * Set the path identifying the location of the referenced managed
+     * objects.
+     *
+     * @param path
+     *          The path identifying the location of the referenced
+     *          managed objects.
+     */
+    public void setPath(ManagedObjectPath path) {
+      this.path = path;
+    }
+
+
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    protected AggregationRelationDefinition<C, S> buildInstance(
+        Common<C, S> common) {
+      return new AggregationRelationDefinition<C, S>(common, pluralName, path,
+          minOccurs, maxOccurs);
+    }
+
+  }
+
+  // The maximum number of referenced managed objects.
+  private final int maxOccurs;
+
+  // The minimum number of referenced managed objects.
+  private final int minOccurs;
 
   // The path identifying the location of the referenced managed
   // objects.
   private final ManagedObjectPath path;
 
-  // The minimum number of referenced managed objects.
-  private final int minOccurs;
-
-  // The maximum number of referenced managed objects.
-  private final int maxOccurs;
+  // The plural name of the relation.
+  private final String pluralName;
 
 
 
-  /**
-   * Create a new aggregation managed object relation definition.
-   *
-   * @param pd
-   *          The parent managed object definition.
-   * @param name
-   *          The name of this relation.
-   * @param pluralName
-   *          The plural name of the relation.
-   * @param cd
-   *          The child managed object definition.
-   * @param path
-   *          The path identifying the location of the referenced
-   *          managed objects.
-   * @param minOccurs
-   *          The minimum number of referenced managed objects.
-   * @param maxOccurs
-   *          The maximum number of referenced managed objects (or
-   *          zero if there is no upper limit).
-   * @throws IllegalArgumentException
-   *           If minOccurs is less than zero or maxOccurs is less
-   *           than minOccurs.
-   */
-  public AggregationRelationDefinition(
-      AbstractManagedObjectDefinition<?, ?> pd, String name, String pluralName,
-      AbstractManagedObjectDefinition<C, S> cd,
+  // Private constructor.
+  private AggregationRelationDefinition(Common<C, S> common, String pluralName,
       ManagedObjectPath path, int minOccurs, int maxOccurs)
       throws IllegalArgumentException {
-    super(pd, name, cd);
+    super(common);
 
     ensureNotNull(path);
 
     if (minOccurs < 0) {
-      throw new IllegalArgumentException(
-          "minOccurs is less than zero");
+      throw new IllegalArgumentException("minOccurs is less than zero");
     }
 
     if (maxOccurs != 0 && maxOccurs < minOccurs) {
-      throw new IllegalArgumentException(
-          "maxOccurs is less than minOccurs");
+      throw new IllegalArgumentException("maxOccurs is less than minOccurs");
     }
 
     this.pluralName = pluralName;
@@ -113,12 +189,34 @@
 
 
   /**
-   * Get the plural name of the relation.
-   *
-   * @return Returns the plural name of the relation.
+   * {@inheritDoc}
    */
-  public final String getPluralName() {
-    return pluralName;
+  @Override
+  public <R, P> R accept(RelationDefinitionVisitor<R, P> v, P p) {
+    return v.visitAggregation(this, p);
+  }
+
+
+
+  /**
+   * Get the maximum number of referenced managed objects.
+   *
+   * @return Returns the maximum number of referenced managed objects
+   *         (or zero if there is no upper limit).
+   */
+  public int getMaxOccurs() {
+    return maxOccurs;
+  }
+
+
+
+  /**
+   * Get the minimum number of referenced managed objects.
+   *
+   * @return Returns the minimum number of referenced managed objects.
+   */
+  public int getMinOccurs() {
+    return minOccurs;
   }
 
 
@@ -137,24 +235,12 @@
 
 
   /**
-   * Get the minimum number of referenced managed objects.
+   * Get the plural name of the relation.
    *
-   * @return Returns the minimum number of referenced managed objects.
+   * @return Returns the plural name of the relation.
    */
-  public int getMinOccurs() {
-    return minOccurs;
-  }
-
-
-
-  /**
-   * Get the maximum number of referenced managed objects.
-   *
-   * @return Returns the maximum number of referenced managed objects
-   *         (or zero if there is no upper limit).
-   */
-  public int getMaxOccurs() {
-    return maxOccurs;
+  public final String getPluralName() {
+    return pluralName;
   }
 
 
@@ -177,14 +263,4 @@
       builder.append(maxOccurs);
     }
   }
-
-
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public <R, P> R accept(RelationDefinitionVisitor<R, P> v, P p) {
-    return v.visitAggregation(this, p);
-  }
 }

--
Gitblit v1.10.0