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:36 UTC
[1/2] james-project git commit: JAMES-1807 implement notInMailbox
correctly
Repository: james-project
Updated Branches:
refs/heads/master 9af58b759 -> 46d377f87
JAMES-1807 implement notInMailbox correctly
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/46d377f8
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/46d377f8
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/46d377f8
Branch: refs/heads/master
Commit: 46d377f870375a53a8a16b239e8c292108f5f44a
Parents: fd37855
Author: Matthieu Baechler <ma...@linagora.com>
Authored: Tue Jul 26 11:39:14 2016 +0200
Committer: Matthieu Baechler <ma...@linagora.com>
Committed: Tue Jul 26 12:37:41 2016 +0200
----------------------------------------------------------------------
...lasticSearchListeningMessageSearchIndex.java | 5 ++--
.../elasticsearch/query/QueryConverter.java | 27 ++++++++++++--------
.../search/ElasticSearchSearcher.java | 13 +++++-----
.../store/search/SimpleMessageSearchIndex.java | 17 +++++++++---
.../integration/GetMessageListMethodTest.java | 3 ---
.../jmap/methods/GetMessageListMethod.java | 17 ++++++++----
6 files changed, 50 insertions(+), 32 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/46d377f8/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 63f0fec..5d24222 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
@@ -83,8 +83,9 @@ public class ElasticSearchListeningMessageSearchIndex extends ListeningMessageSe
public Iterator<Long> search(MailboxSession session, Mailbox mailbox, SearchQuery searchQuery) throws MailboxException {
Preconditions.checkArgument(session != null, "'session' is mandatory");
MailboxId mailboxId = mailbox.getMailboxId();
+ MultimailboxesSearchQuery query = MultimailboxesSearchQuery.from(searchQuery).inMailboxes(mailboxId).build();
return searcher
- .search(ImmutableList.of(session.getUser()), ImmutableList.of(mailboxId), searchQuery)
+ .search(ImmutableList.of(session.getUser()), query)
.get(mailboxId)
.iterator();
}
@@ -93,7 +94,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.getInMailboxes(), searchQuery.getSearchQuery()).asMap();
+ return searcher.search(ImmutableList.of(session.getUser()), searchQuery).asMap();
}
@Override
http://git-wip-us.apache.org/repos/asf/james-project/blob/46d377f8/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/query/QueryConverter.java
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/query/QueryConverter.java b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/query/QueryConverter.java
index 0757b34..fb25109 100644
--- a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/query/QueryConverter.java
+++ b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/query/QueryConverter.java
@@ -21,16 +21,20 @@ package org.apache.james.mailbox.elasticsearch.query;
import static org.elasticsearch.index.query.QueryBuilders.boolQuery;
import static org.elasticsearch.index.query.QueryBuilders.termsQuery;
+import static org.elasticsearch.index.query.QueryBuilders.notQuery;
import java.util.Collection;
import java.util.List;
+import java.util.Optional;
import javax.inject.Inject;
import org.apache.james.mailbox.MailboxSession.User;
import org.apache.james.mailbox.elasticsearch.json.JsonMessageConstants;
import org.apache.james.mailbox.model.MailboxId;
+import org.apache.james.mailbox.model.MultimailboxesSearchQuery;
import org.apache.james.mailbox.model.SearchQuery;
+import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilder;
import com.github.steveash.guavate.Guavate;
@@ -46,10 +50,13 @@ public class QueryConverter {
this.criterionConverter = criterionConverter;
}
- public QueryBuilder from(SearchQuery searchQuery, List<User> users, Collection<MailboxId> mailboxIds) {
- QueryBuilder queryBuilder = generateQueryBuilder(searchQuery);
- queryBuilder = addUsersFilter(queryBuilder, users);
- return addMailboxFilters(queryBuilder, mailboxIds);
+ public QueryBuilder from(List<User> users, MultimailboxesSearchQuery query) {
+ BoolQueryBuilder boolQueryBuilder = boolQuery()
+ .must(generateQueryBuilder(query.getSearchQuery()))
+ .filter(usersQuery(users));
+ mailboxesQuery(query.getInMailboxes()).map(boolQueryBuilder::filter);
+ mailboxesQuery(query.getNotInMailboxes()).map(boolQueryBuilder::mustNot);
+ return boolQueryBuilder;
}
private QueryBuilder generateQueryBuilder(SearchQuery searchQuery) {
@@ -63,23 +70,21 @@ public class QueryConverter {
}
}
- private QueryBuilder addUsersFilter(QueryBuilder queryBuilder, List<User> users) {
+ private QueryBuilder usersQuery(List<User> users) {
ImmutableList<String> usernames = users.stream()
.map(User::getUserName)
.collect(Guavate.toImmutableList());
- return boolQuery().must(queryBuilder)
- .filter(termsQuery(JsonMessageConstants.USERS, usernames));
+ return termsQuery(JsonMessageConstants.USERS, usernames);
}
- private QueryBuilder addMailboxFilters(QueryBuilder queryBuilder, Collection<MailboxId> mailboxIds) {
+ private Optional<QueryBuilder> mailboxesQuery(Collection<MailboxId> mailboxIds) {
if (mailboxIds.isEmpty()) {
- return queryBuilder;
+ return Optional.empty();
}
ImmutableList<String> ids = mailboxIds.stream()
.map(MailboxId::serialize)
.collect(Guavate.toImmutableList());
- return boolQuery().must(queryBuilder)
- .filter(termsQuery(JsonMessageConstants.MAILBOX_ID, ids));
+ return Optional.of(termsQuery(JsonMessageConstants.MAILBOX_ID, ids));
}
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/46d377f8/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/search/ElasticSearchSearcher.java
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/search/ElasticSearchSearcher.java b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/search/ElasticSearchSearcher.java
index 9edaa41..2eb4cf1 100644
--- a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/search/ElasticSearchSearcher.java
+++ b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/search/ElasticSearchSearcher.java
@@ -19,7 +19,6 @@
package org.apache.james.mailbox.elasticsearch.search;
-import java.util.Collection;
import java.util.List;
import java.util.Optional;
import java.util.stream.Stream;
@@ -36,7 +35,7 @@ import org.apache.james.mailbox.elasticsearch.query.SortConverter;
import org.apache.james.mailbox.exception.MailboxException;
import org.apache.james.mailbox.model.MailboxId;
import org.apache.james.mailbox.model.MailboxId.Factory;
-import org.apache.james.mailbox.model.SearchQuery;
+import org.apache.james.mailbox.model.MultimailboxesSearchQuery;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.Client;
@@ -72,21 +71,21 @@ public class ElasticSearchSearcher {
this.mailboxIdFactory = mailboxIdFactory;
}
- public Multimap<MailboxId, Long> search(List<User> users, Collection<MailboxId> mailboxIds, SearchQuery searchQuery) throws MailboxException {
- return new ScrollIterable(client, getSearchRequestBuilder(client, users, mailboxIds, searchQuery)).stream()
+ public Multimap<MailboxId, Long> search(List<User> users, MultimailboxesSearchQuery query) throws MailboxException {
+ return new ScrollIterable(client, getSearchRequestBuilder(client, users, query)).stream()
.flatMap(this::transformResponseToUidStream)
.collect(Guavate.toImmutableListMultimap(Pair::getLeft, Pair::getRight));
}
- private SearchRequestBuilder getSearchRequestBuilder(Client client, List<User> users, Collection<MailboxId> mailboxIds, SearchQuery searchQuery) {
- return searchQuery.getSorts()
+ private SearchRequestBuilder getSearchRequestBuilder(Client client, List<User> users, MultimailboxesSearchQuery query) {
+ return query.getSearchQuery().getSorts()
.stream()
.reduce(
client.prepareSearch(ElasticSearchIndexer.MAILBOX_INDEX)
.setTypes(ElasticSearchIndexer.MESSAGE_TYPE)
.setScroll(TIMEOUT)
.addFields(JsonMessageConstants.ID, JsonMessageConstants.MAILBOX_ID)
- .setQuery(queryConverter.from(searchQuery, users, mailboxIds))
+ .setQuery(queryConverter.from(users, query))
.setSize(size),
(searchBuilder, sort) -> searchBuilder.addSort(SortConverter.convertSort(sort)),
(partialResult1, partialResult2) -> partialResult1);
http://git-wip-us.apache.org/repos/asf/james-project/blob/46d377f8/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 667f2ab..6ada22f 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
@@ -49,6 +49,9 @@ import org.apache.james.mailbox.store.mail.model.Mailbox;
import org.apache.james.mailbox.store.mail.model.MailboxMessage;
import com.google.common.base.Preconditions;
+import com.google.common.base.Predicate;
+import com.google.common.base.Predicates;
+import com.google.common.collect.FluentIterable;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMultimap;
import com.google.common.collect.ImmutableMultimap.Builder;
@@ -106,7 +109,7 @@ public class SimpleMessageSearchIndex implements MessageSearchIndex {
.iterator();
}
- private Multimap<MailboxId, Long> searchMultimap(MailboxSession session, List<Mailbox> mailboxes, SearchQuery query) throws MailboxException {
+ private Multimap<MailboxId, Long> searchMultimap(MailboxSession session, Iterable<Mailbox> mailboxes, SearchQuery query) throws MailboxException {
Builder<MailboxId, Long> multimap = ImmutableMultimap.builder();
for (Mailbox mailbox: mailboxes) {
multimap.putAll(searchMultimap(session, mailbox, query));
@@ -154,15 +157,21 @@ public class SimpleMessageSearchIndex implements MessageSearchIndex {
}
@Override
- public Map<MailboxId, Collection<Long>> search(MailboxSession session, MultimailboxesSearchQuery searchQuery) throws MailboxException {
+ public Map<MailboxId, Collection<Long>> search(MailboxSession session, final MultimailboxesSearchQuery searchQuery) throws MailboxException {
List<Mailbox> allUserMailboxes = mailboxMapperFactory.getMailboxMapper(session)
.findMailboxWithPathLike(new MailboxPath(session.getPersonalSpace(), session.getUser().getUserName(), WILDCARD));
+ FluentIterable<Mailbox> filteredMailboxes = FluentIterable.from(allUserMailboxes).filter(new Predicate<Mailbox>() {
+ @Override
+ public boolean apply(Mailbox input) {
+ return !searchQuery.getNotInMailboxes().contains(input.getMailboxId());
+ }
+ });
if (searchQuery.getInMailboxes().isEmpty()) {
- return searchMultimap(session, allUserMailboxes, searchQuery.getSearchQuery())
+ return searchMultimap(session, filteredMailboxes, searchQuery.getSearchQuery())
.asMap();
}
List<Mailbox> queriedMailboxes = new ArrayList<Mailbox>();
- for (Mailbox mailbox: allUserMailboxes) {
+ for (Mailbox mailbox: filteredMailboxes) {
if (searchQuery.getInMailboxes().contains(mailbox.getMailboxId())) {
queriedMailboxes.add(mailbox);
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/46d377f8/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMessageListMethodTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMessageListMethodTest.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMessageListMethodTest.java
index c8b3d2e..ee24d6b 100644
--- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMessageListMethodTest.java
+++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMessageListMethodTest.java
@@ -254,7 +254,6 @@ public abstract class GetMessageListMethodTest {
.body(ARGUMENTS + ".messageIds", contains("username@domain.tld|mailbox|1"));
}
- @Ignore("Temporay break inMailboxes/notInMailboxes support")
@Test
public void getMessageListShouldFilterMessagesWhenNotInMailboxesFilterMatches() throws Exception {
jmapServer.serverProbe().createMailbox(MailboxConstants.USER_NAMESPACE, username, "mailbox");
@@ -276,7 +275,6 @@ public abstract class GetMessageListMethodTest {
.body(ARGUMENTS + ".messageIds", empty());
}
- @Ignore("Temporay break inMailboxes/notInMailboxes support")
@Test
public void getMessageListShouldFilterMessagesWhenNotInMailboxesFilterMatchesTwice() throws Exception {
jmapServer.serverProbe().createMailbox(MailboxConstants.USER_NAMESPACE, username, "mailbox");
@@ -301,7 +299,6 @@ public abstract class GetMessageListMethodTest {
.body(ARGUMENTS + ".messageIds", empty());
}
- @Ignore("Temporay break inMailboxes/notInMailboxes support")
@Test
public void getMessageListShouldFilterMessagesWhenIdenticalNotInMailboxesAndInmailboxesFilterMatch() throws Exception {
jmapServer.serverProbe().createMailbox(MailboxConstants.USER_NAMESPACE, username, "mailbox");
http://git-wip-us.apache.org/repos/asf/james-project/blob/46d377f8/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMessageListMethod.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMessageListMethod.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMessageListMethod.java
index 979eb60..5fb1dae 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMessageListMethod.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMessageListMethod.java
@@ -25,6 +25,7 @@ import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
+import java.util.function.Function;
import java.util.stream.Stream;
import javax.inject.Inject;
@@ -167,17 +168,23 @@ public class GetMessageListMethod implements Method {
SearchQuery searchQuery = messageListRequest.getFilter()
.map(filter -> new FilterToSearchQuery().convert(filter))
.orElse(new SearchQuery());
- Set<MailboxId> inMailboxes = filterToFilterCondition(messageListRequest.getFilter())
- .flatMap(condition -> Guavate.stream(condition.getInMailboxes()))
- .flatMap(List::stream)
- .map(mailboxIdFactory::fromString)
- .collect(Guavate.toImmutableSet());
+ Set<MailboxId> inMailboxes = buildFilterMailboxesSet(messageListRequest.getFilter(), condition -> condition.getInMailboxes());
+ Set<MailboxId> notInMailboxes = buildFilterMailboxesSet(messageListRequest.getFilter(), condition -> condition.getNotInMailboxes());
return MultimailboxesSearchQuery
.from(searchQuery)
.inMailboxes(inMailboxes)
+ .notInMailboxes(notInMailboxes)
.build();
}
+ private Set<MailboxId> buildFilterMailboxesSet(Optional<Filter> maybeFilter, Function<FilterCondition, Optional<List<String>>> mailboxListExtractor) {
+ return filterToFilterCondition(maybeFilter)
+ .flatMap(condition -> Guavate.stream(mailboxListExtractor.apply(condition)))
+ .flatMap(List::stream)
+ .map(mailboxIdFactory::fromString)
+ .collect(Guavate.toImmutableSet());
+ }
+
private Stream<FilterCondition> filterToFilterCondition(Optional<Filter> maybeCondition) {
return Guavate.stream(maybeCondition)
.flatMap(c -> {
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[2/2] james-project git commit: JAMES-1807 add notInMailboxes in
MultimailboxesSearchQuery
Posted by ma...@apache.org.
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