You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by md...@apache.org on 2014/02/06 18:23:15 UTC

svn commit: r1565361 - in /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak: core/MutableTree.java plugins/tree/AbstractTree.java

Author: mduerig
Date: Thu Feb  6 17:23:15 2014
New Revision: 1565361

URL: http://svn.apache.org/r1565361
Log:
OAK-842 : Incorrect interaction of orderable child nodes with permission evaluation
Partial undoing changes from r1565319: AbstractTree#getChildren need to call exists() in order to fixup potential missing moves as otherwise the call could return stale information. Also avoid casting by checking earlier for existence.

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/MutableTree.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/tree/AbstractTree.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/MutableTree.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/MutableTree.java?rev=1565361&r1=1565360&r2=1565361&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/MutableTree.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/MutableTree.java Thu Feb  6 17:23:15 2014
@@ -18,8 +18,18 @@
  */
 package org.apache.jackrabbit.oak.core;
 
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkState;
+import static com.google.common.collect.Iterables.filter;
+import static com.google.common.collect.Iterables.indexOf;
+import static org.apache.jackrabbit.oak.api.Type.NAME;
+import static org.apache.jackrabbit.oak.commons.PathUtils.elements;
+import static org.apache.jackrabbit.oak.commons.PathUtils.isAbsolute;
+
 import java.util.Collections;
 import java.util.Set;
+
 import javax.annotation.CheckForNull;
 import javax.annotation.Nonnull;
 
@@ -36,15 +46,6 @@ import org.apache.jackrabbit.oak.plugins
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
 import org.apache.jackrabbit.oak.util.PropertyBuilder;
 
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.base.Preconditions.checkState;
-import static com.google.common.collect.Iterables.filter;
-import static com.google.common.collect.Iterables.indexOf;
-import static org.apache.jackrabbit.oak.api.Type.NAME;
-import static org.apache.jackrabbit.oak.commons.PathUtils.elements;
-import static org.apache.jackrabbit.oak.commons.PathUtils.isAbsolute;
-
 class MutableTree extends AbstractTree {
 
     /**
@@ -103,7 +104,7 @@ class MutableTree extends AbstractTree {
     @Override
     public boolean exists() {
         beforeRead();
-        return internalExists();
+        return super.exists();
     }
 
     @Override
@@ -413,7 +414,7 @@ class MutableTree extends AbstractTree {
      */
     private void beforeWrite() throws IllegalStateException {
         beforeRead();
-        if (!internalExists()) {
+        if (!super.exists()) {
             throw new IllegalStateException("This tree does not exist");
         }
     }

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/tree/AbstractTree.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/tree/AbstractTree.java?rev=1565361&r1=1565360&r2=1565361&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/tree/AbstractTree.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/tree/AbstractTree.java Thu Feb  6 17:23:15 2014
@@ -19,7 +19,19 @@
 
 package org.apache.jackrabbit.oak.plugins.tree;
 
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Predicates.notNull;
+import static com.google.common.collect.Iterables.filter;
+import static com.google.common.collect.Iterables.size;
+import static com.google.common.collect.Iterables.transform;
+import static org.apache.jackrabbit.oak.api.Tree.Status.EXISTING;
+import static org.apache.jackrabbit.oak.api.Tree.Status.MODIFIED;
+import static org.apache.jackrabbit.oak.api.Tree.Status.NEW;
+import static org.apache.jackrabbit.oak.api.Type.NAME;
+import static org.apache.jackrabbit.oak.spi.state.NodeStateUtils.isHidden;
+
 import java.util.Iterator;
+
 import javax.annotation.Nonnull;
 
 import com.google.common.base.Function;
@@ -32,16 +44,6 @@ import org.apache.jackrabbit.oak.spi.sta
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
 
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.collect.Iterables.filter;
-import static com.google.common.collect.Iterables.size;
-import static com.google.common.collect.Iterables.transform;
-import static org.apache.jackrabbit.oak.api.Tree.Status.EXISTING;
-import static org.apache.jackrabbit.oak.api.Tree.Status.MODIFIED;
-import static org.apache.jackrabbit.oak.api.Tree.Status.NEW;
-import static org.apache.jackrabbit.oak.api.Type.NAME;
-import static org.apache.jackrabbit.oak.spi.state.NodeStateUtils.isHidden;
-
 /**
  * {@code AbstractTree} provides default implementations for most
  * read methods of {@code Tree}. Furthermore it handles the
@@ -153,10 +155,6 @@ public abstract class AbstractTree imple
         }
     }
 
-    protected boolean internalExists() {
-        return !isHidden(name) && nodeBuilder.exists();
-    }
-
     //---------------------------------------------------------------< Tree >---
 
     @Override
@@ -200,7 +198,7 @@ public abstract class AbstractTree imple
 
     @Override
     public boolean exists() {
-        return internalExists();
+        return !isHidden(name) && nodeBuilder.exists();
     }
 
     @Override
@@ -275,17 +273,13 @@ public abstract class AbstractTree imple
     @Override
     public Iterable<Tree> getChildren() {
         Iterable<Tree> children = transform(getChildNames(),
-                new Function<String, Tree>() {
-                    @Override
-                    public Tree apply(String name) {
-                        return createChild(name);
-                    }
-                });
-        return filter(children, new Predicate<Tree>() {
-            @Override
-            public boolean apply(Tree child) {
-                return ((AbstractTree) child).internalExists();
-            }
-        });
+            new Function<String, Tree>() {
+                @Override
+                public Tree apply(String name) {
+                    AbstractTree child = createChild(name);
+                    return child.exists() ? child : null;
+                }
+            });
+        return filter(children, notNull());
     }
 }