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

Reply via email to