Author: stefanegli
Date: Mon Nov 14 15:39:27 2016
New Revision: 1769655

URL: http://svn.apache.org/viewvc?rev=1769655&view=rev
Log:
OAK-5104 : added fix for in the middle matching of **, as well as a 
corresponding test case

Modified:
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/GlobbingPathFilter.java
    
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/observation/filter/GlobbingPathFilterTest.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/GlobbingPathFilter.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/GlobbingPathFilter.java?rev=1769655&r1=1769654&r2=1769655&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/GlobbingPathFilter.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/GlobbingPathFilter.java
 Mon Nov 14 15:39:27 2016
@@ -175,10 +175,18 @@ public class GlobbingPathFilter implemen
     private boolean includeItem(String name) {
         if (!pattern.isEmpty() && pattern.size() <= 2) {
             String head = pattern.get(0);
-            boolean headMatches = wildcardMatch(name, head) || 
STAR_STAR.equals(head);
-            return pattern.size() == 1
+            if (STAR_STAR.equals(head)) {
+                if (pattern.size() == 1) {
+                    return true;
+                } else {
+                    return wildcardMatch(name, pattern.get(1));
+                }
+            }
+            boolean headMatches = wildcardMatch(name, head);
+            boolean result = pattern.size() == 1
                 ? headMatches
                 : headMatches && STAR_STAR.equals(pattern.get(1));
+            return result;
         } else {
             return false;
         }

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/observation/filter/GlobbingPathFilterTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/observation/filter/GlobbingPathFilterTest.java?rev=1769655&r1=1769654&r2=1769655&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/observation/filter/GlobbingPathFilterTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/observation/filter/GlobbingPathFilterTest.java
 Mon Nov 14 15:39:27 2016
@@ -108,6 +108,29 @@ public class GlobbingPathFilterTest {
     }
 
     /**
+     * match ** 'in the middle'
+     */
+    @Test
+    public void inTheMiddle() {
+        EventFilter filter = new GlobbingPathFilter("/foo/"+STAR_STAR+"/bar");
+        ImmutableTree t = tree;
+
+        for(String name : elements("foo/a/b/c")) {
+            t = t.getChild(name);
+            assertFalse(filter.includeAdd(name, t.getNodeState()));
+            filter = filter.create(name, t.getNodeState(), t.getNodeState());
+            assertNotNull(filter);
+        }
+
+        for(String name : elements("bar")) {
+            t = t.getChild(name);
+            assertTrue(filter.includeAdd(name, t.getNodeState()));
+            filter = filter.create(name, t.getNodeState(), t.getNodeState());
+            assertNotNull(filter);
+        }
+    }
+
+    /**
      * ** should match every path
      */
     @Test


Reply via email to