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:06:29 UTC
svn commit: r1550755 - in /jackrabbit/oak/trunk:
oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/JcrFilterProvider.java
oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/ObservationManagerImpl.java
Author: mduerig
Date: Fri Dec 13 16:06:29 2013
New Revision: 1550755
URL: http://svn.apache.org/r1550755
Log:
OAK-1133: Observation listener PLUS
Replace JcrFilterProvider by using the new FilterBuilder
Removed:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/JcrFilterProvider.java
Modified:
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/ObservationManagerImpl.java
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=1550755&r1=1550754&r2=1550755&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:06:29 2013
@@ -19,6 +19,8 @@
package org.apache.jackrabbit.oak.jcr.observation;
import static com.google.common.collect.Lists.newArrayList;
+import static org.apache.jackrabbit.oak.plugins.observation.filter.GlobbingPathFilter.STAR;
+import static org.apache.jackrabbit.oak.plugins.observation.filter.GlobbingPathFilter.STAR_STAR;
import java.util.HashMap;
import java.util.List;
@@ -42,8 +44,9 @@ import org.apache.jackrabbit.oak.namepat
import org.apache.jackrabbit.oak.plugins.nodetype.ReadOnlyNodeTypeManager;
import org.apache.jackrabbit.oak.plugins.observation.ChangeProcessor;
import org.apache.jackrabbit.oak.plugins.observation.ExcludeExternal;
-import org.apache.jackrabbit.oak.plugins.observation.JcrFilterProvider;
+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.Selectors;
import org.apache.jackrabbit.oak.spi.commit.Observable;
import org.apache.jackrabbit.oak.spi.security.authorization.permission.PermissionProvider;
import org.apache.jackrabbit.oak.spi.whiteboard.Whiteboard;
@@ -53,7 +56,6 @@ import org.slf4j.Marker;
import org.slf4j.MarkerFactory;
public class ObservationManagerImpl implements ObservationManager {
-
private static final Logger log = LoggerFactory.getLogger(ObservationManagerImpl.class);
public static final Marker OBSERVATION =
@@ -109,17 +111,17 @@ public class ObservationManagerImpl impl
@Override
public synchronized void addEventListener(EventListener listener, int eventTypes, String absPath,
- boolean isDeep, String[] uuid, String[] nodeTypeName, boolean noLocal) throws RepositoryException {
+ boolean isDeep, String[] uuids, String[] nodeTypeName, boolean noLocal) throws RepositoryException {
boolean includeExternal = !(listener instanceof ExcludeExternal);
String oakPath = namePathMapper.getOakPath(absPath);
- FilterProvider filterProvider = new JcrFilterProvider(eventTypes, oakPath, isDeep,
- uuid, validateNodeTypeNames(nodeTypeName), !noLocal, includeExternal, permissionProvider);
+ FilterProvider filterProvider = buildFilter(eventTypes, oakPath, isDeep,
+ uuids, validateNodeTypeNames(nodeTypeName), !noLocal, includeExternal, permissionProvider);
ChangeProcessor processor = processors.get(listener);
if (processor == null) {
log.info(OBSERVATION, "Registering event listener {} with filter {}", listener, filterProvider);
ListenerTracker tracker = new ListenerTracker(
listener, eventTypes, absPath, isDeep,
- uuid, nodeTypeName, noLocal) {
+ uuids, nodeTypeName, noLocal) {
@Override
protected void warn(String message) {
log.warn(DEPRECATED, message, initStackTrace);
@@ -139,6 +141,24 @@ public class ObservationManagerImpl impl
}
}
+ private static FilterProvider buildFilter(int eventTypes, String oakPath, boolean isDeep, String[] uuids,
+ String[] ntNames, boolean includeSessionLocal, boolean includeClusterExternal,
+ PermissionProvider permissionProvider) {
+
+ FilterBuilder builder = new FilterBuilder();
+ return builder
+ .basePath(oakPath)
+ .includeSessionLocal(includeSessionLocal)
+ .includeClusterExternal(includeClusterExternal)
+ .condition(builder.all(
+ builder.path(isDeep ? STAR_STAR : STAR),
+ builder.eventType(eventTypes),
+ builder.uuid(Selectors.PARENT, uuids),
+ builder.nodeType(Selectors.PARENT, ntNames),
+ builder.accessControl(permissionProvider)))
+ .build();
+ }
+
@Override
public void removeEventListener(EventListener listener) {
ChangeProcessor processor;