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