You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by ka...@apache.org on 2011/01/03 08:57:13 UTC

svn commit: r1054545 - in /directory/shared/branches/shared-AP/ldap/src: main/java/org/apache/directory/shared/ldap/util/tree/DnNode.java test/java/org/apache/directory/shared/ldap/util/tree/DnNodeTest.java

Author: kayyagari
Date: Mon Jan  3 07:57:13 2011
New Revision: 1054545

URL: http://svn.apache.org/viewvc?rev=1054545&view=rev
Log:
o added rename operation and a test

Modified:
    directory/shared/branches/shared-AP/ldap/src/main/java/org/apache/directory/shared/ldap/util/tree/DnNode.java
    directory/shared/branches/shared-AP/ldap/src/test/java/org/apache/directory/shared/ldap/util/tree/DnNodeTest.java

Modified: directory/shared/branches/shared-AP/ldap/src/main/java/org/apache/directory/shared/ldap/util/tree/DnNode.java
URL: http://svn.apache.org/viewvc/directory/shared/branches/shared-AP/ldap/src/main/java/org/apache/directory/shared/ldap/util/tree/DnNode.java?rev=1054545&r1=1054544&r2=1054545&view=diff
==============================================================================
--- directory/shared/branches/shared-AP/ldap/src/main/java/org/apache/directory/shared/ldap/util/tree/DnNode.java (original)
+++ directory/shared/branches/shared-AP/ldap/src/main/java/org/apache/directory/shared/ldap/util/tree/DnNode.java Mon Jan  3 07:57:13 2011
@@ -34,13 +34,13 @@ import org.slf4j.LoggerFactory;
 
 
 /**
- * An class storing nodes in a tree designed to map DNs.<br/>
+ * A class storing nodes in a tree designed to map DNs.<br/>
  * Branch nodes in this tree refers to child nodes. Leaf nodes in the tree
  * don't have any children. <br/>
  * A node may contain a reference to an object whose suffix is the path through the
  * nodes of the tree from the root. <br/>
  * A node may also have no attached element.<br/>
- * Each node is referenced by a RDN, and holds the full DN corresponding to its position<br/>
+ * Each child node is referenced by a RDN, and holds the full DN corresponding to its position<br/>
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  * @param <N> The type of node we store
@@ -830,6 +830,51 @@ public class DnNode<N> implements Clonea
 
     
     /**
+     * rename the DnNode's DN
+     * 
+     * @param newRdn the new RDN of this node
+     * @throws LdapException
+     */
+    public void rename( RDN newRdn ) throws LdapException
+    {
+        DN temp = nodeDn.remove( nodeDn.size() - 1 );
+        temp = temp.add( newRdn );
+
+        RDN oldRdn = nodeRdn;
+        
+        nodeRdn = temp.getRdn();
+        nodeDn = temp;
+        
+        if ( parent != null )
+        {
+            parent.children.remove( oldRdn );
+            parent.children.put( nodeRdn, this );
+        }
+        
+        updateAfterModDn( nodeDn );
+    }
+    
+    
+    /**
+     * update the children's DN based on the new parent DN created
+     * after a rename or move operation
+     * 
+     * @param newParentDn
+     */
+    private void updateAfterModDn( DN newParentDn )
+    {
+        if ( children != null )
+        {
+            for( DnNode<N> child : children.values() )
+            {
+                child.nodeDn = newParentDn.add( child.nodeRdn );
+                child.updateAfterModDn( child.nodeDn );
+            }
+        }
+    }
+    
+    
+    /**
      * {@inheritDoc}
      */
     public DnNode<N> clone()

Modified: directory/shared/branches/shared-AP/ldap/src/test/java/org/apache/directory/shared/ldap/util/tree/DnNodeTest.java
URL: http://svn.apache.org/viewvc/directory/shared/branches/shared-AP/ldap/src/test/java/org/apache/directory/shared/ldap/util/tree/DnNodeTest.java?rev=1054545&r1=1054544&r2=1054545&view=diff
==============================================================================
--- directory/shared/branches/shared-AP/ldap/src/test/java/org/apache/directory/shared/ldap/util/tree/DnNodeTest.java (original)
+++ directory/shared/branches/shared-AP/ldap/src/test/java/org/apache/directory/shared/ldap/util/tree/DnNodeTest.java Mon Jan  3 07:57:13 2011
@@ -838,4 +838,31 @@ public class DnNodeTest
         assertEquals( dn1, dnLookupTree.getParentWithElement( test ).getElement() );
         assertNull( dnLookupTree.getParentWithElement( org ) );
     }
+    
+    
+    @Test
+    public void testRename() throws Exception
+    {
+        DnNode<DN> rootNode = new DnNode<DN>();
+        DN dn = new DN( "dc=directory,dc=apache,dc=org" );
+        rootNode.add( dn );
+        
+        RDN childRdn = new RDN( "dc=org" );
+
+        DnNode<DN> child = rootNode.getChild( childRdn );
+        assertNotNull( child );
+
+        RDN newChildRdn = new RDN( "dc=neworg" );
+
+        child.rename( newChildRdn );
+        assertNull( rootNode.getChild( childRdn ) );
+        assertEquals( new DN( "dc=neworg" ), child.getDn() );
+        
+        DnNode<DN> child2 = child.getChild( new RDN( "dc=apache" ) );
+        assertEquals( new DN( "dc=apache,dc=neworg" ), child2.getDn() );
+        
+        assertEquals( new DN( "dc=directory,dc=apache,dc=neworg" ), child2.getChild( new RDN( "dc=directory" ) ).getDn() );
+        
+        assertNotNull( rootNode.getChild( newChildRdn ) );
+    }
 }