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