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/11/29 11:47:38 UTC
svn commit: r1546533 - in /jackrabbit/oak/trunk:
oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/
oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/
oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/obse...
Author: mduerig
Date: Fri Nov 29 10:47:38 2013
New Revision: 1546533
URL: http://svn.apache.org/r1546533
Log:
OAK-1133: Observation listener PLUS
Pass permission provider to JcrFilterProvider instead of passing individual tree permission around
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/ChangeProcessor.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/JcrFilterProvider.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/FilterProvider.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/ObservationManagerImpl.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/ChangeProcessor.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/ChangeProcessor.java?rev=1546533&r1=1546532&r2=1546533&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/ChangeProcessor.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/ChangeProcessor.java Fri Nov 29 10:47:38 2013
@@ -34,7 +34,6 @@ import org.apache.jackrabbit.api.jmx.Eve
import org.apache.jackrabbit.commons.iterator.EventIteratorAdapter;
import org.apache.jackrabbit.commons.observation.ListenerTracker;
import org.apache.jackrabbit.oak.api.ContentSession;
-import org.apache.jackrabbit.oak.api.Tree;
import org.apache.jackrabbit.oak.core.ImmutableRoot;
import org.apache.jackrabbit.oak.core.ImmutableTree;
import org.apache.jackrabbit.oak.namepath.NamePathMapper;
@@ -43,8 +42,6 @@ import org.apache.jackrabbit.oak.plugins
import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
import org.apache.jackrabbit.oak.spi.commit.Observable;
import org.apache.jackrabbit.oak.spi.commit.Observer;
-import org.apache.jackrabbit.oak.spi.security.authorization.permission.PermissionProvider;
-import org.apache.jackrabbit.oak.spi.security.authorization.permission.TreePermission;
import org.apache.jackrabbit.oak.spi.state.NodeState;
import org.apache.jackrabbit.oak.spi.whiteboard.Registration;
import org.apache.jackrabbit.oak.spi.whiteboard.Whiteboard;
@@ -63,7 +60,6 @@ public class ChangeProcessor implements
private static final Logger log = LoggerFactory.getLogger(ChangeProcessor.class);
private final ContentSession contentSession;
- private final PermissionProvider permissionProvider;
private final NamePathMapper namePathMapper;
private final ListenerTracker tracker;
private final EventListener eventListener;
@@ -76,12 +72,10 @@ public class ChangeProcessor implements
public ChangeProcessor(
ContentSession contentSession,
- PermissionProvider permissionProvider,
NamePathMapper namePathMapper,
ListenerTracker tracker, FilterProvider filter) {
checkArgument(contentSession instanceof Observable);
this.contentSession = contentSession;
- this.permissionProvider = permissionProvider;
this.namePathMapper = namePathMapper;
this.tracker = tracker;
eventListener = tracker.getTrackedListener();
@@ -135,10 +129,9 @@ public class ChangeProcessor implements
if (provider.includeCommit(contentSession.toString(), info)) {
ImmutableTree beforeTree = getTree(previousRoot, provider.getPath());
ImmutableTree afterTree = getTree(root, provider.getPath());
- TreePermission treePermission = getTreePermission(afterTree);
EventIterator<Event> events = new EventIterator<Event>(
beforeTree.getNodeState(), afterTree.getNodeState(), provider.getPath(),
- provider.getFilter(beforeTree, afterTree, treePermission),
+ provider.getFilter(beforeTree, afterTree),
new JcrListener(beforeTree, afterTree, namePathMapper, info));
if (events.hasNext()) {
synchronized (this) {
@@ -159,7 +152,4 @@ public class ChangeProcessor implements
return new ImmutableRoot(nodeState).getTree(path);
}
- private TreePermission getTreePermission(Tree tree) {
- return permissionProvider.getTreePermission(tree, TreePermission.EMPTY);
- }
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/JcrFilterProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/JcrFilterProvider.java?rev=1546533&r1=1546532&r2=1546533&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/JcrFilterProvider.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/JcrFilterProvider.java Fri Nov 29 10:47:38 2013
@@ -33,6 +33,7 @@ import java.util.List;
import com.google.common.base.Objects;
import com.google.common.collect.Lists;
+import org.apache.jackrabbit.oak.api.Tree;
import org.apache.jackrabbit.oak.commons.PathUtils;
import org.apache.jackrabbit.oak.core.ImmutableTree;
import org.apache.jackrabbit.oak.plugins.nodetype.ReadOnlyNodeTypeManager;
@@ -45,6 +46,7 @@ import org.apache.jackrabbit.oak.plugins
import org.apache.jackrabbit.oak.plugins.observation.filter.NodeTypeFilter;
import org.apache.jackrabbit.oak.plugins.observation.filter.UuidFilter;
import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
+import org.apache.jackrabbit.oak.spi.security.authorization.permission.PermissionProvider;
import org.apache.jackrabbit.oak.spi.security.authorization.permission.TreePermission;
/**
@@ -63,6 +65,7 @@ public class JcrFilterProvider implement
private final String[] ntNames;
private final boolean includeSessionLocal;
private final boolean includeClusterExternal;
+ private final PermissionProvider permissionProvider;
/**
* Create a new instance of a {@code JcrFilterProvider} for certain criteria
@@ -78,11 +81,12 @@ public class JcrFilterProvider implement
* Exclude otherwise.
* @param includeClusterExternal include cluster external events if {@code true}.
* Exclude otherwise.
- *
+ * @param permissionProvider permission provider to evaluate events against
* @see javax.jcr.observation.ObservationManager#addEventListener(javax.jcr.observation.EventListener, int, String, boolean, String[], String[], boolean) */
public JcrFilterProvider(ReadOnlyNodeTypeManager ntManager, int eventTypes, String path,
boolean deep, String[] uuids, String[] nodeTypeName,
- boolean includeSessionLocal, boolean includeClusterExternal) {
+ boolean includeSessionLocal, boolean includeClusterExternal,
+ PermissionProvider permissionProvider) {
this.ntManager = ntManager;
this.eventTypes = eventTypes;
this.path = path;
@@ -91,6 +95,7 @@ public class JcrFilterProvider implement
this.ntNames = nodeTypeName;
this.includeSessionLocal = includeSessionLocal;
this.includeClusterExternal = includeClusterExternal;
+ this.permissionProvider = permissionProvider;
}
@Override
@@ -100,9 +105,7 @@ public class JcrFilterProvider implement
}
@Override
- public Filter getFilter(ImmutableTree beforeTree, ImmutableTree afterTree,
- TreePermission treePermission) {
-
+ public Filter getFilter(ImmutableTree beforeTree, ImmutableTree afterTree) {
String relPath = PathUtils.relativize(afterTree.getPath(), path);
String pathPattern = deep
? PathUtils.concat(relPath, STAR_STAR)
@@ -135,7 +138,7 @@ public class JcrFilterProvider implement
}
}
- filters.add(new ACFilter(beforeTree, afterTree, treePermission));
+ filters.add(new ACFilter(beforeTree, afterTree, getTreePermission(afterTree)));
return Filters.all(filters.toArray(new Filter[filters.size()]));
}
@@ -159,6 +162,12 @@ public class JcrFilterProvider implement
//------------------------------------------------------------< private >---
+ private TreePermission getTreePermission(Tree tree) {
+ return tree.isRoot()
+ ? permissionProvider.getTreePermission(tree, TreePermission.EMPTY)
+ : permissionProvider.getTreePermission(tree, getTreePermission(tree.getParent()));
+ }
+
private static boolean isLocal(String sessionId, CommitInfo info) {
return info != null && Objects.equal(info.getSessionId(), sessionId);
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/FilterProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/FilterProvider.java?rev=1546533&r1=1546532&r2=1546533&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/FilterProvider.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/FilterProvider.java Fri Nov 29 10:47:38 2013
@@ -25,7 +25,6 @@ import javax.annotation.Nonnull;
import org.apache.jackrabbit.oak.core.ImmutableTree;
import org.apache.jackrabbit.oak.plugins.observation.filter.EventGenerator.Filter;
import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
-import org.apache.jackrabbit.oak.spi.security.authorization.permission.TreePermission;
/**
* Instance of this class provide a {@link Filter} for observation
@@ -52,16 +51,14 @@ public interface FilterProvider {
*
* @param beforeTree before state
* @param afterTree after state
- * @param treePermission tree permission of the corresponding tree of the reading session
* @return new {@code Filter} instance
*/
@Nonnull
- Filter getFilter(@Nonnull ImmutableTree beforeTree, @Nonnull ImmutableTree afterTree,
- @Nonnull TreePermission treePermission);
+ Filter getFilter(@Nonnull ImmutableTree beforeTree, @Nonnull ImmutableTree afterTree);
/**
* Path of the subtree to which the the filter returned by
- * {@link #getFilter(ImmutableTree, ImmutableTree, TreePermission)} applies.
+ * {@link #getFilter(ImmutableTree, ImmutableTree)} applies.
* @return path to which the filter applies.
*/
@Nonnull
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/ObservationManagerImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/ObservationManagerImpl.java?rev=1546533&r1=1546532&r2=1546533&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/ObservationManagerImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/ObservationManagerImpl.java Fri Nov 29 10:47:38 2013
@@ -113,7 +113,7 @@ public class ObservationManagerImpl impl
boolean includeExternal = !(listener instanceof ExcludeExternal);
String oakPath = namePathMapper.getOakPath(absPath);
FilterProvider filterProvider = new JcrFilterProvider(ntMgr, eventTypes, oakPath, isDeep,
- uuid, validateNodeTypeNames(nodeTypeName), !noLocal, includeExternal);
+ uuid, validateNodeTypeNames(nodeTypeName), !noLocal, includeExternal, permissionProvider);
ChangeProcessor processor = processors.get(listener);
if (processor == null) {
log.info(OBSERVATION, "Registering event listener {} with filter {}", listener, filterProvider);
@@ -130,7 +130,7 @@ public class ObservationManagerImpl impl
}
};
processor = new ChangeProcessor(
- sessionDelegate.getContentSession(), permissionProvider, namePathMapper, tracker, filterProvider);
+ sessionDelegate.getContentSession(), namePathMapper, tracker, filterProvider);
processors.put(listener, processor);
processor.start(whiteboard);
} else {