You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by ma...@apache.org on 2016/07/25 08:33:58 UTC

[7/8] james-project git commit: MAILBOX-273 require multimailbox search capability for jmap

MAILBOX-273 require multimailbox search capability for jmap


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/7a6a4c19
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/7a6a4c19
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/7a6a4c19

Branch: refs/heads/master
Commit: 7a6a4c193d35b23ff2e4e326a858b9be237a44ef
Parents: 41cd544
Author: Matthieu Baechler <ma...@linagora.com>
Authored: Tue Jul 19 18:35:31 2016 +0200
Committer: Matthieu Baechler <ma...@linagora.com>
Committed: Mon Jul 25 10:13:31 2016 +0200

----------------------------------------------------------------------
 .../org/apache/james/mailbox/MailboxManager.java    |  6 ++++++
 .../ElasticSearchListeningMessageSearchIndex.java   |  7 +++++++
 .../lucene/search/LuceneMessageSearchIndex.java     |  8 ++++++++
 .../james/mailbox/store/StoreMailboxManager.java    |  6 ++++++
 .../store/search/LazyMessageSearchIndex.java        |  7 +++++++
 .../mailbox/store/search/MessageSearchIndex.java    |  4 ++++
 .../store/search/SimpleMessageSearchIndex.java      |  7 +++++++
 .../processor/base/MailboxEventAnalyserTest.java    |  5 +++++
 .../apache/james/JamesCapabilitiesServerTest.java   | 16 ++++++++++++++++
 .../main/java/org/apache/james/jmap/JMAPModule.java |  2 ++
 .../jmap/FirstUserConnectionFilterThreadTest.java   |  5 +++++
 11 files changed, 73 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/7a6a4c19/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 1d60bcf..8cc0ea6 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
@@ -88,7 +88,13 @@ public interface MailboxManager extends RequestAware, MailboxListenerSupport {
     }
 
     EnumSet<MessageCapabilities> getSupportedMessageCapabilities();
+
+    enum SearchCapabilities {
+        MultimailboxSearch
+    }
     
+    EnumSet<SearchCapabilities> getSupportedSearchCapabilities();
+
     
     /**
      * Return the delimiter to use for folders

http://git-wip-us.apache.org/repos/asf/james-project/blob/7a6a4c19/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 b967e7c..dc7e301 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
@@ -21,6 +21,7 @@ package org.apache.james.mailbox.elasticsearch.events;
 import static org.elasticsearch.index.query.QueryBuilders.termQuery;
 
 import java.util.Collection;
+import java.util.EnumSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
@@ -29,6 +30,7 @@ import java.util.stream.Collectors;
 import javax.inject.Inject;
 
 import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.MailboxManager.SearchCapabilities;
 import org.apache.james.mailbox.elasticsearch.ElasticSearchIndexer;
 import org.apache.james.mailbox.elasticsearch.json.JsonMessageConstants;
 import org.apache.james.mailbox.elasticsearch.json.MessageToElasticSearchJson;
@@ -72,6 +74,11 @@ public class ElasticSearchListeningMessageSearchIndex extends ListeningMessageSe
     }
 
     @Override
+    public EnumSet<SearchCapabilities> getSupportedCapabilities() {
+        return EnumSet.of(SearchCapabilities.MultimailboxSearch);
+    }
+    
+    @Override
     public Iterator<Long> search(MailboxSession session, Mailbox mailbox, SearchQuery searchQuery) throws MailboxException {
         MailboxId mailboxId = mailbox.getMailboxId();
         return searcher

http://git-wip-us.apache.org/repos/asf/james-project/blob/7a6a4c19/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 13ce4ac..9eb0388 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
@@ -28,6 +28,7 @@ import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Collection;
 import java.util.Date;
+import java.util.EnumSet;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
@@ -39,6 +40,7 @@ import java.util.TimeZone;
 import javax.mail.Flags;
 import javax.mail.Flags.Flag;
 
+import org.apache.james.mailbox.MailboxManager.SearchCapabilities;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.exception.UnsupportedSearchException;
@@ -366,6 +368,12 @@ public class LuceneMessageSearchIndex extends ListeningMessageSearchIndex {
         return ListenerType.EACH_NODE;
     }
 
+
+    @Override
+    public EnumSet<SearchCapabilities> getSupportedCapabilities() {
+        return EnumSet.noneOf(SearchCapabilities.class);
+    }
+    
     /**
      * Set the max count of results which will get returned from a query. The default is {@link #DEFAULT_MAX_QUERY_RESULTS}
      * 

http://git-wip-us.apache.org/repos/asf/james-project/blob/7a6a4c19/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 1d671af..84f24ae 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
@@ -209,6 +209,12 @@ public class StoreMailboxManager implements MailboxManager {
         return EnumSet.noneOf(MessageCapabilities.class);
     }
     
+    @Override
+    public EnumSet<SearchCapabilities> getSupportedSearchCapabilities() {
+        return index.getSupportedCapabilities();
+    }
+    
+
     /**
      * Return the {@link DelegatingMailboxListener} which is used by this {@link MailboxManager}
      *

http://git-wip-us.apache.org/repos/asf/james-project/blob/7a6a4c19/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 82704f9..4096c8e 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
@@ -19,11 +19,13 @@
 package org.apache.james.mailbox.store.search;
 
 import java.util.Collection;
+import java.util.EnumSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
+import org.apache.james.mailbox.MailboxManager.SearchCapabilities;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.exception.UnsupportedSearchException;
@@ -60,6 +62,11 @@ public class LazyMessageSearchIndex extends ListeningMessageSearchIndex {
     public ListenerType getType() {
         return index.getType();
     }
+    
+    @Override
+    public EnumSet<SearchCapabilities> getSupportedCapabilities() {
+        return EnumSet.noneOf(SearchCapabilities.class);
+    }
 
     @Override
     public void add(MailboxSession session, Mailbox mailbox, MailboxMessage message) throws MailboxException {

http://git-wip-us.apache.org/repos/asf/james-project/blob/7a6a4c19/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 b120b3a..3dcfcca 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
@@ -20,9 +20,11 @@
 package org.apache.james.mailbox.store.search;
 
 import java.util.Collection;
+import java.util.EnumSet;
 import java.util.Iterator;
 import java.util.Map;
 
+import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.MailboxId;
@@ -49,4 +51,6 @@ public interface MessageSearchIndex {
      */
     Map<MailboxId, Collection<Long>> search(MailboxSession session, MultimailboxesSearchQuery searchQuery) throws MailboxException;
 
+    EnumSet<MailboxManager.SearchCapabilities> getSupportedCapabilities();
+
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/7a6a4c19/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 e4712c2..4a2e8d1 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
@@ -19,6 +19,7 @@
 package org.apache.james.mailbox.store.search;
 
 import java.util.Collection;
+import java.util.EnumSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
@@ -27,6 +28,7 @@ import java.util.TreeSet;
 
 import javax.inject.Inject;
 
+import org.apache.james.mailbox.MailboxManager.SearchCapabilities;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.exception.UnsupportedSearchException;
@@ -61,6 +63,11 @@ public class SimpleMessageSearchIndex implements MessageSearchIndex {
         this.factory = factory;
     }
     
+    @Override
+    public EnumSet<SearchCapabilities> getSupportedCapabilities() {
+        return EnumSet.noneOf(SearchCapabilities.class);
+    }
+    
     /**
      * Walks down the query tree's conjunctions to find a UidCriterion
      * @param crits - list of Criterion to search from

http://git-wip-us.apache.org/repos/asf/james-project/blob/7a6a4c19/protocols/imap/src/test/java/org/apache/james/imap/processor/base/MailboxEventAnalyserTest.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/test/java/org/apache/james/imap/processor/base/MailboxEventAnalyserTest.java b/protocols/imap/src/test/java/org/apache/james/imap/processor/base/MailboxEventAnalyserTest.java
index 036ad33..29a6643 100644
--- a/protocols/imap/src/test/java/org/apache/james/imap/processor/base/MailboxEventAnalyserTest.java
+++ b/protocols/imap/src/test/java/org/apache/james/imap/processor/base/MailboxEventAnalyserTest.java
@@ -87,6 +87,11 @@ public class MailboxEventAnalyserTest {
             return EnumSet.noneOf(MessageCapabilities.class);
         }
         
+        @Override
+        public EnumSet<SearchCapabilities> getSupportedSearchCapabilities() {
+            return EnumSet.noneOf(SearchCapabilities.class);
+        }
+        
         public boolean hasCapability(MailboxCapabilities capability) {
             return false;
         }

http://git-wip-us.apache.org/repos/asf/james-project/blob/7a6a4c19/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 b0f9feb..3eeeff8 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
@@ -106,6 +106,20 @@ public class JamesCapabilitiesServerTest {
 
         assertThatThrownBy(() -> server.start()).isInstanceOf(IllegalArgumentException.class);
     }
+    
+    @Test
+    public void startShouldFailWhenNoMultimailboxSearchCapability() 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.noneOf(MailboxManager.SearchCapabilities.class));
+        server = createCassandraJamesServer(mailboxManager);
+
+        assertThatThrownBy(() -> server.start()).isInstanceOf(IllegalArgumentException.class);
+    }
 
     @Test
     public void startShouldSucceedWhenRequiredCapabilities() throws Exception {
@@ -113,6 +127,8 @@ public class JamesCapabilitiesServerTest {
         when(mailboxManager.hasCapability(MailboxManager.MailboxCapabilities.Move)).thenReturn(true);
         when(mailboxManager.getSupportedMessageCapabilities())
             .thenReturn(EnumSet.of(MailboxManager.MessageCapabilities.Attachment));
+        when(mailboxManager.getSupportedSearchCapabilities())
+            .thenReturn(EnumSet.of(MailboxManager.SearchCapabilities.MultimailboxSearch));
         server = createCassandraJamesServer(mailboxManager);
 
         server.start();

http://git-wip-us.apache.org/repos/asf/james-project/blob/7a6a4c19/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 247c70d..93bb11c 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
@@ -106,6 +106,8 @@ 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),
+                    "Multimailbox search in MailboxManager is required by JMAP Module");
         }
 
         @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/7a6a4c19/server/protocols/jmap/src/test/java/org/apache/james/jmap/FirstUserConnectionFilterThreadTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/FirstUserConnectionFilterThreadTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/FirstUserConnectionFilterThreadTest.java
index 8dc4628..8b4c273 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/FirstUserConnectionFilterThreadTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/FirstUserConnectionFilterThreadTest.java
@@ -92,6 +92,11 @@ public class FirstUserConnectionFilterThreadTest {
         }
 
         @Override
+        public EnumSet<SearchCapabilities> getSupportedSearchCapabilities() {
+            return EnumSet.noneOf(SearchCapabilities.class);
+        }
+        
+        @Override
         public void startProcessingRequest(MailboxSession session) {
         }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org