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