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 13:41:11 UTC
[2/2] james-project git commit: MAILBOX-272 Add users in ES indexer
MAILBOX-272 Add users in ES indexer
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/c981e8a3
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/c981e8a3
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/c981e8a3
Branch: refs/heads/master
Commit: c981e8a399efe6b01e558a67669caee6fd646165
Parents: e456c07
Author: Antoine Duprat <ad...@linagora.com>
Authored: Fri Jul 22 13:22:46 2016 +0200
Committer: Matthieu Baechler <ma...@linagora.com>
Committed: Mon Jul 25 15:38:55 2016 +0200
----------------------------------------------------------------------
mailbox/elasticsearch/pom.xml | 6 +
.../elasticsearch/NodeMappingFactory.java | 4 +
...lasticSearchListeningMessageSearchIndex.java | 11 +-
.../elasticsearch/json/IndexableMessage.java | 12 +-
.../json/JsonMessageConstants.java | 1 +
.../json/MessageToElasticSearchJson.java | 6 +-
.../elasticsearch/query/QueryConverter.java | 12 +-
.../search/ElasticSearchSearcher.java | 10 +-
...hListeningMailboxMessageSearchIndexTest.java | 13 +-
.../MailboxMessageToElasticSearchJsonTest.java | 39 +-
.../lucene/search/LuceneMessageSearchIndex.java | 3 +
.../LuceneMailboxMessageSearchIndexTest.java | 113 ++---
.../store/search/LazyMessageSearchIndex.java | 3 +
.../mailbox/store/search/MessageSearches.java | 80 ++--
.../store/search/SimpleMessageSearchIndex.java | 21 +-
.../store/SearchUtilsMultipartMixedTest.java | 65 ++-
.../mailbox/store/SearchUtilsRFC822Test.java | 31 +-
.../james/mailbox/store/SearchUtilsTest.java | 441 +++++++++----------
.../search/AbstractMessageSearchIndexTest.java | 23 +-
.../store/src/test/resources/eml/htmlMail.json | 5 +-
mailbox/store/src/test/resources/eml/mail.json | 5 +-
.../src/test/resources/eml/nonTextual.json | 5 +-
.../src/test/resources/eml/pgpSignedMail.json | 5 +-
.../src/test/resources/eml/recursiveMail.json | 5 +-
.../store/src/test/resources/eml/spamMail.json | 5 +-
25 files changed, 514 insertions(+), 410 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/c981e8a3/mailbox/elasticsearch/pom.xml
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/pom.xml b/mailbox/elasticsearch/pom.xml
index 864a95f..59df4ee 100644
--- a/mailbox/elasticsearch/pom.xml
+++ b/mailbox/elasticsearch/pom.xml
@@ -163,6 +163,12 @@
<artifactId>apache-james-mailbox-api</artifactId>
</dependency>
<dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>apache-james-mailbox-api</artifactId>
+ <type>test-jar</type>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
<groupId>org.apache.james</groupId>
<artifactId>apache-james-mailbox-store</artifactId>
</dependency>
http://git-wip-us.apache.org/repos/asf/james-project/blob/c981e8a3/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/NodeMappingFactory.java
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/NodeMappingFactory.java b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/NodeMappingFactory.java
index f74da92..91bf2e6 100644
--- a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/NodeMappingFactory.java
+++ b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/NodeMappingFactory.java
@@ -192,6 +192,10 @@ public class NodeMappingFactory {
.field(TYPE, STRING)
.field(INDEX, NOT_ANALYZED)
.endObject()
+ .startObject(JsonMessageConstants.USERS)
+ .field(TYPE, STRING)
+ .field(INDEX, NOT_ANALYZED)
+ .endObject()
.startObject(JsonMessageConstants.PROPERTIES)
.field(TYPE, NESTED)
.startObject(PROPERTIES)
http://git-wip-us.apache.org/repos/asf/james-project/blob/c981e8a3/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 dc7e301..957826d 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,8 +29,8 @@ 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.MailboxSession;
import org.apache.james.mailbox.elasticsearch.ElasticSearchIndexer;
import org.apache.james.mailbox.elasticsearch.json.JsonMessageConstants;
import org.apache.james.mailbox.elasticsearch.json.MessageToElasticSearchJson;
@@ -48,6 +48,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.fasterxml.jackson.core.JsonProcessingException;
+import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
public class ElasticSearchListeningMessageSearchIndex extends ListeningMessageSearchIndex {
@@ -80,9 +81,10 @@ public class ElasticSearchListeningMessageSearchIndex extends ListeningMessageSe
@Override
public Iterator<Long> search(MailboxSession session, Mailbox mailbox, SearchQuery searchQuery) throws MailboxException {
+ Preconditions.checkArgument(session != null, "'session' is mandatory");
MailboxId mailboxId = mailbox.getMailboxId();
return searcher
- .search(ImmutableList.of(mailboxId), searchQuery)
+ .search(ImmutableList.of(session.getUser()), ImmutableList.of(mailboxId), searchQuery)
.get(mailboxId)
.iterator();
}
@@ -90,13 +92,14 @@ public class ElasticSearchListeningMessageSearchIndex extends ListeningMessageSe
@Override
public Map<MailboxId, Collection<Long>> search(MailboxSession session, MultimailboxesSearchQuery searchQuery)
throws MailboxException {
- return searcher.search(searchQuery.getMailboxIds(), searchQuery.getSearchQuery()).asMap();
+ Preconditions.checkArgument(session != null, "'session' is mandatory");
+ return searcher.search(ImmutableList.of(session.getUser()), searchQuery.getMailboxIds(), searchQuery.getSearchQuery()).asMap();
}
@Override
public void add(MailboxSession session, Mailbox mailbox, MailboxMessage message) throws MailboxException {
try {
- indexer.indexMessage(indexIdFor(mailbox, message.getUid()), messageToElasticSearchJson.convertToJson(message));
+ indexer.indexMessage(indexIdFor(mailbox, message.getUid()), messageToElasticSearchJson.convertToJson(message, ImmutableList.of(session.getUser())));
} catch (Exception e) {
LOGGER.error("Error when indexing message " + message.getUid(), e);
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/c981e8a3/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessage.java
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessage.java b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessage.java
index 9174dcd..5b1cec1 100644
--- a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessage.java
+++ b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessage.java
@@ -28,6 +28,7 @@ import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
+import org.apache.james.mailbox.MailboxSession.User;
import org.apache.james.mailbox.elasticsearch.query.DateResolutionFormater;
import org.apache.james.mailbox.store.extractor.TextExtractor;
import org.apache.james.mailbox.store.mail.model.MailboxMessage;
@@ -35,17 +36,20 @@ import org.apache.james.mailbox.store.mail.model.Property;
import org.apache.james.mime4j.MimeException;
import com.fasterxml.jackson.annotation.JsonProperty;
+import com.github.steveash.guavate.Guavate;
import com.google.common.base.Preconditions;
import com.google.common.base.Throwables;
import com.google.common.collect.Multimap;
public class IndexableMessage {
- public static IndexableMessage from(MailboxMessage message, TextExtractor textExtractor, ZoneId zoneId) {
+ public static IndexableMessage from(MailboxMessage message, List<User> users, TextExtractor textExtractor, ZoneId zoneId) {
Preconditions.checkNotNull(message.getMailboxId());
+ Preconditions.checkArgument(!users.isEmpty());
IndexableMessage indexableMessage = new IndexableMessage();
try {
MimePart parsingResult = new MimePartParser(message, textExtractor).parse();
+ indexableMessage.users = users.stream().map(User::getUserName).collect(Guavate.toImmutableList());
indexableMessage.bodyText = parsingResult.locateFirstTextualBody();
indexableMessage.setFlattenedAttachments(parsingResult);
indexableMessage.copyHeaderFields(parsingResult.getHeaderCollection(), getSanitizedInternalDate(message, zoneId));
@@ -101,6 +105,7 @@ public class IndexableMessage {
private Long id;
private String mailboxId;
+ private List<String> users;
private long modSeq;
private long size;
private String date;
@@ -135,6 +140,11 @@ public class IndexableMessage {
return mailboxId;
}
+ @JsonProperty(JsonMessageConstants.USERS)
+ public List<String> getUsers() {
+ return users;
+ }
+
@JsonProperty(JsonMessageConstants.MODSEQ)
public long getModSeq() {
return modSeq;
http://git-wip-us.apache.org/repos/asf/james-project/blob/c981e8a3/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/JsonMessageConstants.java
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/JsonMessageConstants.java b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/JsonMessageConstants.java
index 23937ca..56361e8 100644
--- a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/JsonMessageConstants.java
+++ b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/JsonMessageConstants.java
@@ -26,6 +26,7 @@ public interface JsonMessageConstants {
*/
String ID = "id";
String MAILBOX_ID = "mailboxId";
+ String USERS = "users";
String IS_UNREAD = "isUnread";
String IS_FLAGGED = "isFlagged";
String IS_ANSWERED = "isAnswered";
http://git-wip-us.apache.org/repos/asf/james-project/blob/c981e8a3/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/MessageToElasticSearchJson.java
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/MessageToElasticSearchJson.java b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/MessageToElasticSearchJson.java
index 01f8a00..a35825e 100644
--- a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/MessageToElasticSearchJson.java
+++ b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/MessageToElasticSearchJson.java
@@ -20,10 +20,12 @@
package org.apache.james.mailbox.elasticsearch.json;
import java.time.ZoneId;
+import java.util.List;
import javax.inject.Inject;
import javax.mail.Flags;
+import org.apache.james.mailbox.MailboxSession.User;
import org.apache.james.mailbox.store.extractor.TextExtractor;
import org.apache.james.mailbox.store.mail.model.MailboxMessage;
@@ -52,9 +54,9 @@ public class MessageToElasticSearchJson {
this(textExtractor, ZoneId.systemDefault());
}
- public String convertToJson(MailboxMessage message) throws JsonProcessingException {
+ public String convertToJson(MailboxMessage message, List<User> users) throws JsonProcessingException {
Preconditions.checkNotNull(message);
- return mapper.writeValueAsString(IndexableMessage.from(message, textExtractor, zoneId));
+ return mapper.writeValueAsString(IndexableMessage.from(message, users, textExtractor, zoneId));
}
public String getUpdatedJsonMessagePart(Flags flags, long modSeq) throws JsonProcessingException {
http://git-wip-us.apache.org/repos/asf/james-project/blob/c981e8a3/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 762522f..0757b34 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
@@ -27,6 +27,7 @@ import java.util.List;
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.SearchQuery;
@@ -45,8 +46,9 @@ public class QueryConverter {
this.criterionConverter = criterionConverter;
}
- public QueryBuilder from(SearchQuery searchQuery, Collection<MailboxId> mailboxIds) {
+ public QueryBuilder from(SearchQuery searchQuery, List<User> users, Collection<MailboxId> mailboxIds) {
QueryBuilder queryBuilder = generateQueryBuilder(searchQuery);
+ queryBuilder = addUsersFilter(queryBuilder, users);
return addMailboxFilters(queryBuilder, mailboxIds);
}
@@ -61,6 +63,14 @@ public class QueryConverter {
}
}
+ private QueryBuilder addUsersFilter(QueryBuilder queryBuilder, List<User> users) {
+ ImmutableList<String> usernames = users.stream()
+ .map(User::getUserName)
+ .collect(Guavate.toImmutableList());
+ return boolQuery().must(queryBuilder)
+ .filter(termsQuery(JsonMessageConstants.USERS, usernames));
+ }
+
private QueryBuilder addMailboxFilters(QueryBuilder queryBuilder, Collection<MailboxId> mailboxIds) {
if (mailboxIds.isEmpty()) {
return queryBuilder;
http://git-wip-us.apache.org/repos/asf/james-project/blob/c981e8a3/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 8a9a1d8..9edaa41 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
@@ -20,6 +20,7 @@
package org.apache.james.mailbox.elasticsearch.search;
import java.util.Collection;
+import java.util.List;
import java.util.Optional;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
@@ -27,6 +28,7 @@ import java.util.stream.StreamSupport;
import javax.inject.Inject;
import org.apache.commons.lang3.tuple.Pair;
+import org.apache.james.mailbox.MailboxSession.User;
import org.apache.james.mailbox.elasticsearch.ElasticSearchIndexer;
import org.apache.james.mailbox.elasticsearch.json.JsonMessageConstants;
import org.apache.james.mailbox.elasticsearch.query.QueryConverter;
@@ -70,13 +72,13 @@ public class ElasticSearchSearcher {
this.mailboxIdFactory = mailboxIdFactory;
}
- public Multimap<MailboxId, Long> search(Collection<MailboxId> mailboxIds, SearchQuery searchQuery) throws MailboxException {
- return new ScrollIterable(client, getSearchRequestBuilder(client, mailboxIds, searchQuery)).stream()
+ 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()
.flatMap(this::transformResponseToUidStream)
.collect(Guavate.toImmutableListMultimap(Pair::getLeft, Pair::getRight));
}
- private SearchRequestBuilder getSearchRequestBuilder(Client client, Collection<MailboxId> mailboxIds, SearchQuery searchQuery) {
+ private SearchRequestBuilder getSearchRequestBuilder(Client client, List<User> users, Collection<MailboxId> mailboxIds, SearchQuery searchQuery) {
return searchQuery.getSorts()
.stream()
.reduce(
@@ -84,7 +86,7 @@ public class ElasticSearchSearcher {
.setTypes(ElasticSearchIndexer.MESSAGE_TYPE)
.setScroll(TIMEOUT)
.addFields(JsonMessageConstants.ID, JsonMessageConstants.MAILBOX_ID)
- .setQuery(queryConverter.from(searchQuery, mailboxIds))
+ .setQuery(queryConverter.from(searchQuery, users, mailboxIds))
.setSize(size),
(searchBuilder, sort) -> searchBuilder.addSort(SortConverter.convertSort(sort)),
(partialResult1, partialResult2) -> partialResult1);
http://git-wip-us.apache.org/repos/asf/james-project/blob/c981e8a3/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMailboxMessageSearchIndexTest.java
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMailboxMessageSearchIndexTest.java b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMailboxMessageSearchIndexTest.java
index 0039eb9..639eeb5 100644
--- a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMailboxMessageSearchIndexTest.java
+++ b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMailboxMessageSearchIndexTest.java
@@ -32,6 +32,7 @@ import java.util.List;
import javax.mail.Flags;
import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.MailboxSession.User;
import org.apache.james.mailbox.elasticsearch.ElasticSearchIndexer;
import org.apache.james.mailbox.elasticsearch.json.MessageToElasticSearchJson;
import org.apache.james.mailbox.elasticsearch.search.ElasticSearchSearcher;
@@ -70,7 +71,8 @@ public class ElasticSearchListeningMailboxMessageSearchIndexTest {
indexer = control.createMock(ElasticSearchIndexer.class);
- expect(messageToElasticSearchJson.convertToJson(anyObject(MailboxMessage.class))).andReturn("json content").anyTimes();
+ List<User> users = anyObject();
+ expect(messageToElasticSearchJson.convertToJson(anyObject(MailboxMessage.class), users)).andReturn("json content").anyTimes();
expect(messageToElasticSearchJson.getUpdatedJsonMessagePart(anyObject(Flags.class), anyLong())).andReturn("json updated content").anyTimes();
testee = new ElasticSearchListeningMessageSearchIndex(mapperFactory, indexer, elasticSearchSearcher, messageToElasticSearchJson);
@@ -78,9 +80,12 @@ public class ElasticSearchListeningMailboxMessageSearchIndexTest {
@Test
public void addShouldIndex() throws Exception {
+ MailboxSession.User user = control.createMock(MailboxSession.User.class);
MailboxSession session = control.createMock(MailboxSession.class);
+ expect(session.getUser())
+ .andReturn(user);
+
Mailbox mailbox = control.createMock(Mailbox.class);
-
long messageId = 1;
TestId mailboxId = TestId.of(12);
expect(mailbox.getMailboxId()).andReturn(mailboxId);
@@ -103,7 +108,11 @@ public class ElasticSearchListeningMailboxMessageSearchIndexTest {
@Test
public void addShouldNotPropagateExceptionWhenExceptionOccurs() throws Exception {
+ MailboxSession.User user = control.createMock(MailboxSession.User.class);
MailboxSession session = control.createMock(MailboxSession.class);
+ expect(session.getUser())
+ .andReturn(user);
+
Mailbox mailbox = control.createMock(Mailbox.class);
long messageId = 1;
http://git-wip-us.apache.org/repos/asf/james-project/blob/c981e8a3/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/MailboxMessageToElasticSearchJsonTest.java
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/MailboxMessageToElasticSearchJsonTest.java b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/MailboxMessageToElasticSearchJsonTest.java
index da899ea..ce43184 100644
--- a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/MailboxMessageToElasticSearchJsonTest.java
+++ b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/MailboxMessageToElasticSearchJsonTest.java
@@ -22,6 +22,7 @@ package org.apache.james.mailbox.elasticsearch.json;
import static net.javacrumbs.jsonunit.core.Option.IGNORING_ARRAY_ORDER;
import static net.javacrumbs.jsonunit.core.Option.IGNORING_VALUES;
import static net.javacrumbs.jsonunit.fluent.JsonFluentAssert.assertThatJson;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
import java.io.IOException;
import java.nio.charset.Charset;
@@ -33,6 +34,8 @@ import javax.mail.util.SharedByteArrayInputStream;
import org.apache.commons.io.IOUtils;
import org.apache.james.mailbox.FlagsBuilder;
+import org.apache.james.mailbox.MailboxSession.User;
+import org.apache.james.mailbox.mock.MockMailboxSession;
import org.apache.james.mailbox.store.TestId;
import org.apache.james.mailbox.store.extractor.DefaultTextExtractor;
import org.apache.james.mailbox.store.mail.model.MailboxMessage;
@@ -44,6 +47,7 @@ import org.junit.Test;
import com.google.common.base.Charsets;
import com.google.common.base.Throwables;
+import com.google.common.collect.ImmutableList;
public class MailboxMessageToElasticSearchJsonTest {
@@ -69,6 +73,24 @@ public class MailboxMessageToElasticSearchJsonTest {
}
@Test
+ public void convertToJsonShouldThrowWhenNoUser() throws Exception {
+ MessageToElasticSearchJson messageToElasticSearchJson = new MessageToElasticSearchJson(
+ new DefaultTextExtractor(),
+ ZoneId.of("Europe/Paris"));
+ MailboxMessage spamMail = new SimpleMailboxMessage(date,
+ SIZE,
+ BODY_START_OCTET,
+ new SharedByteArrayInputStream("message".getBytes(Charsets.UTF_8)),
+ new Flags(),
+ propertyBuilder,
+ MAILBOX_ID);
+ ImmutableList<User> users = ImmutableList.of();
+
+ assertThatThrownBy(() -> messageToElasticSearchJson.convertToJson(spamMail, users))
+ .isInstanceOf(IllegalArgumentException.class);
+ }
+
+ @Test
public void spamEmailShouldBeWellConvertedToJson() throws IOException {
MessageToElasticSearchJson messageToElasticSearchJson = new MessageToElasticSearchJson(
new DefaultTextExtractor(),
@@ -81,7 +103,7 @@ public class MailboxMessageToElasticSearchJsonTest {
propertyBuilder,
MAILBOX_ID);
spamMail.setModSeq(MOD_SEQ);
- assertThatJson(messageToElasticSearchJson.convertToJson(spamMail))
+ assertThatJson(messageToElasticSearchJson.convertToJson(spamMail, ImmutableList.of(new MockMailboxSession("username").getUser())))
.when(IGNORING_ARRAY_ORDER)
.isEqualTo(IOUtils.toString(ClassLoader.getSystemResource("eml/spamMail.json"), CHARSET));
}
@@ -100,7 +122,7 @@ public class MailboxMessageToElasticSearchJsonTest {
MAILBOX_ID);
htmlMail.setModSeq(MOD_SEQ);
htmlMail.setUid(UID);
- assertThatJson(messageToElasticSearchJson.convertToJson(htmlMail))
+ assertThatJson(messageToElasticSearchJson.convertToJson(htmlMail, ImmutableList.of(new MockMailboxSession("username").getUser())))
.when(IGNORING_ARRAY_ORDER)
.isEqualTo(IOUtils.toString(ClassLoader.getSystemResource("eml/htmlMail.json")));
}
@@ -119,7 +141,7 @@ public class MailboxMessageToElasticSearchJsonTest {
MAILBOX_ID);
pgpSignedMail.setModSeq(MOD_SEQ);
pgpSignedMail.setUid(UID);
- assertThatJson(messageToElasticSearchJson.convertToJson(pgpSignedMail))
+ assertThatJson(messageToElasticSearchJson.convertToJson(pgpSignedMail, ImmutableList.of(new MockMailboxSession("username").getUser())))
.when(IGNORING_ARRAY_ORDER)
.isEqualTo(IOUtils.toString(ClassLoader.getSystemResource("eml/pgpSignedMail.json")));
}
@@ -138,7 +160,8 @@ public class MailboxMessageToElasticSearchJsonTest {
MAILBOX_ID);
mail.setModSeq(MOD_SEQ);
mail.setUid(UID);
- assertThatJson(messageToElasticSearchJson.convertToJson(mail))
+ assertThatJson(messageToElasticSearchJson.convertToJson(mail,
+ ImmutableList.of(new MockMailboxSession("user1").getUser(), new MockMailboxSession("user2").getUser())))
.when(IGNORING_ARRAY_ORDER).when(IGNORING_VALUES)
.isEqualTo(IOUtils.toString(ClassLoader.getSystemResource("eml/mail.json")));
}
@@ -157,7 +180,7 @@ public class MailboxMessageToElasticSearchJsonTest {
MAILBOX_ID);
recursiveMail.setModSeq(MOD_SEQ);
recursiveMail.setUid(UID);
- assertThatJson(messageToElasticSearchJson.convertToJson(recursiveMail))
+ assertThatJson(messageToElasticSearchJson.convertToJson(recursiveMail, ImmutableList.of(new MockMailboxSession("username").getUser())))
.when(IGNORING_ARRAY_ORDER).when(IGNORING_VALUES)
.isEqualTo(IOUtils.toString(ClassLoader.getSystemResource("eml/recursiveMail.json")));
}
@@ -176,7 +199,7 @@ public class MailboxMessageToElasticSearchJsonTest {
MAILBOX_ID);
mailWithNoInternalDate.setModSeq(MOD_SEQ);
mailWithNoInternalDate.setUid(UID);
- assertThatJson(messageToElasticSearchJson.convertToJson(mailWithNoInternalDate))
+ assertThatJson(messageToElasticSearchJson.convertToJson(mailWithNoInternalDate, ImmutableList.of(new MockMailboxSession("username").getUser())))
.when(IGNORING_ARRAY_ORDER)
.when(IGNORING_VALUES)
.isEqualTo(IOUtils.toString(ClassLoader.getSystemResource("eml/recursiveMail.json")));
@@ -201,7 +224,7 @@ public class MailboxMessageToElasticSearchJsonTest {
} catch(Exception exception) {
throw Throwables.propagate(exception);
}
- messageToElasticSearchJson.convertToJson(mailWithNoMailboxId);
+ messageToElasticSearchJson.convertToJson(mailWithNoMailboxId, ImmutableList.of(new MockMailboxSession("username").getUser()));
}
@Test
@@ -243,7 +266,7 @@ public class MailboxMessageToElasticSearchJsonTest {
propertyBuilder,
MAILBOX_ID);
spamMail.setModSeq(MOD_SEQ);
- assertThatJson(messageToElasticSearchJson.convertToJson(spamMail))
+ assertThatJson(messageToElasticSearchJson.convertToJson(spamMail, ImmutableList.of(new MockMailboxSession("username").getUser())))
.when(IGNORING_ARRAY_ORDER)
.isEqualTo(IOUtils.toString(ClassLoader.getSystemResource("eml/nonTextual.json"), CHARSET));
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/c981e8a3/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 9eb0388..b998dfa 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
@@ -115,6 +115,7 @@ import org.apache.lucene.store.LockObtainFailedException;
import org.apache.lucene.util.IOUtils;
import org.apache.lucene.util.Version;
+import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.LinkedHashMultimap;
import com.google.common.collect.Multimap;
@@ -428,6 +429,7 @@ public class LuceneMessageSearchIndex extends ListeningMessageSearchIndex {
* @see org.apache.james.mailbox.store.search.MessageSearchIndex#search(org.apache.james.mailbox.MailboxSession, org.apache.james.mailbox.store.mail.model.Mailbox, org.apache.james.mailbox.model.SearchQuery)
*/
public Iterator<Long> search(MailboxSession session, Mailbox mailbox, SearchQuery searchQuery) throws MailboxException {
+ Preconditions.checkArgument(session != null, "'session' is mandatory");
MailboxId mailboxId = mailbox.getMailboxId();
Multimap<MailboxId, Long> results =
searchMultimap(
@@ -441,6 +443,7 @@ public class LuceneMessageSearchIndex extends ListeningMessageSearchIndex {
@Override
public Map<MailboxId, Collection<Long>> search(MailboxSession session, MultimailboxesSearchQuery searchQuery) throws MailboxException {
+ Preconditions.checkArgument(session != null, "'session' is mandatory");
return searchMultimap(session, searchQuery).asMap();
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/c981e8a3/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMailboxMessageSearchIndexTest.java
----------------------------------------------------------------------
diff --git a/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMailboxMessageSearchIndexTest.java b/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMailboxMessageSearchIndexTest.java
index 9b1417a..09cf3c3 100644
--- a/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMailboxMessageSearchIndexTest.java
+++ b/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMailboxMessageSearchIndexTest.java
@@ -33,6 +33,8 @@ import java.util.Map;
import javax.mail.Flags;
import javax.mail.Flags.Flag;
+import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.mock.MockMailboxSession;
import org.apache.james.mailbox.model.MailboxACL;
import org.apache.james.mailbox.model.MailboxId;
import org.apache.james.mailbox.model.MultimailboxesSearchQuery;
@@ -56,7 +58,7 @@ public class LuceneMailboxMessageSearchIndexTest {
private SimpleMailbox mailbox = new SimpleMailbox(0);
private SimpleMailbox mailbox2 = new SimpleMailbox(1);
private SimpleMailbox mailbox3 = new SimpleMailbox(2);
-
+ private MailboxSession session;
private static final String FROM_ADDRESS = "Harry <ha...@example.org>";
@@ -121,7 +123,8 @@ public class LuceneMailboxMessageSearchIndexTest {
builder.mailboxId = mailbox3.getMailboxId();
index.add(null, mailbox3, builder.build());
-
+
+ session = new MockMailboxSession("username");
}
@@ -130,7 +133,7 @@ public class LuceneMailboxMessageSearchIndexTest {
public void bodySearchShouldMatchPhraseInBody() throws Exception {
SearchQuery query = new SearchQuery();
query.andCriteria(SearchQuery.bodyContains(CUSTARD));
- Iterator<Long> result = index.search(null, mailbox3, query);
+ Iterator<Long> result = index.search(session, mailbox3, query);
assertThat(result).containsExactly(10L);
}
@@ -138,7 +141,7 @@ public class LuceneMailboxMessageSearchIndexTest {
public void bodySearchShouldNotMatchAbsentPhraseInBody() throws Exception {
SearchQuery query = new SearchQuery();
query.andCriteria(SearchQuery.bodyContains(CUSTARD + CUSTARD));
- Iterator<Long> result = index.search(null, mailbox3, query);
+ Iterator<Long> result = index.search(session, mailbox3, query);
assertThat(result).isEmpty();
}
@@ -146,7 +149,7 @@ public class LuceneMailboxMessageSearchIndexTest {
public void bodySearchShouldBeCaseInsensitive() throws Exception {
SearchQuery query = new SearchQuery();
query.andCriteria(SearchQuery.bodyContains(RHUBARD));
- Iterator<Long> result = index.search(null, mailbox3, query);
+ Iterator<Long> result = index.search(session, mailbox3, query);
assertThat(result).containsExactly(10L);
}
@@ -154,7 +157,7 @@ public class LuceneMailboxMessageSearchIndexTest {
public void bodySearchNotMatchPhraseOnlyInFrom() throws Exception {
SearchQuery query = new SearchQuery();
query.andCriteria(SearchQuery.bodyContains(FROM_ADDRESS));
- Iterator<Long> result = index.search(null, mailbox3, query);
+ Iterator<Long> result = index.search(session, mailbox3, query);
assertThat(result).isEmpty();
}
@@ -162,7 +165,7 @@ public class LuceneMailboxMessageSearchIndexTest {
public void bodySearchShouldNotMatchPhraseOnlyInSubject() throws Exception {
SearchQuery query = new SearchQuery();
query.andCriteria(SearchQuery.bodyContains(SUBJECT_PART));
- Iterator<Long> result = index.search(null, mailbox3, query);
+ Iterator<Long> result = index.search(session, mailbox3, query);
assertThat(result).isEmpty();
}
@@ -170,7 +173,7 @@ public class LuceneMailboxMessageSearchIndexTest {
public void textSearchShouldMatchPhraseInBody() throws Exception {
SearchQuery query = new SearchQuery();
query.andCriteria(SearchQuery.mailContains(CUSTARD));
- Iterator<Long> result = index.search(null, mailbox3, query);
+ Iterator<Long> result = index.search(session, mailbox3, query);
assertThat(result).containsExactly(10L);
}
@@ -178,7 +181,7 @@ public class LuceneMailboxMessageSearchIndexTest {
public void textSearchShouldNotAbsentMatchPhraseInBody() throws Exception {
SearchQuery query = new SearchQuery();
query.andCriteria(SearchQuery.mailContains(CUSTARD + CUSTARD));
- Iterator<Long> result = index.search(null, mailbox3, query);
+ Iterator<Long> result = index.search(session, mailbox3, query);
assertThat(result).isEmpty();
}
@@ -186,7 +189,7 @@ public class LuceneMailboxMessageSearchIndexTest {
public void textSearchMatchShouldBeCaseInsensitive() throws Exception {
SearchQuery query = new SearchQuery();
query.andCriteria(SearchQuery.mailContains(RHUBARD.toLowerCase(Locale.US)));
- Iterator<Long> result = index.search(null, mailbox3, query);
+ Iterator<Long> result = index.search(session, mailbox3, query);
assertThat(result).containsExactly(10L);
}
@@ -194,7 +197,7 @@ public class LuceneMailboxMessageSearchIndexTest {
public void addressSearchShouldMatchToFullAddress() throws Exception {
SearchQuery query = new SearchQuery();
query.andCriteria(SearchQuery.address(AddressType.To,FROM_ADDRESS));
- Iterator<Long> result = index.search(null, mailbox3, query);
+ Iterator<Long> result = index.search(session, mailbox3, query);
assertThat(result).containsExactly(10L);
}
@@ -202,7 +205,7 @@ public class LuceneMailboxMessageSearchIndexTest {
public void addressSearchShouldMatchToDisplayName() throws Exception {
SearchQuery query = new SearchQuery();
query.andCriteria(SearchQuery.address(AddressType.To,"Harry"));
- Iterator<Long> result = index.search(null, mailbox3, query);
+ Iterator<Long> result = index.search(session, mailbox3, query);
assertThat(result).containsExactly(10L);
}
@@ -210,7 +213,7 @@ public class LuceneMailboxMessageSearchIndexTest {
public void addressSearchShouldMatchToEmail() throws Exception {
SearchQuery query = new SearchQuery();
query.andCriteria(SearchQuery.address(AddressType.To,"Harry@example.org"));
- Iterator<Long> result = index.search(null, mailbox3, query);
+ Iterator<Long> result = index.search(session, mailbox3, query);
assertThat(result).containsExactly(10L);
}
@@ -218,7 +221,7 @@ public class LuceneMailboxMessageSearchIndexTest {
public void addressSearchShouldMatchFrom() throws Exception {
SearchQuery query = new SearchQuery();
query.andCriteria(SearchQuery.address(AddressType.From,"ser-from@domain.or"));
- Iterator<Long> result = index.search(null, mailbox3, query);
+ Iterator<Long> result = index.search(session, mailbox3, query);
assertThat(result).containsExactly(10L);
}
@@ -226,7 +229,7 @@ public class LuceneMailboxMessageSearchIndexTest {
public void textSearchShouldMatchPhraseOnlyInToHeader() throws Exception {
SearchQuery query = new SearchQuery();
query.andCriteria(SearchQuery.mailContains(FROM_ADDRESS));
- Iterator<Long> result = index.search(null, mailbox3, query);
+ Iterator<Long> result = index.search(session, mailbox3, query);
assertThat(result).containsExactly(10L);
}
@@ -234,7 +237,7 @@ public class LuceneMailboxMessageSearchIndexTest {
public void textSearchShouldMatchPhraseOnlyInSubjectHeader() throws Exception {
SearchQuery query = new SearchQuery();
query.andCriteria(SearchQuery.mailContains(SUBJECT_PART));
- Iterator<Long> result = index.search(null, mailbox3, query);
+ Iterator<Long> result = index.search(session, mailbox3, query);
assertThat(result).containsExactly(10L);
}
@@ -242,7 +245,7 @@ public class LuceneMailboxMessageSearchIndexTest {
public void searchAllShouldMatchAllMailboxEmails() throws Exception {
SearchQuery query = new SearchQuery();
query.andCriteria(SearchQuery.all());
- Iterator<Long> result = index.search(null, mailbox2, query);
+ Iterator<Long> result = index.search(session, mailbox2, query);
assertThat(result).containsExactly(1L);
}
@@ -250,7 +253,7 @@ public class LuceneMailboxMessageSearchIndexTest {
public void searchBodyInAllMailboxesShouldMatch() throws Exception {
SearchQuery query = new SearchQuery();
query.andCriteria(SearchQuery.bodyContains("My Body"));
- Map<MailboxId, Collection<Long>> result = index.search(null, MultimailboxesSearchQuery.from(query).build());
+ Map<MailboxId, Collection<Long>> result = index.search(session, MultimailboxesSearchQuery.from(query).build());
assertThat(result).hasSize(2);
assertThat(result.get(mailbox.id)).containsExactly(1L);
assertThat(result.get(mailbox2.id)).containsExactly(1L);
@@ -260,7 +263,7 @@ public class LuceneMailboxMessageSearchIndexTest {
public void searchBodyInSpecificMailboxesShouldMatch() throws Exception {
SearchQuery query = new SearchQuery();
query.andCriteria(SearchQuery.bodyContains("My Body"));
- Map<MailboxId, Collection<Long>> result = index.search(null,
+ Map<MailboxId, Collection<Long>> result = index.search(session,
MultimailboxesSearchQuery.from(query).inMailboxes(mailbox.id, mailbox3.id).build());
assertThat(result).hasSize(1);
assertThat(result.get(mailbox.id)).containsExactly(1L);
@@ -271,7 +274,7 @@ public class LuceneMailboxMessageSearchIndexTest {
public void searchAllShouldMatchAllUserEmails() throws Exception {
SearchQuery query = new SearchQuery();
query.andCriteria(SearchQuery.all());
- Map<MailboxId, Collection<Long>> result = index.search(null, MultimailboxesSearchQuery.from(query).build());
+ Map<MailboxId, Collection<Long>> result = index.search(session, MultimailboxesSearchQuery.from(query).build());
assertThat(result).hasSize(3);
}
@@ -279,7 +282,7 @@ public class LuceneMailboxMessageSearchIndexTest {
public void flagSearchShouldMatch() throws Exception {
SearchQuery query = new SearchQuery();
query.andCriteria(SearchQuery.flagIsSet(Flag.DELETED));
- Iterator<Long> result = index.search(null, mailbox, query);
+ Iterator<Long> result = index.search(session, mailbox, query);
assertThat(result).containsExactly(2L, 3L);
}
@@ -287,7 +290,7 @@ public class LuceneMailboxMessageSearchIndexTest {
public void bodySearchShouldMatchSeveralEmails() throws Exception {
SearchQuery query = new SearchQuery();
query.andCriteria(SearchQuery.bodyContains("body"));
- Iterator<Long> result = index.search(null, mailbox, query);
+ Iterator<Long> result = index.search(session, mailbox, query);
assertThat(result).containsExactly(1L, 2L, 3L);
}
@@ -295,7 +298,7 @@ public class LuceneMailboxMessageSearchIndexTest {
public void textSearchShouldMatchSeveralEmails() throws Exception {
SearchQuery query = new SearchQuery();
query.andCriteria(SearchQuery.mailContains("body"));
- Iterator<Long> result = index.search(null, mailbox, query);
+ Iterator<Long> result = index.search(session, mailbox, query);
assertThat(result).containsExactly(1L, 2L, 3L);
}
@@ -303,7 +306,7 @@ public class LuceneMailboxMessageSearchIndexTest {
public void headerSearchShouldMatch() throws Exception {
SearchQuery query = new SearchQuery();
query.andCriteria(SearchQuery.headerContains("Subject", "test"));
- Iterator<Long> result = index.search(null, mailbox, query);
+ Iterator<Long> result = index.search(session, mailbox, query);
assertThat(result).containsExactly(1L, 3L);
}
@@ -311,7 +314,7 @@ public class LuceneMailboxMessageSearchIndexTest {
public void headerExistsShouldMatch() throws Exception {
SearchQuery query = new SearchQuery();
query.andCriteria(SearchQuery.headerExists("Subject"));
- Iterator<Long> result = index.search(null, mailbox, query);
+ Iterator<Long> result = index.search(session, mailbox, query);
assertThat(result).containsExactly(1L, 3L);
}
@@ -319,7 +322,7 @@ public class LuceneMailboxMessageSearchIndexTest {
public void flagUnsetShouldMatch() throws Exception {
SearchQuery query = new SearchQuery();
query.andCriteria(SearchQuery.flagIsUnSet(Flag.DRAFT));
- Iterator<Long> result = index.search(null, mailbox, query);
+ Iterator<Long> result = index.search(session, mailbox, query);
assertThat(result).containsExactly(1L, 2L, 3L);
}
@@ -330,7 +333,7 @@ public class LuceneMailboxMessageSearchIndexTest {
cal.setTime(new Date());
query.andCriteria(SearchQuery.internalDateBefore(cal.getTime(), DateResolution.Day));
- Iterator<Long> result = index.search(null, mailbox, query);
+ Iterator<Long> result = index.search(session, mailbox, query);
assertThat(result).containsExactly(2L);
}
@@ -341,7 +344,7 @@ public class LuceneMailboxMessageSearchIndexTest {
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
query.andCriteria(SearchQuery.internalDateAfter(cal.getTime(), DateResolution.Day));
- Iterator<Long> result = index.search(null, mailbox, query);
+ Iterator<Long> result = index.search(session, mailbox, query);
assertThat(result).containsExactly(3L);
}
@@ -353,7 +356,7 @@ public class LuceneMailboxMessageSearchIndexTest {
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
query.andCriteria(SearchQuery.internalDateOn(cal.getTime(), DateResolution.Day));
- Iterator<Long> result = index.search(null, mailbox, query);
+ Iterator<Long> result = index.search(session, mailbox, query);
assertThat(result).containsExactly(1L);
}
@@ -363,7 +366,7 @@ public class LuceneMailboxMessageSearchIndexTest {
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
query.andCriteria(SearchQuery.uid(new SearchQuery.NumericRange[] {new SearchQuery.NumericRange(1)}));
- Iterator<Long> result = index.search(null, mailbox, query);
+ Iterator<Long> result = index.search(session, mailbox, query);
assertThat(result).containsExactly(1L);
}
@@ -373,7 +376,7 @@ public class LuceneMailboxMessageSearchIndexTest {
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
query.andCriteria(SearchQuery.uid(new SearchQuery.NumericRange[] {new SearchQuery.NumericRange(1), new SearchQuery.NumericRange(2,3)}));
- Iterator<Long> result = index.search(null, mailbox, query);
+ Iterator<Long> result = index.search(session, mailbox, query);
assertThat(result).containsExactly(1L, 2L, 3L);
}
@@ -381,7 +384,7 @@ public class LuceneMailboxMessageSearchIndexTest {
public void sizeEqualsShouldMatch() throws Exception {
SearchQuery query = new SearchQuery();
query.andCriteria(SearchQuery.sizeEquals(200));
- Iterator<Long> result = index.search(null, mailbox, query);
+ Iterator<Long> result = index.search(session, mailbox, query);
assertThat(result).containsExactly(1L);
}
@@ -389,7 +392,7 @@ public class LuceneMailboxMessageSearchIndexTest {
public void sizeLessThanShouldMatch() throws Exception {
SearchQuery query = new SearchQuery();
query.andCriteria(SearchQuery.sizeLessThan(200));
- Iterator<Long> result = index.search(null, mailbox, query);
+ Iterator<Long> result = index.search(session, mailbox, query);
assertThat(result).containsExactly(2L, 3L);
}
@@ -397,7 +400,7 @@ public class LuceneMailboxMessageSearchIndexTest {
public void sizeGreaterThanShouldMatch() throws Exception {
SearchQuery query = new SearchQuery();
query.andCriteria(SearchQuery.sizeGreaterThan(6));
- Iterator<Long> result = index.search(null, mailbox, query);
+ Iterator<Long> result = index.search(session, mailbox, query);
assertThat(result).containsExactly(1L, 2L, 3L);
}
@@ -405,7 +408,7 @@ public class LuceneMailboxMessageSearchIndexTest {
public void uidShouldBeSorted() throws Exception {
SearchQuery query = new SearchQuery();
query.andCriteria(SearchQuery.all());
- Iterator<Long> result = index.search(null, mailbox, query);
+ Iterator<Long> result = index.search(session, mailbox, query);
assertThat(result).containsExactly(1L, 2L, 3L);
}
@@ -414,7 +417,7 @@ public class LuceneMailboxMessageSearchIndexTest {
SearchQuery query = new SearchQuery();
query.setSorts(Arrays.asList(new SearchQuery.Sort(SortClause.Uid, true)));
query.andCriteria(SearchQuery.all());
- Iterator<Long> result = index.search(null, mailbox, query);
+ Iterator<Long> result = index.search(session, mailbox, query);
assertThat(result).containsExactly(3L, 2L, 1L);
}
@@ -423,7 +426,7 @@ public class LuceneMailboxMessageSearchIndexTest {
SearchQuery query = new SearchQuery();
query.andCriteria(SearchQuery.all());
query.setSorts(Arrays.asList(new SearchQuery.Sort(SortClause.SentDate, false)));
- Iterator<Long> result = index.search(null, mailbox, query);
+ Iterator<Long> result = index.search(session, mailbox, query);
assertThat(result).containsExactly(2L, 3L, 1L);
}
@@ -432,7 +435,7 @@ public class LuceneMailboxMessageSearchIndexTest {
SearchQuery query = new SearchQuery();
query.andCriteria(SearchQuery.all());
query.setSorts(Arrays.asList(new SearchQuery.Sort(SortClause.SentDate, true)));
- Iterator<Long> result = index.search(null, mailbox, query);
+ Iterator<Long> result = index.search(session, mailbox, query);
assertThat(result).containsExactly(1L, 3L, 2L);
}
@@ -441,7 +444,7 @@ public class LuceneMailboxMessageSearchIndexTest {
SearchQuery query = new SearchQuery();
query.andCriteria(SearchQuery.all());
query.setSorts(Arrays.asList(new SearchQuery.Sort(SortClause.BaseSubject, false)));
- Iterator<Long> result = index.search(null, mailbox, query);
+ Iterator<Long> result = index.search(session, mailbox, query);
assertThat(result).containsExactly(2L, 1L, 3L);
}
@@ -450,7 +453,7 @@ public class LuceneMailboxMessageSearchIndexTest {
SearchQuery query = new SearchQuery();
query.andCriteria(SearchQuery.all());
query.setSorts(Arrays.asList(new SearchQuery.Sort(SortClause.BaseSubject, true)));
- Iterator<Long> result = index.search(null, mailbox, query);
+ Iterator<Long> result = index.search(session, mailbox, query);
assertThat(result).containsExactly(3L, 1L, 2L);
}
@@ -459,7 +462,7 @@ public class LuceneMailboxMessageSearchIndexTest {
SearchQuery query = new SearchQuery();
query.andCriteria(SearchQuery.all());
query.setSorts(Arrays.asList(new SearchQuery.Sort(SortClause.MailboxFrom, false)));
- Iterator<Long> result = index.search(null, mailbox, query);
+ Iterator<Long> result = index.search(session, mailbox, query);
assertThat(result).containsExactly(2L, 3L, 1L);
}
@@ -468,7 +471,7 @@ public class LuceneMailboxMessageSearchIndexTest {
SearchQuery query = new SearchQuery();
query.andCriteria(SearchQuery.all());
query.setSorts(Arrays.asList(new SearchQuery.Sort(SortClause.MailboxFrom, true)));
- Iterator<Long> result = index.search(null, mailbox, query);
+ Iterator<Long> result = index.search(session, mailbox, query);
assertThat(result).containsExactly(1L, 3L, 2L);
}
@@ -477,7 +480,7 @@ public class LuceneMailboxMessageSearchIndexTest {
SearchQuery query = new SearchQuery();
query.andCriteria(SearchQuery.all());
query.setSorts(Arrays.asList(new SearchQuery.Sort(SortClause.MailboxCc, false)));
- Iterator<Long> result = index.search(null, mailbox, query);
+ Iterator<Long> result = index.search(session, mailbox, query);
assertThat(result).containsExactly(1L, 2L, 3L);
}
@@ -486,7 +489,7 @@ public class LuceneMailboxMessageSearchIndexTest {
SearchQuery query = new SearchQuery();
query.andCriteria(SearchQuery.all());
query.setSorts(Arrays.asList(new SearchQuery.Sort(SortClause.MailboxCc, true)));
- Iterator<Long> result = index.search(null, mailbox, query);
+ Iterator<Long> result = index.search(session, mailbox, query);
assertThat(result).containsExactly(2L, 3L, 1L);
}
@@ -495,7 +498,7 @@ public class LuceneMailboxMessageSearchIndexTest {
SearchQuery query = new SearchQuery();
query.andCriteria(SearchQuery.all());
query.setSorts(Arrays.asList(new SearchQuery.Sort(SortClause.MailboxTo, false)));
- Iterator<Long> result = index.search(null, mailbox, query);
+ Iterator<Long> result = index.search(session, mailbox, query);
assertThat(result).containsExactly(3L, 1L, 2L);
}
@@ -504,7 +507,7 @@ public class LuceneMailboxMessageSearchIndexTest {
SearchQuery query = new SearchQuery();
query.andCriteria(SearchQuery.all());
query.setSorts(Arrays.asList(new SearchQuery.Sort(SortClause.MailboxTo, true)));
- Iterator<Long> result = index.search(null, mailbox, query);
+ Iterator<Long> result = index.search(session, mailbox, query);
assertThat(result).containsExactly(2L, 1L, 3L);
}
@@ -513,7 +516,7 @@ public class LuceneMailboxMessageSearchIndexTest {
SearchQuery query = new SearchQuery();
query.andCriteria(SearchQuery.all());
query.setSorts(Arrays.asList(new SearchQuery.Sort(SortClause.DisplayTo, false)));
- Iterator<Long> result = index.search(null, mailbox, query);
+ Iterator<Long> result = index.search(session, mailbox, query);
assertThat(result).containsExactly(3L, 1L, 2L);
}
@@ -522,7 +525,7 @@ public class LuceneMailboxMessageSearchIndexTest {
SearchQuery query = new SearchQuery();
query.andCriteria(SearchQuery.all());
query.setSorts(Arrays.asList(new SearchQuery.Sort(SortClause.DisplayTo, true)));
- Iterator<Long> result = index.search(null, mailbox, query);
+ Iterator<Long> result = index.search(session, mailbox, query);
assertThat(result).containsExactly(2L, 1L, 3L);
}
@@ -531,7 +534,7 @@ public class LuceneMailboxMessageSearchIndexTest {
SearchQuery query = new SearchQuery();
query.andCriteria(SearchQuery.all());
query.setSorts(Arrays.asList(new SearchQuery.Sort(SortClause.DisplayFrom, false)));
- Iterator<Long> result = index.search(null, mailbox, query);
+ Iterator<Long> result = index.search(session, mailbox, query);
assertThat(result).containsExactly(2L, 3L, 1L);
}
@@ -540,7 +543,7 @@ public class LuceneMailboxMessageSearchIndexTest {
SearchQuery query = new SearchQuery();
query.andCriteria(SearchQuery.all());
query.setSorts(Arrays.asList(new SearchQuery.Sort(SortClause.DisplayFrom, true)));
- Iterator<Long> result = index.search(null, mailbox, query);
+ Iterator<Long> result = index.search(session, mailbox, query);
assertThat(result).containsExactly(1L, 3L, 2L);
}
@@ -549,7 +552,7 @@ public class LuceneMailboxMessageSearchIndexTest {
SearchQuery query = new SearchQuery();
query.andCriteria(SearchQuery.all());
query.setSorts(Arrays.asList(new SearchQuery.Sort(SortClause.Arrival, false)));
- Iterator<Long> result = index.search(null, mailbox, query);
+ Iterator<Long> result = index.search(session, mailbox, query);
assertThat(result).containsExactly(2L, 1L, 3L);
}
@@ -558,7 +561,7 @@ public class LuceneMailboxMessageSearchIndexTest {
SearchQuery query = new SearchQuery();
query.andCriteria(SearchQuery.all());
query.setSorts(Arrays.asList(new SearchQuery.Sort(SortClause.Arrival, true)));
- Iterator<Long> result = index.search(null, mailbox, query);
+ Iterator<Long> result = index.search(session, mailbox, query);
assertThat(result).containsExactly(3L, 1L, 2L);
}
@@ -567,7 +570,7 @@ public class LuceneMailboxMessageSearchIndexTest {
SearchQuery query = new SearchQuery();
query.andCriteria(SearchQuery.all());
query.setSorts(Arrays.asList(new SearchQuery.Sort(SortClause.Size, false)));
- Iterator<Long> result = index.search(null, mailbox, query);
+ Iterator<Long> result = index.search(session, mailbox, query);
assertThat(result).containsExactly(2L, 3L, 1L);
}
@@ -576,7 +579,7 @@ public class LuceneMailboxMessageSearchIndexTest {
SearchQuery query = new SearchQuery();
query.andCriteria(SearchQuery.all());
query.setSorts(Arrays.asList(new SearchQuery.Sort(SortClause.Size, true)));
- Iterator<Long> result = index.search(null, mailbox, query);
+ Iterator<Long> result = index.search(session, mailbox, query);
assertThat(result).containsExactly(1L, 2L, 3L);
}
@@ -584,7 +587,7 @@ public class LuceneMailboxMessageSearchIndexTest {
public void notOperatorShouldReverseMatching() throws Exception {
SearchQuery query = new SearchQuery();
query.andCriteria(SearchQuery.not(SearchQuery.uid(new SearchQuery.NumericRange[] { new SearchQuery.NumericRange(1)})));
- Iterator<Long> result = index.search(null, mailbox, query);
+ Iterator<Long> result = index.search(session, mailbox, query);
assertThat(result).containsExactly(2L, 3L);
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/c981e8a3/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 4096c8e..72b905b 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
@@ -38,6 +38,8 @@ import org.apache.james.mailbox.store.mail.MessageMapper.FetchType;
import org.apache.james.mailbox.store.mail.model.Mailbox;
import org.apache.james.mailbox.store.mail.model.MailboxMessage;
+import com.google.common.base.Preconditions;
+
/**
* {@link ListeningMessageSearchIndex} implementation which wraps another {@link ListeningMessageSearchIndex} and will forward all calls to it.
*
@@ -91,6 +93,7 @@ public class LazyMessageSearchIndex extends ListeningMessageSearchIndex {
*/
@Override
public Iterator<Long> search(MailboxSession session, Mailbox mailbox, SearchQuery searchQuery) throws MailboxException {
+ Preconditions.checkArgument(session != null, "'session' is mandatory");
MailboxId id = mailbox.getMailboxId();
Object done = indexed.get(id);
http://git-wip-us.apache.org/repos/asf/james-project/blob/c981e8a3/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/MessageSearches.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/MessageSearches.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/MessageSearches.java
index 13863e0..75aa957 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/MessageSearches.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/MessageSearches.java
@@ -36,6 +36,7 @@ import java.util.TreeSet;
import javax.mail.Flags;
+import org.apache.james.mailbox.MailboxSession;
import org.apache.james.mailbox.exception.MailboxException;
import org.apache.james.mailbox.exception.UnsupportedSearchException;
import org.apache.james.mailbox.model.MessageResult.Header;
@@ -58,7 +59,6 @@ import org.apache.james.mime4j.field.address.LenientAddressParser;
import org.apache.james.mime4j.field.datetime.parser.DateTimeParser;
import org.apache.james.mime4j.field.datetime.parser.ParseException;
import org.apache.james.mime4j.utils.search.MessageMatcher;
-import org.slf4j.Logger;
import com.google.common.collect.Lists;
@@ -69,16 +69,12 @@ public class MessageSearches implements Iterable<Long> {
private Iterator<MailboxMessage> messages;
private SearchQuery query;
- private Logger log;
+ private MailboxSession session;
- public MessageSearches(Iterator<MailboxMessage> messages, SearchQuery query) {
- this(messages, query, null);
- }
-
- public MessageSearches(Iterator<MailboxMessage> messages, SearchQuery query, Logger log) {
+ public MessageSearches(Iterator<MailboxMessage> messages, SearchQuery query, MailboxSession session) {
this.messages = messages;
this.query = query;
- this.log = log;
+ this.session = session;
}
/**
@@ -92,11 +88,13 @@ public class MessageSearches implements Iterable<Long> {
while (messages.hasNext()) {
MailboxMessage m = messages.next();
try {
- if (isMatch(query, m, log)) {
+ if (isMatch(query, m)) {
matched.add(m);
}
} catch (MailboxException e) {
- log.debug("Unable to search message " + m.getUid(), e);
+ if (session != null && session.getLog() != null) {
+ session.getLog().debug("Unable to search message " + m.getUid(), e);
+ }
}
}
Set<Long> uids = new HashSet<Long>();
@@ -114,19 +112,17 @@ public class MessageSearches implements Iterable<Long> {
* <code>SearchQuery</code>, not null
* @param message
* <code>MailboxMessage</code>, not null
- * @param log
- * the logger to use
* @return <code>true</code> if the row matches the given criteria,
* <code>false</code> otherwise
* @throws MailboxException
*/
- protected boolean isMatch(SearchQuery query, MailboxMessage message, Logger log) throws MailboxException {
+ protected boolean isMatch(SearchQuery query, MailboxMessage message) throws MailboxException {
final List<SearchQuery.Criterion> criteria = query.getCriterias();
final Collection<Long> recentMessageUids = query.getRecentMessageUids();
boolean result = true;
if (criteria != null) {
for (SearchQuery.Criterion criterion : criteria) {
- if (!isMatch(criterion, message, recentMessageUids, log)) {
+ if (!isMatch(criterion, message, recentMessageUids)) {
result = false;
break;
}
@@ -144,14 +140,12 @@ public class MessageSearches implements Iterable<Long> {
* <code>MailboxMessage</code>, not null
* @param recentMessageUids
* collection of recent message uids
- * @param log
- * the logger to use
* @return <code>true</code> if the row matches the given criterion,
* <code>false</code> otherwise
* @throws MailboxException
*/
public boolean isMatch(SearchQuery.Criterion criterion, MailboxMessage message,
- final Collection<Long> recentMessageUids, Logger log) throws MailboxException {
+ final Collection<Long> recentMessageUids) throws MailboxException {
final boolean result;
if (criterion instanceof SearchQuery.InternalDateCriterion) {
result = matches((SearchQuery.InternalDateCriterion) criterion, message);
@@ -159,7 +153,7 @@ public class MessageSearches implements Iterable<Long> {
result = matches((SearchQuery.SizeCriterion) criterion, message);
} else if (criterion instanceof SearchQuery.HeaderCriterion) {
try {
- result = matches((SearchQuery.HeaderCriterion) criterion, message, log);
+ result = matches((SearchQuery.HeaderCriterion) criterion, message);
} catch (IOException e) {
throw new MailboxException("Unable to search header", e);
}
@@ -170,11 +164,11 @@ public class MessageSearches implements Iterable<Long> {
} else if (criterion instanceof SearchQuery.CustomFlagCriterion) {
result = matches((SearchQuery.CustomFlagCriterion) criterion, message, recentMessageUids);
} else if (criterion instanceof SearchQuery.TextCriterion) {
- result = matches((SearchQuery.TextCriterion) criterion, message, log);
+ result = matches((SearchQuery.TextCriterion) criterion, message);
} else if (criterion instanceof SearchQuery.AllCriterion) {
result = true;
} else if (criterion instanceof SearchQuery.ConjunctionCriterion) {
- result = matches((SearchQuery.ConjunctionCriterion) criterion, message, recentMessageUids, log);
+ result = matches((SearchQuery.ConjunctionCriterion) criterion, message, recentMessageUids);
} else if (criterion instanceof SearchQuery.ModSeqCriterion) {
result = matches((SearchQuery.ModSeqCriterion) criterion, message);
} else {
@@ -183,16 +177,16 @@ public class MessageSearches implements Iterable<Long> {
return result;
}
- protected boolean matches(SearchQuery.TextCriterion criterion, MailboxMessage message, Logger log)
+ protected boolean matches(SearchQuery.TextCriterion criterion, MailboxMessage message)
throws MailboxException {
try {
final SearchQuery.ContainsOperator operator = criterion.getOperator();
final String value = operator.getValue();
switch (criterion.getType()) {
case BODY:
- return bodyContains(value, message, log);
+ return bodyContains(value, message);
case FULL:
- return messageContains(value, message, log);
+ return messageContains(value, message);
default:
throw new UnsupportedSearchException();
}
@@ -203,47 +197,47 @@ public class MessageSearches implements Iterable<Long> {
}
}
- protected boolean bodyContains(String value, MailboxMessage message, Logger log) throws IOException, MimeException {
+ protected boolean bodyContains(String value, MailboxMessage message) throws IOException, MimeException {
final InputStream input = message.getFullContent();
- return isInMessage(value, input, false, log);
+ return isInMessage(value, input, false);
}
- protected boolean isInMessage(String value, InputStream input, boolean header, Logger log) throws IOException, MimeException {
+ protected boolean isInMessage(String value, InputStream input, boolean header) throws IOException, MimeException {
MessageMatcher.MessageMatcherBuilder builder = MessageMatcher.builder()
.searchContents(Lists.<CharSequence>newArrayList(value))
.caseInsensitive(true)
.includeHeaders(header);
- if (log != null) {
- builder.logger(log);
+ if (session != null && session.getLog() != null) {
+ builder.logger(session.getLog());
}
return builder.build().messageMatches(input);
}
- protected boolean messageContains(String value, MailboxMessage message, Logger log) throws IOException, MimeException {
+ protected boolean messageContains(String value, MailboxMessage message) throws IOException, MimeException {
final InputStream input = message.getFullContent();
- return isInMessage(value, input, true, log);
+ return isInMessage(value, input, true);
}
private boolean matches(SearchQuery.ConjunctionCriterion criterion, MailboxMessage message,
- final Collection<Long> recentMessageUids, Logger log) throws MailboxException {
+ final Collection<Long> recentMessageUids) throws MailboxException {
final List<SearchQuery.Criterion> criteria = criterion.getCriteria();
switch (criterion.getType()) {
case NOR:
- return nor(criteria, message, recentMessageUids, log);
+ return nor(criteria, message, recentMessageUids);
case OR:
- return or(criteria, message, recentMessageUids, log);
+ return or(criteria, message, recentMessageUids);
case AND:
- return and(criteria, message, recentMessageUids, log);
+ return and(criteria, message, recentMessageUids);
default:
return false;
}
}
private boolean and(List<SearchQuery.Criterion> criteria, MailboxMessage message,
- final Collection<Long> recentMessageUids, Logger log) throws MailboxException {
+ final Collection<Long> recentMessageUids) throws MailboxException {
boolean result = true;
for (SearchQuery.Criterion criterion : criteria) {
- boolean matches = isMatch(criterion, message, recentMessageUids, log);
+ boolean matches = isMatch(criterion, message, recentMessageUids);
if (!matches) {
result = false;
break;
@@ -253,10 +247,10 @@ public class MessageSearches implements Iterable<Long> {
}
private boolean or(List<SearchQuery.Criterion> criteria, MailboxMessage message,
- final Collection<Long> recentMessageUids, Logger log) throws MailboxException {
+ final Collection<Long> recentMessageUids) throws MailboxException {
boolean result = false;
for (SearchQuery.Criterion criterion : criteria) {
- boolean matches = isMatch(criterion, message, recentMessageUids, log);
+ boolean matches = isMatch(criterion, message, recentMessageUids);
if (matches) {
result = true;
break;
@@ -266,10 +260,10 @@ public class MessageSearches implements Iterable<Long> {
}
private boolean nor(List<SearchQuery.Criterion> criteria, MailboxMessage message,
- final Collection<Long> recentMessageUids, Logger log) throws MailboxException {
+ final Collection<Long> recentMessageUids) throws MailboxException {
boolean result = true;
for (SearchQuery.Criterion criterion : criteria) {
- boolean matches = isMatch(criterion, message, recentMessageUids, log);
+ boolean matches = isMatch(criterion, message, recentMessageUids);
if (matches) {
result = false;
break;
@@ -325,7 +319,7 @@ public class MessageSearches implements Iterable<Long> {
return result;
}
- private boolean matches(SearchQuery.HeaderCriterion criterion, MailboxMessage message, Logger log)
+ private boolean matches(SearchQuery.HeaderCriterion criterion, MailboxMessage message)
throws MailboxException, IOException {
SearchQuery.HeaderOperator operator = criterion.getOperator();
String headerName = criterion.getHeaderName();
@@ -337,7 +331,7 @@ public class MessageSearches implements Iterable<Long> {
} else if (operator instanceof SearchQuery.ExistsOperator) {
result = exists(headerName, message);
} else if (operator instanceof SearchQuery.AddressOperator) {
- result = matchesAddress((SearchQuery.AddressOperator) operator, headerName, message, log);
+ result = matchesAddress((SearchQuery.AddressOperator) operator, headerName, message);
} else {
throw new UnsupportedSearchException();
}
@@ -355,7 +349,7 @@ public class MessageSearches implements Iterable<Long> {
* @throws IOException
*/
private boolean matchesAddress(SearchQuery.AddressOperator operator, String headerName,
- MailboxMessage message, Logger log) throws MailboxException, IOException {
+ MailboxMessage message) throws MailboxException, IOException {
String text = operator.getAddress().toUpperCase(Locale.ENGLISH);
List<Header> headers = ResultUtils.createHeaders(message);
for (Header header : headers) {
http://git-wip-us.apache.org/repos/asf/james-project/blob/c981e8a3/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 7d05a49..7dccf41 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
@@ -48,6 +48,7 @@ import org.apache.james.mailbox.store.mail.MessageMapperFactory;
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.collect.ImmutableList;
import com.google.common.collect.ImmutableMultimap;
import com.google.common.collect.ImmutableMultimap.Builder;
@@ -99,6 +100,7 @@ public class SimpleMessageSearchIndex implements MessageSearchIndex {
@Override
public Iterator<Long> search(MailboxSession session, Mailbox mailbox, SearchQuery query) throws MailboxException {
+ Preconditions.checkArgument(session != null, "'session' is mandatory");
return searchMultimap(session, ImmutableList.of(mailbox), query)
.get(mailbox.getMailboxId())
.iterator();
@@ -114,6 +116,9 @@ public class SimpleMessageSearchIndex implements MessageSearchIndex {
}
private Multimap<MailboxId, Long> searchMultimap(MailboxSession session, Mailbox mailbox, SearchQuery query) throws MailboxException {
+ if (!isMatchingUser(session, mailbox)) {
+ return ImmutableMultimap.of();
+ }
MessageMapper mapper = messageMapperFactory.getMessageMapper(session);
final SortedSet<MailboxMessage> hitSet = new TreeSet<MailboxMessage>();
@@ -139,15 +144,13 @@ public class SimpleMessageSearchIndex implements MessageSearchIndex {
}
// MessageSearches does the filtering for us
- if (session == null) {
- return ImmutableMultimap.<MailboxId, Long>builder()
- .putAll(mailbox.getMailboxId(), ImmutableList.copyOf(new MessageSearches(hitSet.iterator(), query).iterator()))
- .build();
- } else {
- return ImmutableMultimap.<MailboxId, Long>builder()
- .putAll(mailbox.getMailboxId(), ImmutableList.copyOf(new MessageSearches(hitSet.iterator(), query, session.getLog()).iterator()))
- .build();
- }
+ return ImmutableMultimap.<MailboxId, Long>builder()
+ .putAll(mailbox.getMailboxId(), ImmutableList.copyOf(new MessageSearches(hitSet.iterator(), query, session).iterator()))
+ .build();
+ }
+
+ private boolean isMatchingUser(MailboxSession session, Mailbox mailbox) {
+ return mailbox.getUser().equals(session.getUser().getUserName());
}
@Override
http://git-wip-us.apache.org/repos/asf/james-project/blob/c981e8a3/mailbox/store/src/test/java/org/apache/james/mailbox/store/SearchUtilsMultipartMixedTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/SearchUtilsMultipartMixedTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/SearchUtilsMultipartMixedTest.java
index 7b87e5c..d350e33 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/SearchUtilsMultipartMixedTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/SearchUtilsMultipartMixedTest.java
@@ -31,8 +31,6 @@ import org.apache.james.mailbox.store.mail.model.MailboxMessage;
import org.apache.james.mailbox.store.search.MessageSearches;
import org.junit.Before;
import org.junit.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
public class SearchUtilsMultipartMixedTest {
@@ -112,7 +110,6 @@ public class SearchUtilsMultipartMixedTest {
Collection<Long> recent;
- private Logger log = LoggerFactory.getLogger(this.getClass());
@Before
public void setUp() throws Exception {
final MessageBuilder builder = new MessageBuilder();
@@ -131,94 +128,94 @@ public class SearchUtilsMultipartMixedTest {
@Test
public void testShouldNotFindWhatIsNotThere() throws Exception {
assertFalse(new MessageSearches().isMatch(SearchQuery.bodyContains("BOGUS"), row,
- recent, log));
+ recent));
assertFalse(new MessageSearches().isMatch(SearchQuery.mailContains("BOGUS"), row,
- recent, log));
+ recent));
}
@Test
public void testBodyShouldFindTextInBody() throws Exception {
assertTrue(new MessageSearches().isMatch(SearchQuery
- .bodyContains(SAMPLE_INNER_MAIL_BODY_ONE), row, recent, log));
+ .bodyContains(SAMPLE_INNER_MAIL_BODY_ONE), row, recent));
assertTrue(new MessageSearches().isMatch(SearchQuery.bodyContains(SAMPLE_PART_ONE),
- row, recent, log));
+ row, recent));
assertTrue(new MessageSearches().isMatch(SearchQuery.bodyContains(SAMPLE_PART_TWO),
- row, recent, log));
+ row, recent));
}
@Test
public void testBodyShouldFindTextInBodyCaseInsensitive() throws Exception {
assertTrue(new MessageSearches().isMatch(SearchQuery
- .bodyContains(SAMPLE_INNER_MAIL_BODY_ONE), row, recent, log));
+ .bodyContains(SAMPLE_INNER_MAIL_BODY_ONE), row, recent));
assertTrue(new MessageSearches().isMatch(SearchQuery.bodyContains(SAMPLE_PART_ONE),
- row, recent, log));
+ row, recent));
assertTrue(new MessageSearches().isMatch(SearchQuery.bodyContains(SAMPLE_PART_TWO),
- row, recent, log));
+ row, recent));
assertTrue(new MessageSearches().isMatch(SearchQuery
.bodyContains(SAMPLE_INNER_MAIL_BODY_ONE.toLowerCase()), row,
- recent, log));
+ recent));
assertTrue(new MessageSearches().isMatch(SearchQuery.bodyContains(SAMPLE_PART_ONE
- .toLowerCase()), row, recent, log));
+ .toLowerCase()), row, recent));
assertTrue(new MessageSearches().isMatch(SearchQuery.bodyContains(SAMPLE_PART_TWO
- .toLowerCase()), row, recent, log));
+ .toLowerCase()), row, recent));
assertTrue(new MessageSearches().isMatch(SearchQuery
.bodyContains(SAMPLE_INNER_MAIL_BODY_ONE.toUpperCase()), row,
- recent, log));
+ recent));
assertTrue(new MessageSearches().isMatch(SearchQuery.bodyContains(SAMPLE_PART_ONE
- .toUpperCase()), row, recent, log));
+ .toUpperCase()), row, recent));
assertTrue(new MessageSearches().isMatch(SearchQuery.bodyContains(SAMPLE_PART_TWO
- .toUpperCase()), row, recent, log));
+ .toUpperCase()), row, recent));
}
@Test
public void testBodyShouldNotFindTextInHeaders() throws Exception {
assertFalse(new MessageSearches().isMatch(SearchQuery
- .bodyContains(SAMPLE_INNER_MAIL_FIELD), row, recent, log));
+ .bodyContains(SAMPLE_INNER_MAIL_FIELD), row, recent));
assertFalse(new MessageSearches().isMatch(SearchQuery
- .bodyContains(SAMPLE_PART_TWO_FIELD), row, recent, log));
+ .bodyContains(SAMPLE_PART_TWO_FIELD), row, recent));
}
@Test
public void testTextShouldFindTextInBody() throws Exception {
assertTrue(new MessageSearches().isMatch(SearchQuery
- .mailContains(SAMPLE_INNER_MAIL_BODY_ONE), row, recent, log));
+ .mailContains(SAMPLE_INNER_MAIL_BODY_ONE), row, recent));
assertTrue(new MessageSearches().isMatch(SearchQuery.mailContains(SAMPLE_PART_ONE),
- row, recent, log));
+ row, recent));
assertTrue(new MessageSearches().isMatch(SearchQuery.mailContains(SAMPLE_PART_TWO),
- row, recent, log));
+ row, recent));
}
@Test
public void testTextShouldFindTextInBodyCaseInsensitive() throws Exception {
assertTrue(new MessageSearches().isMatch(SearchQuery
- .mailContains(SAMPLE_INNER_MAIL_BODY_ONE), row, recent, log));
+ .mailContains(SAMPLE_INNER_MAIL_BODY_ONE), row, recent));
assertTrue(new MessageSearches().isMatch(SearchQuery.mailContains(SAMPLE_PART_ONE),
- row, recent, log));
+ row, recent));
assertTrue(new MessageSearches().isMatch(SearchQuery.mailContains(SAMPLE_PART_TWO),
- row, recent, log));
+ row, recent));
assertTrue(new MessageSearches().isMatch(SearchQuery
.mailContains(SAMPLE_INNER_MAIL_BODY_ONE.toLowerCase()), row,
- recent, log));
+ recent));
assertTrue(new MessageSearches().isMatch(SearchQuery.mailContains(SAMPLE_PART_ONE
- .toLowerCase()), row, recent, log));
+ .toLowerCase()), row, recent));
assertTrue(new MessageSearches().isMatch(SearchQuery.mailContains(SAMPLE_PART_TWO
- .toLowerCase()), row, recent, log));
+ .toLowerCase()), row, recent));
assertTrue(new MessageSearches().isMatch(SearchQuery
.mailContains(SAMPLE_INNER_MAIL_BODY_ONE.toUpperCase()), row,
- recent, log));
+ recent));
assertTrue(new MessageSearches().isMatch(SearchQuery.mailContains(SAMPLE_PART_ONE
- .toUpperCase()), row, recent, log));
+ .toUpperCase()), row, recent));
assertTrue(new MessageSearches().isMatch(SearchQuery.mailContains(SAMPLE_PART_TWO
- .toUpperCase()), row, recent, log));
+ .toUpperCase()), row, recent));
}
@Test
public void testTextShouldFindTextInHeaders() throws Exception {
assertTrue(new MessageSearches().isMatch(SearchQuery
- .mailContains(SAMPLE_INNER_MAIL_FIELD), row, recent, log));
+ .mailContains(SAMPLE_INNER_MAIL_FIELD), row, recent));
assertTrue(new MessageSearches().isMatch(SearchQuery
- .mailContains(SAMPLE_INNER_MAIL_BODY_ONE), row, recent, log));
+ .mailContains(SAMPLE_INNER_MAIL_BODY_ONE), row, recent));
assertTrue(new MessageSearches().isMatch(SearchQuery
- .mailContains(SAMPLE_PART_TWO_FIELD), row, recent, log));
+ .mailContains(SAMPLE_PART_TWO_FIELD), row, recent));
}
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/c981e8a3/mailbox/store/src/test/java/org/apache/james/mailbox/store/SearchUtilsRFC822Test.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/SearchUtilsRFC822Test.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/SearchUtilsRFC822Test.java
index d8c7e58..c06c191 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/SearchUtilsRFC822Test.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/SearchUtilsRFC822Test.java
@@ -31,8 +31,6 @@ import org.apache.james.mailbox.store.mail.model.MailboxMessage;
import org.apache.james.mailbox.store.search.MessageSearches;
import org.junit.Before;
import org.junit.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
public class SearchUtilsRFC822Test {
@@ -50,7 +48,6 @@ public class SearchUtilsRFC822Test {
MailboxMessage row;
- private Logger log = LoggerFactory.getLogger(getClass());
Collection<Long> recent;
@Before
@@ -69,52 +66,52 @@ public class SearchUtilsRFC822Test {
@Test
public void testBodyShouldMatchPhraseInBody() throws Exception {
assertTrue(new MessageSearches().isMatch(SearchQuery.bodyContains(CUSTARD), row,
- recent, log));
+ recent));
assertFalse(new MessageSearches().isMatch(SearchQuery
- .bodyContains(CUSTARD + CUSTARD), row, recent, log));
+ .bodyContains(CUSTARD + CUSTARD), row, recent));
}
@Test
public void testBodyMatchShouldBeCaseInsensitive() throws Exception {
assertTrue(new MessageSearches().isMatch(SearchQuery.bodyContains(RHUBARD), row,
- recent, log));
+ recent));
assertTrue(new MessageSearches().isMatch(SearchQuery.bodyContains(RHUBARD
- .toLowerCase()), row, recent, log));
+ .toLowerCase()), row, recent));
assertTrue(new MessageSearches().isMatch(SearchQuery.bodyContains(RHUBARD
- .toLowerCase()), row, recent, log));
+ .toLowerCase()), row, recent));
}
@Test
public void testBodyShouldNotMatchPhraseOnlyInHeader() throws Exception {
assertFalse(new MessageSearches().isMatch(SearchQuery.bodyContains(FROM_ADDRESS),
- row, recent, log));
+ row, recent));
assertFalse(new MessageSearches().isMatch(SearchQuery.bodyContains(SUBJECT_PART),
- row, recent, log));
+ row, recent));
}
@Test
public void testTextShouldMatchPhraseInBody() throws Exception {
assertTrue(new MessageSearches().isMatch(SearchQuery.mailContains(CUSTARD), row,
- recent, log));
+ recent));
assertFalse(new MessageSearches().isMatch(SearchQuery
- .mailContains(CUSTARD + CUSTARD), row, recent, log));
+ .mailContains(CUSTARD + CUSTARD), row, recent));
}
@Test
public void testTextMatchShouldBeCaseInsensitive() throws Exception {
assertTrue(new MessageSearches().isMatch(SearchQuery.mailContains(RHUBARD), row,
- recent, log));
+ recent));
assertTrue(new MessageSearches().isMatch(SearchQuery.mailContains(RHUBARD
- .toLowerCase()), row, recent, log));
+ .toLowerCase()), row, recent));
assertTrue(new MessageSearches().isMatch(SearchQuery.mailContains(RHUBARD
- .toLowerCase()), row, recent, log));
+ .toLowerCase()), row, recent));
}
@Test
public void testBodyShouldMatchPhraseOnlyInHeader() throws Exception {
assertTrue(new MessageSearches().isMatch(SearchQuery.mailContains(FROM_ADDRESS),
- row, recent, log));
+ row, recent));
assertTrue(new MessageSearches().isMatch(SearchQuery.mailContains(SUBJECT_PART),
- row, recent, log));
+ row, recent));
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org