Author: eric Date: Wed May 6 07:32:25 2015 New Revision: 1677940 URL: http://svn.apache.org/r1677940 Log: Better handle * and % characters in MailboxQuery, with a test, patch contributed by Thomas Söhngen (JAMES-1566)
Modified: james/mailbox/trunk/api/pom.xml james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java james/mailbox/trunk/pom.xml Modified: james/mailbox/trunk/api/pom.xml URL: http://svn.apache.org/viewvc/james/mailbox/trunk/api/pom.xml?rev=1677940&r1=1677939&r2=1677940&view=diff ============================================================================== --- james/mailbox/trunk/api/pom.xml (original) +++ james/mailbox/trunk/api/pom.xml Wed May 6 07:32:25 2015 @@ -60,5 +60,10 @@ <artifactId>jmock-junit4</artifactId> <scope>test</scope> </dependency> + <dependency> + <groupId>org.assertj</groupId> + <artifactId>assertj-core</artifactId> + <scope>test</scope> + </dependency> </dependencies> </project> Modified: james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java URL: http://svn.apache.org/viewvc/james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java?rev=1677940&r1=1677939&r2=1677940&view=diff ============================================================================== --- james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java (original) +++ james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java Wed May 6 07:32:25 2015 @@ -19,6 +19,7 @@ package org.apache.james.mailbox.model; +import java.util.StringTokenizer; import java.util.regex.Pattern; @@ -67,9 +68,7 @@ public final class MailboxQuery { this.expression = expression; } this.pathDelimiter = pathDelimiter; - - // Compile some pattern which is used later - pattern = Pattern.compile(this.expression.replaceAll("\\" + pathDelimiter ,"\\\\" + pathDelimiter).replaceAll("\\*", "\\.\\*").replaceAll("\\%", "[^\\" + pathDelimiter + "]*")); + pattern = constructEscapedRegex(); } /** @@ -189,4 +188,25 @@ public final class MailboxQuery { return "MailboxExpression [ " + "base = " + this.base + TAB + "expression = " + this.expression + TAB + "freeWildcard = " + this.getFreeWildcard() + TAB + "localWildcard = " + this.getLocalWildcard() + TAB + " ]"; } + + private Pattern constructEscapedRegex() { + StringBuilder stringBuilder = new StringBuilder(); + StringTokenizer tokenizer = new StringTokenizer(expression, "*%", true); + while (tokenizer.hasMoreTokens()) { + stringBuilder.append(getRegexPartAssociatedWithToken(tokenizer)); + } + return Pattern.compile(stringBuilder.toString()); + } + + private String getRegexPartAssociatedWithToken(StringTokenizer tokenizer) { + String token = tokenizer.nextToken(); + if (token.equals("*")) { + return ".*"; + } else if (token.equals("%")) { + return "[^" + pathDelimiter + "]*"; + } else { + return Pattern.quote(token); + } + } + } Modified: james/mailbox/trunk/pom.xml URL: http://svn.apache.org/viewvc/james/mailbox/trunk/pom.xml?rev=1677940&r1=1677939&r2=1677940&view=diff ============================================================================== --- james/mailbox/trunk/pom.xml (original) +++ james/mailbox/trunk/pom.xml Wed May 6 07:32:25 2015 @@ -121,6 +121,7 @@ <guava.version>13.0</guava.version> <cassandra-driver-core.version>2.0.1</cassandra-driver-core.version> <cassandra-unit.version>2.0.2.1</cassandra-unit.version> + <assertj.version>2.0.0</assertj.version> </properties> <dependencyManagement> @@ -408,7 +409,11 @@ <artifactId>commons-io</artifactId> <version>${commons-io.version}</version> </dependency> - + <dependency> + <groupId>org.assertj</groupId> + <artifactId>assertj-core</artifactId> + <version>${assertj.version}</version> + </dependency> <!-- END Testing --> --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org