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/12/13 17:08:08 UTC
svn commit: r1550757 - in /jackrabbit/oak/trunk:
oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/ChangeProcessor.java
oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/ObservationManagerImpl.java
Author: mduerig
Date: Fri Dec 13 16:08:08 2013
New Revision: 1550757
URL: http://svn.apache.org/r1550757
Log:
OAK-1133: Observation listener PLUS
Push permission evaluation down to ChangeProcessor so it applies to all events being dispatch regardless on how the listener was registered
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/ChangeProcessor.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=1550757&r1=1550756&r2=1550757&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 Dec 13 16:08:08 2013
@@ -35,10 +35,14 @@ import org.apache.jackrabbit.oak.core.Im
import org.apache.jackrabbit.oak.core.ImmutableTree;
import org.apache.jackrabbit.oak.namepath.NamePathMapper;
import org.apache.jackrabbit.oak.plugins.nodetype.ReadOnlyNodeTypeManager;
+import org.apache.jackrabbit.oak.plugins.observation.filter.EventGenerator.Filter;
import org.apache.jackrabbit.oak.plugins.observation.filter.EventIterator;
+import org.apache.jackrabbit.oak.plugins.observation.filter.FilterBuilder;
import org.apache.jackrabbit.oak.plugins.observation.filter.FilterProvider;
+import org.apache.jackrabbit.oak.plugins.observation.filter.Filters;
import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
import org.apache.jackrabbit.oak.spi.commit.Observer;
+import org.apache.jackrabbit.oak.spi.security.authorization.permission.PermissionProvider;
import org.apache.jackrabbit.oak.spi.state.NodeState;
import org.apache.jackrabbit.oak.spi.whiteboard.Registration;
import org.apache.jackrabbit.oak.spi.whiteboard.Whiteboard;
@@ -59,6 +63,7 @@ public class ChangeProcessor implements
private final ContentSession contentSession;
private final NamePathMapper namePathMapper;
private final ReadOnlyNodeTypeManager ntManager;
+ private final PermissionProvider permissionProvider;
private final ListenerTracker tracker;
private final EventListener eventListener;
private final AtomicReference<FilterProvider> filterProvider;
@@ -72,10 +77,12 @@ public class ChangeProcessor implements
ContentSession contentSession,
NamePathMapper namePathMapper,
ReadOnlyNodeTypeManager ntManager,
+ PermissionProvider permissionProvider,
ListenerTracker tracker, FilterProvider filter) {
this.contentSession = contentSession;
this.namePathMapper = namePathMapper;
this.ntManager = ntManager;
+ this.permissionProvider = permissionProvider;
this.tracker = tracker;
eventListener = tracker.getTrackedListener();
filterProvider = new AtomicReference<FilterProvider>(filter);
@@ -123,9 +130,12 @@ public class ChangeProcessor implements
if (provider.includeCommit(contentSession.toString(), info)) {
ImmutableTree beforeTree = getTree(previousRoot, provider.getPath());
ImmutableTree afterTree = getTree(root, provider.getPath());
+ Filter userFilter = provider.getFilter(beforeTree, afterTree, ntManager);
+ Filter acFilter = new FilterBuilder().accessControl(permissionProvider)
+ .createFilter(beforeTree, afterTree, ntManager);
EventIterator<Event> events = new EventIterator<Event>(
beforeTree.getNodeState(), afterTree.getNodeState(),
- provider.getFilter(beforeTree, afterTree, ntManager),
+ Filters.all(userFilter, acFilter),
new JcrListener(beforeTree, afterTree, namePathMapper, info));
if (events.hasNext()) {
synchronized (this) {
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=1550757&r1=1550756&r2=1550757&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 Dec 13 16:08:08 2013
@@ -116,7 +116,7 @@ public class ObservationManagerImpl impl
log.info(OBSERVATION,
"Registering event listener {} with filter {}", listener, filterProvider);
processor = new ChangeProcessor(sessionDelegate.getContentSession(), namePathMapper,
- ntMgr, tracker, filterProvider);
+ ntMgr, permissionProvider, tracker, filterProvider);
processors.put(listener, processor);
processor.start(whiteboard);
} else {
@@ -173,8 +173,7 @@ public class ObservationManagerImpl impl
filterBuilder.path(isDeep ? STAR_STAR : STAR),
filterBuilder.eventType(eventTypes),
filterBuilder.uuid(Selectors.PARENT, uuids),
- filterBuilder.nodeType(Selectors.PARENT, validateNodeTypeNames(nodeTypeName)),
- filterBuilder.accessControl(permissionProvider)));
+ filterBuilder.nodeType(Selectors.PARENT, validateNodeTypeNames(nodeTypeName))));
ListenerTracker tracker = new ListenerTracker(
listener, eventTypes, absPath, isDeep, uuids, nodeTypeName, noLocal) {