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());
}
}