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/13 17:29:13 UTC
svn commit: r1456035 - in /jackrabbit/oak/trunk:
oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/
oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/
oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/
oak-jcr/src/main/java/org/a...
Author: mduerig
Date: Wed Mar 13 16:29:12 2013
New Revision: 1456035
URL: http://svn.apache.org/r1456035
Log:
OAK-672: Avoid JCR APIs calling other JCR APIs
- Don't return implementation objects from SessionContext
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/ValueFactoryImpl.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/ItemImpl.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/PropertyImpl.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/RepositoryImpl.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionContext.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionImpl.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/WorkspaceImpl.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryResultImpl.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/version/VersionImpl.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/ValueFactoryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/ValueFactoryImpl.java?rev=1456035&r1=1456034&r2=1456035&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/ValueFactoryImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/ValueFactoryImpl.java Wed Mar 13 16:29:12 2013
@@ -81,26 +81,14 @@ public class ValueFactoryImpl implements
}
/**
- * Utility method for creating a {@code Value} based on a {@code PropertyState}.
- * @param property The property state
- * @return New {@code Value} instance
- * @throws IllegalArgumentException if {@code property.isArray()} is {@code true}.
- */
- public Value createValue(PropertyState property) {
- return new ValueImpl(property, namePathMapper);
- }
-
- public static Value createValue(PropertyValue property, NamePathMapper namePathMapper) {
- return new ValueImpl(PropertyValues.create(property), namePathMapper);
- }
-
- /**
* Utility method for creating a {@code Value} based on a {@code PropertyValue}.
* @param property The property value
+ * @param namePathMapper The name/path mapping used for converting JCR names/paths to
+ * the internal representation.
* @return New {@code Value} instance
* @throws IllegalArgumentException if {@code property.isArray()} is {@code true}.
*/
- public Value createValue(PropertyValue property) {
+ public static Value createValue(PropertyValue property, NamePathMapper namePathMapper) {
return new ValueImpl(PropertyValues.create(property), namePathMapper);
}
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/ItemImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/ItemImpl.java?rev=1456035&r1=1456034&r2=1456035&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/ItemImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/ItemImpl.java Wed Mar 13 16:29:12 2013
@@ -22,6 +22,7 @@ import javax.jcr.Item;
import javax.jcr.Node;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
+import javax.jcr.ValueFactory;
import javax.jcr.nodetype.ConstraintViolationException;
import javax.jcr.nodetype.ItemDefinition;
import javax.jcr.nodetype.NodeTypeManager;
@@ -32,7 +33,6 @@ import org.apache.jackrabbit.oak.jcr.del
import org.apache.jackrabbit.oak.jcr.delegate.SessionOperation;
import org.apache.jackrabbit.oak.namepath.NamePathMapper;
import org.apache.jackrabbit.oak.plugins.nodetype.DefinitionProvider;
-import org.apache.jackrabbit.oak.plugins.value.ValueFactoryImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -237,7 +237,7 @@ abstract class ItemImpl<T extends ItemDe
* @return the value factory
*/
@Nonnull
- ValueFactoryImpl getValueFactory() {
+ ValueFactory getValueFactory() {
return sessionContext.getValueFactory();
}
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=1456035&r1=1456034&r2=1456035&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 Wed Mar 13 16:29:12 2013
@@ -85,6 +85,7 @@ import org.apache.jackrabbit.oak.plugins
import org.apache.jackrabbit.oak.plugins.nodetype.EffectiveNodeType;
import org.apache.jackrabbit.oak.plugins.nodetype.EffectiveNodeTypeProvider;
import org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants;
+import org.apache.jackrabbit.oak.plugins.value.ValueFactoryImpl;
import org.apache.jackrabbit.oak.util.TODO;
import org.apache.jackrabbit.value.ValueHelper;
import org.slf4j.Logger;
@@ -997,7 +998,7 @@ public class NodeImpl<T extends NodeDele
JcrConstants.JCR_MIXINTYPES, Collections.singletonList(value)));
} else {
PropertyState property = mixins.getMultiState();
- List<Value> values = getValueFactory().createValues(property);
+ List<Value> values = ValueFactoryImpl.createValues(property, sessionContext.getNamePathMapper());
if (!values.contains(value)) {
values.add(value);
nodeModified = true;
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/PropertyImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/PropertyImpl.java?rev=1456035&r1=1456034&r2=1456035&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/PropertyImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/PropertyImpl.java Wed Mar 13 16:29:12 2013
@@ -44,6 +44,7 @@ import org.apache.jackrabbit.oak.jcr.del
import org.apache.jackrabbit.oak.jcr.delegate.PropertyDelegate;
import org.apache.jackrabbit.oak.jcr.delegate.SessionOperation;
import org.apache.jackrabbit.oak.plugins.memory.PropertyStates;
+import org.apache.jackrabbit.oak.plugins.value.ValueFactoryImpl;
import org.apache.jackrabbit.value.ValueHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -365,7 +366,7 @@ public class PropertyImpl extends ItemIm
@Override
public Value perform() throws RepositoryException {
- return getValueFactory().createValue(dlg.getSingleState());
+ return ValueFactoryImpl.createValue(dlg.getSingleState(), sessionContext.getNamePathMapper());
}
});
}
@@ -381,7 +382,7 @@ public class PropertyImpl extends ItemIm
@Override
public List<Value> perform() throws RepositoryException {
- return getValueFactory().createValues(dlg.getMultiState());
+ return ValueFactoryImpl.createValues(dlg.getMultiState(), sessionContext.getNamePathMapper());
}
}).toArray(NO_VALUES);
}
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/RepositoryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/RepositoryImpl.java?rev=1456035&r1=1456034&r2=1456035&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/RepositoryImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/RepositoryImpl.java Wed Mar 13 16:29:12 2013
@@ -193,5 +193,4 @@ public class RepositoryImpl implements R
return executor;
}
-
}
\ No newline at end of file
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionContext.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionContext.java?rev=1456035&r1=1456034&r2=1456035&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionContext.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionContext.java Wed Mar 13 16:29:12 2013
@@ -5,7 +5,11 @@ import java.util.Map;
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
import javax.jcr.PathNotFoundException;
+import javax.jcr.Repository;
import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+import javax.jcr.ValueFactory;
+import javax.jcr.Workspace;
import javax.jcr.lock.LockManager;
import javax.jcr.nodetype.NodeTypeManager;
import javax.jcr.observation.ObservationManager;
@@ -20,6 +24,7 @@ import org.apache.jackrabbit.api.securit
import org.apache.jackrabbit.oak.api.Root;
import org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate;
import org.apache.jackrabbit.oak.namepath.LocalNameMapper;
+import org.apache.jackrabbit.oak.namepath.NamePathMapper;
import org.apache.jackrabbit.oak.namepath.NamePathMapperImpl;
import org.apache.jackrabbit.oak.plugins.name.Namespaces;
import org.apache.jackrabbit.oak.plugins.nodetype.DefinitionProvider;
@@ -36,8 +41,8 @@ import static com.google.common.base.Pre
public abstract class SessionContext {
private final RepositoryImpl repository;
private final SessionDelegate delegate;
- private final NamePathMapperImpl namePathMapper;
- private final ValueFactoryImpl valueFactory;
+ private final NamePathMapper namePathMapper;
+ private final ValueFactory valueFactory;
private AccessControlManager accessControlManager;
private PrincipalManager principalManager;
@@ -48,7 +53,7 @@ public abstract class SessionContext {
private ObservationManagerImpl observationManager;
private SessionContext(RepositoryImpl repository, SessionDelegate delegate,
- NamePathMapperImpl namePathMapper, ValueFactoryImpl valueFactory) {
+ NamePathMapper namePathMapper, ValueFactory valueFactory) {
this.delegate = delegate;
this.repository = repository;
this.namePathMapper = namePathMapper;
@@ -74,18 +79,18 @@ public abstract class SessionContext {
private final WorkspaceImpl workspace = new WorkspaceImpl(this);
@Override
- public SessionImpl getSession() {
+ public Session getSession() {
return session;
}
@Override
- public WorkspaceImpl getWorkspace() {
+ public WorkspaceImpl getWorkspaceInternal() {
return workspace;
}
};
}
- public RepositoryImpl getRepository() {
+ public Repository getRepository() {
return repository;
}
@@ -93,39 +98,43 @@ public abstract class SessionContext {
return delegate;
}
- public abstract SessionImpl getSession();
+ public abstract Session getSession();
- public abstract WorkspaceImpl getWorkspace();
+ protected abstract WorkspaceImpl getWorkspaceInternal();
+
+ public Workspace getWorkspace() {
+ return getWorkspaceInternal();
+ }
public QueryManager getQueryManager() throws RepositoryException {
- return getWorkspace().getQueryManager();
+ return getWorkspaceInternal().getQueryManager();
}
public LockManager getLockManager() {
- return getWorkspace().getLockManager();
+ return getWorkspaceInternal().getLockManager();
}
public NodeTypeManager getNodeTypeManager() {
- return getWorkspace().getNodeTypeManager();
+ return getWorkspaceInternal().getNodeTypeManager();
}
public VersionManager getVersionManager() throws RepositoryException {
- return getWorkspace().getVersionManager();
+ return getWorkspaceInternal().getVersionManager();
}
public EffectiveNodeTypeProvider getEffectiveNodeTypeProvider() {
- return getWorkspace().getReadWriteNodeTypeManager();
+ return getWorkspaceInternal().getReadWriteNodeTypeManager();
}
public DefinitionProvider getDefinitionProvider() {
- return getWorkspace().getReadWriteNodeTypeManager();
+ return getWorkspaceInternal().getReadWriteNodeTypeManager();
}
- public NamePathMapperImpl getNamePathMapper() {
+ public NamePathMapper getNamePathMapper() {
return namePathMapper;
}
- public ValueFactoryImpl getValueFactory() {
+ public ValueFactory getValueFactory() {
return valueFactory;
}
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionImpl.java?rev=1456035&r1=1456034&r2=1456035&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionImpl.java Wed Mar 13 16:29:12 2013
@@ -89,13 +89,17 @@ public class SessionImpl extends Abstrac
this.namespaces = namespaces;
}
- public void checkProtectedNodes(String... absJcrPaths) throws RepositoryException {
+ public static void checkProtectedNodes(Session session, String... absJcrPaths) throws RepositoryException {
for (String absPath : absJcrPaths) {
- NodeImpl<?> node = (NodeImpl<?>) getNode(absPath);
+ NodeImpl<?> node = (NodeImpl<?>) session.getNode(absPath);
node.checkProtected();
}
}
+ public void checkProtectedNodes(String... absJcrPaths) throws RepositoryException {
+ checkProtectedNodes(this, absJcrPaths);
+ }
+
//------------------------------------------------------------< Session >---
@Override
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/WorkspaceImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/WorkspaceImpl.java?rev=1456035&r1=1456034&r2=1456035&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/WorkspaceImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/WorkspaceImpl.java Wed Mar 13 16:29:12 2013
@@ -23,6 +23,7 @@ import javax.annotation.Nonnull;
import javax.jcr.NamespaceRegistry;
import javax.jcr.PathNotFoundException;
import javax.jcr.RepositoryException;
+import javax.jcr.Session;
import javax.jcr.UnsupportedRepositoryOperationException;
import javax.jcr.ValueFactory;
import javax.jcr.lock.LockManager;
@@ -102,7 +103,7 @@ public class WorkspaceImpl implements Ja
//----------------------------------------------------------< Workspace >---
@Override
@Nonnull
- public SessionImpl getSession() {
+ public Session getSession() {
return sessionContext.getSession();
}
@@ -128,7 +129,8 @@ public class WorkspaceImpl implements Ja
throw new UnsupportedRepositoryOperationException("Not implemented.");
}
- getSession().checkProtectedNodes(Text.getRelativeParent(srcAbsPath, 1), Text.getRelativeParent(destAbsPath, 1));
+ SessionImpl.checkProtectedNodes(
+ getSession(), Text.getRelativeParent(srcAbsPath, 1), Text.getRelativeParent(destAbsPath, 1));
String oakPath = getOakPathKeepIndexOrThrowNotFound(destAbsPath);
String oakName = PathUtils.getName(oakPath);
@@ -150,7 +152,8 @@ public class WorkspaceImpl implements Ja
public void clone(String srcWorkspace, String srcAbsPath, String destAbsPath, boolean removeExisting) throws RepositoryException {
ensureIsAlive();
- getSession().checkProtectedNodes(Text.getRelativeParent(srcAbsPath, 1), Text.getRelativeParent(destAbsPath, 1));
+ SessionImpl.checkProtectedNodes(
+ getSession(), Text.getRelativeParent(srcAbsPath, 1), Text.getRelativeParent(destAbsPath, 1));
// TODO
throw new UnsupportedRepositoryOperationException("Not implemented.");
@@ -160,7 +163,8 @@ public class WorkspaceImpl implements Ja
public void move(String srcAbsPath, String destAbsPath) throws RepositoryException {
ensureIsAlive();
- getSession().checkProtectedNodes(Text.getRelativeParent(srcAbsPath, 1), Text.getRelativeParent(destAbsPath, 1));
+ SessionImpl.checkProtectedNodes(
+ getSession(), Text.getRelativeParent(srcAbsPath, 1), Text.getRelativeParent(destAbsPath, 1));
String oakPath = getOakPathKeepIndexOrThrowNotFound(destAbsPath);
String oakName = PathUtils.getName(oakPath);
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryResultImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryResultImpl.java?rev=1456035&r1=1456034&r2=1456035&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryResultImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryResultImpl.java Wed Mar 13 16:29:12 2013
@@ -38,6 +38,7 @@ import org.apache.jackrabbit.oak.jcr.Nod
import org.apache.jackrabbit.oak.jcr.SessionContext;
import org.apache.jackrabbit.oak.jcr.delegate.NodeDelegate;
import org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate;
+import org.apache.jackrabbit.oak.plugins.value.ValueFactoryImpl;
/**
* The implementation of the corresponding JCR interface.
@@ -240,7 +241,7 @@ public class QueryResultImpl implements
if (value == null) {
return null;
} else {
- return sessionContext.getValueFactory().createValue(value);
+ return ValueFactoryImpl.createValue(value, sessionContext.getNamePathMapper());
}
}
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/version/VersionImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/version/VersionImpl.java?rev=1456035&r1=1456034&r2=1456035&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/version/VersionImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/version/VersionImpl.java Wed Mar 13 16:29:12 2013
@@ -54,14 +54,10 @@ class VersionImpl extends NodeImpl<Versi
getVersionManagerDelegate().getVersionHistory(dlg.getParent()), sessionContext);
}
- private ValueFactoryImpl getValueFactory() {
- return sessionContext.getValueFactory();
- }
-
@Override
public Calendar getCreated() throws RepositoryException {
PropertyDelegate dlg = getPropertyOrThrow(JcrConstants.JCR_CREATED);
- return getValueFactory().createValue(dlg.getSingleState()).getDate();
+ return ValueFactoryImpl.createValue(dlg.getSingleState(), sessionContext.getNamePathMapper()).getDate();
}
@Override
@@ -75,7 +71,7 @@ class VersionImpl extends NodeImpl<Versi
}
private List<Value> getValues(PropertyDelegate p) throws InvalidItemStateException, ValueFormatException {
- return getValueFactory().createValues(p.getMultiState());
+ return ValueFactoryImpl.createValues(p.getMultiState(), sessionContext.getNamePathMapper());
}
@Override