You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by no...@apache.org on 2011/04/15 19:20:55 UTC

svn commit: r1092768 - in /james/imap/trunk: api/src/main/java/org/apache/james/imap/api/message/request/ processor/src/main/java/org/apache/james/imap/processor/ processor/src/test/java/org/apache/james/imap/processor/

Author: norman
Date: Fri Apr 15 17:20:54 2011
New Revision: 1092768

URL: http://svn.apache.org/viewvc?rev=1092768&view=rev
Log:
SearchQuery should support to search by different Date resolutions. See MAILBOX-55

Modified:
    james/imap/trunk/api/src/main/java/org/apache/james/imap/api/message/request/DayMonthYear.java
    james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/SearchProcessor.java
    james/imap/trunk/processor/src/test/java/org/apache/james/imap/processor/SearchProcessorTest.java

Modified: james/imap/trunk/api/src/main/java/org/apache/james/imap/api/message/request/DayMonthYear.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/api/src/main/java/org/apache/james/imap/api/message/request/DayMonthYear.java?rev=1092768&r1=1092767&r2=1092768&view=diff
==============================================================================
--- james/imap/trunk/api/src/main/java/org/apache/james/imap/api/message/request/DayMonthYear.java (original)
+++ james/imap/trunk/api/src/main/java/org/apache/james/imap/api/message/request/DayMonthYear.java Fri Apr 15 17:20:54 2011
@@ -19,6 +19,11 @@
 
 package org.apache.james.imap.api.message.request;
 
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Locale;
+import java.util.TimeZone;
+
 /**
  * An IMAP <code>date</code> production.
  */
@@ -56,6 +61,21 @@ public class DayMonthYear {
     }
 
     /**
+     * Return the {@link Date} representation
+     * 
+     * @return date
+     */
+    public final Date toDate() {
+        Calendar cal = getGMT();
+        cal.set(getYear(), getMonth() -1,  getDay());
+        return cal.getTime();
+    }
+    
+    private Calendar getGMT() {
+        return Calendar.getInstance(TimeZone.getTimeZone("GMT"), Locale.UK);
+    }
+    
+    /**
      * Gets the year component of this date.
      * 
      * @return the year

Modified: james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/SearchProcessor.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/SearchProcessor.java?rev=1092768&r1=1092767&r2=1092768&view=diff
==============================================================================
--- james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/SearchProcessor.java (original)
+++ james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/SearchProcessor.java Fri Apr 15 17:20:54 2011
@@ -47,6 +47,7 @@ import org.apache.james.mailbox.MessageR
 import org.apache.james.mailbox.MessageRangeException;
 import org.apache.james.mailbox.SearchQuery;
 import org.apache.james.mailbox.SearchQuery.Criterion;
+import org.apache.james.mailbox.SearchQuery.DateResolution;
 
 public class SearchProcessor extends AbstractMailboxProcessor<SearchRequest> {
 
@@ -144,7 +145,7 @@ public class SearchProcessor extends Abs
         case SearchKey.TYPE_BCC:
             return SearchQuery.headerContains(ImapConstants.RFC822_BCC, key.getValue());
         case SearchKey.TYPE_BEFORE:
-            return SearchQuery.internalDateBefore(date.getDay(), date.getMonth(), date.getYear());
+            return SearchQuery.internalDateBefore(date.toDate(), DateResolution.Day);
         case SearchKey.TYPE_BODY:
             return SearchQuery.bodyContains(key.getValue());
         case SearchKey.TYPE_CC:
@@ -170,7 +171,7 @@ public class SearchProcessor extends Abs
         case SearchKey.TYPE_OLD:
             return SearchQuery.flagIsUnSet(Flag.RECENT);
         case SearchKey.TYPE_ON:
-            return SearchQuery.internalDateOn(date.getDay(), date.getMonth(), date.getYear());
+            return SearchQuery.internalDateOn(date.toDate(), DateResolution.Day);
         case SearchKey.TYPE_OR:
             return or(key.getKeys(), session);
         case SearchKey.TYPE_RECENT:
@@ -178,19 +179,19 @@ public class SearchProcessor extends Abs
         case SearchKey.TYPE_SEEN:
             return SearchQuery.flagIsSet(Flag.SEEN);
         case SearchKey.TYPE_SENTBEFORE:
-            return SearchQuery.headerDateBefore(ImapConstants.RFC822_DATE, date.getDay(), date.getMonth(), date.getYear());
+            return SearchQuery.headerDateBefore(ImapConstants.RFC822_DATE, date.toDate(), DateResolution.Day);
         case SearchKey.TYPE_SENTON:
-            return SearchQuery.headerDateOn(ImapConstants.RFC822_DATE, date.getDay(), date.getMonth(), date.getYear());
+            return SearchQuery.headerDateOn(ImapConstants.RFC822_DATE, date.toDate(), DateResolution.Day);
         case SearchKey.TYPE_SENTSINCE:
             // Include the date which is used as search param. See IMAP-293
-            Criterion onCrit = SearchQuery.headerDateOn(ImapConstants.RFC822_DATE, date.getDay(), date.getMonth(), date.getYear());
-            Criterion afterCrit = SearchQuery.headerDateAfter(ImapConstants.RFC822_DATE, date.getDay(), date.getMonth(), date.getYear());
+            Criterion onCrit = SearchQuery.headerDateOn(ImapConstants.RFC822_DATE, date.toDate(), DateResolution.Day);
+            Criterion afterCrit = SearchQuery.headerDateAfter(ImapConstants.RFC822_DATE, date.toDate(), DateResolution.Day);
             return SearchQuery.or(onCrit, afterCrit);
         case SearchKey.TYPE_SEQUENCE_SET:
             return sequence(key.getSequenceNumbers(), session, true);
         case SearchKey.TYPE_SINCE:
             // Include the date which is used as search param. See IMAP-293
-            return SearchQuery.or(SearchQuery.internalDateOn(date.getDay(), date.getMonth(), date.getYear()), SearchQuery.internalDateAfter(date.getDay(), date.getMonth(), date.getYear()));
+            return SearchQuery.or(SearchQuery.internalDateOn(date.toDate(), DateResolution.Day), SearchQuery.internalDateAfter(date.toDate(), DateResolution.Day));
         case SearchKey.TYPE_SMALLER:
             return SearchQuery.sizeLessThan(key.getSize());
         case SearchKey.TYPE_SUBJECT:

Modified: james/imap/trunk/processor/src/test/java/org/apache/james/imap/processor/SearchProcessorTest.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/processor/src/test/java/org/apache/james/imap/processor/SearchProcessorTest.java?rev=1092768&r1=1092767&r2=1092768&view=diff
==============================================================================
--- james/imap/trunk/processor/src/test/java/org/apache/james/imap/processor/SearchProcessorTest.java (original)
+++ james/imap/trunk/processor/src/test/java/org/apache/james/imap/processor/SearchProcessorTest.java Fri Apr 15 17:20:54 2011
@@ -20,8 +20,12 @@
 package org.apache.james.imap.processor;
 
 import java.util.ArrayList;
+import java.util.Calendar;
 import java.util.Collections;
+import java.util.Date;
 import java.util.List;
+import java.util.Locale;
+import java.util.TimeZone;
 
 import javax.mail.Flags.Flag;
 
@@ -45,6 +49,7 @@ import org.apache.james.mailbox.MailboxS
 import org.apache.james.mailbox.MessageManager;
 import org.apache.james.mailbox.SearchQuery;
 import org.apache.james.mailbox.SearchQuery.Criterion;
+import org.apache.james.mailbox.SearchQuery.DateResolution;
 import org.jmock.Expectations;
 import org.jmock.Mockery;
 import org.jmock.integration.junit4.JMock;
@@ -201,6 +206,17 @@ public class SearchProcessorTest {
         }});
     }
 
+
+    private Calendar getGMT() {
+        return Calendar.getInstance(TimeZone.getTimeZone("GMT"), Locale.UK);
+    }
+    
+    private Date getDate(int day, int month, int year) {
+        Calendar cal = getGMT();
+        cal.set(year, month -1, day);
+        return cal.getTime();
+    }
+    
     @Test
     public void testANSWERED() throws Exception {
         expectsGetSelectedMailbox();
@@ -218,7 +234,7 @@ public class SearchProcessorTest {
     public void testBEFORE() throws Exception {
         expectsGetSelectedMailbox();
         check(SearchKey.buildBefore(DAY_MONTH_YEAR), SearchQuery
-                .internalDateBefore(DAY, MONTH, YEAR));
+                .internalDateBefore(getDate(DAY, MONTH, YEAR), DateResolution.Day));
     }
 
     @Test
@@ -290,7 +306,7 @@ public class SearchProcessorTest {
     public void testNOT() throws Exception {
         expectsGetSelectedMailbox();
         check(SearchKey.buildNot(SearchKey.buildOn(DAY_MONTH_YEAR)),
-                SearchQuery.not(SearchQuery.internalDateOn(DAY, MONTH, YEAR)));
+                SearchQuery.not(SearchQuery.internalDateOn(getDate(DAY, MONTH, YEAR), DateResolution.Day)));
     }
 
 
@@ -303,8 +319,8 @@ public class SearchProcessorTest {
     @Test
     public void testON() throws Exception {
         expectsGetSelectedMailbox();
-        check(SearchKey.buildOn(DAY_MONTH_YEAR), SearchQuery.internalDateOn(
-                DAY, MONTH, YEAR));
+        check(SearchKey.buildOn(DAY_MONTH_YEAR), SearchQuery.internalDateOn(getDate(
+                DAY, MONTH, YEAR), DateResolution.Day));
     }
 
     @Test
@@ -315,7 +331,7 @@ public class SearchProcessorTest {
         keys.add(SearchKey.buildOld());
         keys.add(SearchKey.buildLarger(SIZE));
         List<Criterion> criteria = new ArrayList<Criterion>();
-        criteria.add(SearchQuery.internalDateOn(DAY, MONTH, YEAR));
+        criteria.add(SearchQuery.internalDateOn(getDate(DAY, MONTH, YEAR), DateResolution.Day));
         criteria.add(SearchQuery.flagIsUnSet(Flag.RECENT));
         criteria.add(SearchQuery.sizeGreaterThan(SIZE));
         check(SearchKey.buildAnd(keys), SearchQuery.and(criteria));
@@ -325,8 +341,8 @@ public class SearchProcessorTest {
     public void testOR() throws Exception {
         expectsGetSelectedMailbox();
         check(SearchKey.buildOr(SearchKey.buildOn(DAY_MONTH_YEAR), SearchKey
-                .buildOld()), SearchQuery.or(SearchQuery.internalDateOn(DAY,
-                MONTH, YEAR), SearchQuery.flagIsUnSet(Flag.RECENT)));
+                .buildOld()), SearchQuery.or(SearchQuery.internalDateOn(getDate(DAY,
+                MONTH, YEAR), DateResolution.Day), SearchQuery.flagIsUnSet(Flag.RECENT)));
     }
 
     @Test
@@ -344,28 +360,28 @@ public class SearchProcessorTest {
     @Test
     public void testSENTBEFORE() throws Exception {
         expectsGetSelectedMailbox();
-        check(SearchKey.buildSentBefore(DAY_MONTH_YEAR), SearchQuery.headerDateBefore(ImapConstants.RFC822_DATE, DAY, MONTH, YEAR));
+        check(SearchKey.buildSentBefore(DAY_MONTH_YEAR), SearchQuery.headerDateBefore(ImapConstants.RFC822_DATE, getDate(DAY, MONTH, YEAR), DateResolution.Day));
     }
 
     @Test
     public void testSENTON() throws Exception {
         expectsGetSelectedMailbox();
         check(SearchKey.buildSentOn(DAY_MONTH_YEAR), SearchQuery.headerDateOn(
-                ImapConstants.RFC822_DATE, DAY, MONTH, YEAR));
+                ImapConstants.RFC822_DATE, getDate(DAY, MONTH, YEAR), DateResolution.Day));
     }
     @Test
     public void testSENTSINCE() throws Exception {
         expectsGetSelectedMailbox();
-        check(SearchKey.buildSentSince(DAY_MONTH_YEAR), SearchQuery.or(SearchQuery.headerDateOn(ImapConstants.RFC822_DATE, DAY, MONTH, YEAR), SearchQuery
-                .headerDateAfter(ImapConstants.RFC822_DATE, DAY, MONTH, YEAR)));
+        check(SearchKey.buildSentSince(DAY_MONTH_YEAR), SearchQuery.or(SearchQuery.headerDateOn(ImapConstants.RFC822_DATE, getDate(DAY, MONTH, YEAR), DateResolution.Day), SearchQuery
+                .headerDateAfter(ImapConstants.RFC822_DATE, getDate(DAY, MONTH, YEAR), DateResolution.Day)));
     }
 
     @Test
     public void testSINCE() throws Exception {
         expectsGetSelectedMailbox();
         check(SearchKey.buildSince(DAY_MONTH_YEAR), SearchQuery.or(SearchQuery
-                .internalDateOn(DAY, MONTH, YEAR), SearchQuery
-                .internalDateAfter(DAY, MONTH, YEAR)));
+                .internalDateOn(getDate(DAY, MONTH, YEAR), DateResolution.Day), SearchQuery
+                .internalDateAfter(getDate(DAY, MONTH, YEAR), DateResolution.Day)));
     }
 
     @Test



---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org