You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2012/11/14 10:43:36 UTC

svn commit: r1409125 - in /camel/trunk/components/camel-mail/src: main/java/org/apache/camel/component/mail/ test/java/org/apache/camel/component/mail/

Author: davsclaus
Date: Wed Nov 14 09:43:34 2012
New Revision: 1409125

URL: http://svn.apache.org/viewvc?rev=1409125&view=rev
Log:
CAMEL-1069: Added support for searchTerm on camel-mail. Ticket was only 4 years old ;)

Added:
    camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/NowSearchTerm.java   (with props)
    camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSearchTermUriConfigLast24HoursTest.java
      - copied, changed from r1409100, camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSearchTermUriConfigTest.java
Modified:
    camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailComponent.java
    camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConverters.java
    camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/SearchTermBuilder.java
    camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/SimpleSearchTerm.java
    camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/SearchTermBuilderTest.java

Modified: camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailComponent.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailComponent.java?rev=1409125&r1=1409124&r2=1409125&view=diff
==============================================================================
--- camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailComponent.java (original)
+++ camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailComponent.java Wed Nov 14 09:43:34 2012
@@ -76,7 +76,7 @@ public class MailComponent extends Defau
             // use SimpleSearchTerm as POJO to store the configuration and then convert that to the actual SearchTerm
             SimpleSearchTerm sst = new SimpleSearchTerm();
             setProperties(sst, sstParams);
-            SearchTerm st = getCamelContext().getTypeConverter().mandatoryConvertTo(SearchTerm.class, sst);
+            SearchTerm st = MailConverters.toSearchTerm(sst, getCamelContext().getTypeConverter());
             endpoint.setSearchTerm(st);
         }
 

Modified: camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConverters.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConverters.java?rev=1409125&r1=1409124&r2=1409125&view=diff
==============================================================================
--- camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConverters.java (original)
+++ camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConverters.java Wed Nov 14 09:43:34 2012
@@ -21,6 +21,8 @@ import java.io.InputStream;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.Date;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 import javax.mail.BodyPart;
 import javax.mail.Message;
 import javax.mail.MessagingException;
@@ -29,7 +31,11 @@ import javax.mail.internet.MimeMultipart
 import javax.mail.search.SearchTerm;
 
 import org.apache.camel.Converter;
+import org.apache.camel.Exchange;
+import org.apache.camel.NoTypeConversionAvailableException;
+import org.apache.camel.TypeConverter;
 import org.apache.camel.converter.IOConverter;
+import org.apache.camel.spi.TypeConverterRegistry;
 
 /**
  * JavaMail specific converters.
@@ -38,7 +44,11 @@ import org.apache.camel.converter.IOConv
  */
 @Converter
 public final class MailConverters {
-    
+
+    private static final String NOW_DATE_FORMAT = "yyyy-MM-dd HH:mm:SS";
+    // the now syntax: "now-24h" or "now - 24h" = the last 24 hours etc.
+    private static final Pattern NOW_PATTERN = Pattern.compile("now\\s?(\\+|\\-)\\s?(.*)");
+
     private MailConverters() {
         //Utility Class
     }
@@ -64,7 +74,7 @@ public final class MailConverters {
     }
 
     /**
-     * Converts the given JavaMail multipart to a String body, where the contenttype of the multipart
+     * Converts the given JavaMail multipart to a String body, where the content-type of the multipart
      * must be text based (ie start with text). Can return null.
      */
     @Converter
@@ -101,7 +111,11 @@ public final class MailConverters {
     }
 
     @Converter
-    public static SearchTerm toSearchTerm(SimpleSearchTerm simple) throws ParseException {
+    public static SearchTerm toSearchTerm(SimpleSearchTerm simple, Exchange exchange) throws ParseException, NoTypeConversionAvailableException {
+        return toSearchTerm(simple, exchange != null ? exchange.getContext().getTypeConverter() : null);
+    }
+
+    public static SearchTerm toSearchTerm(SimpleSearchTerm simple, TypeConverter typeConverter) throws ParseException, NoTypeConversionAvailableException {
         SearchTermBuilder builder = new SearchTermBuilder();
         if (simple.isUnseen()) {
             builder = builder.unseen();
@@ -124,27 +138,71 @@ public final class MailConverters {
             builder = builder.recipient(Message.RecipientType.TO, simple.getTo());
         }
         if (simple.getFromSentDate() != null) {
-            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:SS");
-            Date date;
-            if ("now".equals(simple.getFromSentDate())) {
-                date = new Date();
+            String s = simple.getFromSentDate();
+            if (s.startsWith("now")) {
+                long offset = extractOffset(s, typeConverter);
+                builder = builder.and(new NowSearchTerm(SearchTermBuilder.Comparison.GE.asNum(), true, offset));
             } else {
-                date = sdf.parse(simple.getFromSentDate());
+                SimpleDateFormat sdf = new SimpleDateFormat(NOW_DATE_FORMAT);
+                Date date = sdf.parse(s);
+                builder = builder.sent(SearchTermBuilder.Comparison.GE, date);
             }
-            builder = builder.sent(SearchTermBuilder.Comparison.GE, date);
         }
         if (simple.getToSentDate() != null) {
-            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:SS");
-            Date date;
-            if ("now".equals(simple.getToSentDate())) {
-                date = new Date();
+            String s = simple.getFromSentDate();
+            if (s.startsWith("now")) {
+                long offset = extractOffset(s, typeConverter);
+                builder = builder.and(new NowSearchTerm(SearchTermBuilder.Comparison.LE.asNum(), true, offset));
             } else {
-                date = sdf.parse(simple.getToSentDate());
+                SimpleDateFormat sdf = new SimpleDateFormat(NOW_DATE_FORMAT);
+                Date date = sdf.parse(s);
+                builder = builder.sent(SearchTermBuilder.Comparison.LE, date);
+            }
+        }
+        if (simple.getFromReceivedDate() != null) {
+            String s = simple.getFromSentDate();
+            if (s.startsWith("now")) {
+                long offset = extractOffset(s, typeConverter);
+                builder = builder.and(new NowSearchTerm(SearchTermBuilder.Comparison.GE.asNum(), false, offset));
+            } else {
+                SimpleDateFormat sdf = new SimpleDateFormat(NOW_DATE_FORMAT);
+                Date date = sdf.parse(s);
+                builder = builder.received(SearchTermBuilder.Comparison.GE, date);
+            }
+        }
+        if (simple.getToReceivedDate() != null) {
+            String s = simple.getFromSentDate();
+            if (s.startsWith("now")) {
+                long offset = extractOffset(s, typeConverter);
+                builder = builder.and(new NowSearchTerm(SearchTermBuilder.Comparison.LE.asNum(), false, offset));
+            } else {
+                SimpleDateFormat sdf = new SimpleDateFormat(NOW_DATE_FORMAT);
+                Date date = sdf.parse(s);
+                builder = builder.received(SearchTermBuilder.Comparison.LE, date);
             }
-            builder = builder.sent(SearchTermBuilder.Comparison.LE, date);
         }
 
         return builder.build();
     }
 
+    private static long extractOffset(String now, TypeConverter typeConverter) throws NoTypeConversionAvailableException {
+        Matcher matcher = NOW_PATTERN.matcher(now);
+        if (matcher.matches()) {
+            String op = matcher.group(1);
+            String remainder = matcher.group(2);
+
+            // convert remainder to a time millis (eg we have a String -> long converter that supports
+            // syntax with hours, days, minutes: eg 5h30m for 5 hours and 30 minutes).
+            long offset = typeConverter.mandatoryConvertTo(long.class, remainder);
+
+            if ("+".equals(op)) {
+                return offset;
+            } else {
+                return -1 * offset;
+            }
+        }
+
+        return 0;
+    }
+
 }

Added: camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/NowSearchTerm.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/NowSearchTerm.java?rev=1409125&view=auto
==============================================================================
--- camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/NowSearchTerm.java (added)
+++ camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/NowSearchTerm.java Wed Nov 14 09:43:34 2012
@@ -0,0 +1,117 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.mail;
+
+import java.util.Date;
+import javax.mail.Message;
+import javax.mail.search.ComparisonTerm;
+import javax.mail.search.DateTerm;
+
+/**
+ * A {@link javax.mail.search.SearchTerm} that is based on
+ * {@link DateTerm} that compares with current date (eg now).
+ * <p/>
+ * This allows to compare with a dynamic derived value.
+ */
+public class NowSearchTerm extends ComparisonTerm {
+
+    private final int comparison;
+    private final boolean sentDate;
+    private final long offset;
+
+    /**
+     * Constructor
+     *
+     * @param comparison the comparison operator
+     * @param sentDate <tt>true</tt> for using sent date, <tt>false</tt> for using received date.
+     * @param offset an optional offset as delta from now, can be a positive or negative value, for example
+     *               to say within last 24 hours.
+     * @see ComparisonTerm
+     */
+    public NowSearchTerm(int comparison, boolean sentDate, long offset) {
+        this.comparison = comparison;
+        this.sentDate = sentDate;
+        this.offset = offset;
+    }
+
+    private Date getDate() {
+        long now = new Date().getTime();
+        return new Date(now + offset);
+    }
+
+    @Override
+    public boolean match(Message msg) {
+        Date d;
+
+        try {
+            if (sentDate) {
+                d = msg.getSentDate();
+            } else {
+                d = msg.getReceivedDate();
+            }
+        } catch (Exception e) {
+            return false;
+        }
+
+        if (d == null) {
+            return false;
+        }
+
+        return match(d, getDate(), comparison);
+    }
+
+    private static boolean match(Date d1, Date d2, int comparison) {
+        switch (comparison) {
+            case LE:
+                return d1.before(d2) || d1.equals(d2);
+            case LT:
+                return d1.before(d2);
+            case EQ:
+                return d1.equals(d2);
+            case NE:
+                return !d1.equals(d2);
+            case GT:
+                return d1.after(d2);
+            case GE:
+                return d1.after(d2) || d1.equals(d2);
+            default:
+                return false;
+        }
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+        if (!super.equals(o)) {
+            return false;
+        }
+
+        NowSearchTerm that = (NowSearchTerm) o;
+
+        if (sentDate != that.sentDate) {
+            return false;
+        }
+
+        return true;
+    }
+
+}

Propchange: camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/NowSearchTerm.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/NowSearchTerm.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/SearchTermBuilder.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/SearchTermBuilder.java?rev=1409125&r1=1409124&r2=1409125&view=diff
==============================================================================
--- camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/SearchTermBuilder.java (original)
+++ camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/SearchTermBuilder.java Wed Nov 14 09:43:34 2012
@@ -151,6 +151,16 @@ public class SearchTermBuilder {
         return this;
     }
 
+    public SearchTermBuilder sentNow(Comparison comparison, long offset) {
+        return sentNow(Op.and, comparison, offset);
+    }
+
+    public SearchTermBuilder sentNow(Op op, Comparison comparison, long offset) {
+        NowSearchTerm st = new NowSearchTerm(comparison.asNum(), true, offset);
+        addTerm(op, st);
+        return this;
+    }
+
     public SearchTermBuilder received(Comparison comparison, Date date) {
         return received(Op.and, comparison, date);
     }
@@ -161,6 +171,16 @@ public class SearchTermBuilder {
         return this;
     }
 
+    public SearchTermBuilder receivedNow(Comparison comparison, long offset) {
+        return sentNow(Op.and, comparison, offset);
+    }
+
+    public SearchTermBuilder receivedNow(Op op, Comparison comparison, long offset) {
+        NowSearchTerm st = new NowSearchTerm(comparison.asNum(), false, offset);
+        addTerm(op, st);
+        return this;
+    }
+
     public SearchTermBuilder and(SearchTerm term) {
         addTerm(Op.and, term);
         return this;

Modified: camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/SimpleSearchTerm.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/SimpleSearchTerm.java?rev=1409125&r1=1409124&r2=1409125&view=diff
==============================================================================
--- camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/SimpleSearchTerm.java (original)
+++ camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/SimpleSearchTerm.java Wed Nov 14 09:43:34 2012
@@ -22,8 +22,8 @@ package org.apache.camel.component.mail;
  * <p/>
  * This POJO has default <tt>true</tt> for the {@link #isUnseen()} option.
  * <p/>
- * The {@link #setFromSentDate(String)} and {@link #setToSentDate(String)} is using the following date pattern
- * <tt>yyyy-MM-dd HH:mm:SS</tt>.
+ * The date options (such as {@link #setFromReceivedDate(String)}) is using
+ * the following date pattern <tt>yyyy-MM-dd HH:mm:SS</tt>.
  */
 public class SimpleSearchTerm {
 
@@ -35,6 +35,8 @@ public class SimpleSearchTerm {
     private String to;
     private String fromSentDate;
     private String toSentDate;
+    private String fromReceivedDate;
+    private String toReceivedDate;
 
     public boolean isUnseen() {
         return unseen;
@@ -99,4 +101,20 @@ public class SimpleSearchTerm {
     public void setToSentDate(String toSentDate) {
         this.toSentDate = toSentDate;
     }
+
+    public String getFromReceivedDate() {
+        return fromReceivedDate;
+    }
+
+    public void setFromReceivedDate(String fromReceivedDate) {
+        this.fromReceivedDate = fromReceivedDate;
+    }
+
+    public String getToReceivedDate() {
+        return toReceivedDate;
+    }
+
+    public void setToReceivedDate(String toReceivedDate) {
+        this.toReceivedDate = toReceivedDate;
+    }
 }

Copied: camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSearchTermUriConfigLast24HoursTest.java (from r1409100, camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSearchTermUriConfigTest.java)
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSearchTermUriConfigLast24HoursTest.java?p2=camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSearchTermUriConfigLast24HoursTest.java&p1=camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSearchTermUriConfigTest.java&r1=1409100&r2=1409125&rev=1409125&view=diff
==============================================================================
--- camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSearchTermUriConfigTest.java (original)
+++ camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSearchTermUriConfigLast24HoursTest.java Wed Nov 14 09:43:34 2012
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.component.mail;
 
+import java.util.Date;
 import javax.mail.Folder;
 import javax.mail.Message;
 import javax.mail.Store;
@@ -28,7 +29,7 @@ import org.apache.camel.test.junit4.Came
 import org.junit.Test;
 import org.jvnet.mock_javamail.Mailbox;
 
-public class MailSearchTermUriConfigTest extends CamelTestSupport {
+public class MailSearchTermUriConfigLast24HoursTest extends CamelTestSupport {
 
     @Override
     public void setUp() throws Exception {
@@ -41,8 +42,10 @@ public class MailSearchTermUriConfigTest
         Mailbox mailbox = Mailbox.get("bill@localhost");
         assertEquals(6, mailbox.size());
 
+        // should only get the 4 latest emails that was sent within the last 24 hours
         MockEndpoint mock = getMockEndpoint("mock:result");
-        mock.expectedBodiesReceivedInAnyOrder("I like riding the Camel", "Ordering Camel in Action");
+        mock.expectedBodiesReceivedInAnyOrder("Ordering ActiveMQ in Action", "This is spam",
+                "We meet at 7pm the usual place", "I am attaching you");
 
         assertMockEndpointsSatisfied();
     }
@@ -57,37 +60,48 @@ public class MailSearchTermUriConfigTest
         folder.open(Folder.READ_WRITE);
         folder.expunge();
 
+        long twoDaysAgo = new Date().getTime() - 2 * 24 * 60 * 60 * 1000L;
+        long twentyHoursAgo = new Date().getTime() - 1 * 20 * 60 * 60 * 1000L;
+        long oneHourAgo = new Date().getTime() - 1 * 1 * 60 * 60 * 1000L;
+
         // inserts 5 new messages
         Message[] messages = new Message[6];
         messages[0] = new MimeMessage(sender.getSession());
         messages[0].setSubject("Apache Camel rocks");
         messages[0].setText("I like riding the Camel");
         messages[0].setFrom(new InternetAddress("someone@somewhere.com"));
+        messages[0].setSentDate(new Date(twoDaysAgo));
 
         messages[1] = new MimeMessage(sender.getSession());
         messages[1].setSubject("Order");
         messages[1].setText("Ordering Camel in Action");
         messages[1].setFrom(new InternetAddress("dude@somewhere.com"));
+        messages[1].setSentDate(new Date(twoDaysAgo));
 
         messages[2] = new MimeMessage(sender.getSession());
         messages[2].setSubject("Order");
         messages[2].setText("Ordering ActiveMQ in Action");
         messages[2].setFrom(new InternetAddress("dude@somewhere.com"));
+        messages[2].setSentDate(new Date(twentyHoursAgo));
 
         messages[3] = new MimeMessage(sender.getSession());
         messages[3].setSubject("Buy pharmacy");
         messages[3].setText("This is spam");
         messages[3].setFrom(new InternetAddress("spam@me.com"));
+        messages[3].setSentDate(new Date(twentyHoursAgo));
 
         messages[4] = new MimeMessage(sender.getSession());
         messages[4].setSubject("Beers tonight?");
         messages[4].setText("We meet at 7pm the usual place");
         messages[4].setFrom(new InternetAddress("barney@simpsons.com"));
+        messages[4].setSentDate(new Date(oneHourAgo));
 
         messages[5] = new MimeMessage(sender.getSession());
         messages[5].setSubject("Spambot attack");
         messages[5].setText("I am attaching you");
         messages[5].setFrom(new InternetAddress("spambot@me.com"));
+        messages[5].setSentDate(new Date());
+        messages[5].setSentDate(new Date(oneHourAgo));
 
         folder.appendMessages(messages);
         folder.close(true);
@@ -96,7 +110,7 @@ public class MailSearchTermUriConfigTest
     protected RouteBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {
             public void configure() throws Exception {
-                from("pop3://bill@localhost?password=secret&searchTerm.subjectOrBody=Camel").to("mock:result");
+                from("pop3://bill@localhost?password=secret&searchTerm.fromSentDate=now-24h").to("mock:result");
             }
         };
     }

Modified: camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/SearchTermBuilderTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/SearchTermBuilderTest.java?rev=1409125&r1=1409124&r2=1409125&view=diff
==============================================================================
--- camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/SearchTermBuilderTest.java (original)
+++ camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/SearchTermBuilderTest.java Wed Nov 14 09:43:34 2012
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.component.mail;
 
+import java.util.Date;
 import javax.mail.internet.InternetAddress;
 import javax.mail.internet.MimeMessage;
 import javax.mail.search.SearchTerm;
@@ -23,6 +24,7 @@ import javax.mail.search.SearchTerm;
 import junit.framework.TestCase;
 import org.jvnet.mock_javamail.Mailbox;
 
+import static org.apache.camel.component.mail.SearchTermBuilder.Comparison;
 import static org.apache.camel.component.mail.SearchTermBuilder.Op.or;
 
 /**
@@ -76,13 +78,43 @@ public class SearchTermBuilderTest exten
         assertTrue("Should match message, as its from admin", st.match(msg2));
     }
 
+    public void testSearchTermSentLast24Hours() throws Exception {
+        SearchTermBuilder build = new SearchTermBuilder();
+        long offset = -1 * (24 * 60 * 60 * 1000L);
+        SearchTerm st = build.subject("Camel").sentNow(Comparison.GE, offset).build();
+
+        assertNotNull(st);
+
+        // create dummy message
+        Mailbox.clearAll();
+        JavaMailSender sender = new DefaultJavaMailSender();
+
+        MimeMessage msg = new MimeMessage(sender.getSession());
+        msg.setSubject("Yeah Camel rocks");
+        msg.setText("Apache Camel is a cool project. Have a fun ride.");
+        msg.setFrom(new InternetAddress("someone@somewhere.com"));
+        msg.setSentDate(new Date());
+        assertTrue("Should match message", st.match(msg));
+
+        MimeMessage msg2 = new MimeMessage(sender.getSession());
+        msg2.setSubject("Camel in Action");
+        msg2.setText("Hey great book");
+        msg2.setFrom(new InternetAddress("dude@apache.org"));
+        // mark it as sent 2 days ago
+        long twoDays = 2 * 24 * 60 * 60 * 1000L;
+        long time = new Date().getTime() - twoDays;
+        msg2.setSentDate(new Date(time));
+
+        assertFalse("Should not match message as its too old", st.match(msg2));
+    }
+
     public void testComparison() throws Exception {
-        assertEquals(1, SearchTermBuilder.Comparison.LE.asNum());
-        assertEquals(2, SearchTermBuilder.Comparison.LT.asNum());
-        assertEquals(3, SearchTermBuilder.Comparison.EQ.asNum());
-        assertEquals(4, SearchTermBuilder.Comparison.NE.asNum());
-        assertEquals(5, SearchTermBuilder.Comparison.GT.asNum());
-        assertEquals(6, SearchTermBuilder.Comparison.GE.asNum());
+        assertEquals(1, Comparison.LE.asNum());
+        assertEquals(2, Comparison.LT.asNum());
+        assertEquals(3, Comparison.EQ.asNum());
+        assertEquals(4, Comparison.NE.asNum());
+        assertEquals(5, Comparison.GT.asNum());
+        assertEquals(6, Comparison.GE.asNum());
     }
 
 }