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/26 10:38:37 UTC

[2/2] james-project git commit: JAMES-1807 add notInMailboxes in MultimailboxesSearchQuery

JAMES-1807 add notInMailboxes in MultimailboxesSearchQuery


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

Branch: refs/heads/master
Commit: fd37855cbe2c64d4488b80e24b2697b72c2304f2
Parents: 9af58b7
Author: Matthieu Baechler <ma...@linagora.com>
Authored: Tue Jul 26 10:15:51 2016 +0200
Committer: Matthieu Baechler <ma...@linagora.com>
Committed: Tue Jul 26 12:37:41 2016 +0200

----------------------------------------------------------------------
 .../model/MultimailboxesSearchQuery.java        | 31 +++++++++++----
 .../model/MultimailboxesSearchQueryTest.java    | 42 ++++++++++++++++----
 ...lasticSearchListeningMessageSearchIndex.java |  2 +-
 .../lucene/search/LuceneMessageSearchIndex.java |  2 +-
 .../store/search/SimpleMessageSearchIndex.java  |  4 +-
 5 files changed, 63 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/fd37855c/mailbox/api/src/main/java/org/apache/james/mailbox/model/MultimailboxesSearchQuery.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MultimailboxesSearchQuery.java b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MultimailboxesSearchQuery.java
index 42e667b..b0b867d 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MultimailboxesSearchQuery.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MultimailboxesSearchQuery.java
@@ -36,11 +36,13 @@ public class MultimailboxesSearchQuery {
         
         private final SearchQuery searchQuery;
         private ImmutableSet.Builder<MailboxId> mailboxIds;
+        private ImmutableSet.Builder<MailboxId> notInMailboxIds;
 
         private Builder(SearchQuery searchQuery) {
             Preconditions.checkNotNull(searchQuery);
             this.searchQuery = searchQuery;
             this.mailboxIds = ImmutableSet.builder();
+            this.notInMailboxIds = ImmutableSet.builder();
         }
 
         public Builder inMailboxes(Collection<MailboxId> mailboxIds) {
@@ -52,23 +54,38 @@ public class MultimailboxesSearchQuery {
             return inMailboxes(Arrays.asList(mailboxIds));
         }
         
-        public MultimailboxesSearchQuery build() {
-            return new MultimailboxesSearchQuery(searchQuery, mailboxIds.build());
+        public Builder notInMailboxes(Collection<MailboxId> mailboxIds) {
+            this.notInMailboxIds.addAll(mailboxIds);
+            return this;
         }
         
+        public Builder notInMailboxes(MailboxId... mailboxIds) {
+            return notInMailboxes(Arrays.asList(mailboxIds));
+        }
+
+        public MultimailboxesSearchQuery build() {
+            return new MultimailboxesSearchQuery(searchQuery, mailboxIds.build(), notInMailboxIds.build());
+        }
+
     }
 
     private final SearchQuery searchQuery;
-    private final ImmutableSet<MailboxId> mailboxIds;
+    private final ImmutableSet<MailboxId> inMailboxes;
+    private final ImmutableSet<MailboxId> notInMailboxes;
 
     @VisibleForTesting
-    MultimailboxesSearchQuery(SearchQuery searchQuery, ImmutableSet<MailboxId> mailboxIds) {
+    MultimailboxesSearchQuery(SearchQuery searchQuery, ImmutableSet<MailboxId> inMailboxes, ImmutableSet<MailboxId> notInMailboxes) {
         this.searchQuery = searchQuery;
-        this.mailboxIds = mailboxIds;
+        this.inMailboxes = inMailboxes;
+        this.notInMailboxes = notInMailboxes;
     }
 
-    public ImmutableSet<MailboxId> getMailboxIds() {
-        return mailboxIds;
+    public ImmutableSet<MailboxId> getInMailboxes() {
+        return inMailboxes;
+    }
+    
+    public ImmutableSet<MailboxId> getNotInMailboxes() {
+        return notInMailboxes;
     }
     
     public SearchQuery getSearchQuery() {

http://git-wip-us.apache.org/repos/asf/james-project/blob/fd37855c/mailbox/api/src/test/java/org/apache/james/mailbox/model/MultimailboxesSearchQueryTest.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/model/MultimailboxesSearchQueryTest.java b/mailbox/api/src/test/java/org/apache/james/mailbox/model/MultimailboxesSearchQueryTest.java
index 92a77a2..867a70d 100644
--- a/mailbox/api/src/test/java/org/apache/james/mailbox/model/MultimailboxesSearchQueryTest.java
+++ b/mailbox/api/src/test/java/org/apache/james/mailbox/model/MultimailboxesSearchQueryTest.java
@@ -34,30 +34,58 @@ public class MultimailboxesSearchQueryTest {
     }
 
     @Test
-    public void buildShouldBuildWhenNoMailboxes() {
-        MultimailboxesSearchQuery expected = new MultimailboxesSearchQuery(EMPTY_QUERY, ImmutableSet.<MailboxId>of());
+    public void buildShouldBuildWheninMailboxes() {
+        ImmutableSet<MailboxId> inMailboxes = ImmutableSet.<MailboxId>of();
+        ImmutableSet<MailboxId> notInMailboxes = ImmutableSet.<MailboxId>of();
+        MultimailboxesSearchQuery expected = new MultimailboxesSearchQuery(EMPTY_QUERY, inMailboxes, notInMailboxes);
         MultimailboxesSearchQuery actual = MultimailboxesSearchQuery.from(EMPTY_QUERY).build();
         assertThat(actual).isEqualToComparingFieldByField(expected);
     }
 
     @Test
     public void buildShouldBuildWhenEmptyMailboxes() {
-        MultimailboxesSearchQuery expected = new MultimailboxesSearchQuery(EMPTY_QUERY, ImmutableSet.<MailboxId>of());
+        ImmutableSet<MailboxId> inMailboxes = ImmutableSet.<MailboxId>of();
+        ImmutableSet<MailboxId> notInMailboxes = ImmutableSet.<MailboxId>of();
+        MultimailboxesSearchQuery expected = new MultimailboxesSearchQuery(EMPTY_QUERY, inMailboxes, notInMailboxes);
         MultimailboxesSearchQuery actual = MultimailboxesSearchQuery.from(EMPTY_QUERY).inMailboxes().build();
         assertThat(actual).isEqualToComparingFieldByField(expected);
     }
 
     @Test
+    public void buildShouldBuildWhenEmptyNotInMailboxes() {
+        ImmutableSet<MailboxId> inMailboxes = ImmutableSet.<MailboxId>of();
+        ImmutableSet<MailboxId> notInMailboxes = ImmutableSet.<MailboxId>of();
+        MultimailboxesSearchQuery expected = new MultimailboxesSearchQuery(EMPTY_QUERY, inMailboxes, notInMailboxes);
+        MultimailboxesSearchQuery actual = MultimailboxesSearchQuery.from(EMPTY_QUERY).notInMailboxes().build();
+        assertThat(actual).isEqualToComparingFieldByField(expected);
+    }
+
+    
+    @Test
     public void buildShouldBuildWhenOneMailbox() {
-        MultimailboxesSearchQuery expected = new MultimailboxesSearchQuery(EMPTY_QUERY, ImmutableSet.<MailboxId>of(TestId.of(("id1"))));
+        ImmutableSet<MailboxId> inMailboxes = ImmutableSet.<MailboxId>of(TestId.of(("id1")));
+        ImmutableSet<MailboxId> notInMailboxes = ImmutableSet.<MailboxId>of();
+        MultimailboxesSearchQuery expected = new MultimailboxesSearchQuery(EMPTY_QUERY, inMailboxes, notInMailboxes);
         MultimailboxesSearchQuery actual = MultimailboxesSearchQuery.from(EMPTY_QUERY).inMailboxes(TestId.of("id1")).build();
         assertThat(actual).isEqualToComparingFieldByField(expected);
     }
 
     @Test
-    public void buildShouldBuildWhenTwoMailboxes() {
-        MultimailboxesSearchQuery expected = new MultimailboxesSearchQuery(EMPTY_QUERY, ImmutableSet.<MailboxId>of(TestId.of("id1"), TestId.of("id2")));
-        MultimailboxesSearchQuery actual = MultimailboxesSearchQuery.from(EMPTY_QUERY).inMailboxes(TestId.of("id1"), TestId.of("id2")).build();
+    public void buildShouldBuildWhenOneNotInMailbox() {
+        ImmutableSet<MailboxId> inMailboxes = ImmutableSet.<MailboxId>of();
+        ImmutableSet<MailboxId> notInMailboxes = ImmutableSet.<MailboxId>of(TestId.of(("id1")));
+        MultimailboxesSearchQuery expected = new MultimailboxesSearchQuery(EMPTY_QUERY, inMailboxes, notInMailboxes);
+        MultimailboxesSearchQuery actual = MultimailboxesSearchQuery.from(EMPTY_QUERY).notInMailboxes(TestId.of("id1")).build();
+        assertThat(actual).isEqualToComparingFieldByField(expected);
+    }
+
+    
+    @Test
+    public void buildShouldBuildWhenAllDefined() {
+        ImmutableSet<MailboxId> inMailboxes = ImmutableSet.<MailboxId>of(TestId.of("id1"));
+        ImmutableSet<MailboxId> notInMailboxes = ImmutableSet.<MailboxId>of(TestId.of("id2"));
+        MultimailboxesSearchQuery expected = new MultimailboxesSearchQuery(EMPTY_QUERY, inMailboxes, notInMailboxes);
+        MultimailboxesSearchQuery actual = MultimailboxesSearchQuery.from(EMPTY_QUERY).inMailboxes(TestId.of("id1")).notInMailboxes(TestId.of("id2")).build();
         assertThat(actual).isEqualToComparingFieldByField(expected);
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/fd37855c/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 47823db..63f0fec 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
@@ -93,7 +93,7 @@ public class ElasticSearchListeningMessageSearchIndex extends ListeningMessageSe
     public Map<MailboxId, Collection<Long>> search(MailboxSession session, MultimailboxesSearchQuery searchQuery)
             throws MailboxException {
         Preconditions.checkArgument(session != null, "'session' is mandatory");
-        return searcher.search(ImmutableList.of(session.getUser()), searchQuery.getMailboxIds(), searchQuery.getSearchQuery()).asMap();
+        return searcher.search(ImmutableList.of(session.getUser()), searchQuery.getInMailboxes(), searchQuery.getSearchQuery()).asMap();
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/fd37855c/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 bc48605..c87e8c2 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
@@ -451,7 +451,7 @@ public class LuceneMessageSearchIndex extends ListeningMessageSearchIndex {
         Multimap<MailboxId, Long> results = LinkedHashMultimap.create();
         IndexSearcher searcher = null;
 
-        Query inMailboxes = buildQueryFromMailboxes(searchQuery.getMailboxIds());
+        Query inMailboxes = buildQueryFromMailboxes(searchQuery.getInMailboxes());
         
         try {
             searcher = new IndexSearcher(IndexReader.open(writer, true));

http://git-wip-us.apache.org/repos/asf/james-project/blob/fd37855c/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 db16fd7..667f2ab 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
@@ -157,13 +157,13 @@ public class SimpleMessageSearchIndex implements MessageSearchIndex {
     public Map<MailboxId, Collection<Long>> search(MailboxSession session, MultimailboxesSearchQuery searchQuery) throws MailboxException {
         List<Mailbox> allUserMailboxes = mailboxMapperFactory.getMailboxMapper(session)
                 .findMailboxWithPathLike(new MailboxPath(session.getPersonalSpace(), session.getUser().getUserName(), WILDCARD));
-        if (searchQuery.getMailboxIds().isEmpty()) {
+        if (searchQuery.getInMailboxes().isEmpty()) {
             return searchMultimap(session, allUserMailboxes, searchQuery.getSearchQuery())
                     .asMap();
         }
         List<Mailbox> queriedMailboxes = new ArrayList<Mailbox>();
         for (Mailbox mailbox: allUserMailboxes) {
-            if (searchQuery.getMailboxIds().contains(mailbox.getMailboxId())) {
+            if (searchQuery.getInMailboxes().contains(mailbox.getMailboxId())) {
                 queriedMailboxes.add(mailbox);
             }
         }


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