From 1ba9c4316ed7e368f8d0c32e71a6f2fde5669d77 Mon Sep 17 00:00:00 2001
From: ludovicp <ludovicp@localhost>
Date: Mon, 31 May 2010 12:48:19 +0000
Subject: [PATCH] Fix for issue #4536. Close JNDI enumerations to avoid unbinding and closing underlying LDAP connection. Fixes in all CLI and control panel.

---
 opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/task/DeleteSchemaElementsTask.java |   41 ++++++++++++++++++++++++-----------------
 1 files changed, 24 insertions(+), 17 deletions(-)

diff --git a/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/task/DeleteSchemaElementsTask.java b/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/task/DeleteSchemaElementsTask.java
index 61f3ad0..a670029 100644
--- a/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/task/DeleteSchemaElementsTask.java
+++ b/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/task/DeleteSchemaElementsTask.java
@@ -649,20 +649,20 @@
     }
     boolean hasSuperior = false;
     Set<ObjectClass> newSuperiors = new LinkedHashSet<ObjectClass>();
-    for(ObjectClass sup : ocToDelete.getSuperiorClasses())
+    for (ObjectClass sup : ocToDelete.getSuperiorClasses())
     {
       boolean isFound = false;
-      for(ObjectClass oc: providedOcsToDelete)
+      for (ObjectClass oc: providedOcsToDelete)
       {
         if(sup.equals(oc))
         {
           hasSuperior = true;
           isFound = true;
-          newSuperiors.add(getNewSuperior(oc));
+          newSuperiors.addAll(getNewSuperiors(oc));
           break;
         }
       }
-      if(!isFound)
+      if (!isFound)
       {
         //Use the same super if not found in the list.
         newSuperiors.add(sup);
@@ -715,22 +715,29 @@
   }
 
 
-  private ObjectClass getNewSuperior(ObjectClass currentSup)
+  private Set<ObjectClass> getNewSuperiors(ObjectClass currentSup)
   {
-    if(currentSup.getSuperiorClasses() == null ||
-            currentSup.getSuperiorClasses().isEmpty())
-     {
-       return currentSup;
-     }
-
-     if(providedOcsToDelete.contains(currentSup))
-     {
-      for(ObjectClass o : currentSup.getSuperiorClasses())
+    Set<ObjectClass> newSuperiors = new LinkedHashSet<ObjectClass>();
+    if (currentSup.getSuperiorClasses() == null ||
+        currentSup.getSuperiorClasses().isEmpty())
+    {
+      // Nothing to do
+    }
+    else
+    {
+      for (ObjectClass o : currentSup.getSuperiorClasses())
       {
-       return getNewSuperior(o);
+        if (providedOcsToDelete.contains(o))
+        {
+          newSuperiors.addAll(getNewSuperiors(o));
+        }
+        else
+        {
+          newSuperiors.add(o);
+        }
       }
-     }
-     return null;
+    }
+    return newSuperiors;
   }
 
 

--
Gitblit v1.10.0