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