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 st...@apache.org on 2012/05/22 19:21:03 UTC
svn commit: r1341565 - in /jackrabbit/oak/trunk:
oak-it/mk/src/main/java/org/apache/jackrabbit/mk/test/
oak-mk/src/main/java/org/apache/jackrabbit/mk/util/
oak-mk/src/test/java/org/apache/jackrabbit/mk/util/
Author: stefan
Date: Tue May 22 17:21:02 2012
New Revision: 1341565
URL: http://svn.apache.org/viewvc?rev=1341565&view=rev
Log:
OAK-75: specify format and semantics of 'filter' parameter in MicroKernel API (WIP)
Modified:
jackrabbit/oak/trunk/oak-it/mk/src/main/java/org/apache/jackrabbit/mk/test/MicroKernelIT.java
jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/util/NameFilter.java
jackrabbit/oak/trunk/oak-mk/src/test/java/org/apache/jackrabbit/mk/util/NameFilterTest.java
Modified: jackrabbit/oak/trunk/oak-it/mk/src/main/java/org/apache/jackrabbit/mk/test/MicroKernelIT.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-it/mk/src/main/java/org/apache/jackrabbit/mk/test/MicroKernelIT.java?rev=1341565&r1=1341564&r2=1341565&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-it/mk/src/main/java/org/apache/jackrabbit/mk/test/MicroKernelIT.java (original)
+++ jackrabbit/oak/trunk/oak-it/mk/src/main/java/org/apache/jackrabbit/mk/test/MicroKernelIT.java Tue May 22 17:21:02 2012
@@ -414,7 +414,7 @@ public class MicroKernelIT extends Abstr
String head = mk.getHeadRevision();
// verify initial content using filter
- String filter = "{ properties : [ \"\\\\*ntProp\", \"\\\\-mult\\\\*\" ] } ";
+ String filter = "{ properties : [ \"*ntProp\", \"-mult*\" ] } ";
JSONObject obj = parseJSONObject(mk.getNodes("/", head, 1, 0, -1, filter));
assertPropertyExists(obj, "test/intProp");
assertPropertyNotExists(obj, "test/multiIntProp");
Modified: jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/util/NameFilter.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/util/NameFilter.java?rev=1341565&r1=1341564&r2=1341565&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/util/NameFilter.java (original)
+++ jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/util/NameFilter.java Tue May 22 17:21:02 2012
@@ -22,22 +22,23 @@ import java.util.List;
/**
* Simple name filter utility class.
* <ul>
- * <li>a filter consists of one or more <i>globs</i></li>
- * <li>a <i>glob</i> prefixed by {@code "\-"} is treated as an exclusion pattern;
- * all others are considered inclusion patterns</li>
- * <li>{@code "\*"} serves as a <i>wild card</i>, i.e. it matches any substring in the target name</li>
- * <li>a filter matches a target name if any of the inclusion patterns match but
- * none of the exclusion patterns</li>
+ * <li>a filter consists of one or more <i>globs</i></li>
+ * <li>a <i>glob</i> prefixed by {@code -} (dash) is treated as an exclusion pattern;
+ * all others are considered inclusion patterns</li>
+ * <li>{@code *} (asterisk) serves as a <i>wildcard</i>, i.e. it matches any substring in the target name</li>
+ * <li>a filter matches a target name if any of the inclusion patterns match but
+ * none of the exclusion patterns</li>
* </ul>
* Example:
* <p/>
- * {@code ["foo\*", "\-foo99"]} matches {@code "foo"} and {@code "foo bar"}
+ * {@code ["foo*", "-foo99"]} matches {@code "foo"} and {@code "foo bar"}
* but not {@code "foo99"}.
*/
public class NameFilter {
- public static String WILDCARD = "\\*";
- public static String EXCLUDE_PREFIX = "\\-";
+ public static final char WILDCARD = '*';
+ public static final char EXCLUDE_PREFIX = '-';
+ public static final char ESCAPE = '\\';
// list of ORed inclusion patterns
private final List<String> inclPatterns = new ArrayList<String>();
@@ -46,8 +47,10 @@ public class NameFilter {
public NameFilter(String[] patterns) {
for (String pattern : patterns) {
- if (pattern.startsWith(EXCLUDE_PREFIX)) {
- exclPatterns.add(pattern.substring(EXCLUDE_PREFIX.length()));
+ if (pattern.isEmpty()) {
+ continue;
+ } else if (pattern.charAt(0) == EXCLUDE_PREFIX) {
+ exclPatterns.add(pattern.substring(1));
} else {
inclPatterns.add(pattern);
}
@@ -93,15 +96,15 @@ public class NameFilter {
if (pOff >= pLen) {
return sOff >= sLen ? true : false;
}
- if (sOff >= sLen && pattern.indexOf(WILDCARD, pOff) != pOff) {
+ if (sOff >= sLen && pattern.charAt(pOff) != WILDCARD) {
return false;
}
- // check for a wildcard '\*' as the next pattern;
+ // check for a WILDCARD as the next pattern;
// this is handled by a recursive call for
// each postfix of the name.
- if (pattern.indexOf(WILDCARD, pOff) == pOff) {
- pOff += WILDCARD.length();
+ if (pattern.charAt(pOff) == WILDCARD) {
+ ++pOff;
if (pOff >= pLen) {
return true;
}
@@ -118,6 +121,14 @@ public class NameFilter {
}
if (pOff < pLen && sOff < sLen) {
+ // check for ESCAPE character
+ if (pattern.charAt(pOff) == ESCAPE) {
+ if (pOff < pLen - 1
+ && (pattern.charAt(pOff + 1) == WILDCARD
+ || pattern.charAt(pOff + 1) == EXCLUDE_PREFIX)) {
+ ++pOff;
+ }
+ }
if (pattern.charAt(pOff) != s.charAt(sOff)) {
return false;
}
Modified: jackrabbit/oak/trunk/oak-mk/src/test/java/org/apache/jackrabbit/mk/util/NameFilterTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mk/src/test/java/org/apache/jackrabbit/mk/util/NameFilterTest.java?rev=1341565&r1=1341564&r2=1341565&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-mk/src/test/java/org/apache/jackrabbit/mk/util/NameFilterTest.java (original)
+++ jackrabbit/oak/trunk/oak-mk/src/test/java/org/apache/jackrabbit/mk/util/NameFilterTest.java Tue May 22 17:21:02 2012
@@ -28,12 +28,20 @@ public class NameFilterTest {
@Test
public void test() {
- NameFilter filter = new NameFilter(new String[]{"foo\\*", "\\-foo99"});
+ NameFilter filter = new NameFilter(new String[]{"foo*", "-foo99"});
assertTrue(filter.matches("foo1"));
assertTrue(filter.matches("foo*"));
assertTrue(filter.matches("foo bar"));
assertTrue(filter.matches("foo 99"));
assertFalse(filter.matches("foo99"));
+
+ filter = new NameFilter(new String[]{"*foo"});
+ assertTrue(filter.matches("foo"));
+ assertFalse(filter.matches("bar"));
+
+ filter = new NameFilter(new String[]{"foo\\*bar"});
+ assertFalse(filter.matches("foo bar"));
+ assertTrue(filter.matches("foo*bar"));
}
}