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/20 14:19:27 UTC
svn commit: r1570184 - in /jackrabbit/oak/trunk:
oak-core/src/main/java/org/apache/jackrabbit/oak/api/
oak-core/src/main/java/org/apache/jackrabbit/oak/core/
oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/tree/
oak-core/src/test/java/org/apac...
Author: mduerig
Date: Thu Feb 20 13:19:27 2014
New Revision: 1570184
URL: http://svn.apache.org/r1570184
Log:
OAK-1441: o.a.j.o.api.Tree/Root allows access to hidden nodes
Introduce the HiddenTree class for representing tree instances of "hidden" nodes.
Added:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/HiddenTree.java
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Tree.java
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/main/java/org/apache/jackrabbit/oak/plugins/tree/ImmutableTree.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/core/MutableTreeTest.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/evaluation/TreeTest.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/lock/LockManagerImpl.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Tree.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Tree.java?rev=1570184&r1=1570183&r2=1570184&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Tree.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Tree.java Thu Feb 20 13:19:27 2014
@@ -92,9 +92,9 @@ public interface Tree {
*/
enum Status {
/**
- * Item is persisted
+ * Item is unchanged
*/
- EXISTING,
+ UNCHANGED,
/**
* Item is new
Added: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/HiddenTree.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/HiddenTree.java?rev=1570184&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/HiddenTree.java (added)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/HiddenTree.java Thu Feb 20 13:19:27 2014
@@ -0,0 +1,177 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.jackrabbit.oak.core;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.util.Collections;
+
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
+import org.apache.jackrabbit.oak.api.PropertyState;
+import org.apache.jackrabbit.oak.api.Tree;
+import org.apache.jackrabbit.oak.api.Type;
+import org.apache.jackrabbit.oak.commons.PathUtils;
+
+/**
+ * Instances of this class represent trees that are inaccessible because
+ * of the respective content would potentially be internal (hidden).
+ * <p>
+ * Calls to any of the mutator methods on this class throws an
+ * {@code IllegalStateException}.
+ */
+public class HiddenTree implements Tree {
+ private final Tree parent;
+ private final String name;
+
+ public HiddenTree(Tree parent, String name) {
+ this.parent = parent;
+ this.name = name;
+ }
+
+ @Nonnull
+ @Override
+ public String getName() {
+ return name;
+ }
+
+ @Override
+ public boolean isRoot() {
+ return false;
+ }
+
+ @Nonnull
+ @Override
+ public String getPath() {
+ return PathUtils.concat(parent.getPath(), name);
+ }
+
+ @Nonnull
+ @Override
+ public Status getStatus() {
+ return Status.UNCHANGED;
+ }
+
+ @Override
+ public boolean exists() {
+ return false;
+ }
+
+ @Nonnull
+ @Override
+ public Tree getParent() {
+ return parent;
+ }
+
+ @Override
+ public PropertyState getProperty(@Nonnull String name) {
+ return null;
+ }
+
+ @Override
+ public Status getPropertyStatus(@Nonnull String name) {
+ return null;
+ }
+
+ @Override
+ public boolean hasProperty(@Nonnull String name) {
+ return false;
+ }
+
+ @Override
+ public long getPropertyCount() {
+ return 0;
+ }
+
+ @Nonnull
+ @Override
+ public Iterable<? extends PropertyState> getProperties() {
+ return Collections.emptyList();
+ }
+
+ @Nonnull
+ @Override
+ public Tree getChild(@Nonnull String name) {
+ return new HiddenTree(this, checkNotNull(name));
+ }
+
+ @Override
+ public boolean hasChild(@Nonnull String name) {
+ return false;
+ }
+
+ @Override
+ public long getChildrenCount(long max) {
+ return 0;
+ }
+
+ @Nonnull
+ @Override
+ public Iterable<Tree> getChildren() {
+ return Collections.emptyList();
+ }
+
+ @Override
+ public boolean remove() {
+ return false;
+ }
+
+ @Nonnull
+ @Override
+ public Tree addChild(@Nonnull String name) {
+ throw nonExistingTree();
+ }
+
+ @Override
+ public void setOrderableChildren(boolean enable) {
+ throw nonExistingTree();
+ }
+
+ @Override
+ public boolean orderBefore(@Nullable String name) {
+ throw nonExistingTree();
+ }
+
+ @Override
+ public void setProperty(@Nonnull PropertyState property) {
+ throw nonExistingTree();
+ }
+
+ @Override
+ public <T> void setProperty(@Nonnull String name, @Nonnull T value) {
+ throw nonExistingTree();
+ }
+
+ @Override
+ public <T> void setProperty(@Nonnull String name, @Nonnull T value, Type<T> type) {
+ throw nonExistingTree();
+ }
+
+ @Override
+ public void removeProperty(@Nonnull String name) {
+ throw nonExistingTree();
+ }
+
+ private static IllegalStateException nonExistingTree() {
+ return new IllegalStateException("This tree does not exist");
+ }
+
+}
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=1570184&r1=1570183&r2=1570184&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 20 13:19:27 2014
@@ -78,8 +78,7 @@ class MutableTree extends AbstractTree {
//-----------------------------------------------------< AbstractTree >---
@Override
- protected MutableTree createChild(String name)
- throws IllegalArgumentException {
+ protected MutableTree createChild(String name) throws IllegalArgumentException {
return new MutableTree(root, this, name, pendingMoves);
}
@@ -149,7 +148,11 @@ class MutableTree extends AbstractTree {
@Override
public Tree getChild(String name) {
beforeRead();
- return createChild(name);
+ if (super.hasChild(name)) {
+ return createChild(name);
+ } else {
+ return new HiddenTree(this, name);
+ }
}
@Override
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=1570184&r1=1570183&r2=1570184&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 20 13:19:27 2014
@@ -24,7 +24,7 @@ import static com.google.common.base.Pre
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.UNCHANGED;
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;
@@ -195,7 +195,7 @@ public abstract class AbstractTree imple
} else if (nodeBuilder.isModified()) {
return MODIFIED;
} else {
- return EXISTING;
+ return UNCHANGED;
}
}
@@ -233,7 +233,7 @@ public abstract class AbstractTree imple
} else if (nodeBuilder.isReplaced(name)) {
return MODIFIED;
} else {
- return EXISTING;
+ return UNCHANGED;
}
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/tree/ImmutableTree.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/tree/ImmutableTree.java?rev=1570184&r1=1570183&r2=1570184&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/tree/ImmutableTree.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/tree/ImmutableTree.java Thu Feb 20 13:19:27 2014
@@ -114,7 +114,7 @@ public final class ImmutableTree extends
@Override
public Status getStatus() {
- return Status.EXISTING;
+ return Status.UNCHANGED;
}
@Override
@@ -135,7 +135,7 @@ public final class ImmutableTree extends
@Override
public Status getPropertyStatus(String name) {
if (hasProperty(name)) {
- return Status.EXISTING;
+ return Status.UNCHANGED;
} else {
return null;
}
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/core/MutableTreeTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/core/MutableTreeTest.java?rev=1570184&r1=1570183&r2=1570184&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/core/MutableTreeTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/core/MutableTreeTest.java Thu Feb 20 13:19:27 2014
@@ -290,18 +290,18 @@ public class MutableTreeTest extends Oak
assertEquals(Tree.Status.NEW, tree.getChild("new").getStatus());
root.commit();
- assertEquals(Tree.Status.EXISTING, tree.getChild("new").getStatus());
+ assertEquals(Tree.Status.UNCHANGED, tree.getChild("new").getStatus());
Tree added = tree.getChild("new");
added.addChild("another");
assertEquals(Tree.Status.MODIFIED, tree.getChild("new").getStatus());
root.commit();
- assertEquals(Tree.Status.EXISTING, tree.getChild("new").getStatus());
+ assertEquals(Tree.Status.UNCHANGED, tree.getChild("new").getStatus());
tree.getChild("new").getChild("another").remove();
assertEquals(Tree.Status.MODIFIED, tree.getChild("new").getStatus());
root.commit();
- assertEquals(Tree.Status.EXISTING, tree.getChild("new").getStatus());
+ assertEquals(Tree.Status.UNCHANGED, tree.getChild("new").getStatus());
assertFalse(tree.getChild("new").getChild("another").exists());
Tree x = root.getTree("/x");
@@ -331,12 +331,12 @@ public class MutableTreeTest extends Oak
assertEquals(Tree.Status.NEW, tree.getPropertyStatus("new"));
root.commit();
- assertEquals(Tree.Status.EXISTING, tree.getPropertyStatus("new"));
+ assertEquals(Tree.Status.UNCHANGED, tree.getPropertyStatus("new"));
tree.setProperty("new", "value2");
assertEquals(Tree.Status.MODIFIED, tree.getPropertyStatus("new"));
root.commit();
- assertEquals(Tree.Status.EXISTING, tree.getPropertyStatus("new"));
+ assertEquals(Tree.Status.UNCHANGED, tree.getPropertyStatus("new"));
tree.removeProperty("new");
assertNull(tree.getPropertyStatus("new"));
root.commit();
@@ -355,7 +355,7 @@ public class MutableTreeTest extends Oak
root.commit();
tree.getChild("one").getChild("two").addChild("three");
- assertEquals(Tree.Status.EXISTING, tree.getChild("one").getStatus());
+ assertEquals(Tree.Status.UNCHANGED, tree.getChild("one").getStatus());
assertEquals(Tree.Status.MODIFIED, tree.getChild("one").getChild("two").getStatus());
}
@@ -430,7 +430,7 @@ public class MutableTreeTest extends Oak
root.refresh();
- assertEquals(Status.EXISTING, x.getStatus());
+ assertEquals(Status.UNCHANGED, x.getStatus());
assertNull(x.getPropertyStatus("p"));
assertFalse(xx.exists());
}
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=1570184&r1=1570183&r2=1570184&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 20 13:19:27 2014
@@ -16,6 +16,13 @@
*/
package org.apache.jackrabbit.oak.security.authorization.evaluation;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
import java.util.List;
import com.google.common.collect.ImmutableList;
@@ -28,17 +35,11 @@ import org.apache.jackrabbit.oak.spi.sec
import org.junit.Before;
import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
public class TreeTest extends AbstractOakCoreTest {
private Root testRoot;
+ @Override
@Before
public void before() throws Exception {
super.before();
@@ -161,7 +162,7 @@ public class TreeTest extends AbstractOa
PropertyState p = a.getProperty(JcrConstants.JCR_PRIMARYTYPE);
assertNotNull(p);
- assertEquals(Tree.Status.EXISTING, a.getPropertyStatus(JcrConstants.JCR_PRIMARYTYPE));
+ assertEquals(Tree.Status.UNCHANGED, a.getPropertyStatus(JcrConstants.JCR_PRIMARYTYPE));
}
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/lock/LockManagerImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/lock/LockManagerImpl.java?rev=1570184&r1=1570183&r2=1570184&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/lock/LockManagerImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/lock/LockManagerImpl.java Thu Feb 20 13:19:27 2014
@@ -143,7 +143,7 @@ public class LockManagerImpl implements
@Override
protected NodeDelegate perform(NodeDelegate node)
throws RepositoryException {
- if (node.getStatus() != Status.EXISTING) {
+ if (node.getStatus() != Status.UNCHANGED) {
throw new InvalidItemStateException(
"Unable to lock a node with pending changes");
}
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java?rev=1570184&r1=1570183&r2=1570184&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java Thu Feb 20 13:19:27 2014
@@ -1207,7 +1207,7 @@ public class NodeImpl<T extends NodeDele
perform(new LockOperation<Void>(sessionDelegate, dlg) {
@Override
public Void perform(NodeDelegate node) throws RepositoryException {
- if (node.getStatus() != Status.EXISTING) {
+ if (node.getStatus() != Status.UNCHANGED) {
throw new LockException(
"Unable to lock a node with pending changes");
}