You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by ak...@apache.org on 2007/11/28 23:24:10 UTC

svn commit: r599167 - in /directory/apacheds/branches/bigbang: core-unit/src/test/java/org/apache/directory/server/core/changelog/DefaultChangeLogITest.java core/src/main/java/org/apache/directory/server/core/DefaultDirectoryService.java

Author: akarasulu
Date: Wed Nov 28 14:24:10 2007
New Revision: 599167

URL: http://svn.apache.org/viewvc?rev=599167&view=rev
Log:
making reverts work with moddn and modify

Modified:
    directory/apacheds/branches/bigbang/core-unit/src/test/java/org/apache/directory/server/core/changelog/DefaultChangeLogITest.java
    directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/DefaultDirectoryService.java

Modified: directory/apacheds/branches/bigbang/core-unit/src/test/java/org/apache/directory/server/core/changelog/DefaultChangeLogITest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/core-unit/src/test/java/org/apache/directory/server/core/changelog/DefaultChangeLogITest.java?rev=599167&r1=599166&r2=599167&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/core-unit/src/test/java/org/apache/directory/server/core/changelog/DefaultChangeLogITest.java (original)
+++ directory/apacheds/branches/bigbang/core-unit/src/test/java/org/apache/directory/server/core/changelog/DefaultChangeLogITest.java Wed Nov 28 14:24:10 2007
@@ -119,6 +119,28 @@
     }
 
 
+    public void testRevertRenameOperations() throws NamingException
+    {
+        AttributesImpl attrs = new AttributesImpl( "objectClass", "organizationalUnit", true );
+        attrs.put( "ou", "oldname" );
+        sysRoot.createSubcontext( "ou=oldname", attrs );
+
+        // tag after the addition before rename
+        Tag t0 = service.getChangeLog().tag();
+        assertNotNull( sysRoot.getAttributes( "ou=oldname" ) );
+
+        // rename the test entry and test that the rename occurred
+        sysRoot.rename( "ou=oldname", "ou=newname" );
+        assertNotPresent( sysRoot, "ou=oldname" );
+        assertNotNull( sysRoot.getAttributes( "ou=newname" ) );
+
+        // now revert and assert that the rename was reversed
+        service.revert( t0.getRevision() );
+        assertNotPresent( sysRoot, "ou=newname" );
+        assertNotNull( sysRoot.getAttributes( "ou=oldname" ) );
+    }
+
+
     private void assertNotPresent( DirContext ctx, String dn ) throws NamingException
     {
         try

Modified: directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/DefaultDirectoryService.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/DefaultDirectoryService.java?rev=599167&r1=599166&r2=599167&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/DefaultDirectoryService.java (original)
+++ directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/DefaultDirectoryService.java Wed Nov 28 14:24:10 2007
@@ -592,6 +592,9 @@
          * needs to synchronize on all changes while the revert is in progress.
          *
          * How about making this operation transactional?
+         *
+         * First of all just stop using JNDI and construct the operations to
+         * feed into the interceptor pipeline.
          */
 
         try
@@ -610,6 +613,23 @@
                         break;
                     case( ChangeType.DELETE_ORDINAL ):
                         ctx.destroySubcontext( reverse.getDn() );
+                        break;
+                    case( ChangeType.MODIFY_ORDINAL ):
+                        ctx.modifyAttributes( reverse.getDn(), reverse.getModificationItemsArray() );
+                        break;
+                    case( ChangeType.MODDN_ORDINAL ):
+                        // NOT BREAK - both ModDN and ModRDN handling is the same
+                    case( ChangeType.MODRDN_ORDINAL ):
+                        if ( reverse.isDeleteOldRdn() )
+                        {
+                            ctx.addToEnvironment( "java.naming.ldap.deleteRDN", "true" );
+                        }
+                        else
+                        {
+                            ctx.addToEnvironment( "java.naming.ldap.deleteRDN", "true" );
+                        }
+
+                        ctx.rename( reverse.getDn(), event.getForwardLdif().getDn() );
                         break;
                     default:
                         throw new NotImplementedException( "Reverts of change type " + reverse.getChangeType()