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 an...@apache.org on 2014/02/06 17:12:06 UTC

svn commit: r1565319 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/oak/core/ main/java/org/apache/jackrabbit/oak/plugins/tree/ test/java/org/apache/jackrabbit/oak/security/authorization/evaluation/

Author: angela
Date: Thu Feb  6 16:12:05 2014
New Revision: 1565319

URL: http://svn.apache.org/r1565319
Log:
OAK-842 : Incorrect interaction of orderable child nodes with permission evaluation

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
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/evaluation/TreeTest.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=1565319&r1=1565318&r2=1565319&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 16:12:05 2014
@@ -44,7 +44,6 @@ import static com.google.common.collect.
 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 static org.apache.jackrabbit.oak.spi.state.NodeStateUtils.isHidden;
 
 class MutableTree extends AbstractTree {
 
@@ -104,7 +103,7 @@ class MutableTree extends AbstractTree {
     @Override
     public boolean exists() {
         beforeRead();
-        return isVisible();
+        return internalExists();
     }
 
     @Override
@@ -174,7 +173,6 @@ class MutableTree extends AbstractTree {
         if (parent != null && parent.hasChild(name)) {
             nodeBuilder.remove();
             if (parent.hasOrderableChildren()) {
-                // FIXME (OAK-842) child order not updated when parent is not accessible
                 parent.nodeBuilder.setProperty(
                         PropertyBuilder.copy(NAME, parent.nodeBuilder.getProperty(TreeConstants.OAK_CHILD_ORDER))
                                 .removeValue(name)
@@ -425,21 +423,11 @@ class MutableTree extends AbstractTree {
      */
     private void beforeWrite() throws IllegalStateException {
         beforeRead();
-        if (!isVisible()) {
+        if (!internalExists()) {
             throw new IllegalStateException("This tree does not exist");
         }
     }
 
-    /**
-     * Internal method for checking whether this node exists and is visible
-     * (i.e. not hidden).
-     *
-     * @return {@code true} if the node is visible, {@code false} if not
-     */
-    private boolean isVisible() {
-        return !isHidden(name) && nodeBuilder.exists();
-    }
-
     private boolean applyPendingMoves() {
         boolean movesApplied = false;
         if (parent != null) {

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=1565319&r1=1565318&r2=1565319&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 16:12:05 2014
@@ -153,6 +153,10 @@ public abstract class AbstractTree imple
         }
     }
 
+    protected boolean internalExists() {
+        return !isHidden(name) && nodeBuilder.exists();
+    }
+
     //---------------------------------------------------------------< Tree >---
 
     @Override
@@ -196,7 +200,7 @@ public abstract class AbstractTree imple
 
     @Override
     public boolean exists() {
-        return !isHidden(name) && nodeBuilder.exists();
+        return internalExists();
     }
 
     @Override
@@ -270,18 +274,18 @@ public abstract class AbstractTree imple
 
     @Override
     public Iterable<Tree> getChildren() {
-        return transform(
-                filter(getChildNames(), new Predicate<String>() {
-                    @Override
-                    public boolean apply(String name) {
-                        return !isHidden(name);
-                    }
-                }),
+        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();
+            }
+        });
     }
 }

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/evaluation/TreeTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/evaluation/TreeTest.java?rev=1565319&r1=1565318&r2=1565319&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/evaluation/TreeTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/evaluation/TreeTest.java Thu Feb  6 16:12:05 2014
@@ -32,6 +32,7 @@ import static org.junit.Assert.assertEqu
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
 
 public class TreeTest extends AbstractOakCoreTest {
 
@@ -110,6 +111,31 @@ public class TreeTest extends AbstractOa
     }
 
     @Test
+    public void testGetChildren() throws Exception {
+        for (Tree t : testRoot.getTree("/a").getChildren()) {
+            if (!"b".equals(t.getName())) {
+                fail("Child " + t.getName() + " should not be accessible.");
+            }
+        }
+    }
+
+    /**
+     * @see <a href="https://issues.apache.org/jira/browse/OAK-842">OAK-842</a>
+     */
+    @Test
+    public void testOrderableChildren() throws Exception {
+        Tree a = root.getTree("/a");
+        a.setOrderableChildren(true);
+
+        testRoot.refresh();
+        for (Tree t : testRoot.getTree("/a").getChildren()) {
+            if (!"b".equals(t.getName())) {
+                fail("Child " + t.getName() + " should not be accessible.");
+            }
+        }
+    }
+
+    @Test
     public void testHasProperty() throws Exception {
         // TODO
     }