mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

matthew_swift
20.43.2007 2a52b482ba335b393356c00fac36d9ae597c8441
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);
  }
}