From a8eb24ede6506e89a7a8b9478aea003490d7eaba Mon Sep 17 00:00:00 2001
From: matthew_swift <matthew_swift@localhost>
Date: Mon, 03 Sep 2007 13:33:50 +0000
Subject: [PATCH] Partial fix for issue 1451: admin framework constraint and dependency support.

---
 opendj-sdk/opends/src/server/org/opends/server/admin/client/ldap/LDAPDriver.java |  144 ++++++++++++++++++++---------------------------
 1 files changed, 61 insertions(+), 83 deletions(-)

diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/client/ldap/LDAPDriver.java b/opendj-sdk/opends/src/server/org/opends/server/admin/client/ldap/LDAPDriver.java
index 497f100..a76fd7d 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/client/ldap/LDAPDriver.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/admin/client/ldap/LDAPDriver.java
@@ -47,6 +47,7 @@
 import javax.naming.directory.Attributes;
 import javax.naming.ldap.LdapName;
 
+import org.opends.messages.Message;
 import org.opends.server.admin.AbstractManagedObjectDefinition;
 import org.opends.server.admin.Configuration;
 import org.opends.server.admin.ConfigurationClient;
@@ -59,7 +60,6 @@
 import org.opends.server.admin.ManagedObjectDefinition;
 import org.opends.server.admin.ManagedObjectNotFoundException;
 import org.opends.server.admin.ManagedObjectPath;
-import org.opends.server.admin.OptionalRelationDefinition;
 import org.opends.server.admin.PropertyDefinition;
 import org.opends.server.admin.PropertyException;
 import org.opends.server.admin.PropertyIsMandatoryException;
@@ -74,6 +74,8 @@
 import org.opends.server.admin.client.OperationRejectedException;
 import org.opends.server.admin.client.spi.Driver;
 import org.opends.server.admin.client.spi.PropertySet;
+import org.opends.server.admin.std.client.RootCfgClient;
+import org.opends.server.admin.std.meta.RootCfgDefn;
 
 
 
@@ -85,6 +87,9 @@
   // The LDAP connection.
   private final LDAPConnection connection;
 
+  // The LDAP management context.
+  private final LDAPManagementContext context;
+
   // The LDAP profile which should be used to construct LDAP
   // requests and decode LDAP responses.
   private final LDAPProfile profile;
@@ -95,12 +100,16 @@
    * Creates a new LDAP driver using the specified LDAP connection and
    * profile.
    *
+   * @param context
+   *          The LDAP management context.
    * @param connection
    *          The LDAP connection.
    * @param profile
    *          The LDAP profile.
    */
-  public LDAPDriver(LDAPConnection connection, LDAPProfile profile) {
+  public LDAPDriver(LDAPManagementContext context, LDAPConnection connection,
+      LDAPProfile profile) {
+    this.context = context;
     this.connection = connection;
     this.profile = profile;
   }
@@ -112,48 +121,6 @@
    */
   @Override
   public <C extends ConfigurationClient, S extends Configuration>
-  boolean deleteManagedObject(
-      ManagedObjectPath<?, ?> parent, InstantiableRelationDefinition<C, S> rd,
-      String name) throws IllegalArgumentException,
-      ManagedObjectNotFoundException, OperationRejectedException,
-      AuthorizationException, CommunicationException {
-    validateRelationDefinition(parent, rd);
-
-    if (!managedObjectExists(parent)) {
-      throw new ManagedObjectNotFoundException();
-    }
-
-    return removeManagedObject(parent.child(rd, name));
-  }
-
-
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public <C extends ConfigurationClient, S extends Configuration>
-  boolean deleteManagedObject(
-      ManagedObjectPath<?, ?> parent, OptionalRelationDefinition<C, S> rd)
-      throws IllegalArgumentException, ManagedObjectNotFoundException,
-      OperationRejectedException, AuthorizationException,
-      CommunicationException {
-    validateRelationDefinition(parent, rd);
-
-    if (!managedObjectExists(parent)) {
-      throw new ManagedObjectNotFoundException();
-    }
-
-    return removeManagedObject(parent.child(rd));
-  }
-
-
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public <C extends ConfigurationClient, S extends Configuration>
   ManagedObject<? extends C> getManagedObject(
       ManagedObjectPath<C, S> path) throws DefinitionDecodingException,
       ManagedObjectDecodingException, ManagedObjectNotFoundException,
@@ -289,6 +256,18 @@
    * {@inheritDoc}
    */
   @Override
+  public ManagedObject<RootCfgClient> getRootConfigurationManagedObject() {
+    return new LDAPManagedObject<RootCfgClient>(this,
+        RootCfgDefn.getInstance(), ManagedObjectPath.emptyPath(),
+        new PropertySet(), true, null);
+  }
+
+
+
+  /**
+   * {@inheritDoc}
+   */
+  @Override
   public <C extends ConfigurationClient, S extends Configuration>
   String[] listManagedObjects(
       ManagedObjectPath<?, ?> parent, InstantiableRelationDefinition<C, S> rd,
@@ -341,7 +320,7 @@
       return true;
     }
 
-    ManagedObjectPath<?,?> parent = path.parent();
+    ManagedObjectPath<?, ?> parent = path.parent();
     LdapName dn = LDAPNameBuilder.create(parent, profile);
     if (!entryExists(dn)) {
       throw new ManagedObjectNotFoundException();
@@ -354,6 +333,43 @@
 
 
   /**
+   * {@inheritDoc}
+   */
+  @Override
+  protected <C extends ConfigurationClient, S extends Configuration>
+  void deleteManagedObject(
+      ManagedObjectPath<C, S> path) throws OperationRejectedException,
+      AuthorizationException, CommunicationException {
+    // Delete the entry and any subordinate entries.
+    LdapName dn = LDAPNameBuilder.create(path, profile);
+    try {
+      connection.deleteSubtree(dn);
+    } catch (OperationNotSupportedException e) {
+      // Unwilling to perform.
+      if (e.getMessage() != null) {
+        throw new OperationRejectedException();
+      } else {
+        Message m = Message.raw("%s", e.getMessage());
+        throw new OperationRejectedException(m);
+      }
+    } catch (NamingException e) {
+      adaptNamingException(e);
+    }
+  }
+
+
+
+  /**
+   * {@inheritDoc}
+   */
+  @Override
+  protected LDAPManagementContext getManagementContext() {
+    return context;
+  }
+
+
+
+  /**
    * Adapts a naming exception to an appropriate admin client
    * exception.
    *
@@ -543,42 +559,4 @@
 
     return d.resolveManagedObjectDefinition(resolver);
   }
-
-
-
-  // Remove the named managed object.
-  private boolean removeManagedObject(ManagedObjectPath<?, ?> path)
-      throws CommunicationException, AuthorizationException,
-      OperationRejectedException, ManagedObjectNotFoundException {
-    if (!managedObjectExists(path)) {
-      return false;
-    }
-
-    // Delete the entry and any subordinate entries.
-    LdapName dn = LDAPNameBuilder.create(path, profile);
-    try {
-      connection.deleteSubtree(dn);
-    } catch (OperationNotSupportedException e) {
-      // Unwilling to perform.
-      throw new OperationRejectedException(e);
-    } catch (NamingException e) {
-      adaptNamingException(e);
-    }
-
-    return true;
-  }
-
-
-
-  // Validate that a relation definition belongs to this managed
-  // object.
-  private void validateRelationDefinition(ManagedObjectPath<?, ?> path,
-      RelationDefinition<?, ?> rd) throws IllegalArgumentException {
-    AbstractManagedObjectDefinition<?, ?> d = path.getManagedObjectDefinition();
-    RelationDefinition<?, ?> tmp = d.getRelationDefinition(rd.getName());
-    if (tmp != rd) {
-      throw new IllegalArgumentException("The relation " + rd.getName()
-          + " is not associated with a " + d.getName());
-    }
-  }
 }

--
Gitblit v1.10.0