From 85811b64468e9b7a876bd352a0299b904a53a3fb Mon Sep 17 00:00:00 2001
From: ludovicp <ludovicp@localhost>
Date: Mon, 31 May 2010 12:16:23 +0000
Subject: [PATCH] Fix for Issue #615. Add support for multiple object-class inheritance. Support added in the schema, core server and tools including Control-Panel

---
 opends/src/server/org/opends/server/backends/SchemaBackend.java |   32 +++++++++++++++++---------------
 1 files changed, 17 insertions(+), 15 deletions(-)

diff --git a/opends/src/server/org/opends/server/backends/SchemaBackend.java b/opends/src/server/org/opends/server/backends/SchemaBackend.java
index 5919973..7d813e1 100644
--- a/opends/src/server/org/opends/server/backends/SchemaBackend.java
+++ b/opends/src/server/org/opends/server/backends/SchemaBackend.java
@@ -22,7 +22,7 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2006-2009 Sun Microsystems, Inc.
+ *      Copyright 2006-2010 Sun Microsystems, Inc.
  */
 package org.opends.server.backends;
 
@@ -2020,8 +2020,7 @@
     // Make sure that the new objectclass doesn't reference an undefined
     // superior class, or an undefined required or optional attribute type,
     // and that none of them are OBSOLETE.
-    ObjectClass superiorClass = objectClass.getSuperiorClass();
-    if (superiorClass != null)
+    for(ObjectClass superiorClass : objectClass.getSuperiorClasses())
     {
       if (! schema.hasObjectClass(superiorClass.getOID()))
       {
@@ -2213,12 +2212,15 @@
     // other objectclass.
     for (ObjectClass oc : schema.getObjectClasses().values())
     {
-      ObjectClass superiorClass = oc.getSuperiorClass();
-      if ((superiorClass != null) && superiorClass.equals(removeClass))
+      for(ObjectClass superiorClass : oc.getSuperiorClasses())
       {
-        Message message = ERR_SCHEMA_MODIFY_REMOVE_OC_SUPERIOR_CLASS.get(
-            removeClass.getNameOrOID(), superiorClass.getNameOrOID());
-        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
+        if (superiorClass.equals(removeClass))
+        {
+          Message message = ERR_SCHEMA_MODIFY_REMOVE_OC_SUPERIOR_CLASS.get(
+              removeClass.getNameOrOID(), superiorClass.getNameOrOID());
+          throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
+                  message);
+        }
       }
     }
 
@@ -3755,15 +3757,15 @@
       return;
     }
 
-    ObjectClass superiorClass = objectClass.getSuperiorClass();
-    if ((superiorClass != null) &&
-        schemaFile.equals(superiorClass.getSchemaFile()) &&
-        (! addedClasses.contains(superiorClass)))
+    for(ObjectClass superiorClass : objectClass.getSuperiorClasses())
     {
-      addObjectClassToSchemaFile(schema, schemaFile, superiorClass, values,
-                                 addedClasses, depth+1);
+      if (schemaFile.equals(superiorClass.getSchemaFile()) &&
+          (! addedClasses.contains(superiorClass)))
+      {
+        addObjectClassToSchemaFile(schema, schemaFile, superiorClass, values,
+                                   addedClasses, depth+1);
+      }
     }
-
     values.add(AttributeValues.create(objectClassesType,
                                   objectClass.getDefinition()));
     addedClasses.add(objectClass);

--
Gitblit v1.10.0