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 ro...@apache.org on 2017/01/11 16:45:39 UTC

[12/22] james-project git commit: JAMES-1894 Push GetMessageList sorting and limit to the back-end

http://git-wip-us.apache.org/repos/asf/james-project/blob/299addd9/mailbox/store/src/test/java/org/apache/james/mailbox/store/search/AbstractMessageSearchIndexTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/search/AbstractMessageSearchIndexTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/search/AbstractMessageSearchIndexTest.java
index 49acd2a..74f8a3b 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/search/AbstractMessageSearchIndexTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/search/AbstractMessageSearchIndexTest.java
@@ -21,18 +21,17 @@ package org.apache.james.mailbox.store.search;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
-import java.util.Collection;
 import java.util.Date;
-import java.util.Map;
+import java.util.List;
 
 import javax.mail.Flags;
 
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
-import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.exception.MailboxException;
-import org.apache.james.mailbox.model.MailboxId;
+import org.apache.james.mailbox.model.ComposedMessageId;
 import org.apache.james.mailbox.model.MailboxPath;
+import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.model.MultimailboxesSearchQuery;
 import org.apache.james.mailbox.model.SearchQuery;
 import org.apache.james.mailbox.model.SearchQuery.AddressType;
@@ -50,6 +49,7 @@ import com.google.common.collect.Lists;
 public abstract class AbstractMessageSearchIndexTest {
 
     private static final Logger LOGGER = LoggerFactory.getLogger(AbstractMessageSearchIndexTest.class);
+    public static final long LIMIT = 100L;
 
     protected MessageSearchIndex messageSearchIndex;
     protected StoreMailboxManager storeMailboxManager;
@@ -57,15 +57,16 @@ public abstract class AbstractMessageSearchIndexTest {
     private Mailbox mailbox2;
     private MailboxSession session;
 
-    private MessageUid m1;
-    private MessageUid m2;
-    private MessageUid m3;
-    private MessageUid m4;
-    private MessageUid m5;
-    private MessageUid m6;
-    private MessageUid m7;
-    private MessageUid m8;
-    private MessageUid m9;
+    private ComposedMessageId m1;
+    private ComposedMessageId m2;
+    private ComposedMessageId m3;
+    private ComposedMessageId m4;
+    private ComposedMessageId m5;
+    private ComposedMessageId m6;
+    private ComposedMessageId m7;
+    private ComposedMessageId m8;
+    private ComposedMessageId m9;
+    private ComposedMessageId mOther;
 
     @Before
     public void setUp() throws Exception {
@@ -87,7 +88,7 @@ public abstract class AbstractMessageSearchIndexTest {
             new Date(1388617200000L),
             session,
             true,
-            new Flags(Flags.Flag.DELETED)).getUid();
+            new Flags(Flags.Flag.DELETED));
         // sentDate: Thu, 4 Jun 2015 09:23:37 +0000
         // Internal date : 2014/02/02 00:00:00.000
         m2 = inboxMessageManager.appendMessage(
@@ -95,7 +96,7 @@ public abstract class AbstractMessageSearchIndexTest {
             new Date(1391295600000L),
             session,
             true,
-            new Flags(Flags.Flag.ANSWERED)).getUid();
+            new Flags(Flags.Flag.ANSWERED));
         // sentDate: Thu, 4 Jun 2015 09:27:37 +0000
         // Internal date : 2014/03/02 00:00:00.000
         m3 = inboxMessageManager.appendMessage(
@@ -103,7 +104,7 @@ public abstract class AbstractMessageSearchIndexTest {
             new Date(1393714800000L),
             session,
             true,
-            new Flags(Flags.Flag.DRAFT)).getUid();
+            new Flags(Flags.Flag.DRAFT));
         // sentDate: Tue, 2 Jun 2015 08:16:19 +0000
         // Internal date : 2014/05/02 00:00:00.000
         m4 = inboxMessageManager.appendMessage(
@@ -111,7 +112,7 @@ public abstract class AbstractMessageSearchIndexTest {
             new Date(1398981600000L),
             session,
             true,
-            new Flags(Flags.Flag.RECENT)).getUid();
+            new Flags(Flags.Flag.RECENT));
         // sentDate: Fri, 15 May 2015 06:35:59 +0000
         // Internal date : 2014/04/02 00:00:00.000
         m5 = inboxMessageManager.appendMessage(
@@ -119,7 +120,7 @@ public abstract class AbstractMessageSearchIndexTest {
             new Date(1396389600000L),
             session,
             true,
-            new Flags(Flags.Flag.FLAGGED)).getUid();
+            new Flags(Flags.Flag.FLAGGED));
         // sentDate: Wed, 03 Jun 2015 19:14:32 +0000
         // Internal date : 2014/06/02 00:00:00.000
         m6 = inboxMessageManager.appendMessage(
@@ -127,7 +128,7 @@ public abstract class AbstractMessageSearchIndexTest {
             new Date(1401660000000L),
             session,
             true,
-            new Flags(Flags.Flag.SEEN)).getUid();
+            new Flags(Flags.Flag.SEEN));
         // sentDate: Thu, 04 Jun 2015 07:36:08 +0000
         // Internal date : 2014/07/02 00:00:00.000
         m7 = inboxMessageManager.appendMessage(
@@ -135,7 +136,7 @@ public abstract class AbstractMessageSearchIndexTest {
             new Date(1404252000000L),
             session,
             false,
-            new Flags()).getUid();
+            new Flags());
         // sentDate: Thu, 4 Jun 2015 06:08:41 +0200
         // Internal date : 2014/08/02 00:00:00.000
         m8 = inboxMessageManager.appendMessage(
@@ -143,10 +144,10 @@ public abstract class AbstractMessageSearchIndexTest {
             new Date(1406930400000L),
             session,
             true,
-            new Flags("Hello")).getUid();
+            new Flags("Hello"));
         // sentDate: Thu, 4 Jun 2015 06:08:41 +0200
         // Internal date : 2014/08/02 00:00:00.000
-        myFolderMessageManager.appendMessage(
+        mOther = myFolderMessageManager.appendMessage(
             ClassLoader.getSystemResourceAsStream("eml/mail.eml"),
             new Date(1406930400000L),
             session,
@@ -159,7 +160,7 @@ public abstract class AbstractMessageSearchIndexTest {
             new Date(1409608800000L),
             session,
             true,
-            new Flags("Hello you")).getUid();
+            new Flags("Hello you"));
         await();
     }
 
@@ -187,7 +188,7 @@ public abstract class AbstractMessageSearchIndexTest {
     public void emptySearchQueryShouldReturnAllUids() throws MailboxException {
         SearchQuery searchQuery = new SearchQuery();
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsOnly(m1, m2, m3, m4, m5, m6, m7, m8, m9);
+            .containsOnly(m1.getUid(), m2.getUid(), m3.getUid(), m4.getUid(), m5.getUid(), m6.getUid(), m7.getUid(), m8.getUid(), m9.getUid());
     }
 
     @Test
@@ -195,7 +196,7 @@ public abstract class AbstractMessageSearchIndexTest {
         SearchQuery searchQuery = new SearchQuery();
         searchQuery.andCriteria(SearchQuery.all());
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsOnly(m1, m2, m3, m4, m5, m6, m7, m8, m9);
+            .containsOnly(m1.getUid(), m2.getUid(), m3.getUid(), m4.getUid(), m5.getUid(), m6.getUid(), m7.getUid(), m8.getUid(), m9.getUid());
     }
 
     @Test
@@ -206,7 +207,7 @@ public abstract class AbstractMessageSearchIndexTest {
         SearchQuery searchQuery = new SearchQuery();
         searchQuery.andCriteria(SearchQuery.bodyContains("MAILET-94"));
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsOnly(m5);
+            .containsOnly(m5.getUid());
     }
 
     @Test
@@ -218,7 +219,7 @@ public abstract class AbstractMessageSearchIndexTest {
         SearchQuery searchQuery = new SearchQuery();
         searchQuery.andCriteria(SearchQuery.bodyContains("created summary"));
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsOnly(m2, m8);
+            .containsOnly(m2.getUid(), m8.getUid());
     }
 
     @Test
@@ -226,7 +227,7 @@ public abstract class AbstractMessageSearchIndexTest {
         SearchQuery searchQuery = new SearchQuery();
         searchQuery.andCriteria(SearchQuery.flagIsSet(Flags.Flag.DELETED));
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsOnly(m1);
+            .containsOnly(m1.getUid());
     }
 
     @Test
@@ -234,7 +235,7 @@ public abstract class AbstractMessageSearchIndexTest {
         SearchQuery searchQuery = new SearchQuery();
         searchQuery.andCriteria(SearchQuery.flagIsSet(Flags.Flag.ANSWERED));
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsOnly(m2);
+            .containsOnly(m2.getUid());
     }
 
     @Test
@@ -242,7 +243,7 @@ public abstract class AbstractMessageSearchIndexTest {
         SearchQuery searchQuery = new SearchQuery();
         searchQuery.andCriteria(SearchQuery.flagIsSet(Flags.Flag.DRAFT));
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsOnly(m3);
+            .containsOnly(m3.getUid());
     }
 
     @Test
@@ -251,7 +252,7 @@ public abstract class AbstractMessageSearchIndexTest {
         SearchQuery searchQuery = new SearchQuery();
         searchQuery.andCriteria(SearchQuery.flagIsSet(Flags.Flag.RECENT));
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsOnly(m1, m2, m3, m4, m5, m6, m8, m9);
+            .containsOnly(m1.getUid(), m2.getUid(), m3.getUid(), m4.getUid(), m5.getUid(), m6.getUid(), m8.getUid(), m9.getUid());
     }
 
     @Test
@@ -259,7 +260,7 @@ public abstract class AbstractMessageSearchIndexTest {
         SearchQuery searchQuery = new SearchQuery();
         searchQuery.andCriteria(SearchQuery.flagIsSet(Flags.Flag.FLAGGED));
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsOnly(m5);
+            .containsOnly(m5.getUid());
     }
 
     @Test
@@ -268,17 +269,17 @@ public abstract class AbstractMessageSearchIndexTest {
         SearchQuery searchQuery = new SearchQuery();
         searchQuery.andCriteria(SearchQuery.flagIsSet(Flags.Flag.SEEN));
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsOnly(m6);
+            .containsOnly(m6.getUid());
     }
     
     @Test
     public void multimailboxSearchShouldReturnUidOfMessageMarkedAsSeenInAllMailboxes() throws MailboxException {
         SearchQuery searchQuery = new SearchQuery();
         searchQuery.andCriteria(SearchQuery.flagIsSet(Flags.Flag.SEEN));
-        Map<MailboxId, Collection<MessageUid>> actual = messageSearchIndex.search(session, MultimailboxesSearchQuery.from(searchQuery).build());
-        assertThat(actual.entrySet()).hasSize(2);
-        assertThat(actual.get(mailbox.getMailboxId())).containsExactly(m6);
-        assertThat(actual.get(mailbox2.getMailboxId())).containsExactly(m1);
+
+        List<MessageId> actual = messageSearchIndex.search(session, MultimailboxesSearchQuery.from(searchQuery).build(), LIMIT);
+
+        assertThat(actual).containsOnly(mOther.getMessageId(), m6.getMessageId());
     }
 
     @Test
@@ -290,9 +291,10 @@ public abstract class AbstractMessageSearchIndexTest {
                     .from(searchQuery)
                     .inMailboxes(mailbox.getMailboxId())
                     .build();
-        Map<MailboxId, Collection<MessageUid>> actual = messageSearchIndex.search(session, query);
-        assertThat(actual.entrySet()).hasSize(1);
-        assertThat(actual.get(mailbox.getMailboxId())).containsExactly(m6);
+
+        List<MessageId> actual = messageSearchIndex.search(session, query, LIMIT);
+
+        assertThat(actual).containsOnly(m6.getMessageId());
     }
 
     @Test
@@ -304,10 +306,9 @@ public abstract class AbstractMessageSearchIndexTest {
                     .from(searchQuery)
                     .inMailboxes(mailbox.getMailboxId(), mailbox2.getMailboxId())
                     .build();
-        Map<MailboxId, Collection<MessageUid>> actual = messageSearchIndex.search(session, query);
-        assertThat(actual.entrySet()).hasSize(2);
-        assertThat(actual.get(mailbox.getMailboxId())).containsExactly(m8);
-        assertThat(actual.get(mailbox2.getMailboxId())).containsExactly(m1);
+        List<MessageId> actual = messageSearchIndex.search(session, query, LIMIT);
+
+        assertThat(actual).containsOnly(mOther.getMessageId(), m8.getMessageId());
     }
 
     @Test
@@ -318,10 +319,10 @@ public abstract class AbstractMessageSearchIndexTest {
                 MultimailboxesSearchQuery
                     .from(searchQuery)
                     .build();
-        Map<MailboxId, Collection<MessageUid>> actual = messageSearchIndex.search(session, query);
-        assertThat(actual.entrySet()).hasSize(2);
-        assertThat(actual.get(mailbox.getMailboxId())).containsExactly(m8);
-        assertThat(actual.get(mailbox2.getMailboxId())).containsExactly(m1);
+
+        List<MessageId> actual = messageSearchIndex.search(session, query, LIMIT);
+
+        assertThat(actual).containsOnly(mOther.getMessageId(), m8.getMessageId());
     }
 
     @Test
@@ -333,18 +334,36 @@ public abstract class AbstractMessageSearchIndexTest {
                     .from(searchQuery)
                     .inMailboxes(mailbox.getMailboxId(), mailbox2.getMailboxId())
                     .build();
-        Map<MailboxId, Collection<MessageUid>> actual = messageSearchIndex.search(session, query);
-        assertThat(actual.entrySet()).hasSize(2);
-        assertThat(actual.get(mailbox.getMailboxId())).containsExactly(m6);
-        assertThat(actual.get(mailbox2.getMailboxId())).containsExactly(m1);
+
+        List<MessageId> actual = messageSearchIndex.search(session, query, LIMIT);
+
+        assertThat(actual).containsOnly(mOther.getMessageId(), m6.getMessageId());
     }
-    
+
+    @Test
+    public void multimailboxSearchShouldLimitTheSize() throws MailboxException {
+        SearchQuery searchQuery = new SearchQuery();
+        searchQuery.andCriteria(SearchQuery.flagIsSet(Flags.Flag.SEEN));
+        MultimailboxesSearchQuery query =
+            MultimailboxesSearchQuery
+                .from(searchQuery)
+                .inMailboxes(mailbox.getMailboxId(), mailbox2.getMailboxId())
+                .build();
+
+        long limit = 1;
+        List<MessageId> actual = messageSearchIndex.search(session, query, limit);
+        // Two messages matches this query : mOther and m6
+
+        assertThat(actual).hasSize(1);
+    }
+
+
     @Test
     public void flagIsSetShouldReturnUidsOfMessageContainingAGivenUserFlag() throws MailboxException {
         SearchQuery searchQuery = new SearchQuery();
         searchQuery.andCriteria(SearchQuery.flagIsSet("Hello"));
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsOnly(m8);
+            .containsOnly(m8.getUid());
     }
 
     @Test
@@ -360,7 +379,7 @@ public abstract class AbstractMessageSearchIndexTest {
         SearchQuery searchQuery = new SearchQuery();
         searchQuery.andCriteria(SearchQuery.flagIsUnSet(Flags.Flag.DELETED));
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsOnly(m2, m3, m4, m5, m6, m7, m8, m9);
+            .containsOnly(m2.getUid(), m3.getUid(), m4.getUid(), m5.getUid(), m6.getUid(), m7.getUid(), m8.getUid(), m9.getUid());
     }
 
     @Test
@@ -368,7 +387,7 @@ public abstract class AbstractMessageSearchIndexTest {
         SearchQuery searchQuery = new SearchQuery();
         searchQuery.andCriteria(SearchQuery.flagIsUnSet(Flags.Flag.ANSWERED));
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsOnly(m1, m3, m4, m5, m6, m7, m8, m9);
+            .containsOnly(m1.getUid(), m3.getUid(), m4.getUid(), m5.getUid(), m6.getUid(), m7.getUid(), m8.getUid(), m9.getUid());
     }
 
     @Test
@@ -376,7 +395,7 @@ public abstract class AbstractMessageSearchIndexTest {
         SearchQuery searchQuery = new SearchQuery();
         searchQuery.andCriteria(SearchQuery.flagIsUnSet(Flags.Flag.DRAFT));
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsOnly(m1, m2, m4, m5, m6, m7, m8, m9);
+            .containsOnly(m1.getUid(), m2.getUid(), m4.getUid(), m5.getUid(), m6.getUid(), m7.getUid(), m8.getUid(), m9.getUid());
     }
 
     @Test
@@ -385,7 +404,7 @@ public abstract class AbstractMessageSearchIndexTest {
         SearchQuery searchQuery = new SearchQuery();
         searchQuery.andCriteria(SearchQuery.flagIsUnSet(Flags.Flag.RECENT));
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsOnly(m7);
+            .containsOnly(m7.getUid());
     }
 
     @Test
@@ -393,7 +412,7 @@ public abstract class AbstractMessageSearchIndexTest {
         SearchQuery searchQuery = new SearchQuery();
         searchQuery.andCriteria(SearchQuery.flagIsUnSet(Flags.Flag.FLAGGED));
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsOnly(m1, m2, m3, m4, m6, m7, m8, m9);
+            .containsOnly(m1.getUid(), m2.getUid(), m3.getUid(), m4.getUid(), m6.getUid(), m7.getUid(), m8.getUid(), m9.getUid());
     }
 
     @Test
@@ -402,7 +421,7 @@ public abstract class AbstractMessageSearchIndexTest {
         SearchQuery searchQuery = new SearchQuery();
         searchQuery.andCriteria(SearchQuery.flagIsUnSet(Flags.Flag.SEEN));
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsOnly(m1, m2, m3, m4, m5, m7, m8, m9);
+            .containsOnly(m1.getUid(), m2.getUid(), m3.getUid(), m4.getUid(), m5.getUid(), m7.getUid(), m8.getUid(), m9.getUid());
     }
 
     @Test
@@ -410,7 +429,7 @@ public abstract class AbstractMessageSearchIndexTest {
         SearchQuery searchQuery = new SearchQuery();
         searchQuery.andCriteria(SearchQuery.flagIsUnSet("Hello"));
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsOnly(m1, m2, m3, m4, m5, m6, m7,  m9);
+            .containsOnly(m1.getUid(), m2.getUid(), m3.getUid(), m4.getUid(), m5.getUid(), m6.getUid(), m7.getUid(),  m9.getUid());
     }
 
     @Test
@@ -419,7 +438,7 @@ public abstract class AbstractMessageSearchIndexTest {
         // Date : 2014/07/02 00:00:00.000 ( Paris time zone )
         searchQuery.andCriteria(SearchQuery.internalDateAfter(new Date(1404252000000L), SearchQuery.DateResolution.Day));
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsOnly(m7, m8, m9);
+            .containsOnly(m7.getUid(), m8.getUid(), m9.getUid());
     }
 
     @Test
@@ -428,7 +447,7 @@ public abstract class AbstractMessageSearchIndexTest {
         // Date : 2014/02/02 00:00:00.000 ( Paris time zone )
         searchQuery.andCriteria(SearchQuery.internalDateBefore(new Date(1391295600000L), SearchQuery.DateResolution.Day));
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsOnly(m1, m2);
+            .containsOnly(m1.getUid(), m2.getUid());
     }
 
     @Test
@@ -437,7 +456,7 @@ public abstract class AbstractMessageSearchIndexTest {
         // Date : 2014/03/02 00:00:00.000 ( Paris time zone )
         searchQuery.andCriteria(SearchQuery.internalDateOn(new Date(1393714800000L), SearchQuery.DateResolution.Day));
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsOnly(m3);
+            .containsOnly(m3.getUid());
     }
 
     @Test
@@ -445,7 +464,7 @@ public abstract class AbstractMessageSearchIndexTest {
         SearchQuery searchQuery = new SearchQuery();
         searchQuery.andCriteria(SearchQuery.modSeqEquals(2L));
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsOnly(m2);
+            .containsOnly(m2.getUid());
     }
 
     @Test
@@ -453,7 +472,7 @@ public abstract class AbstractMessageSearchIndexTest {
         SearchQuery searchQuery = new SearchQuery();
         searchQuery.andCriteria(SearchQuery.modSeqGreaterThan(7L));
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsOnly(m7, m8, m9);
+            .containsOnly(m7.getUid(), m8.getUid(), m9.getUid());
     }
 
     @Test
@@ -461,7 +480,7 @@ public abstract class AbstractMessageSearchIndexTest {
         SearchQuery searchQuery = new SearchQuery();
         searchQuery.andCriteria(SearchQuery.modSeqLessThan(3L));
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsOnly(m1, m2, m3);
+            .containsOnly(m1.getUid(), m2.getUid(), m3.getUid());
     }
 
     @Test
@@ -470,7 +489,7 @@ public abstract class AbstractMessageSearchIndexTest {
         SearchQuery searchQuery = new SearchQuery();
         searchQuery.andCriteria(SearchQuery.sizeGreaterThan(6800L));
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsOnly(m6);
+            .containsOnly(m6.getUid());
     }
 
     @Test
@@ -479,7 +498,7 @@ public abstract class AbstractMessageSearchIndexTest {
         SearchQuery searchQuery = new SearchQuery();
         searchQuery.andCriteria(SearchQuery.sizeLessThan(5000L));
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsOnly(m2, m3, m4, m5, m7, m9);
+            .containsOnly(m2.getUid(), m3.getUid(), m4.getUid(), m5.getUid(), m7.getUid(), m9.getUid());
     }
 
     @Test
@@ -487,7 +506,7 @@ public abstract class AbstractMessageSearchIndexTest {
         SearchQuery searchQuery = new SearchQuery();
         searchQuery.andCriteria(SearchQuery.headerContains("Precedence", "list"));
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsOnly(m1, m6, m8, m9);
+            .containsOnly(m1.getUid(), m6.getUid(), m8.getUid(), m9.getUid());
     }
 
     @Test
@@ -495,7 +514,7 @@ public abstract class AbstractMessageSearchIndexTest {
         SearchQuery searchQuery = new SearchQuery();
         searchQuery.andCriteria(SearchQuery.headerExists("Precedence"));
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsOnly(m1, m2, m3, m4, m5, m6, m8, m9);
+            .containsOnly(m1.getUid(), m2.getUid(), m3.getUid(), m4.getUid(), m5.getUid(), m6.getUid(), m8.getUid(), m9.getUid());
     }
 
     @Test
@@ -503,7 +522,7 @@ public abstract class AbstractMessageSearchIndexTest {
         SearchQuery searchQuery = new SearchQuery();
         searchQuery.andCriteria(SearchQuery.address(SearchQuery.AddressType.From, "murari.ksr@gmail.com"));
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsOnly(m8);
+            .containsOnly(m8.getUid());
     }
 
     @Test
@@ -511,7 +530,7 @@ public abstract class AbstractMessageSearchIndexTest {
         SearchQuery searchQuery = new SearchQuery();
         searchQuery.andCriteria(SearchQuery.address(SearchQuery.AddressType.To, "root@listes.minet.net"));
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsOnly(m1);
+            .containsOnly(m1.getUid());
     }
 
     @Test
@@ -519,7 +538,7 @@ public abstract class AbstractMessageSearchIndexTest {
         SearchQuery searchQuery = new SearchQuery();
         searchQuery.andCriteria(SearchQuery.address(SearchQuery.AddressType.Cc, "any@any.com"));
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsOnly(m5);
+            .containsOnly(m5.getUid());
     }
 
     @Test
@@ -527,16 +546,16 @@ public abstract class AbstractMessageSearchIndexTest {
         SearchQuery searchQuery = new SearchQuery();
         searchQuery.andCriteria(SearchQuery.address(SearchQuery.AddressType.Bcc, "no@no.com"));
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsOnly(m9);
+            .containsOnly(m9.getUid());
     }
 
     @Test
     public void uidShouldreturnExistingUidsOnTheGivenRanges() throws Exception {
         SearchQuery searchQuery = new SearchQuery();
-        SearchQuery.UidRange[] numericRanges = {new SearchQuery.UidRange(m2, m4), new SearchQuery.UidRange(m6, m7)};
+        SearchQuery.UidRange[] numericRanges = {new SearchQuery.UidRange(m2.getUid(), m4.getUid()), new SearchQuery.UidRange(m6.getUid(), m7.getUid())};
         searchQuery.andCriteria(SearchQuery.uid(numericRanges));
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsOnly(m2, m3, m4, m6, m7);
+            .containsOnly(m2.getUid(), m3.getUid(), m4.getUid(), m6.getUid(), m7.getUid());
     }
 
     @Test
@@ -545,7 +564,7 @@ public abstract class AbstractMessageSearchIndexTest {
         SearchQuery.UidRange[] numericRanges = {};
         searchQuery.andCriteria(SearchQuery.uid(numericRanges));
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsOnly(m1, m2, m3, m4, m5, m6, m7, m8, m9);
+            .containsOnly(m1.getUid(), m2.getUid(), m3.getUid(), m4.getUid(), m5.getUid(), m6.getUid(), m7.getUid(), m8.getUid(), m9.getUid());
     }
 
     @Test
@@ -554,7 +573,7 @@ public abstract class AbstractMessageSearchIndexTest {
         searchQuery.andCriteria(SearchQuery.headerExists("Precedence"));
         searchQuery.andCriteria(SearchQuery.modSeqGreaterThan(6L));
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsOnly(m6, m8, m9);
+            .containsOnly(m6.getUid(), m8.getUid(), m9.getUid());
     }
 
     @Test
@@ -565,19 +584,19 @@ public abstract class AbstractMessageSearchIndexTest {
                 SearchQuery.headerExists("Precedence"),
                 SearchQuery.modSeqGreaterThan(6L)));
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsOnly(m6, m8, m9);
+            .containsOnly(m6.getUid(), m8.getUid(), m9.getUid());
     }
 
     @Test
     public void orShouldReturnResultsMatchinganyRequests() throws Exception {
-        SearchQuery.UidRange[] numericRanges = {new SearchQuery.UidRange(m2, m4)};
+        SearchQuery.UidRange[] numericRanges = {new SearchQuery.UidRange(m2.getUid(), m4.getUid())};
         SearchQuery searchQuery = new SearchQuery();
         searchQuery.andCriteria(
             SearchQuery.or(
                 SearchQuery.uid(numericRanges),
                 SearchQuery.modSeqGreaterThan(6L)));
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsOnly(m2, m3, m4, m6, m7, m8, m9);
+            .containsOnly(m2.getUid(), m3.getUid(), m4.getUid(), m6.getUid(), m7.getUid(), m8.getUid(), m9.getUid());
     }
 
     @Test
@@ -586,7 +605,7 @@ public abstract class AbstractMessageSearchIndexTest {
         searchQuery.andCriteria(
             SearchQuery.not(SearchQuery.headerExists("Precedence")));
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsOnly(m7);
+            .containsOnly(m7.getUid());
     }
 
     @Test
@@ -595,7 +614,7 @@ public abstract class AbstractMessageSearchIndexTest {
         searchQuery.andCriteria(SearchQuery.all());
         searchQuery.setSorts(Lists.newArrayList(new SearchQuery.Sort(SearchQuery.Sort.SortClause.Arrival)));
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsExactly(m1, m2, m3, m5, m4, m6, m7, m8, m9);
+            .containsExactly(m1.getUid(), m2.getUid(), m3.getUid(), m5.getUid(), m4.getUid(), m6.getUid(), m7.getUid(), m8.getUid(), m9.getUid());
     }
 
     @Test
@@ -604,7 +623,7 @@ public abstract class AbstractMessageSearchIndexTest {
         searchQuery.andCriteria(SearchQuery.all());
         searchQuery.setSorts(Lists.newArrayList(new SearchQuery.Sort(SearchQuery.Sort.SortClause.Arrival, true)));
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsExactly(m9, m8, m7, m6, m4, m5, m3, m2, m1);
+            .containsExactly(m9.getUid(), m8.getUid(), m7.getUid(), m6.getUid(), m4.getUid(), m5.getUid(), m3.getUid(), m2.getUid(), m1.getUid());
     }
 
     @Test
@@ -614,7 +633,7 @@ public abstract class AbstractMessageSearchIndexTest {
         searchQuery.andCriteria(SearchQuery.headerDateAfter("sentDate", new Date(1433408400000L), SearchQuery.DateResolution.Second));
         searchQuery.setSorts(Lists.newArrayList(new SearchQuery.Sort(SearchQuery.Sort.SortClause.Arrival, true)));
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsOnly(m3, m2);
+            .containsOnly(m3.getUid(), m2.getUid());
     }
 
     @Test
@@ -624,7 +643,7 @@ public abstract class AbstractMessageSearchIndexTest {
         searchQuery.andCriteria(SearchQuery.headerDateBefore("sentDate", new Date(1433109600000L), SearchQuery.DateResolution.Day));
         searchQuery.setSorts(Lists.newArrayList(new SearchQuery.Sort(SearchQuery.Sort.SortClause.Arrival, true)));
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsOnly(m5);
+            .containsOnly(m5.getUid());
     }
 
     @Test
@@ -634,7 +653,7 @@ public abstract class AbstractMessageSearchIndexTest {
         searchQuery.andCriteria(SearchQuery.headerDateOn("sentDate", new Date(1433224800000L), SearchQuery.DateResolution.Day));
         searchQuery.setSorts(Lists.newArrayList(new SearchQuery.Sort(SearchQuery.Sort.SortClause.Arrival, true)));
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsOnly(m4, m9);
+            .containsOnly(m4.getUid(), m9.getUid());
     }
 
     @Test
@@ -642,17 +661,17 @@ public abstract class AbstractMessageSearchIndexTest {
         SearchQuery searchQuery = new SearchQuery();
         searchQuery.andCriteria(SearchQuery.mailContains("root mailing list"));
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsOnly(m1, m6);
+            .containsOnly(m1.getUid(), m6.getUid());
     }
 
     @Test
     public void sortOnCcShouldWork() throws Exception {
         SearchQuery searchQuery = new SearchQuery();
-        SearchQuery.UidRange[] numericRanges = {new SearchQuery.UidRange(m2, m5)};
+        SearchQuery.UidRange[] numericRanges = {new SearchQuery.UidRange(m2.getUid(), m5.getUid())};
         searchQuery.andCriteria(SearchQuery.uid(numericRanges));
         searchQuery.setSorts(Lists.newArrayList(new SearchQuery.Sort(SearchQuery.Sort.SortClause.MailboxCc)));
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsExactly(m3, m5, m4, m2);
+            .containsExactly(m3.getUid(), m5.getUid(), m4.getUid(), m2.getUid());
         // 2 : No cc
         // 3 : Cc : abc@abc.org
         // 4 : zzz@bcd.org
@@ -662,11 +681,11 @@ public abstract class AbstractMessageSearchIndexTest {
     @Test
     public void sortOnFromShouldWork() throws Exception {
         SearchQuery searchQuery = new SearchQuery();
-        SearchQuery.UidRange[] numericRanges = {new SearchQuery.UidRange(m2, m5)};
+        SearchQuery.UidRange[] numericRanges = {new SearchQuery.UidRange(m2.getUid(), m5.getUid())};
         searchQuery.andCriteria(SearchQuery.uid(numericRanges));
         searchQuery.setSorts(Lists.newArrayList(new SearchQuery.Sort(SearchQuery.Sort.SortClause.MailboxFrom)));
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsExactly(m3, m2, m4, m5);
+            .containsExactly(m3.getUid(), m2.getUid(), m4.getUid(), m5.getUid());
         // 2 : jira2@apache.org
         // 3 : jira1@apache.org
         // 4 : jira@apache.org
@@ -676,11 +695,11 @@ public abstract class AbstractMessageSearchIndexTest {
     @Test
     public void sortOnToShouldWork() throws Exception {
         SearchQuery searchQuery = new SearchQuery();
-        SearchQuery.UidRange[] numericRanges = {new SearchQuery.UidRange(m2, m5)};
+        SearchQuery.UidRange[] numericRanges = {new SearchQuery.UidRange(m2.getUid(), m5.getUid())};
         searchQuery.andCriteria(SearchQuery.uid(numericRanges));
         searchQuery.setSorts(Lists.newArrayList(new SearchQuery.Sort(SearchQuery.Sort.SortClause.MailboxTo)));
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsExactly(m5, m2, m3, m4);
+            .containsExactly(m5.getUid(), m2.getUid(), m3.getUid(), m4.getUid());
         // 2 : server-dev@james.apache.org
         // 3 : server-dev@james.apache.org
         // 4 : server-dev@james.apache.org
@@ -690,11 +709,11 @@ public abstract class AbstractMessageSearchIndexTest {
     @Test
     public void sortOnSubjectShouldWork() throws Exception {
         SearchQuery searchQuery = new SearchQuery();
-        SearchQuery.UidRange[] numericRanges = {new SearchQuery.UidRange(m2, m5)};
+        SearchQuery.UidRange[] numericRanges = {new SearchQuery.UidRange(m2.getUid(), m5.getUid())};
         searchQuery.andCriteria(SearchQuery.uid(numericRanges));
         searchQuery.setSorts(Lists.newArrayList(new SearchQuery.Sort(SearchQuery.Sort.SortClause.BaseSubject)));
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsExactly(m4, m3, m2, m5);
+            .containsExactly(m4.getUid(), m3.getUid(), m2.getUid(), m5.getUid());
         // 2 : [jira] [Created] (MAILBOX-234) Convert Message into JSON
         // 3 : [jira] [Closed] (MAILBOX-217) We should index attachment in elastic search
         // 4 : [jira] [Closed] (MAILBOX-11) MailboxQuery ignore namespace
@@ -704,11 +723,11 @@ public abstract class AbstractMessageSearchIndexTest {
     @Test
     public void sortOnSizeShouldWork() throws Exception {
         SearchQuery searchQuery = new SearchQuery();
-        SearchQuery.UidRange[] numericRanges = {new SearchQuery.UidRange(m2, m5)};
+        SearchQuery.UidRange[] numericRanges = {new SearchQuery.UidRange(m2.getUid(), m5.getUid())};
         searchQuery.andCriteria(SearchQuery.uid(numericRanges));
         searchQuery.setSorts(Lists.newArrayList(new SearchQuery.Sort(SearchQuery.Sort.SortClause.Size)));
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsExactly(m2, m3, m5, m4);
+            .containsExactly(m2.getUid(), m3.getUid(), m5.getUid(), m4.getUid());
         // 2 : 3210 o
         // 3 : 3647 o
         // 4 : 4360 o
@@ -718,11 +737,11 @@ public abstract class AbstractMessageSearchIndexTest {
     @Test
     public void sortOnDisplayFromShouldWork() throws Exception {
         SearchQuery searchQuery = new SearchQuery();
-        SearchQuery.UidRange[] numericRanges = {new SearchQuery.UidRange(m2, m5)};
+        SearchQuery.UidRange[] numericRanges = {new SearchQuery.UidRange(m2.getUid(), m5.getUid())};
         searchQuery.andCriteria(SearchQuery.uid(numericRanges));
         searchQuery.setSorts(Lists.newArrayList(new SearchQuery.Sort(SearchQuery.Sort.SortClause.DisplayFrom)));
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsExactly(m4, m3, m5, m2);
+            .containsExactly(m4.getUid(), m3.getUid(), m5.getUid(), m2.getUid());
         // 2 : Tellier Benoit (JIRA)
         // 3 : efij
         // 4 : abcd
@@ -732,11 +751,11 @@ public abstract class AbstractMessageSearchIndexTest {
     @Test
     public void sortOnDisplayToShouldWork() throws Exception {
         SearchQuery searchQuery = new SearchQuery();
-        SearchQuery.UidRange[] numericRanges = {new SearchQuery.UidRange(m2, m5)};
+        SearchQuery.UidRange[] numericRanges = {new SearchQuery.UidRange(m2.getUid(), m5.getUid())};
         searchQuery.andCriteria(SearchQuery.uid(numericRanges));
         searchQuery.setSorts(Lists.newArrayList(new SearchQuery.Sort(SearchQuery.Sort.SortClause.DisplayTo)));
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsExactly(m3, m2, m4, m5);
+            .containsExactly(m3.getUid(), m2.getUid(), m4.getUid(), m5.getUid());
         // 2 : abc
         // 3 : aaa
         // 4 : server
@@ -746,11 +765,11 @@ public abstract class AbstractMessageSearchIndexTest {
     @Test
     public void sortOnSentDateShouldWork() throws Exception {
         SearchQuery searchQuery = new SearchQuery();
-        SearchQuery.UidRange[] numericRanges = {new SearchQuery.UidRange(m2, m5)};
+        SearchQuery.UidRange[] numericRanges = {new SearchQuery.UidRange(m2.getUid(), m5.getUid())};
         searchQuery.andCriteria(SearchQuery.uid(numericRanges));
         searchQuery.setSorts(Lists.newArrayList(new SearchQuery.Sort(SearchQuery.Sort.SortClause.SentDate)));
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsExactly(m5, m4, m2, m3);
+            .containsExactly(m5.getUid(), m4.getUid(), m2.getUid(), m3.getUid());
         // 2 : 4 Jun 2015 09:23:37
         // 3 : 4 Jun 2015 09:27:37
         // 4 : 2 Jun 2015 08:16:19
@@ -760,11 +779,11 @@ public abstract class AbstractMessageSearchIndexTest {
     @Test
     public void sortOnIdShouldWork() throws Exception {
         SearchQuery searchQuery = new SearchQuery();
-        SearchQuery.UidRange[] numericRanges = {new SearchQuery.UidRange(m2, m5)};
+        SearchQuery.UidRange[] numericRanges = {new SearchQuery.UidRange(m2.getUid(), m5.getUid())};
         searchQuery.andCriteria(SearchQuery.uid(numericRanges));
         searchQuery.setSorts(Lists.newArrayList(new SearchQuery.Sort(SearchQuery.Sort.SortClause.Uid)));
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsExactly(m2, m3, m4, m5);
+            .containsExactly(m2.getUid(), m3.getUid(), m4.getUid(), m5.getUid());
     }
 
     @Test
@@ -782,7 +801,7 @@ public abstract class AbstractMessageSearchIndexTest {
         SearchQuery searchQuery = new SearchQuery();
         searchQuery.andCriteria(SearchQuery.textContains("spam.minet.net"));
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsExactly(m1);
+            .containsExactly(m1.getUid());
     }
 
     @Test
@@ -791,7 +810,7 @@ public abstract class AbstractMessageSearchIndexTest {
         SearchQuery searchQuery = new SearchQuery();
         searchQuery.andCriteria(SearchQuery.textContains("listes.minet.net"));
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsExactly(m1);
+            .containsExactly(m1.getUid());
     }
 
     @Test
@@ -800,7 +819,7 @@ public abstract class AbstractMessageSearchIndexTest {
         SearchQuery searchQuery = new SearchQuery();
         searchQuery.andCriteria(SearchQuery.textContains("abc.org"));
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsExactly(m3);
+            .containsExactly(m3.getUid());
     }
 
     @Test
@@ -809,7 +828,7 @@ public abstract class AbstractMessageSearchIndexTest {
         SearchQuery searchQuery = new SearchQuery();
         searchQuery.andCriteria(SearchQuery.textContains("any.com"));
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsExactly(m5);
+            .containsExactly(m5.getUid());
     }
 
     @Test
@@ -819,7 +838,7 @@ public abstract class AbstractMessageSearchIndexTest {
         searchQuery.andCriteria(SearchQuery.textContains("reviewing work"));
         // text/plain contains: "We are reviewing work I did for this feature."
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsExactly(m3);
+            .containsExactly(m3.getUid());
     }
 
     @Test
@@ -830,7 +849,7 @@ public abstract class AbstractMessageSearchIndexTest {
         // 3: text/plain contains: "We are reviewing work I did for this feature."
         searchQuery.andCriteria(SearchQuery.textContains("reviewing feature"));
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsExactly(m2, m3);
+            .containsExactly(m2.getUid(), m3.getUid());
     }
 
     @Test
@@ -840,7 +859,7 @@ public abstract class AbstractMessageSearchIndexTest {
         // text/plain contains: "We are reviewing work I did for this feature."
         searchQuery.andCriteria(SearchQuery.textContains("reVieWing"));
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsExactly(m3);
+            .containsExactly(m3.getUid());
     }
 
     @Test
@@ -850,7 +869,7 @@ public abstract class AbstractMessageSearchIndexTest {
         searchQuery.andCriteria(SearchQuery.textContains("a reviewing of the work"));
         // text/plain contains: "We are reviewing work I did for this feature."
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsExactly(m3);
+            .containsExactly(m3.getUid());
     }
 
     @Test
@@ -860,7 +879,7 @@ public abstract class AbstractMessageSearchIndexTest {
         // text/html contains: "This is a mail with beautifull html content which contains a banana."
         searchQuery.andCriteria(SearchQuery.textContains("contains a banana"));
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsExactly(m7);
+            .containsExactly(m7.getUid());
     }
 
     @Test
@@ -869,7 +888,7 @@ public abstract class AbstractMessageSearchIndexTest {
         SearchQuery searchQuery = new SearchQuery();
         searchQuery.andCriteria(SearchQuery.textContains("contain banana"));
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsExactly(m7);
+            .containsExactly(m7.getUid());
     }
 
     @Test
@@ -878,6 +897,6 @@ public abstract class AbstractMessageSearchIndexTest {
         SearchQuery searchQuery = new SearchQuery();
         searchQuery.andCriteria(SearchQuery.textContains("beautifull banana"));
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsExactly(m7);
+            .containsExactly(m7.getUid());
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/299addd9/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java b/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
index bb7a48a..4a50a02 100644
--- a/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
+++ b/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
@@ -105,19 +105,20 @@ public class ElasticSearchHostSystem extends JamesImapHostSystem {
 
         userManager = new FakeAuthenticator();
         InMemoryMailboxSessionMapperFactory factory = new InMemoryMailboxSessionMapperFactory();
+        InMemoryMessageId.Factory messageIdFactory = new InMemoryMessageId.Factory();
 
         ElasticSearchListeningMessageSearchIndex searchIndex = new ElasticSearchListeningMessageSearchIndex(
             factory,
             new ElasticSearchIndexer(client, new DeleteByQueryPerformer(client, Executors.newSingleThreadExecutor())),
-            new ElasticSearchSearcher(client, new QueryConverter(new CriterionConverter()), new InMemoryId.Factory()),
+            new ElasticSearchSearcher(client, new QueryConverter(new CriterionConverter()), new InMemoryId.Factory(), messageIdFactory),
             new MessageToElasticSearchJson(new DefaultTextExtractor(), IndexAttachments.YES));
 
         MailboxACLResolver aclResolver = new UnionMailboxACLResolver();
         GroupMembershipResolver groupMembershipResolver = new SimpleGroupMembershipResolver();
         MessageParser messageParser = new MessageParser();
 
-        mailboxManager = new StoreMailboxManager(factory, userManager, aclResolver, groupMembershipResolver, messageParser, 
-                new InMemoryMessageId.Factory(), MailboxConstants.DEFAULT_LIMIT_ANNOTATIONS_ON_MAILBOX, MailboxConstants.DEFAULT_LIMIT_ANNOTATION_SIZE);
+        mailboxManager = new StoreMailboxManager(factory, userManager, aclResolver, groupMembershipResolver, messageParser,
+            messageIdFactory, MailboxConstants.DEFAULT_LIMIT_ANNOTATIONS_ON_MAILBOX, MailboxConstants.DEFAULT_LIMIT_ANNOTATION_SIZE);
         mailboxManager.setMessageSearchIndex(searchIndex);
 
         try {

http://git-wip-us.apache.org/repos/asf/james-project/blob/299addd9/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java b/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java
index ec669fd..63bd19b 100644
--- a/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java
+++ b/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java
@@ -151,7 +151,7 @@ public class LuceneSearchHostSystem extends JamesImapHostSystem {
         try {
             JPAId.Factory mailboxIdFactory = new Factory();
             FSDirectory fsDirectory = FSDirectory.open(tempFile);
-            LuceneMessageSearchIndex searchIndex = new LuceneMessageSearchIndex(factory, mailboxIdFactory, fsDirectory);
+            LuceneMessageSearchIndex searchIndex = new LuceneMessageSearchIndex(factory, mailboxIdFactory, fsDirectory, messageIdFactory);
             searchIndex.setEnableSuffixMatch(true);
 
             MailboxACLResolver aclResolver = new UnionMailboxACLResolver();

http://git-wip-us.apache.org/repos/asf/james-project/blob/299addd9/protocols/imap/src/test/java/org/apache/james/imap/processor/base/MailboxEventAnalyserTest.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/test/java/org/apache/james/imap/processor/base/MailboxEventAnalyserTest.java b/protocols/imap/src/test/java/org/apache/james/imap/processor/base/MailboxEventAnalyserTest.java
index c0c68d8..f68f9dd 100644
--- a/protocols/imap/src/test/java/org/apache/james/imap/processor/base/MailboxEventAnalyserTest.java
+++ b/protocols/imap/src/test/java/org/apache/james/imap/processor/base/MailboxEventAnalyserTest.java
@@ -428,7 +428,7 @@ public class MailboxEventAnalyserTest {
         }
 
         @Override
-        public Map<MailboxId, Collection<MessageUid>> search(MultimailboxesSearchQuery expression, MailboxSession session) throws MailboxException {
+        public List<MessageId> search(MultimailboxesSearchQuery expression, MailboxSession session, long limit) throws MailboxException {
             return null;
         }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/299addd9/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMessageListMethod.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMessageListMethod.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMessageListMethod.java
index e025f9e..ee2593c 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMessageListMethod.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMessageListMethod.java
@@ -19,10 +19,7 @@
 
 package org.apache.james.jmap.methods;
 
-import java.util.Collection;
-import java.util.Comparator;
 import java.util.List;
-import java.util.Map;
 import java.util.Optional;
 import java.util.Set;
 import java.util.function.Function;
@@ -38,39 +35,25 @@ import org.apache.james.jmap.model.GetMessageListRequest;
 import org.apache.james.jmap.model.GetMessageListResponse;
 import org.apache.james.jmap.model.GetMessagesRequest;
 import org.apache.james.jmap.utils.FilterToSearchQuery;
-import org.apache.james.jmap.utils.SortToComparatorConvertor;
+import org.apache.james.jmap.utils.SortConverter;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
-import org.apache.james.mailbox.MessageManager;
-import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.exception.MailboxException;
-import org.apache.james.mailbox.exception.MailboxNotFoundException;
-import org.apache.james.mailbox.model.FetchGroupImpl;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MailboxId.Factory;
-import org.apache.james.mailbox.model.MailboxPath;
-import org.apache.james.mailbox.model.MessageRange;
-import org.apache.james.mailbox.model.MessageResult;
 import org.apache.james.mailbox.model.MultimailboxesSearchQuery;
 import org.apache.james.mailbox.model.SearchQuery;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
-import com.github.fge.lambdas.Throwing;
 import com.github.steveash.guavate.Guavate;
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Preconditions;
 import com.google.common.base.Throwables;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.LinkedHashMultimap;
-import com.google.common.collect.Multimap;
 
 public class GetMessageListMethod implements Method {
 
     public static final String MAXIMUM_LIMIT = "maximumLimit";
     public static final int DEFAULT_MAXIMUM_LIMIT = 256;
 
-    private static final Logger LOGGER = LoggerFactory.getLogger(GetMailboxesMethod.class);
     private static final Method.Request.Name METHOD_NAME = Method.Request.name("getMessageList");
     private static final Method.Response.Name RESPONSE_NAME = Method.Response.name("messageList");
 
@@ -103,66 +86,39 @@ public class GetMessageListMethod implements Method {
     public Stream<JmapResponse> process(JmapRequest request, ClientId clientId, MailboxSession mailboxSession) {
         Preconditions.checkArgument(request instanceof GetMessageListRequest);
         GetMessageListRequest messageListRequest = (GetMessageListRequest) request;
-        GetMessageListResponse messageListResponse = getMessageListResponse(messageListRequest, clientId, mailboxSession);
+        GetMessageListResponse messageListResponse = getMessageListResponse(messageListRequest, mailboxSession);
  
         Stream<JmapResponse> jmapResponse = Stream.of(JmapResponse.builder().clientId(clientId)
                 .response(messageListResponse)
                 .responseName(RESPONSE_NAME)
                 .build());
-        return Stream.<JmapResponse> concat(jmapResponse, 
+        return Stream.concat(jmapResponse,
                 processGetMessages(messageListRequest, messageListResponse, clientId, mailboxSession));
     }
 
-    private GetMessageListResponse getMessageListResponse(GetMessageListRequest messageListRequest, ClientId clientId, MailboxSession mailboxSession) {
+    private GetMessageListResponse getMessageListResponse(GetMessageListRequest messageListRequest, MailboxSession mailboxSession) {
         GetMessageListResponse.Builder builder = GetMessageListResponse.builder();
         try {
             MultimailboxesSearchQuery searchQuery = convertToSearchQuery(messageListRequest);
-            Map<MailboxId, Collection<MessageUid>> searchResults = mailboxManager.search(searchQuery, mailboxSession);
-            
-            aggregateResults(mailboxSession, searchResults).entries().stream()
-                .sorted(comparatorFor(messageListRequest))
-                .map(entry -> entry.getValue().getMessageId())
+            mailboxManager.search(searchQuery,
+                mailboxSession,
+                messageListRequest.getLimit().orElse(maximumLimit) + messageListRequest.getPosition())
+                .stream()
                 .skip(messageListRequest.getPosition())
-                .limit(limit(messageListRequest.getLimit()))
                 .forEach(builder::messageId);
-
             return builder.build();
         } catch (MailboxException e) {
             throw Throwables.propagate(e);
         }
     }
 
-    private Multimap<MailboxPath, MessageResult> aggregateResults(MailboxSession mailboxSession, Map<MailboxId, Collection<MessageUid>> searchResults) {
-        Multimap<MailboxPath, MessageResult> messages = LinkedHashMultimap.create();
-        for (Map.Entry<MailboxId, Collection<MessageUid>> mailboxResults: searchResults.entrySet()) {
-            try {
-                aggregate(mailboxSession, messages, mailboxResults);
-            } catch (MailboxException e) {
-                LOGGER.error("Error retrieving mailbox", e);
-                throw Throwables.propagate(e);
-            }
-        }
-        return messages;
-    }
-
-    private void aggregate(MailboxSession mailboxSession, Multimap<MailboxPath, MessageResult> aggregation, Map.Entry<MailboxId, Collection<MessageUid>> mailboxResults) throws MailboxNotFoundException, MailboxException {
-        MailboxPath mailboxPath = mailboxManager.getMailbox(mailboxResults.getKey(), mailboxSession).getMailboxPath();
-        MessageManager messageManager = getMessageManager(mailboxPath, mailboxSession)
-            .orElseThrow(() -> new MailboxNotFoundException(mailboxPath));
-        List<MessageResult> mailboxMessages = MessageRange.toRanges(mailboxResults.getValue()).stream()
-            .map(Throwing.function(range -> messageManager.getMessages(range, FetchGroupImpl.MINIMAL, mailboxSession)))
-            .map(messageIterator -> ImmutableList.copyOf(messageIterator))
-            .flatMap(List::stream)
-            .collect(Guavate.toImmutableList());
-        aggregation.putAll(mailboxPath, mailboxMessages);
-    }
-
     private MultimailboxesSearchQuery convertToSearchQuery(GetMessageListRequest messageListRequest) {
         SearchQuery searchQuery = messageListRequest.getFilter()
                 .map(filter -> new FilterToSearchQuery().convert(filter))
                 .orElse(new SearchQuery());
-        Set<MailboxId> inMailboxes = buildFilterMailboxesSet(messageListRequest.getFilter(), condition -> condition.getInMailboxes());
-        Set<MailboxId> notInMailboxes = buildFilterMailboxesSet(messageListRequest.getFilter(), condition -> condition.getNotInMailboxes());
+        Set<MailboxId> inMailboxes = buildFilterMailboxesSet(messageListRequest.getFilter(), FilterCondition::getInMailboxes);
+        Set<MailboxId> notInMailboxes = buildFilterMailboxesSet(messageListRequest.getFilter(), FilterCondition::getNotInMailboxes);
+        searchQuery.setSorts(SortConverter.convertToSorts(messageListRequest.getSort()));
         return MultimailboxesSearchQuery
                 .from(searchQuery)
                 .inMailboxes(inMailboxes)
@@ -204,21 +160,4 @@ public class GetMessageListMethod implements Method {
                 && !messageListRequest.isFetchThreads().orElse(false);
     }
 
-    private long limit(Optional<Integer> limit) {
-        return limit.orElse(maximumLimit);
-    }
-
-    private Comparator<Map.Entry<MailboxPath, MessageResult>> comparatorFor(GetMessageListRequest messageListRequest) {
-        return SortToComparatorConvertor.comparatorFor(messageListRequest.getSort());
-    }
-
-    private Optional<MessageManager> getMessageManager(MailboxPath mailboxPath, MailboxSession mailboxSession) {
-        try {
-            return Optional.of(mailboxManager.getMailbox(mailboxPath, mailboxSession));
-        } catch (MailboxException e) {
-            LOGGER.warn("Error retrieveing mailbox :" + mailboxPath, e);
-            return Optional.empty();
-        }
-    }
-
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/299addd9/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/SortToComparatorConvertor.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/SortToComparatorConvertor.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/SortToComparatorConvertor.java
deleted file mode 100644
index d104758..0000000
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/SortToComparatorConvertor.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/****************************************************************
- * 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.james.jmap.utils;
-
-import java.util.Comparator;
-import java.util.List;
-import java.util.Map;
-import java.util.function.Function;
-
-import org.apache.james.mailbox.model.MailboxId;
-import org.apache.james.mailbox.model.MailboxPath;
-import org.apache.james.mailbox.model.MessageResult;
-
-import com.google.common.base.Preconditions;
-import com.google.common.base.Splitter;
-import com.google.common.collect.ImmutableMap;
-
-public class SortToComparatorConvertor {
-
-    private static final String SEPARATOR = " ";
-    private static final String DESC_ORDERING = "desc";
-
-    private SortToComparatorConvertor() {
-    }
-
-    @SuppressWarnings("rawtypes")
-    private static final Map<String, Function<Map.Entry<MailboxPath, MessageResult>, Comparable>> fieldsMessageFunctionMap = ImmutableMap.of(
-            "date", entry -> entry.getValue().getInternalDate(),
-            "id", entry -> entry.getValue().getUid());
-
-    public static <M extends Map.Entry<MailboxPath, MessageResult>, Id extends MailboxId> Comparator<M> comparatorFor(List<String> sort) {
-        return sort.stream()
-            .map(SortToComparatorConvertor::<M, Id> comparatorForField)
-            .reduce(new EmptyComparator<>(), (x, y) -> x.thenComparing(y));
-    }
-
-    @SuppressWarnings("unchecked")
-    private static <M extends Map.Entry<MailboxPath, MessageResult>, Id extends MailboxId> Comparator<M> comparatorForField(String field) {
-        List<String> splitToList = Splitter.on(SEPARATOR).splitToList(field);
-        checkField(splitToList);
-        Comparator<M> fieldComparator = Comparator.comparing(functionForField(splitToList.get(0)));
-        if (splitToList.size() == 1 || splitToList.get(1).equals(DESC_ORDERING)) {
-            return fieldComparator.reversed();
-        }
-        return fieldComparator;
-    }
-
-    @SuppressWarnings("rawtypes")
-    private static Function<Map.Entry<MailboxPath, MessageResult>, Comparable> functionForField(String field) {
-        if (!fieldsMessageFunctionMap.containsKey(field)) {
-            throw new IllegalArgumentException("Unknown sorting field " + field);
-        }
-        return fieldsMessageFunctionMap.get(field);
-    }
-
-    private static void checkField(List<String> splitToList) {
-        Preconditions.checkArgument(splitToList.size() >= 1 && splitToList.size() <= 2, "Bad sort field definition");
-    }
-
-    private static class EmptyComparator<Type> implements Comparator<Type> {
-
-        @Override
-        public int compare(Type o1, Type o2) {
-            return 0;
-        }
-        
-    }
-}

http://git-wip-us.apache.org/repos/asf/james-project/blob/299addd9/server/protocols/jmap/src/test/java/org/apache/james/jmap/FirstUserConnectionFilterThreadTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/FirstUserConnectionFilterThreadTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/FirstUserConnectionFilterThreadTest.java
index e14ad21..b2fe1d5 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/FirstUserConnectionFilterThreadTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/FirstUserConnectionFilterThreadTest.java
@@ -18,17 +18,14 @@
  ****************************************************************/
 package org.apache.james.jmap;
 
-import java.util.Collection;
 import java.util.EnumSet;
 import java.util.List;
-import java.util.Map;
 import java.util.Set;
 
 import org.apache.james.mailbox.MailboxListener;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageManager;
-import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.exception.BadCredentialsException;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.mock.MockMailboxSession;
@@ -42,6 +39,7 @@ import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MailboxMetaData;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.model.MailboxQuery;
+import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.model.MessageRange;
 import org.apache.james.mailbox.model.MultimailboxesSearchQuery;
 import org.apache.james.user.lib.mock.InMemoryUsersRepository;
@@ -248,7 +246,7 @@ public class FirstUserConnectionFilterThreadTest {
         }
 
         @Override
-        public Map<MailboxId, Collection<MessageUid>> search(MultimailboxesSearchQuery expression, MailboxSession session) throws MailboxException {
+        public List<MessageId> search(MultimailboxesSearchQuery expression, MailboxSession session, long limit) throws MailboxException {
             return null;
         }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/299addd9/server/protocols/jmap/src/test/java/org/apache/james/jmap/utils/SortToComparatorConvertorTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/utils/SortToComparatorConvertorTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/utils/SortToComparatorConvertorTest.java
deleted file mode 100644
index e8665f3..0000000
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/utils/SortToComparatorConvertorTest.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/****************************************************************
- * 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.james.jmap.utils;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-import java.io.IOException;
-import java.time.ZonedDateTime;
-import java.util.Comparator;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.james.mailbox.MessageUid;
-import org.apache.james.mailbox.model.MailboxPath;
-import org.apache.james.mailbox.model.MessageResult;
-import org.junit.Before;
-import org.junit.Test;
-
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Lists;
-
-public class SortToComparatorConvertorTest {
-    private static final Date DATE_2017 = Date.from(ZonedDateTime.parse("2017-10-09T08:07:06+07:00[Asia/Vientiane]").toInstant());
-    private static final Date DATE_2018 = Date.from(ZonedDateTime.parse("2018-10-09T08:07:06+07:00[Asia/Vientiane]").toInstant());
-
-    private MailboxPath mailboxPath;
-    private Entry firstMessage;
-    private Entry secondMessage;
-    private List<Entry> messages;
-
-    @Before
-    public void setup() throws IOException {
-        MessageResult firstMessageResult = mock(MessageResult.class);
-        when(firstMessageResult.getInternalDate()).thenReturn(DATE_2017);
-        when(firstMessageResult.getUid()).thenReturn(MessageUid.of(1));
-        firstMessage = new Entry(mailboxPath, firstMessageResult);
-        MessageResult secondMessageResult = mock(MessageResult.class);
-        when(secondMessageResult.getInternalDate()).thenReturn(DATE_2018);
-        when(secondMessageResult.getUid()).thenReturn(MessageUid.of(2));
-        secondMessage = new Entry(mailboxPath, secondMessageResult);
-        messages = Lists.newArrayList(firstMessage, secondMessage);
-    }
-
-    @Test
-    public void comparatorForShouldBeInitialOrderWhenEmptyList() {
-        Comparator<Entry> comparator = SortToComparatorConvertor.comparatorFor(ImmutableList.of());
-        messages.sort(comparator);
-        assertThat(messages).containsExactly(firstMessage, secondMessage);
-    }
-
-    @Test
-    public void comparatorForShouldBeDescByDateWhenOnlyDateInList() {
-        Comparator<Entry> comparator = SortToComparatorConvertor.comparatorFor(ImmutableList.of("date"));
-        messages.sort(comparator);
-        assertThat(messages).containsExactly(secondMessage, firstMessage);
-    }
-
-    @Test
-    public void comparatorForShouldBeDescByDateWhenOnlyDateDescInList() {
-        Comparator<Entry> comparator = SortToComparatorConvertor.comparatorFor(ImmutableList.of("date desc"));
-        messages.sort(comparator);
-        assertThat(messages).containsExactly(secondMessage, firstMessage);
-    }
-
-    @Test
-    public void comparatorForShouldBeAscByDateWhenOnlyDateAscInList() {
-        Comparator<Entry> comparator = SortToComparatorConvertor.comparatorFor(ImmutableList.of("date asc"));
-        messages.sort(comparator);
-        assertThat(messages).containsExactly(firstMessage, secondMessage);
-    }
-
-    @Test
-    public void comparatorForShouldChainComparatorsWhenOnlyMultipleElementInList() throws IOException {
-        MessageResult thirdMessageResult = mock(MessageResult.class);
-        when(thirdMessageResult.getInternalDate()).thenReturn(DATE_2018);
-        when(thirdMessageResult.getUid()).thenReturn(MessageUid.of(3));
-        Entry thirdMessage = new Entry(mailboxPath, thirdMessageResult);
-        messages.add(thirdMessage);
-
-        Comparator<Entry> comparator = SortToComparatorConvertor.comparatorFor(ImmutableList.of("date asc", "id desc"));
-        messages.sort(comparator);
-        assertThat(messages).containsExactly(firstMessage, thirdMessage, secondMessage);
-    }
-
-    @Test(expected=IllegalArgumentException.class)
-    public void comparatorForShouldThrowWhenBadFieldFormat() {
-        SortToComparatorConvertor.comparatorFor(ImmutableList.of("this is a bad field"));
-    }
-
-    @Test(expected=IllegalArgumentException.class)
-    public void comparatorForShouldThrowWhenEmptyField() {
-        SortToComparatorConvertor.comparatorFor(ImmutableList.of(" "));
-    }
-
-    @Test(expected=IllegalArgumentException.class)
-    public void comparatorForShouldThrowWhenUnknownField() {
-        SortToComparatorConvertor.comparatorFor(ImmutableList.of("unknown"));
-    }
-    
-    private static class Entry implements Map.Entry<MailboxPath, MessageResult> {
-        
-        private MailboxPath mailboxPath;
-        private MessageResult messageResult;
-
-        public Entry(MailboxPath mailboxPath, MessageResult messageResult) {
-            this.mailboxPath = mailboxPath;
-            this.messageResult = messageResult;
-        }
-
-        @Override
-        public MailboxPath getKey() {
-            return mailboxPath;
-        }
-
-        @Override
-        public MessageResult getValue() {
-            return messageResult;
-        }
-
-        @Override
-        public MessageResult setValue(MessageResult messageResult) {
-            this.messageResult = messageResult;
-            return this.messageResult;
-        }
-    }
-}


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