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 2013/03/07 12:52:43 UTC
svn commit: r1453789 - in
/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core:
IdentifierManager.java ReadOnlyTree.java TreeImpl.java
Author: mduerig
Date: Thu Mar 7 11:52:42 2013
New Revision: 1453789
URL: http://svn.apache.org/r1453789
Log:
OAK-101: implement identifier handling (byUUID, byIdentifier, etc)
avoid referring to inaccessible parents / properties
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/IdentifierManager.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ReadOnlyTree.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/TreeImpl.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/IdentifierManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/IdentifierManager.java?rev=1453789&r1=1453788&r2=1453789&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/IdentifierManager.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/IdentifierManager.java Thu Mar 7 11:52:42 2013
@@ -95,14 +95,12 @@ public class IdentifierManager {
*/
@Nonnull
public String getIdentifier(Tree tree) {
- PropertyState property = tree.getProperty(JcrConstants.JCR_UUID);
- if (property != null) {
- return property.getValue(STRING);
- } else if (tree.isRoot()) {
- return tree.getPath();
+ if (tree instanceof TreeImpl) {
+ return ((TreeImpl) tree).getIdentifier();
+ } else if (tree instanceof ReadOnlyTree) {
+ return ((ReadOnlyTree) tree).getIdentifier();
} else {
- // FIXME parent might not be accessible
- return PathUtils.concat(getIdentifier(tree.getParent()), tree.getName());
+ return tree.getPath();
}
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ReadOnlyTree.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ReadOnlyTree.java?rev=1453789&r1=1453788&r2=1453789&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ReadOnlyTree.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ReadOnlyTree.java Thu Mar 7 11:52:42 2013
@@ -23,16 +23,19 @@ import java.util.Iterator;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
+import org.apache.jackrabbit.JcrConstants;
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.api.Root;
import org.apache.jackrabbit.oak.api.Tree;
import org.apache.jackrabbit.oak.api.TreeLocation;
import org.apache.jackrabbit.oak.api.Type;
+import org.apache.jackrabbit.oak.commons.PathUtils;
import org.apache.jackrabbit.oak.spi.state.ChildNodeEntry;
import org.apache.jackrabbit.oak.spi.state.NodeState;
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkNotNull;
+import static org.apache.jackrabbit.oak.api.Type.STRING;
public class ReadOnlyTree implements Tree {
@@ -243,6 +246,20 @@ public class ReadOnlyTree implements Tre
throw new UnsupportedOperationException();
}
+ //------------------------------------------------------------< internal >---
+
+ @Nonnull
+ String getIdentifier() {
+ PropertyState property = state.getProperty(JcrConstants.JCR_UUID);
+ if (property != null) {
+ return property.getValue(STRING);
+ } else if (parent == null) {
+ return "/";
+ } else {
+ return PathUtils.concat(parent.getIdentifier(), name);
+ }
+ }
+
//-------------------------------------------------------< TreeLocation >---
private final class NodeLocation extends AbstractNodeLocation<ReadOnlyTree> {
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/TreeImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/TreeImpl.java?rev=1453789&r1=1453788&r2=1453789&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/TreeImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/TreeImpl.java Thu Mar 7 11:52:42 2013
@@ -30,10 +30,12 @@ import com.google.common.base.Function;
import com.google.common.base.Predicate;
import com.google.common.collect.Iterables;
import com.google.common.collect.Sets;
+import org.apache.jackrabbit.JcrConstants;
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.api.Tree;
import org.apache.jackrabbit.oak.api.TreeLocation;
import org.apache.jackrabbit.oak.api.Type;
+import org.apache.jackrabbit.oak.commons.PathUtils;
import org.apache.jackrabbit.oak.plugins.memory.MemoryPropertyBuilder;
import org.apache.jackrabbit.oak.plugins.memory.MultiStringPropertyState;
import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
@@ -43,6 +45,7 @@ import org.apache.jackrabbit.oak.spi.sta
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkNotNull;
+import static org.apache.jackrabbit.oak.api.Type.STRING;
import static org.apache.jackrabbit.oak.commons.PathUtils.elements;
public class TreeImpl implements Tree {
@@ -489,6 +492,18 @@ public class TreeImpl implements Tree {
nodeBuilder.setProperty(builder.getPropertyState());
}
+ @Nonnull
+ String getIdentifier() {
+ PropertyState property = internalGetProperty(JcrConstants.JCR_UUID);
+ if (property != null) {
+ return property.getValue(STRING);
+ } else if (parent == null) {
+ return "/";
+ } else {
+ return PathUtils.concat(parent.getIdentifier(), name);
+ }
+ }
+
//------------------------------------------------------------< private >---
private TreeImpl internalGetChild(String childName) {