JAMES-1804 Add Text capability to MessageSearchIndex
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/9470ccf8 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/9470ccf8 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/9470ccf8 Branch: refs/heads/master Commit: 9470ccf8331717fee2b9d92fd8fc5cd39d7a25c9 Parents: 62f6ad9 Author: Antoine Duprat <[email protected]> Authored: Wed Jul 20 12:06:54 2016 +0200 Committer: Antoine Duprat <[email protected]> Committed: Tue Jul 26 08:57:04 2016 +0200 ---------------------------------------------------------------------- .../apache/james/mailbox/MailboxManager.java | 8 +++++- ...lasticSearchListeningMessageSearchIndex.java | 4 +-- .../lucene/search/LuceneMessageSearchIndex.java | 1 + .../store/search/MessageSearchIndex.java | 2 +- .../store/search/SimpleMessageSearchIndex.java | 2 +- .../james/JamesCapabilitiesServerTest.java | 27 ++++++++++++++++++-- .../java/org/apache/james/jmap/JMAPModule.java | 8 +++++- 7 files changed, 44 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/9470ccf8/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java ---------------------------------------------------------------------- diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java b/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java index 8cc0ea6..926074b 100644 --- a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java +++ b/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java @@ -90,7 +90,13 @@ public interface MailboxManager extends RequestAware, MailboxListenerSupport { EnumSet<MessageCapabilities> getSupportedMessageCapabilities(); enum SearchCapabilities { - MultimailboxSearch + MultimailboxSearch, + /** + * The implementation supporting this capability should + * provide an index on the fields: + * From, To, Cc, Bcc, Subjects, textBody & htmlBody + */ + Text } EnumSet<SearchCapabilities> getSupportedSearchCapabilities(); http://git-wip-us.apache.org/repos/asf/james-project/blob/9470ccf8/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 957826d..47823db 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 @@ -55,7 +55,7 @@ public class ElasticSearchListeningMessageSearchIndex extends ListeningMessageSe private final static Logger LOGGER = LoggerFactory.getLogger(ElasticSearchListeningMessageSearchIndex.class); private final static String ID_SEPARATOR = ":"; - + private final ElasticSearchIndexer indexer; private final ElasticSearchSearcher searcher; private final MessageToElasticSearchJson messageToElasticSearchJson; @@ -76,7 +76,7 @@ public class ElasticSearchListeningMessageSearchIndex extends ListeningMessageSe @Override public EnumSet<SearchCapabilities> getSupportedCapabilities() { - return EnumSet.of(SearchCapabilities.MultimailboxSearch); + return EnumSet.of(SearchCapabilities.MultimailboxSearch, SearchCapabilities.Text); } @Override http://git-wip-us.apache.org/repos/asf/james-project/blob/9470ccf8/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 b998dfa..bc48605 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 @@ -1383,6 +1383,7 @@ public class LuceneMessageSearchIndex extends ListeningMessageSearchIndex { throw new MailboxException("Unable to delete message from index", e); } } + http://git-wip-us.apache.org/repos/asf/james-project/blob/9470ccf8/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 3dcfcca..b81607d 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 @@ -40,7 +40,7 @@ import org.apache.james.mailbox.store.mail.model.Mailbox; * */ public interface MessageSearchIndex { - + /** * Return all uids of the previous indexed {@link Mailbox}'s which match the {@link SearchQuery} */ http://git-wip-us.apache.org/repos/asf/james-project/blob/9470ccf8/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 7dccf41..db16fd7 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 @@ -76,7 +76,7 @@ public class SimpleMessageSearchIndex implements MessageSearchIndex { @Override public EnumSet<SearchCapabilities> getSupportedCapabilities() { - return EnumSet.of(SearchCapabilities.MultimailboxSearch); + return EnumSet.of(SearchCapabilities.MultimailboxSearch, SearchCapabilities.Text); } /** http://git-wip-us.apache.org/repos/asf/james-project/blob/9470ccf8/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 3eeeff8..e866369 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 @@ -90,6 +90,9 @@ public class JamesCapabilitiesServerTest { .thenReturn(EnumSet.complementOf(EnumSet.of(MailboxManager.MailboxCapabilities.Move))); when(mailboxManager.getSupportedMessageCapabilities()) .thenReturn(EnumSet.of(MailboxManager.MessageCapabilities.Attachment)); + when(mailboxManager.getSupportedSearchCapabilities()) + .thenReturn(EnumSet.of(MailboxManager.SearchCapabilities.MultimailboxSearch, MailboxManager.SearchCapabilities.Text)); + server = createCassandraJamesServer(mailboxManager); assertThatThrownBy(() -> server.start()).isInstanceOf(IllegalArgumentException.class); @@ -102,6 +105,24 @@ public class JamesCapabilitiesServerTest { .thenReturn(EnumSet.allOf(MailboxManager.MailboxCapabilities.class)); when(mailboxManager.getSupportedMessageCapabilities()) .thenReturn(EnumSet.noneOf(MailboxManager.MessageCapabilities.class)); + when(mailboxManager.getSupportedSearchCapabilities()) + .thenReturn(EnumSet.of(MailboxManager.SearchCapabilities.MultimailboxSearch, MailboxManager.SearchCapabilities.Text)); + + server = createCassandraJamesServer(mailboxManager); + + assertThatThrownBy(() -> server.start()).isInstanceOf(IllegalArgumentException.class); + } + + @Test + public void startShouldFailWhenNoTextCapability() 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.of(MailboxManager.SearchCapabilities.MultimailboxSearch)); + server = createCassandraJamesServer(mailboxManager); assertThatThrownBy(() -> server.start()).isInstanceOf(IllegalArgumentException.class); @@ -115,7 +136,8 @@ public class JamesCapabilitiesServerTest { when(mailboxManager.getSupportedMessageCapabilities()) .thenReturn(EnumSet.allOf(MailboxManager.MessageCapabilities.class)); when(mailboxManager.getSupportedSearchCapabilities()) - .thenReturn(EnumSet.noneOf(MailboxManager.SearchCapabilities.class)); + .thenReturn(EnumSet.of(MailboxManager.SearchCapabilities.Text)); + server = createCassandraJamesServer(mailboxManager); assertThatThrownBy(() -> server.start()).isInstanceOf(IllegalArgumentException.class); @@ -128,7 +150,8 @@ public class JamesCapabilitiesServerTest { when(mailboxManager.getSupportedMessageCapabilities()) .thenReturn(EnumSet.of(MailboxManager.MessageCapabilities.Attachment)); when(mailboxManager.getSupportedSearchCapabilities()) - .thenReturn(EnumSet.of(MailboxManager.SearchCapabilities.MultimailboxSearch)); + .thenReturn(EnumSet.of(MailboxManager.SearchCapabilities.MultimailboxSearch, MailboxManager.SearchCapabilities.Text)); + server = createCassandraJamesServer(mailboxManager); server.start(); http://git-wip-us.apache.org/repos/asf/james-project/blob/9470ccf8/server/container/guice/guice-common/src/main/java/org/apache/james/jmap/JMAPModule.java ---------------------------------------------------------------------- diff --git a/server/container/guice/guice-common/src/main/java/org/apache/james/jmap/JMAPModule.java b/server/container/guice/guice-common/src/main/java/org/apache/james/jmap/JMAPModule.java index 93bb11c..286cead 100644 --- a/server/container/guice/guice-common/src/main/java/org/apache/james/jmap/JMAPModule.java +++ b/server/container/guice/guice-common/src/main/java/org/apache/james/jmap/JMAPModule.java @@ -19,6 +19,7 @@ package org.apache.james.jmap; import java.io.IOException; +import java.util.EnumSet; import java.util.List; import java.util.Optional; @@ -34,6 +35,7 @@ import org.apache.james.jmap.utils.SystemMailboxesProvider; import org.apache.james.jmap.utils.SystemMailboxesProviderImpl; import org.apache.james.lifecycle.api.Configurable; import org.apache.james.mailbox.MailboxManager; +import org.apache.james.mailbox.MailboxManager.SearchCapabilities; import org.apache.james.mailetcontainer.impl.MatcherMailetPair; import org.apache.james.modules.server.CamelMailetContainerModule; import org.apache.james.transport.mailets.RemoveMimeHeader; @@ -106,8 +108,12 @@ public class JMAPModule extends AbstractModule { "MOVE support in MailboxManager is required by JMAP Module"); Preconditions.checkArgument(mailboxManager.getSupportedMessageCapabilities().contains(MailboxManager.MessageCapabilities.Attachment), "Attachment support in MailboxManager is required by JMAP Module"); - Preconditions.checkArgument(mailboxManager.getSupportedSearchCapabilities().contains(MailboxManager.SearchCapabilities.MultimailboxSearch), + + 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.Text), + "Text support in MailboxManager is required by JMAP Module"); } @Override --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
