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/06/05 13:26:03 UTC

svn commit: r1489815 - in /jackrabbit/oak/trunk: oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/EventFilter.java oak-jcr/pom.xml

Author: mduerig
Date: Wed Jun  5 11:26:03 2013
New Revision: 1489815

URL: http://svn.apache.org/r1489815
Log:
OAK-775 Implement backward compatible observation
filter by uuid

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/EventFilter.java
    jackrabbit/oak/trunk/oak-jcr/pom.xml

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=1489815&r1=1489814&r2=1489815&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 Wed Jun  5 11:26:03 2013
@@ -25,7 +25,10 @@ import javax.annotation.Nullable;
 import javax.jcr.RepositoryException;
 import javax.jcr.nodetype.NoSuchNodeTypeException;
 
+import org.apache.jackrabbit.JcrConstants;
+import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.api.Tree;
+import org.apache.jackrabbit.oak.api.Type;
 import org.apache.jackrabbit.oak.commons.PathUtils;
 import org.apache.jackrabbit.oak.core.ReadOnlyTree;
 import org.apache.jackrabbit.oak.namepath.NamePathMapper;
@@ -42,13 +45,13 @@ class EventFilter {
     private final int eventTypes;
     private final String path;
     private final boolean deep;
-    private final String[] uuid;          // TODO implement filtering by uuid
+    private final String[] uuids;
     private final String[] nodeTypeOakName;
     private final boolean noLocal;
 
     public EventFilter(ReadOnlyNodeTypeManager ntMgr,
             NamePathMapper namePathMapper, int eventTypes,
-            String path, boolean deep, String[] uuid,
+            String path, boolean deep, String[] uuids,
             String[] nodeTypeName, boolean noLocal)
             throws NoSuchNodeTypeException, RepositoryException {
         this.ntMgr = ntMgr;
@@ -56,7 +59,7 @@ class EventFilter {
         this.eventTypes = eventTypes;
         this.path = path;
         this.deep = deep;
-        this.uuid = uuid;
+        this.uuids = uuids;
         this.nodeTypeOakName = validateNodeTypeNames(nodeTypeName);
         this.noLocal = noLocal;
     }
@@ -64,8 +67,8 @@ class EventFilter {
     public boolean include(int eventType, String path, @Nullable NodeState associatedParentNode) {
         return include(eventType)
                 && include(path)
-                && (associatedParentNode == null
-                    || includeByType(new ReadOnlyTree(associatedParentNode)));
+                && (associatedParentNode == null || includeByType(new ReadOnlyTree(associatedParentNode)))
+                && (associatedParentNode == null || includeByUuid(associatedParentNode));
     }
 
     public boolean includeChildren(String path) {
@@ -84,7 +87,7 @@ class EventFilter {
                 .add("types", eventTypes)
                 .add("path", path)
                 .add("deep", deep)
-                .add("uuids", uuid)
+                .add("uuids", uuids)
                 .add("node types", nodeTypeOakName)
                 .add("noLocal", noLocal)
             .toString();
@@ -129,6 +132,28 @@ class EventFilter {
         }
     }
 
+    private boolean includeByUuid(NodeState associatedParentNode) {
+        if (uuids == null) {
+            return true;
+        }
+        if (uuids.length == 0) {
+            return false;
+        }
+
+        PropertyState uuidProperty = associatedParentNode.getProperty(JcrConstants.JCR_UUID);
+        if (uuidProperty == null) {
+            return false;
+        }
+
+        String parentUuid = uuidProperty.getValue(Type.STRING);
+        for (String uuid : uuids) {
+            if (parentUuid.equals(uuid)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
     /**
      * Validates the given node type names.
      *

Modified: jackrabbit/oak/trunk/oak-jcr/pom.xml
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/pom.xml?rev=1489815&r1=1489814&r2=1489815&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/pom.xml (original)
+++ jackrabbit/oak/trunk/oak-jcr/pom.xml Wed Jun  5 11:26:03 2013
@@ -231,7 +231,6 @@
       org.apache.jackrabbit.test.api.observation.GetIdentifierTest#testPropertyAdded
       org.apache.jackrabbit.test.api.observation.GetIdentifierTest#testPropertyChanged
       org.apache.jackrabbit.test.api.observation.GetIdentifierTest#testPropertyRemoved
-      org.apache.jackrabbit.test.api.observation.AddEventListenerTest#testUUID
       org.apache.jackrabbit.test.api.observation.LockingTest#testAddLockToNode
       org.apache.jackrabbit.test.api.observation.LockingTest#testRemoveLockFromNode
       <!-- Versioning -->