From 95df5cfdba474acb03076953e992b898fbb277a8 Mon Sep 17 00:00:00 2001
From: matthew_swift <matthew_swift@localhost>
Date: Mon, 02 Feb 2009 23:37:54 +0000
Subject: [PATCH] Fix issue 3734 - Make network group policies extensible.

---
 opends/src/server/org/opends/server/admin/server/ServerManagedObject.java |  270 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 266 insertions(+), 4 deletions(-)

diff --git a/opends/src/server/org/opends/server/admin/server/ServerManagedObject.java b/opends/src/server/org/opends/server/admin/server/ServerManagedObject.java
index 6efaf10..991e19c 100644
--- a/opends/src/server/org/opends/server/admin/server/ServerManagedObject.java
+++ b/opends/src/server/org/opends/server/admin/server/ServerManagedObject.java
@@ -22,7 +22,7 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Copyright 2006-2009 Sun Microsystems, Inc.
  */
 
 package org.opends.server.admin.server;
@@ -40,7 +40,6 @@
 import java.util.Set;
 import java.util.SortedSet;
 
-import org.opends.messages.AdminMessages;
 import org.opends.messages.Message;
 import org.opends.server.admin.Configuration;
 import org.opends.server.admin.Constraint;
@@ -51,6 +50,7 @@
 import org.opends.server.admin.PropertyDefinition;
 import org.opends.server.admin.PropertyProvider;
 import org.opends.server.admin.RelationDefinition;
+import org.opends.server.admin.SetRelationDefinition;
 import org.opends.server.admin.SingletonRelationDefinition;
 import org.opends.server.api.ConfigAddListener;
 import org.opends.server.api.ConfigChangeListener;
@@ -223,6 +223,55 @@
 
 
   /**
+   * Deregisters an existing configuration add listener.
+   *
+   * @param <M>
+   *          The type of the child server configuration object.
+   * @param d
+   *          The set relation definition.
+   * @param listener
+   *          The configuration add listener.
+   * @throws IllegalArgumentException
+   *           If the set relation definition is not
+   *           associated with this managed object's definition.
+   */
+  public <M extends Configuration> void deregisterAddListener(
+      SetRelationDefinition<?, M> d,
+      ConfigurationAddListener<M> listener) throws IllegalArgumentException {
+    validateRelationDefinition(d);
+
+    DN baseDN = DNBuilder.create(path, d);
+    deregisterAddListener(baseDN, listener);
+  }
+
+
+
+  /**
+   * Deregisters an existing server managed object add listener.
+   *
+   * @param <M>
+   *          The type of the child server configuration object.
+   * @param d
+   *          The set relation definition.
+   * @param listener
+   *          The server managed object add listener.
+   * @throws IllegalArgumentException
+   *           If the set relation definition is not
+   *           associated with this managed object's definition.
+   */
+  public <M extends Configuration> void deregisterAddListener(
+      SetRelationDefinition<?, M> d,
+      ServerManagedObjectAddListener<M> listener)
+      throws IllegalArgumentException {
+    validateRelationDefinition(d);
+
+    DN baseDN = DNBuilder.create(path, d);
+    deregisterAddListener(baseDN, listener);
+  }
+
+
+
+  /**
    * Deregisters an existing configuration change listener.
    *
    * @param listener
@@ -371,6 +420,55 @@
 
 
   /**
+   * Deregisters an existing configuration delete listener.
+   *
+   * @param <M>
+   *          The type of the child server configuration object.
+   * @param d
+   *          The set relation definition.
+   * @param listener
+   *          The configuration delete listener.
+   * @throws IllegalArgumentException
+   *           If the set relation definition is not
+   *           associated with this managed object's definition.
+   */
+  public <M extends Configuration> void deregisterDeleteListener(
+      SetRelationDefinition<?, M> d,
+      ConfigurationDeleteListener<M> listener) throws IllegalArgumentException {
+    validateRelationDefinition(d);
+
+    DN baseDN = DNBuilder.create(path, d);
+    deregisterDeleteListener(baseDN, listener);
+  }
+
+
+
+  /**
+   * Deregisters an existing server managed object delete listener.
+   *
+   * @param <M>
+   *          The type of the child server configuration object.
+   * @param d
+   *          The set relation definition.
+   * @param listener
+   *          The server managed object delete listener.
+   * @throws IllegalArgumentException
+   *           If the set relation definition is not
+   *           associated with this managed object's definition.
+   */
+  public <M extends Configuration> void deregisterDeleteListener(
+      SetRelationDefinition<?, M> d,
+      ServerManagedObjectDeleteListener<M> listener)
+      throws IllegalArgumentException {
+    validateRelationDefinition(d);
+
+    DN baseDN = DNBuilder.create(path, d);
+    deregisterDeleteListener(baseDN, listener);
+  }
+
+
+
+  /**
    * Retrieve an instantiable child managed object.
    *
    * @param <M>
@@ -423,6 +521,37 @@
 
 
   /**
+   * Retrieve a set child managed object.
+   *
+   * @param <M>
+   *          The requested type of the child server managed object
+   *          configuration.
+   * @param d
+   *          The set relation definition.
+   * @param name
+   *          The name of the child managed object.
+   * @return Returns the set child managed object.
+   * @throws IllegalArgumentException
+   *           If the relation definition is not associated with this
+   *           managed object's definition or if {@code name} specifies
+   *           a managed object definition which is not a sub-type of
+   *           the relation's child definition.
+   * @throws ConfigException
+   *           If the child managed object could not be found or if it
+   *           could not be decoded.
+   */
+  public <M extends Configuration> ServerManagedObject<? extends M> getChild(
+      SetRelationDefinition<?, M> d, String name)
+      throws IllegalArgumentException, ConfigException
+  {
+    validateRelationDefinition(d);
+
+    return context.getManagedObject(path.child(d, name));
+  }
+
+
+
+  /**
    * Retrieve a singleton child managed object.
    *
    * @param <M>
@@ -599,6 +728,25 @@
 
 
   /**
+   * Lists the child managed objects associated with the specified
+   * set relation.
+   *
+   * @param d
+   *          The set relation definition.
+   * @return Returns the names of the child managed objects.
+   * @throws IllegalArgumentException
+   *           If the relation definition is not associated with this
+   *           managed object's definition.
+   */
+  public String[] listChildren(SetRelationDefinition<?, ?> d)
+      throws IllegalArgumentException {
+    validateRelationDefinition(d);
+    return context.listManagedObjects(path, d);
+  }
+
+
+
+  /**
    * Register to be notified when new child configurations are added
    * beneath an instantiable relation.
    *
@@ -712,6 +860,63 @@
 
 
   /**
+   * Register to be notified when new child configurations are added
+   * beneath a set relation.
+   *
+   * @param <M>
+   *          The type of the child server configuration object.
+   * @param d
+   *          The set relation definition.
+   * @param listener
+   *          The configuration add listener.
+   * @throws IllegalArgumentException
+   *           If the set relation definition is not
+   *           associated with this managed object's definition.
+   * @throws ConfigException
+   *           If the configuration entry associated with the
+   *           set relation could not be retrieved.
+   */
+  public <M extends Configuration> void registerAddListener(
+      SetRelationDefinition<?, M> d,
+      ConfigurationAddListener<M> listener) throws IllegalArgumentException,
+      ConfigException {
+    registerAddListener(d, new ServerManagedObjectAddListenerAdaptor<M>(
+        listener));
+  }
+
+
+
+  /**
+   * Register to be notified when new child server managed object are
+   * added beneath a set relation.
+   *
+   * @param <M>
+   *          The type of the child server configuration object.
+   * @param d
+   *          The set relation definition.
+   * @param listener
+   *          The server managed object add listener.
+   * @throws IllegalArgumentException
+   *           If the set relation definition is not
+   *           associated with this managed object's definition.
+   * @throws ConfigException
+   *           If the configuration entry associated with the
+   *           set relation could not be retrieved.
+   */
+  public <M extends Configuration> void registerAddListener(
+      SetRelationDefinition<?, M> d,
+      ServerManagedObjectAddListener<M> listener)
+      throws IllegalArgumentException, ConfigException {
+    validateRelationDefinition(d);
+    DN baseDN = DNBuilder.create(path, d);
+    ConfigAddListener adaptor = new ConfigAddListenerAdaptor<M>(path, d,
+        listener);
+    registerAddListener(baseDN, adaptor);
+  }
+
+
+
+  /**
    * Register to be notified when this server managed object is
    * changed.
    *
@@ -876,6 +1081,63 @@
 
 
   /**
+   * Register to be notified when existing child configurations are
+   * deleted beneath a set relation.
+   *
+   * @param <M>
+   *          The type of the child server configuration object.
+   * @param d
+   *          The set relation definition.
+   * @param listener
+   *          The configuration delete listener.
+   * @throws IllegalArgumentException
+   *           If the set relation definition is not
+   *           associated with this managed object's definition.
+   * @throws ConfigException
+   *           If the configuration entry associated with the
+   *           set relation could not be retrieved.
+   */
+  public <M extends Configuration> void registerDeleteListener(
+      SetRelationDefinition<?, M> d,
+      ConfigurationDeleteListener<M> listener) throws IllegalArgumentException,
+      ConfigException {
+    registerDeleteListener(d, new ServerManagedObjectDeleteListenerAdaptor<M>(
+        listener));
+  }
+
+
+
+  /**
+   * Register to be notified when existing child server managed
+   * objects are deleted beneath a set relation.
+   *
+   * @param <M>
+   *          The type of the child server configuration object.
+   * @param d
+   *          The set relation definition.
+   * @param listener
+   *          The server managed objects delete listener.
+   * @throws IllegalArgumentException
+   *           If the set relation definition is not
+   *           associated with this managed object's definition.
+   * @throws ConfigException
+   *           If the configuration entry associated with the
+   *           set relation could not be retrieved.
+   */
+  public <M extends Configuration> void registerDeleteListener(
+      SetRelationDefinition<?, M> d,
+      ServerManagedObjectDeleteListener<M> listener)
+      throws IllegalArgumentException, ConfigException {
+    validateRelationDefinition(d);
+    DN baseDN = DNBuilder.create(path, d);
+    ConfigDeleteListener adaptor = new ConfigDeleteListenerAdaptor<M>(path, d,
+        listener);
+    registerDeleteListener(baseDN, adaptor);
+  }
+
+
+
+  /**
    * {@inheritDoc}
    */
   @Override
@@ -1079,7 +1341,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = AdminMessages.ERR_ADMIN_CANNOT_GET_LISTENER_BASE.get(
+      Message message = ERR_ADMIN_CANNOT_GET_LISTENER_BASE.get(
           String.valueOf(dn), stackTraceToSingleLineString(e));
       throw new ConfigException(message, e);
     }
@@ -1125,7 +1387,7 @@
     }
 
     // No parent entry could be found.
-    Message message = AdminMessages.ERR_ADMIN_UNABLE_TO_REGISTER_LISTENER
+    Message message = ERR_ADMIN_UNABLE_TO_REGISTER_LISTENER
         .get(String.valueOf(baseDN));
     throw new ConfigException(message);
   }

--
Gitblit v1.10.0