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/10/29 18:05:28 UTC

svn commit: r1536813 - in /jackrabbit/oak/trunk: oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/ oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/

Author: mduerig
Date: Tue Oct 29 17:05:27 2013
New Revision: 1536813

URL: http://svn.apache.org/r1536813
Log:
OAK-144 Implement observation
Clarify noLocal logic

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/EventFilter.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=1536813&r1=1536812&r2=1536813&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 Tue Oct 29 17:05:27 2013
@@ -136,7 +136,7 @@ public class ChangeProcessor {
                     EventFilter filter = filterRef.get();
                     // FIXME don't rely on toString for session id
                     if (changes != null &&
-                            !(filter.excludeLocal() && changes.isLocal(contentSession.toString()))) {
+                            filter.include(changes.isLocal(contentSession.toString()))) {
                         String path = namePathMapper.getOakPath(filter.getPath());
                         ImmutableTree beforeTree = getTree(changes.getBeforeState(), path);
                         ImmutableTree afterTree = getTree(changes.getAfterState(), path);

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/EventFilter.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/EventFilter.java?rev=1536813&r1=1536812&r2=1536813&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/EventFilter.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/EventFilter.java Tue Oct 29 17:05:27 2013
@@ -18,7 +18,10 @@
  */
 package org.apache.jackrabbit.oak.plugins.observation;
 
+import static com.google.common.base.Objects.toStringHelper;
+
 import java.util.Arrays;
+
 import javax.annotation.CheckForNull;
 import javax.jcr.RepositoryException;
 import javax.jcr.nodetype.NoSuchNodeTypeException;
@@ -30,8 +33,6 @@ import org.apache.jackrabbit.oak.api.Typ
 import org.apache.jackrabbit.oak.commons.PathUtils;
 import org.apache.jackrabbit.oak.plugins.nodetype.ReadOnlyNodeTypeManager;
 
-import static com.google.common.base.Objects.toStringHelper;
-
 /**
  * Filter for filtering observation events according to a certain criterion.
  */
@@ -42,7 +43,7 @@ public class EventFilter {
     private final boolean deep;
     private final String[] uuids;
     private final String[] nodeTypeOakName;
-    private final boolean noLocal;
+    private final boolean includeLocal;
 
     /**
      * Create a new instance of a filter for a certain criterion
@@ -53,21 +54,21 @@ public class EventFilter {
      * @param deep        {@code true} if descendants of {@code path} should be included. {@code false} otherwise.
      * @param uuids       uuids to include
      * @param nodeTypeName  node type names to include
-     * @param noLocal       exclude session local events if {@code true}. Include otherwise.
+     * @param includeLocal  include session local events if {@code true}. Exclude otherwise.
      * @throws NoSuchNodeTypeException  if any of the node types in {@code nodeTypeName} does not exist
      * @throws RepositoryException      if an error occurs while reading from the node type manager.
      * @see javax.jcr.observation.ObservationManager#addEventListener(javax.jcr.observation.EventListener,
      * int, String, boolean, String[], String[], boolean)
      */
     public EventFilter(ReadOnlyNodeTypeManager ntMgr, int eventTypes, String path, boolean deep, String[] uuids,
-            String[] nodeTypeName, boolean noLocal) {
+            String[] nodeTypeName, boolean includeLocal) {
         this.ntMgr = ntMgr;
         this.eventTypes = eventTypes;
         this.path = path;
         this.deep = deep;
         this.uuids = uuids;
         this.nodeTypeOakName = nodeTypeName;
-        this.noLocal = noLocal;
+        this.includeLocal = includeLocal;
     }
 
     /**
@@ -85,6 +86,15 @@ public class EventFilter {
     }
 
     /**
+     * Determine whether session local changes should be included.
+     * @param local  {@code true} for session local changes, {@code false} otherwise.
+     * @return  {@code true} if the changes are included with this filter. {@code false} otherwise.
+     */
+    public boolean include(boolean local) {
+        return includeLocal || !local;
+    }
+
+    /**
      * Determine whether the children of a {@code path} would be matched by this filter
      * @param path  path whose children to test
      * @return  {@code true} if the children of {@code path} could be matched by this filter
@@ -96,13 +106,6 @@ public class EventFilter {
     }
 
     /**
-     * @return  the no local flag of this filter
-     */
-    public boolean excludeLocal() {
-        return noLocal;
-    }
-
-    /**
      * @return  path of this filter
      */
     public String getPath() {
@@ -117,7 +120,7 @@ public class EventFilter {
                 .add("deep", deep)
                 .add("uuids", Arrays.toString(uuids))
                 .add("node types", Arrays.toString(nodeTypeOakName))
-                .add("noLocal", noLocal)
+                .add("includeLocal", includeLocal)
             .toString();
     }
 

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=1536813&r1=1536812&r2=1536813&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 Tue Oct 29 17:05:27 2013
@@ -18,9 +18,12 @@
  */
 package org.apache.jackrabbit.oak.jcr.observation;
 
+import static com.google.common.collect.Lists.newArrayList;
+
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+
 import javax.annotation.CheckForNull;
 import javax.annotation.Nullable;
 import javax.jcr.RepositoryException;
@@ -46,8 +49,6 @@ import org.slf4j.LoggerFactory;
 import org.slf4j.Marker;
 import org.slf4j.MarkerFactory;
 
-import static com.google.common.collect.Lists.newArrayList;
-
 public class ObservationManagerImpl implements ObservationManager {
 
     private static final Logger log = LoggerFactory.getLogger(ObservationManagerImpl.class);
@@ -104,7 +105,7 @@ public class ObservationManagerImpl impl
     public synchronized void addEventListener(EventListener listener, int eventTypes, String absPath,
             boolean isDeep, String[] uuid, String[] nodeTypeName, boolean noLocal) throws RepositoryException {
         EventFilter filter = new EventFilter(ntMgr, eventTypes, oakPath(absPath), isDeep,
-                uuid, validateNodeTypeNames(nodeTypeName), noLocal);
+                uuid, validateNodeTypeNames(nodeTypeName), !noLocal);
         ChangeProcessor processor = processors.get(listener);
         if (processor == null) {
             log.info(OBSERVATION, "Registering event listener {} with filter {}", listener, filter);