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 2012/08/16 23:04:05 UTC
svn commit: r1374056 - in
/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr:
NodeDelegate.java NodeImpl.java SessionDelegate.java
Author: mduerig
Date: Thu Aug 16 21:04:04 2012
New Revision: 1374056
URL: http://svn.apache.org/viewvc?rev=1374056&view=rev
Log:
OAK-101: implement identifier handling (byUUID, byIdentifier, etc)
simplify/refactor internalGetReferences
Modified:
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeDelegate.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeImpl.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionDelegate.java
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeDelegate.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeDelegate.java?rev=1374056&r1=1374055&r2=1374056&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeDelegate.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeDelegate.java Thu Aug 16 21:04:04 2012
@@ -326,6 +326,7 @@ public class NodeDelegate extends ItemDe
return sessionDelegate.getTree(absPath);
}
+ @Nonnull
synchronized Tree getTree() throws InvalidItemStateException {
resolve();
if (tree == null) {
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeImpl.java?rev=1374056&r1=1374055&r2=1374056&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeImpl.java Thu Aug 16 21:04:04 2012
@@ -55,7 +55,6 @@ import javax.jcr.version.VersionHistory;
import com.google.common.base.Function;
import com.google.common.base.Predicate;
-import com.google.common.base.Predicates;
import com.google.common.collect.Iterables;
import com.google.common.collect.Iterators;
import org.apache.jackrabbit.commons.ItemNameMatcher;
@@ -226,8 +225,8 @@ public class NodeImpl extends ItemImpl<N
String grandParentPath = PathUtils.getParentPath(parentPath);
NodeDelegate grandParent = dlg.getChild(grandParentPath);
if (grandParent != null) {
- String propname = PathUtils.getName(parentPath);
- if (grandParent.getProperty(propname) != null) {
+ String propName = PathUtils.getName(parentPath);
+ if (grandParent.getProperty(propName) != null) {
throw new ConstraintViolationException("Can't add new node to property.");
}
}
@@ -750,37 +749,28 @@ public class NodeImpl extends ItemImpl<N
return internalGetReferences(name, true);
}
- private PropertyIterator internalGetReferences(String name, boolean weak) throws RepositoryException {
- final Set<String> propertyOakPaths;
- if (weak) {
- propertyOakPaths = sessionDelegate.getIdManager().getWeakReferences(dlg.getTree(), name);
- } else {
- propertyOakPaths = sessionDelegate.getIdManager().getReferences(dlg.getTree(), name);
- }
+ private PropertyIterator internalGetReferences(final String name, final boolean weak) throws RepositoryException {
+ return sessionDelegate.perform(new SessionOperation<PropertyIterator>() {
+ @Override
+ public PropertyIterator perform() throws InvalidItemStateException {
+ IdentifierManager idManager = sessionDelegate.getIdManager();
- final Iterable<Property> properties = Iterables.transform(
- propertyOakPaths,
- new Function<String, Property>() {
- @Override
- public Property apply(String oakPath) {
- // FIXME: should use sessionDelegate.getProperty(oakPath)
- // FIXME: avoid converting oak-path to jcr-path and back and to avoid
- // FIXME: using jcr-api calls internally.
- try {
- return sessionDelegate.getSession().getProperty(sessionDelegate.getNamePathMapper().getJcrPath(oakPath));
- } catch (RepositoryException e) {
- log.debug(e.getMessage());
- return null;
+ Set<String> propertyOakPaths = weak
+ ? idManager.getWeakReferences(dlg.getTree(), name)
+ : idManager.getReferences(dlg.getTree(), name);
+
+ Iterable<Property> properties = Iterables.transform(
+ propertyOakPaths,
+ new Function<String, Property>() {
+ @Override
+ public Property apply(String oakPath) {
+ PropertyDelegate pd = sessionDelegate.getProperty(oakPath);
+ return pd == null ? null : new PropertyImpl(pd);
}
}
- }
- );
+ );
- return sessionDelegate.perform(new SessionOperation<PropertyIterator>() {
- @Override
- public PropertyIterator perform() {
- return new PropertyIteratorAdapter(
- Iterables.filter(properties, Predicates.<Property>notNull()).iterator(), propertyOakPaths.size());
+ return new PropertyIteratorAdapter(properties.iterator(), propertyOakPaths.size());
}
});
}
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionDelegate.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionDelegate.java?rev=1374056&r1=1374055&r2=1374056&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionDelegate.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionDelegate.java Thu Aug 16 21:04:04 2012
@@ -18,6 +18,7 @@ package org.apache.jackrabbit.oak.jcr;
import java.io.IOException;
import java.util.concurrent.ScheduledExecutorService;
+
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
import javax.jcr.ItemExistsException;
@@ -39,8 +40,9 @@ import org.apache.jackrabbit.oak.api.Cha
import org.apache.jackrabbit.oak.api.CommitFailedException;
import org.apache.jackrabbit.oak.api.ConflictHandler;
import org.apache.jackrabbit.oak.api.ContentSession;
-import org.apache.jackrabbit.oak.api.SessionQueryEngine;
+import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.api.Root;
+import org.apache.jackrabbit.oak.api.SessionQueryEngine;
import org.apache.jackrabbit.oak.api.Tree;
import org.apache.jackrabbit.oak.commons.PathUtils;
import org.apache.jackrabbit.oak.core.DefaultConflictHandler;
@@ -193,6 +195,22 @@ public class SessionDelegate {
return (tree == null) ? null : new NodeDelegate(this, tree);
}
+ @CheckForNull
+ /**
+ * {@code PropertyDelegate} at the given path
+ * @param path Oak path
+ * @return The {@code PropertyDelegate} at {@code path} or {@code null} if
+ * none exists or not accessible.
+ */
+ public PropertyDelegate getProperty(String path) {
+ String parentPath = PathUtils.getParentPath(path);
+ String name = PathUtils.getName(path);
+
+ Tree parent = getTree(parentPath);
+ PropertyState propertyState = parent == null ? null : parent.getProperty(name);
+ return propertyState == null ? null : new PropertyDelegate(this, parent, propertyState);
+ }
+
@Nonnull
public ValueFactoryImpl getValueFactory() {
return valueFactory;