JAMES-2362 MimeMessageID search in mailbox-api implementations
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/c9c1250c Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/c9c1250c Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/c9c1250c Branch: refs/heads/master Commit: c9c1250c7f740772b982e6bc61038dbd06988aa3 Parents: 93f1d3e Author: benwa <btell...@linagora.com> Authored: Tue Mar 27 09:52:45 2018 +0700 Committer: benwa <btell...@linagora.com> Committed: Tue Mar 27 15:16:32 2018 +0700 ---------------------------------------------------------------------- .../java/org/apache/james/mailbox/model/SearchQuery.java | 4 ++++ .../mailbox/elasticsearch/query/CriterionConverter.java | 5 +++++ .../mailbox/lucene/search/LuceneMessageSearchIndex.java | 6 +++--- .../james/mailbox/store/search/MessageSearches.java | 3 +++ .../store/search/AbstractMessageSearchIndexTest.java | 10 ++++++++++ 5 files changed, 25 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/c9c1250c/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java ---------------------------------------------------------------------- diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java b/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java index cd42a5a..fedab42 100644 --- a/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java +++ b/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java @@ -1176,6 +1176,10 @@ public class SearchQuery implements Serializable { return messageID; } + public HeaderCriterion asHeaderCriterion() { + return new HeaderCriterion("Message-ID", new ContainsOperator(messageID)); + } + @Override public final boolean equals(Object o) { if (o instanceof MimeMessageIDCriterion) { http://git-wip-us.apache.org/repos/asf/james-project/blob/c9c1250c/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/query/CriterionConverter.java ---------------------------------------------------------------------- diff --git a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/query/CriterionConverter.java b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/query/CriterionConverter.java index ab1cf0d..71ab35b 100644 --- a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/query/CriterionConverter.java +++ b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/query/CriterionConverter.java @@ -83,6 +83,7 @@ public class CriterionConverter { criterion -> dateRangeFilter(JsonMessageConstants.DATE, criterion.getOperator())); registerCriterionConverter(SearchQuery.AttachmentCriterion.class, this::convertAttachmentCriterion); + registerCriterionConverter(SearchQuery.MimeMessageIDCriterion.class, this::convertMimeMessageIDCriterion); } @SuppressWarnings("unchecked") @@ -124,6 +125,10 @@ public class CriterionConverter { return termQuery(JsonMessageConstants.HAS_ATTACHMENT, criterion.getOperator().isSet()); } + private QueryBuilder convertMimeMessageIDCriterion(SearchQuery.MimeMessageIDCriterion criterion) { + return termQuery(JsonMessageConstants.MIME_MESSAGE_ID, criterion.getMessageID()); + } + private QueryBuilder convertCustomFlagCriterion(SearchQuery.CustomFlagCriterion criterion) { QueryBuilder termQueryBuilder = termQuery(JsonMessageConstants.USER_FLAGS, criterion.getFlag()); if (criterion.getOperator().isSet()) { http://git-wip-us.apache.org/repos/asf/james-project/blob/c9c1250c/mailbox/lucene/src/main/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndex.java ---------------------------------------------------------------------- diff --git a/mailbox/lucene/src/main/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndex.java b/mailbox/lucene/src/main/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndex.java index 557ebcb..887b05a 100644 --- a/mailbox/lucene/src/main/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndex.java +++ b/mailbox/lucene/src/main/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndex.java @@ -1240,13 +1240,13 @@ public class LuceneMessageSearchIndex extends ListeningMessageSearchIndex { return createConjunctionQuery(crit, inMailboxes, recentUids); } else if (criterion instanceof SearchQuery.ModSeqCriterion) { return createModSeqQuery((SearchQuery.ModSeqCriterion) criterion); + } else if (criterion instanceof SearchQuery.MimeMessageIDCriterion) { + SearchQuery.MimeMessageIDCriterion mimeMessageIDCriterion = (SearchQuery.MimeMessageIDCriterion) criterion; + return createHeaderQuery(mimeMessageIDCriterion.asHeaderCriterion()); } throw new UnsupportedSearchException(); - } - - @Override public void add(MailboxSession session, Mailbox mailbox, MailboxMessage membership) throws MailboxException { Document doc = createMessageDocument(session, membership); http://git-wip-us.apache.org/repos/asf/james-project/blob/c9c1250c/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/MessageSearches.java ---------------------------------------------------------------------- diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/MessageSearches.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/MessageSearches.java index d1f1647..b8907df 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/MessageSearches.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/MessageSearches.java @@ -184,6 +184,9 @@ public class MessageSearches implements Iterable<SimpleMessageSearchIndex.Search return matches((SearchQuery.AttachmentCriterion) criterion, message); } else if (criterion instanceof SearchQuery.ModSeqCriterion) { return matches((SearchQuery.ModSeqCriterion) criterion, message); + } else if (criterion instanceof SearchQuery.MimeMessageIDCriterion) { + SearchQuery.MimeMessageIDCriterion mimeMessageIDCriterion = (SearchQuery.MimeMessageIDCriterion) criterion; + return isMatch(mimeMessageIDCriterion.asHeaderCriterion(), message, recentMessageUids); } else { throw new UnsupportedSearchException(); } http://git-wip-us.apache.org/repos/asf/james-project/blob/c9c1250c/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 f4e891e..f953319 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 @@ -1428,4 +1428,14 @@ public abstract class AbstractMessageSearchIndexTest { message1.getUid(), message3.getUid()); } + + @Test + public void searchShouldRetrieveExactlyMatchingMimeMessageID() throws Exception { + SearchQuery searchQuery = new SearchQuery(); + searchQuery.andCriteria(SearchQuery.mimeMessageID("<jira.12781874.1426269127000.9353.1433410057...@atlassian.jira>")); + // Correspond to mail.eml + + assertThat(messageSearchIndex.search(session, mailbox, searchQuery)) + .containsOnly(m3.getUid()); + } } --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org