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;