From 8532a5133e996e61765be126f8b4d25984745fd1 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.

---
 opends/src/server/org/opends/server/admin/client/spi/AbstractManagedObject.java |   37 +++++++++++++++++++++++++++++++++----
 1 files changed, 33 insertions(+), 4 deletions(-)

diff --git a/opends/src/server/org/opends/server/admin/client/spi/AbstractManagedObject.java b/opends/src/server/org/opends/server/admin/client/spi/AbstractManagedObject.java
index 44480e0..5f82e45 100644
--- a/opends/src/server/org/opends/server/admin/client/spi/AbstractManagedObject.java
+++ b/opends/src/server/org/opends/server/admin/client/spi/AbstractManagedObject.java
@@ -36,9 +36,11 @@
 import java.util.SortedSet;
 import java.util.TreeSet;
 
+import org.opends.messages.Message;
 import org.opends.server.admin.AbstractManagedObjectDefinition;
 import org.opends.server.admin.Configuration;
 import org.opends.server.admin.ConfigurationClient;
+import org.opends.server.admin.Constraint;
 import org.opends.server.admin.DefaultBehaviorException;
 import org.opends.server.admin.DefinitionDecodingException;
 import org.opends.server.admin.IllegalPropertyValueException;
@@ -57,11 +59,13 @@
 import org.opends.server.admin.RelationDefinition;
 import org.opends.server.admin.SingletonRelationDefinition;
 import org.opends.server.admin.client.AuthorizationException;
+import org.opends.server.admin.client.ClientConstraintHandler;
 import org.opends.server.admin.client.CommunicationException;
 import org.opends.server.admin.client.ConcurrentModificationException;
 import org.opends.server.admin.client.IllegalManagedObjectNameException;
 import org.opends.server.admin.client.ManagedObject;
 import org.opends.server.admin.client.ManagedObjectDecodingException;
+import org.opends.server.admin.client.ManagementContext;
 import org.opends.server.admin.client.MissingMandatoryPropertiesException;
 import org.opends.server.admin.client.OperationRejectedException;
 
@@ -150,6 +154,30 @@
       throw new MissingMandatoryPropertiesException(exceptions);
     }
 
+    // Now enforce any constraints.
+    List<Message> messages = new LinkedList<Message>();
+    boolean isAcceptable = true;
+    ManagementContext context = getDriver().getManagementContext();
+
+    for (Constraint constraint : definition.getAllConstraints()) {
+      for (ClientConstraintHandler handler : constraint
+          .getClientConstraintHandlers()) {
+        if (existsOnServer) {
+          if (!handler.isModifyAcceptable(context, this, messages)) {
+            isAcceptable = false;
+          }
+        } else {
+          if (!handler.isAddAcceptable(context, this, messages)) {
+            isAcceptable = false;
+          }
+        }
+      }
+    }
+
+    if (!isAcceptable) {
+      throw new OperationRejectedException(messages);
+    }
+
     // Commit the managed object.
     if (existsOnServer) {
       modifyExistingManagedObject();
@@ -497,8 +525,9 @@
    *           If the managed object's parent has been removed by
    *           another client.
    * @throws OperationRejectedException
-   *           If the server refuses to add this managed object due to
-   *           some server-side constraint which cannot be satisfied.
+   *           If the managed object cannot be added due to some
+   *           client-side or server-side constraint which cannot be
+   *           satisfied.
    * @throws AuthorizationException
    *           If the server refuses to add this managed object
    *           because the client does not have the correct
@@ -566,8 +595,8 @@
    *           If this managed object has been removed from the server
    *           by another client.
    * @throws OperationRejectedException
-   *           If the server refuses to modify this managed object due
-   *           to some server-side constraint which cannot be
+   *           If the managed object cannot be added due to some
+   *           client-side or server-side constraint which cannot be
    *           satisfied.
    * @throws AuthorizationException
    *           If the server refuses to modify this managed object

--
Gitblit v1.10.0