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/DeleteSchemaElementsTask.java | 49 +++++++++++++++++++++++++++++++++++++------------
1 files changed, 37 insertions(+), 12 deletions(-)
diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/task/DeleteSchemaElementsTask.java b/opends/src/guitools/org/opends/guitools/controlpanel/task/DeleteSchemaElementsTask.java
index 2e27b76..61f3ad0 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/task/DeleteSchemaElementsTask.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/task/DeleteSchemaElementsTask.java
@@ -22,7 +22,7 @@
* CDDL HEADER END
*
*
- * Copyright 2008-2009 Sun Microsystems, Inc.
+ * Copyright 2008-2010 Sun Microsystems, Inc.
*/
package org.opends.guitools.controlpanel.task;
@@ -648,21 +648,27 @@
}
}
boolean hasSuperior = false;
- ObjectClass newSuperior = ocToDelete.getSuperiorClass();
- for (ObjectClass oc : providedOcsToDelete)
+ Set<ObjectClass> newSuperiors = new LinkedHashSet<ObjectClass>();
+ for(ObjectClass sup : ocToDelete.getSuperiorClasses())
{
- if (ocToDelete.getSuperiorClass().equals(oc))
+ boolean isFound = false;
+ for(ObjectClass oc: providedOcsToDelete)
{
- hasSuperior = true;
- newSuperior = oc.getSuperiorClass();
- while (newSuperior != null &&
- providedOcsToDelete.contains(newSuperior))
+ if(sup.equals(oc))
{
- newSuperior = newSuperior.getSuperiorClass();
+ hasSuperior = true;
+ isFound = true;
+ newSuperiors.add(getNewSuperior(oc));
+ break;
}
- break;
+ }
+ if(!isFound)
+ {
+ //Use the same super if not found in the list.
+ newSuperiors.add(sup);
}
}
+
if (containsAttribute || hasSuperior)
{
ArrayList<String> allNames = new ArrayList<String>();
@@ -693,7 +699,7 @@
allNames,
ocToDelete.getOID(),
ocToDelete.getDescription(),
- newSuperior,
+ newSuperiors,
required,
optional,
ocToDelete.getObjectClassType(),
@@ -709,6 +715,25 @@
}
+ private ObjectClass getNewSuperior(ObjectClass currentSup)
+ {
+ if(currentSup.getSuperiorClasses() == null ||
+ currentSup.getSuperiorClasses().isEmpty())
+ {
+ return currentSup;
+ }
+
+ if(providedOcsToDelete.contains(currentSup))
+ {
+ for(ObjectClass o : currentSup.getSuperiorClasses())
+ {
+ return getNewSuperior(o);
+ }
+ }
+ return null;
+ }
+
+
/**
* Returns an ordered set of the attributes that must be deleted.
* @param attrsToDelete the attributes to be deleted.
@@ -828,7 +853,7 @@
LinkedHashSet<ObjectClass> children = new LinkedHashSet<ObjectClass>();
for (ObjectClass oc : schema.getObjectClasses().values())
{
- if (objectClass.equals(oc.getSuperiorClass()))
+ if (oc.getSuperiorClasses().contains(objectClass))
{
children.addAll(getOrderedChildrenToDelete(oc, schema));
children.add(oc);
--
Gitblit v1.10.0