You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by pa...@apache.org on 2007/10/02 16:55:31 UTC

svn commit: r581269 - /directory/studio/trunk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/model/hierarchy/HierarchyManager.java

Author: pamarcelot
Date: Tue Oct  2 07:55:30 2007
New Revision: 581269

URL: http://svn.apache.org/viewvc?rev=581269&view=rev
Log:
Improved HierarchyManager when removing an object class.

Modified:
    directory/studio/trunk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/model/hierarchy/HierarchyManager.java

Modified: directory/studio/trunk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/model/hierarchy/HierarchyManager.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/model/hierarchy/HierarchyManager.java?rev=581269&r1=581268&r2=581269&view=diff
==============================================================================
--- directory/studio/trunk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/model/hierarchy/HierarchyManager.java (original)
+++ directory/studio/trunk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/model/hierarchy/HierarchyManager.java Tue Oct  2 07:55:30 2007
@@ -20,6 +20,7 @@
 package org.apache.directory.studio.schemaeditor.model.hierarchy;
 
 
+import java.util.Arrays;
 import java.util.List;
 
 import org.apache.commons.collections.map.MultiValueMap;
@@ -376,7 +377,7 @@
      */
     public void objectClassRemoved( ObjectClassImpl oc )
     {
-        // TODO implement
+        removeObjectClass( oc );
     }
 
 
@@ -426,10 +427,113 @@
                     childrenMap.put( childSuperiorName.toLowerCase(), child );
                 }
             }
+        }
 
-            childrenMap.remove( at );
-            parentsMap.remove( at );
+        childrenMap.remove( at );
+        parentsMap.remove( at );
+    }
+
+
+    private void removeObjectClass( ObjectClassImpl oc )
+    {
+        // Removing the object class as child of its superiors
+        String[] superClassesNames = oc.getSuperClassesNames();
+        if ( ( superClassesNames != null ) && ( superClassesNames.length > 0 ) )
+        {
+            for ( String superClassName : superClassesNames )
+            {
+                if ( !"".equals( superClassName ) )
+                {
+                    ObjectClassImpl superClassOC = schemaHandler.getObjectClass( superClassName );
+                    if ( superClassOC == null )
+                    {
+                        childrenMap.remove( superClassName.toLowerCase(), oc );
+                        childrenMap.remove( root, oc );
+                    }
+                    else
+                    {
+                        childrenMap.remove( superClassOC, oc );
+                    }
+                }
+            }
+        }
+        else
+        {
+            if ( oc.getOid().equals( "2.5.6.0" ) )
+            // The given object class is the "top (2.5.6.0)" object class
+            {
+                childrenMap.remove( root, oc );
+            }
+            else
+            {
+                ObjectClassImpl topOC = schemaHandler.getObjectClass( "2.5.6.0" );
+                if ( topOC != null )
+                // The "top (2.5.6.0)" object class exists
+                {
+                    childrenMap.remove( topOC, oc );
+                }
+                else
+                // The "top (2.5.6.0)" object class does not exist
+                {
+                    childrenMap.remove( "2.5.6.0", oc );
+                }
+            }
         }
+
+        // Attaching each child (if there are children) to the RootObject
+        List<Object> children = getChildren( oc );
+        if ( children != null )
+        {
+            for ( Object child : children )
+            {
+                ObjectClassImpl childOC = ( ObjectClassImpl ) child;
+
+                parentsMap.remove( child, oc );
+
+                parentsMap.put( child, root );
+                childrenMap.put( root, child );
+                String[] childSuperClassesNames = childOC.getSuperClassesNames();
+                if ( ( childSuperClassesNames != null ) && ( childSuperClassesNames.length > 0 ) )
+                {
+                    String correctSuperClassName = getCorrectSuperClassName( oc, childSuperClassesNames );
+                    if ( correctSuperClassName != null )
+                    {
+                        parentsMap.put( child, correctSuperClassName.toLowerCase() );
+                        childrenMap.put( correctSuperClassName.toLowerCase(), child );
+                    }
+                }
+                else
+                {
+                    parentsMap.put( child, "2.5.6.0" );
+                    childrenMap.put( "2.5.6.0", child );
+                }
+            }
+        }
+
+        childrenMap.remove( oc );
+        parentsMap.remove( oc );
+    }
+
+
+    private String getCorrectSuperClassName( ObjectClassImpl oc, String[] childSuperClassesNames )
+    {
+        if ( childSuperClassesNames != null )
+        {
+            List<String> aliases = Arrays.asList( oc.getNames() );
+            if ( aliases != null )
+            {
+                for ( String childSuperClassName : childSuperClassesNames )
+                {
+                    if ( aliases.contains( childSuperClassName ) )
+                    {
+                        return childSuperClassName;
+                    }
+                }
+            }
+        }
+
+        // Default
+        return null;
     }