JAMES-1804 Add Text capability to MessageSearchIndex
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 @@
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();
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 @@
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 @@
@Override
public EnumSet<SearchCapabilities> getSupportedCapabilities() {
- return EnumSet.of(SearchCapabilities.MultimailboxSearch);
+ return EnumSet.of(SearchCapabilities.MultimailboxSearch, SearchCapabilities.Text);
}
@Override
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 @@
throw new MailboxException("Unable to delete message from index", e);
}
}
+
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 @@
*
*/
public interface MessageSearchIndex {
-
+
/**
* Return all uids of the previous indexed {@link Mailbox}'s which match the {@link SearchQuery}
*/
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 @@
@Override
public EnumSet<SearchCapabilities> getSupportedCapabilities() {
- return EnumSet.of(SearchCapabilities.MultimailboxSearch);
+ return EnumSet.of(SearchCapabilities.MultimailboxSearch, SearchCapabilities.Text);
}
/**
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 @@
.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 @@
.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 @@
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 @@
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();
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.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 @@
"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