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

Reply via email to