JAMES-2137 Correct advertised Search capabilities - Scanning search Attachment capability depends on **Attachment Message Capability** - Scanning search DOES NOT support Full text search - Lucene DOES support multi-mailbox search (test passes) - JMAP should not enforce Full Text search to start
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/5bd16049 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/5bd16049 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/5bd16049 Branch: refs/heads/master Commit: 5bd16049be80669b720d5c4c06b9984d849f2767 Parents: 11e336a Author: benwa <btell...@linagora.com> Authored: Fri Sep 8 10:57:50 2017 +0700 Committer: Antoine Duprat <adup...@linagora.com> Committed: Fri Sep 8 21:58:03 2017 +0200 ---------------------------------------------------------------------- .../ElasticSearchListeningMessageSearchIndex.java | 3 ++- .../lucene/search/LuceneMessageSearchIndex.java | 6 ++++-- .../james/mailbox/store/StoreMailboxManager.java | 2 +- .../mailbox/store/search/LazyMessageSearchIndex.java | 3 ++- .../mailbox/store/search/MessageSearchIndex.java | 2 +- .../store/search/SimpleMessageSearchIndex.java | 11 +++++++++-- .../store/search/AbstractMessageSearchIndexTest.java | 2 +- .../apache/james/JamesCapabilitiesServerTest.java | 15 --------------- .../main/java/org/apache/james/jmap/JMAPModule.java | 2 -- 9 files changed, 20 insertions(+), 26 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/5bd16049/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndex.java ---------------------------------------------------------------------- diff --git a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndex.java b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndex.java index f36ffdb..3ecf84d 100644 --- a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndex.java +++ b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndex.java @@ -29,6 +29,7 @@ import java.util.stream.Collectors; import javax.inject.Inject; import org.apache.james.backends.es.ElasticSearchIndexer; +import org.apache.james.mailbox.MailboxManager.MessageCapabilities; import org.apache.james.mailbox.MailboxManager.SearchCapabilities; import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.MessageUid; @@ -77,7 +78,7 @@ public class ElasticSearchListeningMessageSearchIndex extends ListeningMessageSe } @Override - public EnumSet<SearchCapabilities> getSupportedCapabilities() { + public EnumSet<SearchCapabilities> getSupportedCapabilities(EnumSet<MessageCapabilities> messageCapabilities) { return EnumSet.of(SearchCapabilities.MultimailboxSearch, SearchCapabilities.Text, SearchCapabilities.FullText, SearchCapabilities.Attachment); } http://git-wip-us.apache.org/repos/asf/james-project/blob/5bd16049/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 dcf9abc..1e7d632 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 @@ -36,6 +36,7 @@ import java.util.Locale; import java.util.Optional; import java.util.Set; import java.util.TimeZone; + import javax.inject.Inject; import javax.mail.Flags; import javax.mail.Flags.Flag; @@ -402,8 +403,9 @@ public class LuceneMessageSearchIndex extends ListeningMessageSearchIndex { @Override - public EnumSet<SearchCapabilities> getSupportedCapabilities() { - return EnumSet.noneOf(SearchCapabilities.class); + public EnumSet<SearchCapabilities> getSupportedCapabilities(EnumSet<MailboxManager.MessageCapabilities> messageCapabilities) { + return EnumSet.of(SearchCapabilities.MultimailboxSearch); + } /** http://git-wip-us.apache.org/repos/asf/james-project/blob/5bd16049/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java ---------------------------------------------------------------------- diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java index 818cc97..710790b 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java @@ -286,7 +286,7 @@ public class StoreMailboxManager implements MailboxManager { @Override public EnumSet<SearchCapabilities> getSupportedSearchCapabilities() { - return index.getSupportedCapabilities(); + return index.getSupportedCapabilities(getSupportedMessageCapabilities()); } http://git-wip-us.apache.org/repos/asf/james-project/blob/5bd16049/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/LazyMessageSearchIndex.java ---------------------------------------------------------------------- diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/LazyMessageSearchIndex.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/LazyMessageSearchIndex.java index f4c9947..90146d2 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/LazyMessageSearchIndex.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/LazyMessageSearchIndex.java @@ -23,6 +23,7 @@ import java.util.Iterator; import java.util.List; import java.util.concurrent.ConcurrentHashMap; +import org.apache.james.mailbox.MailboxManager; import org.apache.james.mailbox.MailboxManager.SearchCapabilities; import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.MessageUid; @@ -70,7 +71,7 @@ public class LazyMessageSearchIndex extends ListeningMessageSearchIndex { } @Override - public EnumSet<SearchCapabilities> getSupportedCapabilities() { + public EnumSet<SearchCapabilities> getSupportedCapabilities(EnumSet<MailboxManager.MessageCapabilities> messageCapabilities) { return EnumSet.noneOf(SearchCapabilities.class); } http://git-wip-us.apache.org/repos/asf/james-project/blob/5bd16049/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/MessageSearchIndex.java ---------------------------------------------------------------------- diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/MessageSearchIndex.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/MessageSearchIndex.java index 496f481..df7924f 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/MessageSearchIndex.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/MessageSearchIndex.java @@ -52,7 +52,7 @@ public interface MessageSearchIndex { */ List<MessageId> search(MailboxSession session, MultimailboxesSearchQuery searchQuery, long limit) throws MailboxException; - EnumSet<MailboxManager.SearchCapabilities> getSupportedCapabilities(); + EnumSet<MailboxManager.SearchCapabilities> getSupportedCapabilities(EnumSet<MailboxManager.MessageCapabilities> messageCapabilities); class SearchResult { private final Optional<MessageId> messageId; http://git-wip-us.apache.org/repos/asf/james-project/blob/5bd16049/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndex.java ---------------------------------------------------------------------- diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndex.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndex.java index 6388fff..55297c0 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndex.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndex.java @@ -27,6 +27,7 @@ import java.util.stream.Stream; import javax.inject.Inject; +import org.apache.james.mailbox.MailboxManager.MessageCapabilities; import org.apache.james.mailbox.MailboxManager.SearchCapabilities; import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.MessageUid; @@ -76,8 +77,14 @@ public class SimpleMessageSearchIndex implements MessageSearchIndex { } @Override - public EnumSet<SearchCapabilities> getSupportedCapabilities() { - return EnumSet.of(SearchCapabilities.MultimailboxSearch, SearchCapabilities.Text, SearchCapabilities.FullText, SearchCapabilities.Attachment); + public EnumSet<SearchCapabilities> getSupportedCapabilities(EnumSet<MessageCapabilities> messageCapabilities) { + if (messageCapabilities.contains(MessageCapabilities.Attachment)) { + return EnumSet.of(SearchCapabilities.MultimailboxSearch, + SearchCapabilities.Text, + SearchCapabilities.Attachment); + } + return EnumSet.of(SearchCapabilities.MultimailboxSearch, + SearchCapabilities.Text); } /** http://git-wip-us.apache.org/repos/asf/james-project/blob/5bd16049/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 9fc2062..ba74c82 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 @@ -1113,7 +1113,7 @@ public abstract class AbstractMessageSearchIndexTest { } @Test - public void searchWithFulTextShouldReturnMailsWhenToAndBodyAndAttachmentMatches() throws Exception { + public void searchWithFullTextShouldReturnMailsWhenNotAPerfectMatch() throws Exception { Assume.assumeTrue(storeMailboxManager.getSupportedSearchCapabilities().contains(MailboxManager.SearchCapabilities.FullText)); ComposedMessageId messageWithBeautifulBananaAsTextAttachment = myFolderMessageManager.appendMessage( ClassLoader.getSystemResourceAsStream("eml/emailWithTextAttachment.eml"), http://git-wip-us.apache.org/repos/asf/james-project/blob/5bd16049/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesCapabilitiesServerTest.java ---------------------------------------------------------------------- diff --git a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesCapabilitiesServerTest.java b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesCapabilitiesServerTest.java index e0f447c..5b03a23 100644 --- a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesCapabilitiesServerTest.java +++ b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesCapabilitiesServerTest.java @@ -101,21 +101,6 @@ public class JamesCapabilitiesServerTest { } @Test - public void startShouldFailWhenNoFullTextCapability() throws Exception { - MailboxManager mailboxManager = mock(MailboxManager.class); - when(mailboxManager.getSupportedMailboxCapabilities()) - .thenReturn(EnumSet.allOf(MailboxManager.MailboxCapabilities.class)); - when(mailboxManager.getSupportedMessageCapabilities()) - .thenReturn(EnumSet.allOf(MailboxManager.MessageCapabilities.class)); - when(mailboxManager.getSupportedSearchCapabilities()) - .thenReturn(EnumSet.complementOf(EnumSet.of(MailboxManager.SearchCapabilities.FullText))); - - server = createCassandraJamesServer(mailboxManager); - - assertThatThrownBy(() -> server.start()).isInstanceOf(IllegalArgumentException.class); - } - - @Test public void startShouldFailWhenNoAttachmentSearchCapability() throws Exception { MailboxManager mailboxManager = mock(MailboxManager.class); when(mailboxManager.getSupportedMailboxCapabilities()) http://git-wip-us.apache.org/repos/asf/james-project/blob/5bd16049/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPModule.java ---------------------------------------------------------------------- diff --git a/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPModule.java b/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPModule.java index 9150680..b0909a5 100644 --- a/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPModule.java +++ b/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPModule.java @@ -151,8 +151,6 @@ public class JMAPModule extends AbstractModule { EnumSet<SearchCapabilities> searchCapabilities = mailboxManager.getSupportedSearchCapabilities(); Preconditions.checkArgument(searchCapabilities.contains(MailboxManager.SearchCapabilities.MultimailboxSearch), "Multimailbox search in MailboxManager is required by JMAP Module"); - Preconditions.checkArgument(searchCapabilities.contains(MailboxManager.SearchCapabilities.FullText), - "FullText support in MailboxManager is required by JMAP Module"); Preconditions.checkArgument(searchCapabilities.contains(MailboxManager.SearchCapabilities.Attachment), "Attachment Search support in MailboxManager is required by JMAP Module"); } --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org