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/guitools/org/opends/guitools/controlpanel/task/ModifyObjectClassTask.java |   20 ++++++++++++++++----
 1 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/task/ModifyObjectClassTask.java b/opends/src/guitools/org/opends/guitools/controlpanel/task/ModifyObjectClassTask.java
index 3a46366..4541963 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/task/ModifyObjectClassTask.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/task/ModifyObjectClassTask.java
@@ -22,7 +22,7 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2009 Sun Microsystems, Inc.
+ *      Copyright 2009-2010 Sun Microsystems, Inc.
  */
 package org.opends.guitools.controlpanel.task;
 
@@ -164,11 +164,12 @@
   private ObjectClass getObjectClassToAdd(ObjectClass ocToDelete)
   {
     ObjectClass ocToAdd;
+    Set<ObjectClass> currentSups = ocToDelete.getSuperiorClasses();
     if (ocToDelete.equals(oldObjectClass))
     {
       ocToAdd = newObjectClass;
     }
-    else if (oldObjectClass.equals(ocToDelete.getSuperiorClass()))
+    else if (currentSups.contains(oldObjectClass))
     {
       ArrayList<String> allNames = new ArrayList<String>();
       for (String str : ocToDelete.getNormalizedNames())
@@ -177,13 +178,24 @@
       }
       Map<String, List<String>> extraProperties =
         DeleteSchemaElementsTask.cloneExtraProperties(ocToDelete);
-
+      Set<ObjectClass> newSups = new LinkedHashSet<ObjectClass>();
+      for(ObjectClass oc: currentSups)
+      {
+        if(oc.equals(oldObjectClass))
+        {
+          newSups.add(newObjectClass);
+        }
+        else
+        {
+          newSups.add(oc);
+        }
+      }
       ocToAdd = new ObjectClass("",
           ocToDelete.getPrimaryName(),
           allNames,
           ocToDelete.getOID(),
           ocToDelete.getDescription(),
-          newObjectClass,
+          newSups,
           ocToDelete.getRequiredAttributes(),
           ocToDelete.getOptionalAttributes(),
           ocToDelete.getObjectClassType(),

--
Gitblit v1.10.0