You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by an...@apache.org on 2007/01/17 14:56:40 UTC

svn commit: r497021 - /jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ChangeLog.java

Author: angela
Date: Wed Jan 17 05:56:39 2007
New Revision: 497021

URL: http://svn.apache.org/viewvc?view=rev&rev=497021
Log:
work in progress

- resolve todo: remove add-operations if new item gets removed again


Modified:
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ChangeLog.java

Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ChangeLog.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ChangeLog.java?view=diff&rev=497021&r1=497020&r2=497021
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ChangeLog.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ChangeLog.java Wed Jan 17 05:56:39 2007
@@ -17,6 +17,8 @@
 package org.apache.jackrabbit.jcr2spi.state;
 
 import org.apache.jackrabbit.jcr2spi.operation.Operation;
+import org.apache.jackrabbit.jcr2spi.operation.AddNode;
+import org.apache.jackrabbit.jcr2spi.operation.AddProperty;
 import org.apache.jackrabbit.jcr2spi.config.CacheBehaviour;
 
 import javax.jcr.nodetype.ConstraintViolationException;
@@ -232,9 +234,20 @@
                 if (previousStatus == Status.NEW) {
                     // was new and now removed again
                     addedStates.remove(state);
-                    // TODO: remove 'addNode' or 'setProperty' operation
                     deletedStates.remove(state);
+                    // remove operations performed on the removed state
                     removeAffectedOperations(state);
+                    // remove add-operation (parent affected) as well
+                    NodeState parent = state.getParent();
+                    if (parent != null && parent.getStatus() != Status.REMOVED) {
+                        for (Iterator it = operations.iterator(); it.hasNext();) {
+                            Operation op = (Operation) it.next();
+                            if ((op instanceof AddNode || op instanceof AddProperty)
+                                && op.getAffectedItemStates().contains(parent)) {
+                                it.remove();
+                            }
+                        }
+                    }
                 } else if (previousStatus == Status.EXISTING_REMOVED) {
                     // was removed and is now saved
                     deletedStates.remove(state);