Author: stefanegli
Date: Wed Nov 23 17:02:26 2016
New Revision: 1771008

URL: http://svn.apache.org/viewvc?rev=1771008&view=rev
Log:
OAK-5153: explode subtypes for observation listener node type filter recursively

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=1771008&r1=1771007&r2=1771008&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
 Wed Nov 23 17:02:26 2016
@@ -335,12 +335,7 @@ public class ObservationManagerImpl impl
         if (validatedNodeTypeNames != null) {
             explodedNodeTypes = newHashSet();
             for (String nt : validatedNodeTypeNames) {
-                NodeTypeIterator it = ntMgr.getNodeType(nt).getSubtypes();
-                while(it.hasNext()) {
-                    String subnt = String.valueOf(it.next());
-                    explodedNodeTypes.add(subnt);
-                }
-                explodedNodeTypes.add(nt);
+                explodeSubtypes(nt, explodedNodeTypes);
             }
         }
         
@@ -352,6 +347,18 @@ public class ObservationManagerImpl impl
         
         addEventListener(listener, tracker, filterBuilder.build());
     }
+    
+    private void explodeSubtypes(String nodeType, Set<String> set) throws 
RepositoryException {
+        set.add(nodeType);
+        NodeTypeIterator it = ntMgr.getNodeType(nodeType).getSubtypes();
+        while(it.hasNext()) {
+            String subnt = String.valueOf(it.next());
+            if (!set.contains(subnt)) {
+                set.add(subnt);
+                explodeSubtypes(subnt, set);
+            }
+        }
+    }
 
     private String pathWithoutGlob(String path) {
         if (!path.contains("*")) {


Reply via email to