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 bt...@apache.org on 2017/02/15 00:01:19 UTC
[01/13] james-project git commit: JAMES-1934 StoreMessageManager
should position a property for non inline attachment detection
Repository: james-project
Updated Branches:
refs/heads/master 3c2e5eddb -> a275f62d7
JAMES-1934 StoreMessageManager should position a property for non inline attachment detection
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/de54a6ea
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/de54a6ea
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/de54a6ea
Branch: refs/heads/master
Commit: de54a6eaf73a90ce3cb9fa92ab22c731cceb7441
Parents: 3c2e5ed
Author: Benoit Tellier <bt...@linagora.com>
Authored: Wed Feb 8 10:41:29 2017 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Wed Feb 15 06:59:39 2017 +0700
----------------------------------------------------------------------
.../james/mailbox/store/StoreMessageManager.java | 13 +++++++++++++
.../mailbox/store/mail/model/impl/PropertyBuilder.java | 10 ++++++++--
2 files changed, 21 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/de54a6ea/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
index a7febbe..60c7d19 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
@@ -94,6 +94,8 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.common.base.Function;
+import com.google.common.base.Predicate;
+import com.google.common.collect.FluentIterable;
import com.google.common.collect.ImmutableList;
/**
@@ -398,6 +400,8 @@ public class StoreMessageManager implements org.apache.james.mailbox.MessageMana
final int size = (int) file.length();
final List<MessageAttachment> attachments = extractAttachments(contentIn);
+ propertyBuilder.setHasAttachment(hasNonInlinedAttachment(attachments));
+
final MailboxMessage message = createMessage(internalDate, size, bodyStartOctet, contentIn, flags, propertyBuilder, attachments);
new QuotaChecker(quotaManager, quotaRootResolver, mailbox).tryAddition(1, size);
@@ -439,6 +443,15 @@ public class StoreMessageManager implements org.apache.james.mailbox.MessageMana
}
+ private boolean hasNonInlinedAttachment(List<MessageAttachment> attachments) {
+ return FluentIterable.from(attachments).anyMatch(new Predicate<MessageAttachment>() {
+ @Override
+ public boolean apply(MessageAttachment input) {
+ return !input.isInline();
+ }
+ });
+ }
+
private List<MessageAttachment> extractAttachments(SharedFileInputStream contentIn) {
try {
return messageParser.retrieveAttachments(contentIn);
http://git-wip-us.apache.org/repos/asf/james-project/blob/de54a6ea/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/PropertyBuilder.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/PropertyBuilder.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/PropertyBuilder.java
index deac8ed..c42aa0c 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/PropertyBuilder.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/PropertyBuilder.java
@@ -53,8 +53,10 @@ import org.apache.james.mailbox.store.mail.model.Property;
* Builds properties
*/
public class PropertyBuilder {
-
+
private static final int INITIAL_CAPACITY = 32;
+ public static final String JAMES_INTERNALS = "JAMES_INTERNALS";
+ public static final String HAS_ATTACHMENT = "HAS_ATTACHMENT";
private Long textualLineCount;
private final List<SimpleProperty> properties;
@@ -218,7 +220,11 @@ public class PropertyBuilder {
public void setMediaType(String value) {
setProperty(MIME_MIME_TYPE_SPACE, MIME_MEDIA_TYPE_NAME, value);
}
-
+
+ public void setHasAttachment(boolean value) {
+ setProperty(JAMES_INTERNALS, HAS_ATTACHMENT, Boolean.toString(value));
+ }
+
/**
* Gets the MIME content subtype.
*
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[09/13] james-project git commit: JAMES-1934 suppress eclipse warning
Posted by bt...@apache.org.
JAMES-1934 suppress eclipse warning
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/a275f62d
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/a275f62d
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/a275f62d
Branch: refs/heads/master
Commit: a275f62d7ef83952579c18b24897bcdbea2de952
Parents: cdfe3f7
Author: Luc DUZAN <ld...@linagora.com>
Authored: Mon Feb 13 18:23:26 2017 +0100
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Wed Feb 15 06:59:46 2017 +0700
----------------------------------------------------------------------
.../java/org/apache/james/mailbox/jpa/migrator/JpaMigratorTest.java | 1 -
1 file changed, 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/a275f62d/mailbox/tool/src/test/java/org/apache/james/mailbox/jpa/migrator/JpaMigratorTest.java
----------------------------------------------------------------------
diff --git a/mailbox/tool/src/test/java/org/apache/james/mailbox/jpa/migrator/JpaMigratorTest.java b/mailbox/tool/src/test/java/org/apache/james/mailbox/jpa/migrator/JpaMigratorTest.java
index b83e6c1..ca83271 100644
--- a/mailbox/tool/src/test/java/org/apache/james/mailbox/jpa/migrator/JpaMigratorTest.java
+++ b/mailbox/tool/src/test/java/org/apache/james/mailbox/jpa/migrator/JpaMigratorTest.java
@@ -23,7 +23,6 @@ import org.junit.Test;
/**
* TODO this test class needs to be reviewed.
*/
-@SuppressWarnings("unused")
public class JpaMigratorTest {
@Test()
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[02/13] james-project git commit: JAMES-1934 Merge
IndexableMessageWithId into IndexableMessage and make it immutable
Posted by bt...@apache.org.
JAMES-1934 Merge IndexableMessageWithId into IndexableMessage and make it immutable
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/83e9e0c4
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/83e9e0c4
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/83e9e0c4
Branch: refs/heads/master
Commit: 83e9e0c46de33800ef88fd9c5a8492acec000541
Parents: 98e7ccb
Author: Luc DUZAN <ld...@linagora.com>
Authored: Thu Feb 9 11:22:19 2017 +0100
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Wed Feb 15 06:59:45 2017 +0700
----------------------------------------------------------------------
.../elasticsearch/json/IndexableMessage.java | 551 +++++++++++--------
.../json/IndexableMessageWithMessageId.java | 72 ---
.../json/MessageToElasticSearchJson.java | 32 +-
.../json/IndexableMessageTest.java | 166 +++++-
.../json/MessageToElasticSearchJsonTest.java | 4 +-
5 files changed, 495 insertions(+), 330 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/83e9e0c4/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 6150b19..c6e3ce7 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
@@ -48,186 +48,288 @@ import com.google.common.collect.Multimap;
public class IndexableMessage {
- public static final SimpleProperty HAS_ATTACHMENT_PROPERTY = new SimpleProperty(PropertyBuilder.JAMES_INTERNALS, PropertyBuilder.HAS_ATTACHMENT, "true");
+ public static class Builder {
+ private static ZonedDateTime getSanitizedInternalDate(MailboxMessage message, ZoneId zoneId) {
+ if (message.getInternalDate() == null) {
+ return ZonedDateTime.now();
+ }
+ return ZonedDateTime.ofInstant(
+ Instant.ofEpochMilli(message.getInternalDate().getTime()),
+ zoneId);
+ }
+ private IndexAttachments indexAttachments;
+ private MailboxMessage message;
+ private TextExtractor textExtractor;
+ private List<User> users;
- public static IndexableMessage from(MailboxMessage message, List<User> users, TextExtractor textExtractor,
- ZoneId zoneId, IndexAttachments indexAttachments) {
+ private 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.locateFirstTextBody();
- indexableMessage.bodyHtml = parsingResult.locateFirstHtmlBody();
- indexableMessage.hasAttachment = message.getProperties()
- .stream()
- .anyMatch(property -> property.equals(HAS_ATTACHMENT_PROPERTY));
- indexableMessage.setFlattenedAttachments(parsingResult, indexAttachments);
- indexableMessage.copyHeaderFields(parsingResult.getHeaderCollection(), getSanitizedInternalDate(message, zoneId));
- indexableMessage.generateText();
- } catch (IOException | MimeException e) {
- throw Throwables.propagate(e);
+ private Builder() {
}
- indexableMessage.copyMessageFields(message, zoneId);
- return indexableMessage;
- }
- private void setFlattenedAttachments(MimePart parsingResult, IndexAttachments indexAttachments) {
- List<MimePart> mimeparts = parsingResult.getAttachmentsStream()
+ public IndexableMessage build() {
+ Preconditions.checkNotNull(message.getMailboxId());
+ Preconditions.checkNotNull(message.getMessageId());
+ Preconditions.checkNotNull(users);
+ Preconditions.checkNotNull(textExtractor);
+ Preconditions.checkNotNull(indexAttachments);
+ Preconditions.checkNotNull(zoneId);
+ Preconditions.checkState(!users.isEmpty());
+
+ try {
+ return instanciateIndexedMessage();
+ } catch (IOException | MimeException e) {
+ throw Throwables.propagate(e);
+ }
+ }
+
+ public Builder extractor(TextExtractor textExtractor) {
+ this.textExtractor = textExtractor;
+ return this;
+ }
+
+ public Builder indexAttachments(IndexAttachments indexAttachments) {
+ this.indexAttachments = indexAttachments;
+ return this;
+ }
+
+ public Builder message(MailboxMessage message) {
+ this.message = message;
+ return this;
+ }
+
+ public Builder users(List<User> users) {
+ this.users = users;
+ return this;
+ }
+
+ public Builder zoneId(ZoneId zoneId) {
+ this.zoneId = zoneId;
+ return this;
+ }
+
+ private boolean computeHasAttachment(MailboxMessage message) {
+ return message.getProperties()
+ .stream()
+ .anyMatch(property -> property.equals(HAS_ATTACHMENT_PROPERTY));
+ }
+
+ private IndexableMessage instanciateIndexedMessage() throws IOException, MimeException {
+ String messageId = message.getMessageId().serialize();
+ MimePart parsingResult = new MimePartParser(message, textExtractor).parse();
+
+ List<String> stringifiedUsers = users.stream()
+ .map(User::getUserName)
.collect(Guavate.toImmutableList());
- if (IndexAttachments.YES.equals(indexAttachments)) {
- this.attachments = mimeparts;
- } else {
- this.attachments = ImmutableList.of();
+ Optional<String> bodyText = parsingResult.locateFirstTextBody();
+ Optional<String> bodyHtml = parsingResult.locateFirstHtmlBody();
+
+ boolean hasAttachment = computeHasAttachment(message);
+ List<MimePart> attachments = setFlattenedAttachments(parsingResult, indexAttachments);
+
+ HeaderCollection headerCollection = parsingResult.getHeaderCollection();
+ ZonedDateTime internalDate = getSanitizedInternalDate(message, zoneId);
+
+ Multimap<String, String> headers = headerCollection.getHeaders();
+ Subjects subjects = Subjects.from(headerCollection.getSubjectSet());
+ EMailers from = EMailers.from(headerCollection.getFromAddressSet());
+ EMailers to = EMailers.from(headerCollection.getToAddressSet());
+ EMailers replyTo = EMailers.from(headerCollection.getReplyToAddressSet());
+ EMailers cc = EMailers.from(headerCollection.getCcAddressSet());
+ EMailers bcc = EMailers.from(headerCollection.getBccAddressSet());
+ String sentDate = DateResolutionFormater.DATE_TIME_FOMATTER.format(headerCollection.getSentDate().orElse(internalDate));
+
+ String text = Stream.of(from.serialize(),
+ to.serialize(),
+ cc.serialize(),
+ bcc.serialize(),
+ subjects.serialize(),
+ bodyText.orElse(null),
+ bodyHtml.orElse(null))
+ .filter(str -> !Strings.isNullOrEmpty(str))
+ .collect(Collectors.joining(" "));
+
+ long uid = message.getUid().asLong();
+ String mailboxId = message.getMailboxId().serialize();
+ long modSeq = message.getModSeq();
+ long size = message.getFullContentOctets();
+ String date = DateResolutionFormater.DATE_TIME_FOMATTER.format(getSanitizedInternalDate(message, zoneId));
+ String mediaType = message.getMediaType();
+ String subType = message.getSubType();
+ boolean isAnswered = message.isAnswered();
+ boolean isDeleted = message.isDeleted();
+ boolean isDraft = message.isDraft();
+ boolean isFlagged = message.isFlagged();
+ boolean isRecent = message.isRecent();
+ boolean isUnRead = !message.isSeen();
+ String[] userFlags = message.createFlags().getUserFlags();
+ List<Property> properties = message.getProperties();
+
+ return new IndexableMessage(
+ attachments,
+ bcc,
+ bodyHtml,
+ bodyText,
+ cc,
+ date,
+ from,
+ hasAttachment,
+ headers,
+ isAnswered,
+ isDeleted,
+ isDraft,
+ isFlagged,
+ isRecent,
+ isUnRead,
+ mailboxId,
+ mediaType,
+ messageId,
+ modSeq,
+ properties,
+ replyTo,
+ sentDate,
+ size,
+ subjects,
+ subType,
+ text,
+ to,
+ uid,
+ userFlags,
+ stringifiedUsers);
}
- }
- private void copyHeaderFields(HeaderCollection headerCollection, ZonedDateTime internalDate) {
- this.headers = headerCollection.getHeaders();
- this.subjects = Subjects.from(headerCollection.getSubjectSet());
- this.from = EMailers.from(headerCollection.getFromAddressSet());
- this.to = EMailers.from(headerCollection.getToAddressSet());
- this.replyTo = EMailers.from(headerCollection.getReplyToAddressSet());
- this.cc = EMailers.from(headerCollection.getCcAddressSet());
- this.bcc = EMailers.from(headerCollection.getBccAddressSet());
- this.sentDate = DateResolutionFormater.DATE_TIME_FOMATTER.format(headerCollection.getSentDate().orElse(internalDate));
- }
-
- private void copyMessageFields(MailboxMessage message, ZoneId zoneId) {
- this.uid = message.getUid().asLong();
- this.mailboxId = message.getMailboxId().serialize();
- this.modSeq = message.getModSeq();
- this.size = message.getFullContentOctets();
- this.date = DateResolutionFormater.DATE_TIME_FOMATTER.format(getSanitizedInternalDate(message, zoneId));
- this.mediaType = message.getMediaType();
- this.subType = message.getSubType();
- this.isAnswered = message.isAnswered();
- this.isDeleted = message.isDeleted();
- this.isDraft = message.isDraft();
- this.isFlagged = message.isFlagged();
- this.isRecent = message.isRecent();
- this.isUnRead = ! message.isSeen();
- this.userFlags = message.createFlags().getUserFlags();
- this.properties = message.getProperties();
- }
-
- private static ZonedDateTime getSanitizedInternalDate(MailboxMessage message, ZoneId zoneId) {
- if (message.getInternalDate() == null) {
- return ZonedDateTime.now();
+ private List<MimePart> setFlattenedAttachments(MimePart parsingResult, IndexAttachments indexAttachments) {
+ if (IndexAttachments.YES.equals(indexAttachments)) {
+ return parsingResult.getAttachmentsStream()
+ .collect(Guavate.toImmutableList());
+ } else {
+ return ImmutableList.of();
+ }
}
- return ZonedDateTime.ofInstant(
- Instant.ofEpochMilli(message.getInternalDate().getTime()),
- zoneId);
- }
-
- private void generateText() {
- this.text = Stream.of(from.serialize(),
- to.serialize(),
- cc.serialize(),
- bcc.serialize(),
- subjects.serialize(),
- bodyText.orElse(null),
- bodyHtml.orElse(null))
- .filter(str -> !Strings.isNullOrEmpty(str))
- .collect(Collectors.joining(" "));
- }
-
- private long uid;
- private String mailboxId;
- private List<String> users;
- private long modSeq;
- private long size;
- private String date;
- private String mediaType;
- private String subType;
- private boolean hasAttachment;
- private boolean isUnRead;
- private boolean isRecent;
- private boolean isFlagged;
- private boolean isDeleted;
- private boolean isDraft;
- private boolean isAnswered;
- private String[] userFlags;
- private Multimap<String, String> headers;
- private EMailers from;
- private EMailers to;
- private EMailers cc;
- private EMailers bcc;
- private EMailers replyTo;
- private Subjects subjects;
- private String sentDate;
- private List<Property> properties;
- private List<MimePart> attachments;
- private Optional<String> bodyText;
- private Optional<String> bodyHtml;
- private String text;
-
-
- public IndexableMessage(long uid, String mailboxId, List<String> users, long modSeq, long size, String date, String mediaType,
- String subType, boolean isUnRead, boolean isRecent, boolean isFlagged, boolean isDeleted, boolean isDraft,
- boolean isAnswered, String[] userFlags, Multimap<String, String> headers, EMailers from, EMailers to,
- EMailers cc, EMailers bcc, EMailers replyTo, Subjects subjects, String sentDate, List<Property> properties,
- List<MimePart> attachments, boolean hasAttachment, Optional<String> bodyText, Optional<String> bodyHtml, String text) {
- this.uid = uid;
- this.mailboxId = mailboxId;
- this.users = users;
- this.modSeq = modSeq;
- this.size = size;
+ }
+
+ public static final SimpleProperty HAS_ATTACHMENT_PROPERTY = new SimpleProperty(PropertyBuilder.JAMES_INTERNALS, PropertyBuilder.HAS_ATTACHMENT, "true");
+
+ public static Builder builder() {
+ return new Builder();
+ }
+
+ private final List<MimePart> attachments;
+ private final EMailers bcc;
+ private final Optional<String> bodyHtml;
+ private final Optional<String> bodyText;
+ private final EMailers cc;
+ private final String date;
+ private final EMailers from;
+ private final boolean hasAttachment;
+ private final Multimap<String, String> headers;
+ private final boolean isAnswered;
+ private final boolean isDeleted;
+ private final boolean isDraft;
+ private final boolean isFlagged;
+ private final boolean isRecent;
+ private final boolean isUnRead;
+ private final String mailboxId;
+ private final String mediaType;
+ private final String messageId;
+ private final long modSeq;
+ private final List<Property> properties;
+ private final EMailers replyTo;
+ private final String sentDate;
+ private final long size;
+ private final Subjects subjects;
+ private final String subType;
+ private final String text;
+ private final EMailers to;
+ private final long uid;
+ private final String[] userFlags;
+ private final List<String> users;
+
+ private IndexableMessage(
+ List<MimePart> attachments,
+ EMailers bcc,
+ Optional<String> bodyHtml,
+ Optional<String> bodyText,
+ EMailers cc,
+ String date,
+ EMailers from,
+ boolean hasAttachment,
+ Multimap<String, String> headers,
+ boolean isAnswered,
+ boolean isDeleted,
+ boolean isDraft,
+ boolean isFlagged,
+ boolean isRecent,
+ boolean isUnRead,
+ String mailboxId,
+ String mediaType,
+ String messageId,
+ long modSeq,
+ List<Property> properties,
+ EMailers replyTo,
+ String sentDate,
+ long size,
+ Subjects subjects,
+ String subType,
+ String text,
+ EMailers to,
+ long uid,
+ String[] userFlags,
+ List<String> users) {
+ this.attachments = attachments;
+ this.bcc = bcc;
+ this.bodyHtml = bodyHtml;
+ this.bodyText = bodyText;
+ this.cc = cc;
this.date = date;
- this.mediaType = mediaType;
- this.subType = subType;
- this.isUnRead = isUnRead;
- this.isRecent = isRecent;
- this.isFlagged = isFlagged;
+ this.from = from;
+ this.hasAttachment = hasAttachment;
+ this.headers = headers;
+ this.isAnswered = isAnswered;
this.isDeleted = isDeleted;
this.isDraft = isDraft;
- this.isAnswered = isAnswered;
- this.userFlags = userFlags;
- this.headers = headers;
- this.from = from;
- this.to = to;
- this.cc = cc;
- this.bcc = bcc;
+ this.isFlagged = isFlagged;
+ this.isRecent = isRecent;
+ this.isUnRead = isUnRead;
+ this.mailboxId = mailboxId;
+ this.mediaType = mediaType;
+ this.messageId = messageId;
+ this.modSeq = modSeq;
+ this.properties = properties;
this.replyTo = replyTo;
- this.subjects = subjects;
this.sentDate = sentDate;
- this.properties = properties;
- this.attachments = attachments;
- this.hasAttachment = hasAttachment;
- this.bodyText = bodyText;
- this.bodyHtml = bodyHtml;
+ this.size = size;
+ this.subjects = subjects;
+ this.subType = subType;
this.text = text;
+ this.to = to;
+ this.uid = uid;
+ this.userFlags = userFlags;
+ this.users = users;
}
- public IndexableMessage() {
- }
-
- @JsonProperty(JsonMessageConstants.UID)
- public Long getUid() {
- return uid;
+ @JsonProperty(JsonMessageConstants.ATTACHMENTS)
+ public List<MimePart> getAttachments() {
+ return attachments;
}
-
- @JsonProperty(JsonMessageConstants.MAILBOX_ID)
- public String getMailboxId() {
- return mailboxId;
+ @JsonProperty(JsonMessageConstants.BCC)
+ public EMailers getBcc() {
+ return bcc;
}
-
- @JsonProperty(JsonMessageConstants.USERS)
- public List<String> getUsers() {
- return users;
+ @JsonProperty(JsonMessageConstants.HTML_BODY)
+ public Optional<String> getBodyHtml() {
+ return bodyHtml;
}
- @JsonProperty(JsonMessageConstants.MODSEQ)
- public long getModSeq() {
- return modSeq;
+ @JsonProperty(JsonMessageConstants.TEXT_BODY)
+ public Optional<String> getBodyText() {
+ return bodyText;
}
- @JsonProperty(JsonMessageConstants.SIZE)
- public long getSize() {
- return size;
+ @JsonProperty(JsonMessageConstants.CC)
+ public EMailers getCc() {
+ return cc;
}
@JsonProperty(JsonMessageConstants.DATE)
@@ -235,54 +337,59 @@ public class IndexableMessage {
return date;
}
- @JsonProperty(JsonMessageConstants.MEDIA_TYPE)
- public String getMediaType() {
- return mediaType;
+ @JsonProperty(JsonMessageConstants.FROM)
+ public EMailers getFrom() {
+ return from;
}
- @JsonProperty(JsonMessageConstants.SUBTYPE)
- public String getSubType() {
- return subType;
+ @JsonProperty(JsonMessageConstants.HAS_ATTACHMENT)
+ public boolean getHasAttachment() {
+ return hasAttachment;
}
- @JsonProperty(JsonMessageConstants.IS_UNREAD)
- public boolean isUnRead() {
- return isUnRead;
+ @JsonProperty(JsonMessageConstants.HEADERS)
+ public Multimap<String, String> getHeaders() {
+ return headers;
}
- @JsonProperty(JsonMessageConstants.IS_RECENT)
- public boolean isRecent() {
- return isRecent;
+ @JsonProperty(JsonMessageConstants.MAILBOX_ID)
+ public String getMailboxId() {
+ return mailboxId;
}
- @JsonProperty(JsonMessageConstants.IS_FLAGGED)
- public boolean isFlagged() {
- return isFlagged;
+ @JsonProperty(JsonMessageConstants.MEDIA_TYPE)
+ public String getMediaType() {
+ return mediaType;
}
- @JsonProperty(JsonMessageConstants.IS_DELETED)
- public boolean isDeleted() {
- return isDeleted;
+ @JsonProperty(JsonMessageConstants.MESSAGE_ID)
+ public String getMessageId() {
+ return messageId;
}
- @JsonProperty(JsonMessageConstants.IS_DRAFT)
- public boolean isDraft() {
- return isDraft;
+ @JsonProperty(JsonMessageConstants.MODSEQ)
+ public long getModSeq() {
+ return modSeq;
}
- @JsonProperty(JsonMessageConstants.IS_ANSWERED)
- public boolean isAnswered() {
- return isAnswered;
+ @JsonProperty(JsonMessageConstants.PROPERTIES)
+ public List<Property> getProperties() {
+ return properties;
}
- @JsonProperty(JsonMessageConstants.USER_FLAGS)
- public String[] getUserFlags() {
- return userFlags;
+ @JsonProperty(JsonMessageConstants.REPLY_TO)
+ public EMailers getReplyTo() {
+ return replyTo;
}
- @JsonProperty(JsonMessageConstants.HEADERS)
- public Multimap<String, String> getHeaders() {
- return headers;
+ @JsonProperty(JsonMessageConstants.SENT_DATE)
+ public String getSentDate() {
+ return sentDate;
+ }
+
+ @JsonProperty(JsonMessageConstants.SIZE)
+ public long getSize() {
+ return size;
}
@JsonProperty(JsonMessageConstants.SUBJECT)
@@ -290,9 +397,14 @@ public class IndexableMessage {
return subjects;
}
- @JsonProperty(JsonMessageConstants.FROM)
- public EMailers getFrom() {
- return from;
+ @JsonProperty(JsonMessageConstants.SUBTYPE)
+ public String getSubType() {
+ return subType;
+ }
+
+ @JsonProperty(JsonMessageConstants.TEXT)
+ public String getText() {
+ return text;
}
@JsonProperty(JsonMessageConstants.TO)
@@ -300,53 +412,48 @@ public class IndexableMessage {
return to;
}
- @JsonProperty(JsonMessageConstants.CC)
- public EMailers getCc() {
- return cc;
- }
-
- @JsonProperty(JsonMessageConstants.BCC)
- public EMailers getBcc() {
- return bcc;
+ @JsonProperty(JsonMessageConstants.UID)
+ public Long getUid() {
+ return uid;
}
- @JsonProperty(JsonMessageConstants.REPLY_TO)
- public EMailers getReplyTo() {
- return replyTo;
+ @JsonProperty(JsonMessageConstants.USER_FLAGS)
+ public String[] getUserFlags() {
+ return userFlags;
}
- @JsonProperty(JsonMessageConstants.SENT_DATE)
- public String getSentDate() {
- return sentDate;
+ @JsonProperty(JsonMessageConstants.USERS)
+ public List<String> getUsers() {
+ return users;
}
- @JsonProperty(JsonMessageConstants.PROPERTIES)
- public List<Property> getProperties() {
- return properties;
+ @JsonProperty(JsonMessageConstants.IS_ANSWERED)
+ public boolean isAnswered() {
+ return isAnswered;
}
- @JsonProperty(JsonMessageConstants.ATTACHMENTS)
- public List<MimePart> getAttachments() {
- return attachments;
+ @JsonProperty(JsonMessageConstants.IS_DELETED)
+ public boolean isDeleted() {
+ return isDeleted;
}
- @JsonProperty(JsonMessageConstants.TEXT_BODY)
- public Optional<String> getBodyText() {
- return bodyText;
+ @JsonProperty(JsonMessageConstants.IS_DRAFT)
+ public boolean isDraft() {
+ return isDraft;
}
- @JsonProperty(JsonMessageConstants.HTML_BODY)
- public Optional<String> getBodyHtml() {
- return bodyHtml;
+ @JsonProperty(JsonMessageConstants.IS_FLAGGED)
+ public boolean isFlagged() {
+ return isFlagged;
}
- @JsonProperty(JsonMessageConstants.HAS_ATTACHMENT)
- public boolean getHasAttachment() {
- return hasAttachment;
+ @JsonProperty(JsonMessageConstants.IS_RECENT)
+ public boolean isRecent() {
+ return isRecent;
}
- @JsonProperty(JsonMessageConstants.TEXT)
- public String getText() {
- return text;
+ @JsonProperty(JsonMessageConstants.IS_UNREAD)
+ public boolean isUnRead() {
+ return isUnRead;
}
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/83e9e0c4/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessageWithMessageId.java
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessageWithMessageId.java b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessageWithMessageId.java
deleted file mode 100644
index 2578580..0000000
--- a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessageWithMessageId.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one *
- * or more contributor license agreements. See the NOTICE file *
- * distributed with this work for additional information *
- * regarding copyright ownership. The ASF licenses this file *
- * to you under the Apache License, Version 2.0 (the *
- * "License"); you may not use this file except in compliance *
- * with the License. You may obtain a copy of the License at *
- * *
- * http://www.apache.org/licenses/LICENSE-2.0 *
- * *
- * Unless required by applicable law or agreed to in writing, *
- * software distributed under the License is distributed on an *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
- * KIND, either express or implied. See the License for the *
- * specific language governing permissions and limitations *
- * under the License. *
- ****************************************************************/
-
-package org.apache.james.mailbox.elasticsearch.json;
-
-import java.time.ZoneId;
-import java.util.List;
-import java.util.Optional;
-
-import org.apache.james.mailbox.MailboxSession;
-import org.apache.james.mailbox.elasticsearch.IndexAttachments;
-import org.apache.james.mailbox.extractor.TextExtractor;
-import org.apache.james.mailbox.store.mail.model.MailboxMessage;
-import org.apache.james.mailbox.store.mail.model.Property;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.google.common.collect.Multimap;
-
-public class IndexableMessageWithMessageId extends IndexableMessage {
-
- public static IndexableMessage from(MailboxMessage message, List<MailboxSession.User> users, TextExtractor textExtractor,
- ZoneId zoneId, IndexAttachments indexAttachments) {
- IndexableMessage indexableMessage = IndexableMessage.from(message, users, textExtractor, zoneId, indexAttachments);
- return new IndexableMessageWithMessageId(indexableMessage.getUid(), indexableMessage.getMailboxId(), indexableMessage.getUsers(),
- indexableMessage.getModSeq(), indexableMessage.getSize(), indexableMessage.getDate(), indexableMessage.getMediaType(),
- indexableMessage.getSubType(), indexableMessage.isUnRead(), indexableMessage.isRecent(), indexableMessage.isFlagged(),
- indexableMessage.isDeleted(), indexableMessage.isDraft(), indexableMessage.isAnswered(), indexableMessage.getUserFlags(),
- indexableMessage.getHeaders(), indexableMessage.getFrom(), indexableMessage.getTo(), indexableMessage.getCc(), indexableMessage.getBcc(),
- indexableMessage.getReplyTo(), indexableMessage.getSubjects(), indexableMessage.getSentDate(), indexableMessage.getProperties(),
- indexableMessage.getAttachments(), indexableMessage.getHasAttachment(), indexableMessage.getBodyText(), indexableMessage.getBodyHtml(), indexableMessage.getText(),
- message.getMessageId().serialize());
- }
-
- private String messageId;
-
- public IndexableMessageWithMessageId(long uid, String mailboxId, List<String> users, long modSeq, long size, String date,
- String mediaType, String subType, boolean isUnRead, boolean isRecent, boolean isFlagged,
- boolean isDeleted, boolean isDraft, boolean isAnswered, String[] userFlags, Multimap<String, String> headers,
- EMailers from, EMailers to, EMailers cc, EMailers bcc, EMailers replyTo, Subjects subjects,
- String sentDate, List<Property> properties, List<MimePart> attachments, boolean hasAttachments, Optional<String> bodyText,
- Optional<String> bodyHtml, String text, String messageId) {
- super(uid, mailboxId, users, modSeq, size, date, mediaType, subType, isUnRead, isRecent, isFlagged, isDeleted,
- isDraft, isAnswered, userFlags, headers, from, to, cc, bcc, replyTo, subjects, sentDate, properties, attachments, hasAttachments,
- bodyText, bodyHtml, text);
- this.messageId = messageId;
- }
-
- public IndexableMessageWithMessageId(String messageId) {
- this.messageId = messageId;
- }
-
- @JsonProperty(JsonMessageConstants.MESSAGE_ID)
- public String getMessageId() {
- return messageId;
- }
-}
http://git-wip-us.apache.org/repos/asf/james-project/blob/83e9e0c4/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 6b699b9..d4c896e 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
@@ -73,9 +73,21 @@ public class MessageToElasticSearchJson {
Preconditions.checkNotNull(message);
switch (indexMessageId) {
case Required:
- return mapper.writeValueAsString(IndexableMessageWithMessageId.from(message, users, textExtractor, zoneId, indexAttachments));
+ return mapper.writeValueAsString(IndexableMessage.builder()
+ .message(message)
+ .users(users)
+ .extractor(textExtractor)
+ .zoneId(zoneId)
+ .indexAttachments(indexAttachments)
+ .build());
case Optional:
- return mapper.writeValueAsString(IndexableMessage.from(message, users, textExtractor, zoneId, indexAttachments));
+ return mapper.writeValueAsString(IndexableMessage.builder()
+ .message(message)
+ .users(users)
+ .extractor(textExtractor)
+ .zoneId(zoneId)
+ .indexAttachments(indexAttachments)
+ .build());
default:
throw new NotImplementedException();
}
@@ -85,9 +97,21 @@ public class MessageToElasticSearchJson {
Preconditions.checkNotNull(message);
switch (indexMessageId) {
case Required:
- return mapper.writeValueAsString(IndexableMessageWithMessageId.from(message, users, textExtractor, zoneId, IndexAttachments.NO));
+ return mapper.writeValueAsString(IndexableMessage.builder()
+ .message(message)
+ .users(users)
+ .extractor(textExtractor)
+ .zoneId(zoneId)
+ .indexAttachments(IndexAttachments.NO)
+ .build());
case Optional:
- return mapper.writeValueAsString(IndexableMessage.from(message, users, textExtractor, zoneId, IndexAttachments.NO));
+ return mapper.writeValueAsString(IndexableMessage.builder()
+ .message(message)
+ .users(users)
+ .extractor(textExtractor)
+ .zoneId(zoneId)
+ .indexAttachments(IndexAttachments.NO)
+ .build());
default:
throw new NotImplementedException();
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/83e9e0c4/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessageTest.java
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessageTest.java b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessageTest.java
index a66f326..56aedb3 100644
--- a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessageTest.java
+++ b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessageTest.java
@@ -35,6 +35,7 @@ import org.apache.james.mailbox.MessageUid;
import org.apache.james.mailbox.elasticsearch.IndexAttachments;
import org.apache.james.mailbox.extractor.ParsedContent;
import org.apache.james.mailbox.extractor.TextExtractor;
+import org.apache.james.mailbox.inmemory.InMemoryMessageId;
import org.apache.james.mailbox.mock.MockMailboxSession;
import org.apache.james.mailbox.model.TestId;
import org.apache.james.mailbox.store.extractor.DefaultTextExtractor;
@@ -57,6 +58,8 @@ public class IndexableMessageTest {
TestId mailboxId = TestId.of(1);
when(mailboxMessage.getMailboxId())
.thenReturn(mailboxId);
+ when(mailboxMessage.getMessageId())
+ .thenReturn(InMemoryMessageId.of(42));
when(mailboxMessage.getFullContent())
.thenReturn(new ByteArrayInputStream("".getBytes()));
when(mailboxMessage.createFlags())
@@ -64,8 +67,13 @@ public class IndexableMessageTest {
when(mailboxMessage.getUid())
.thenReturn(MESSAGE_UID);
- IndexableMessage indexableMessage = IndexableMessage.from(mailboxMessage, ImmutableList.of(new MockMailboxSession("username").getUser()),
- new DefaultTextExtractor(), ZoneId.of("Europe/Paris"), IndexAttachments.NO);
+ IndexableMessage indexableMessage = IndexableMessage.builder()
+ .message(mailboxMessage)
+ .users(ImmutableList.of(new MockMailboxSession("username").getUser()))
+ .extractor(new DefaultTextExtractor())
+ .zoneId(ZoneId.of("Europe/Paris"))
+ .indexAttachments(IndexAttachments.NO)
+ .build();
assertThat(indexableMessage.getText()).isEmpty();
}
@@ -76,6 +84,8 @@ public class IndexableMessageTest {
TestId mailboxId = TestId.of(1);
when(mailboxMessage.getMailboxId())
.thenReturn(mailboxId);
+ when(mailboxMessage.getMessageId())
+ .thenReturn(InMemoryMessageId.of(42));
when(mailboxMessage.getFullContent())
.thenReturn(new ByteArrayInputStream("From: First user <us...@james.org>\nFrom: Second user <us...@james.org>".getBytes()));
when(mailboxMessage.createFlags())
@@ -83,8 +93,13 @@ public class IndexableMessageTest {
when(mailboxMessage.getUid())
.thenReturn(MESSAGE_UID);
- IndexableMessage indexableMessage = IndexableMessage.from(mailboxMessage, ImmutableList.of(new MockMailboxSession("username").getUser()),
- new DefaultTextExtractor(), ZoneId.of("Europe/Paris"), IndexAttachments.NO);
+ IndexableMessage indexableMessage = IndexableMessage.builder()
+ .message(mailboxMessage)
+ .users(ImmutableList.of(new MockMailboxSession("username").getUser()))
+ .extractor(new DefaultTextExtractor())
+ .zoneId(ZoneId.of("Europe/Paris"))
+ .indexAttachments(IndexAttachments.NO)
+ .build();
assertThat(indexableMessage.getText()).isEqualTo("Second user user2@james.org First user user@james.org");
}
@@ -95,6 +110,8 @@ public class IndexableMessageTest {
TestId mailboxId = TestId.of(1);
when(mailboxMessage.getMailboxId())
.thenReturn(mailboxId);
+ when(mailboxMessage.getMessageId())
+ .thenReturn(InMemoryMessageId.of(42));
when(mailboxMessage.getFullContent())
.thenReturn(new ByteArrayInputStream("To: First to <us...@james.org>\nTo: Second to <us...@james.org>".getBytes()));
when(mailboxMessage.createFlags())
@@ -102,8 +119,13 @@ public class IndexableMessageTest {
when(mailboxMessage.getUid())
.thenReturn(MESSAGE_UID);
- IndexableMessage indexableMessage = IndexableMessage.from(mailboxMessage, ImmutableList.of(new MockMailboxSession("username").getUser()),
- new DefaultTextExtractor(), ZoneId.of("Europe/Paris"), IndexAttachments.NO);
+ IndexableMessage indexableMessage = IndexableMessage.builder()
+ .message(mailboxMessage)
+ .users(ImmutableList.of(new MockMailboxSession("username").getUser()))
+ .extractor(new DefaultTextExtractor())
+ .zoneId(ZoneId.of("Europe/Paris"))
+ .indexAttachments(IndexAttachments.NO)
+ .build();
assertThat(indexableMessage.getText()).isEqualTo("First to user@james.org Second to user2@james.org");
}
@@ -114,6 +136,8 @@ public class IndexableMessageTest {
TestId mailboxId = TestId.of(1);
when(mailboxMessage.getMailboxId())
.thenReturn(mailboxId);
+ when(mailboxMessage.getMessageId())
+ .thenReturn(InMemoryMessageId.of(42));
when(mailboxMessage.getFullContent())
.thenReturn(new ByteArrayInputStream("Cc: First cc <us...@james.org>\nCc: Second cc <us...@james.org>".getBytes()));
when(mailboxMessage.createFlags())
@@ -121,8 +145,13 @@ public class IndexableMessageTest {
when(mailboxMessage.getUid())
.thenReturn(MESSAGE_UID);
- IndexableMessage indexableMessage = IndexableMessage.from(mailboxMessage, ImmutableList.of(new MockMailboxSession("username").getUser()),
- new DefaultTextExtractor(), ZoneId.of("Europe/Paris"), IndexAttachments.NO);
+ IndexableMessage indexableMessage = IndexableMessage.builder()
+ .message(mailboxMessage)
+ .users(ImmutableList.of(new MockMailboxSession("username").getUser()))
+ .extractor(new DefaultTextExtractor())
+ .zoneId(ZoneId.of("Europe/Paris"))
+ .indexAttachments(IndexAttachments.NO)
+ .build();
assertThat(indexableMessage.getText()).isEqualTo("First cc user@james.org Second cc user2@james.org");
}
@@ -133,6 +162,8 @@ public class IndexableMessageTest {
TestId mailboxId = TestId.of(1);
when(mailboxMessage.getMailboxId())
.thenReturn(mailboxId);
+ when(mailboxMessage.getMessageId())
+ .thenReturn(InMemoryMessageId.of(42));
when(mailboxMessage.getUid())
.thenReturn(MESSAGE_UID);
when(mailboxMessage.getFullContent())
@@ -140,8 +171,13 @@ public class IndexableMessageTest {
when(mailboxMessage.createFlags())
.thenReturn(new Flags());
- IndexableMessage indexableMessage = IndexableMessage.from(mailboxMessage, ImmutableList.of(new MockMailboxSession("username").getUser()),
- new DefaultTextExtractor(), ZoneId.of("Europe/Paris"), IndexAttachments.NO);
+ IndexableMessage indexableMessage = IndexableMessage.builder()
+ .message(mailboxMessage)
+ .users(ImmutableList.of(new MockMailboxSession("username").getUser()))
+ .extractor(new DefaultTextExtractor())
+ .zoneId(ZoneId.of("Europe/Paris"))
+ .indexAttachments(IndexAttachments.NO)
+ .build();
assertThat(indexableMessage.getText()).isEqualTo("Second bcc user2@james.org First bcc user@james.org");
}
@@ -152,6 +188,8 @@ public class IndexableMessageTest {
TestId mailboxId = TestId.of(1);
when(mailboxMessage.getMailboxId())
.thenReturn(mailboxId);
+ when(mailboxMessage.getMessageId())
+ .thenReturn(InMemoryMessageId.of(42));
when(mailboxMessage.getFullContent())
.thenReturn(new ByteArrayInputStream("Subject: subject1\nSubject: subject2".getBytes()));
when(mailboxMessage.createFlags())
@@ -159,8 +197,13 @@ public class IndexableMessageTest {
when(mailboxMessage.getUid())
.thenReturn(MESSAGE_UID);
- IndexableMessage indexableMessage = IndexableMessage.from(mailboxMessage, ImmutableList.of(new MockMailboxSession("username").getUser()),
- new DefaultTextExtractor(), ZoneId.of("Europe/Paris"), IndexAttachments.NO);
+ IndexableMessage indexableMessage = IndexableMessage.builder()
+ .message(mailboxMessage)
+ .users(ImmutableList.of(new MockMailboxSession("username").getUser()))
+ .extractor(new DefaultTextExtractor())
+ .zoneId(ZoneId.of("Europe/Paris"))
+ .indexAttachments(IndexAttachments.NO)
+ .build();
assertThat(indexableMessage.getText()).isEqualTo("subject1 subject2");
}
@@ -171,6 +214,8 @@ public class IndexableMessageTest {
TestId mailboxId = TestId.of(1);
when(mailboxMessage.getMailboxId())
.thenReturn(mailboxId);
+ when(mailboxMessage.getMessageId())
+ .thenReturn(InMemoryMessageId.of(42));
when(mailboxMessage.getFullContent())
.thenReturn(new ByteArrayInputStream("\nMy body".getBytes()));
when(mailboxMessage.createFlags())
@@ -178,8 +223,13 @@ public class IndexableMessageTest {
when(mailboxMessage.getUid())
.thenReturn(MESSAGE_UID);
- IndexableMessage indexableMessage = IndexableMessage.from(mailboxMessage, ImmutableList.of(new MockMailboxSession("username").getUser()),
- new DefaultTextExtractor(), ZoneId.of("Europe/Paris"), IndexAttachments.NO);
+ IndexableMessage indexableMessage = IndexableMessage.builder()
+ .message(mailboxMessage)
+ .users(ImmutableList.of(new MockMailboxSession("username").getUser()))
+ .extractor(new DefaultTextExtractor())
+ .zoneId(ZoneId.of("Europe/Paris"))
+ .indexAttachments(IndexAttachments.NO)
+ .build();
assertThat(indexableMessage.getText()).isEqualTo("My body");
}
@@ -190,6 +240,8 @@ public class IndexableMessageTest {
TestId mailboxId = TestId.of(1);
when(mailboxMessage.getMailboxId())
.thenReturn(mailboxId);
+ when(mailboxMessage.getMessageId())
+ .thenReturn(InMemoryMessageId.of(42));
when(mailboxMessage.getFullContent())
.thenReturn(new ByteArrayInputStream(IOUtils.toByteArray(ClassLoader.getSystemResourceAsStream("eml/mailWithHeaders.eml"))));
when(mailboxMessage.createFlags())
@@ -197,8 +249,13 @@ public class IndexableMessageTest {
when(mailboxMessage.getUid())
.thenReturn(MESSAGE_UID);
- IndexableMessage indexableMessage = IndexableMessage.from(mailboxMessage, ImmutableList.of(new MockMailboxSession("username").getUser()),
- new DefaultTextExtractor(), ZoneId.of("Europe/Paris"), IndexAttachments.NO);
+ IndexableMessage indexableMessage = IndexableMessage.builder()
+ .message(mailboxMessage)
+ .users(ImmutableList.of(new MockMailboxSession("username").getUser()))
+ .extractor(new DefaultTextExtractor())
+ .zoneId(ZoneId.of("Europe/Paris"))
+ .indexAttachments(IndexAttachments.NO)
+ .build();
assertThat(indexableMessage.getText()).isEqualTo("Ad Min admin@opush.test " +
"a@test a@test B b@test " +
@@ -218,6 +275,8 @@ public class IndexableMessageTest {
TestId mailboxId = TestId.of(1);
when(mailboxMessage.getMailboxId())
.thenReturn(mailboxId);
+ when(mailboxMessage.getMessageId())
+ .thenReturn(InMemoryMessageId.of(42));
when(mailboxMessage.getFullContent())
.thenReturn(new ByteArrayInputStream(IOUtils.toByteArray(ClassLoader.getSystemResourceAsStream("eml/mailWithHeaders.eml"))));
when(mailboxMessage.createFlags())
@@ -227,8 +286,13 @@ public class IndexableMessageTest {
when(mailboxMessage.getProperties()).thenReturn(ImmutableList.of(IndexableMessage.HAS_ATTACHMENT_PROPERTY));
// When
- IndexableMessage indexableMessage = IndexableMessage.from(mailboxMessage, ImmutableList.of(new MockMailboxSession("username").getUser()),
- new DefaultTextExtractor(), ZoneId.of("Europe/Paris"), IndexAttachments.YES);
+ IndexableMessage indexableMessage = IndexableMessage.builder()
+ .message(mailboxMessage)
+ .users(ImmutableList.of(new MockMailboxSession("username").getUser()))
+ .extractor(new DefaultTextExtractor())
+ .zoneId(ZoneId.of("Europe/Paris"))
+ .indexAttachments(IndexAttachments.YES)
+ .build();
// Then
assertThat(indexableMessage.getHasAttachment()).isTrue();
@@ -241,6 +305,8 @@ public class IndexableMessageTest {
TestId mailboxId = TestId.of(1);
when(mailboxMessage.getMailboxId())
.thenReturn(mailboxId);
+ when(mailboxMessage.getMessageId())
+ .thenReturn(InMemoryMessageId.of(42));
when(mailboxMessage.getFullContent())
.thenReturn(new ByteArrayInputStream(IOUtils.toByteArray(ClassLoader.getSystemResourceAsStream("eml/mailWithHeaders.eml"))));
when(mailboxMessage.createFlags())
@@ -251,8 +317,13 @@ public class IndexableMessageTest {
.thenReturn(ImmutableList.of(new SimpleProperty(PropertyBuilder.JAMES_INTERNALS, PropertyBuilder.HAS_ATTACHMENT, "false")));
// When
- IndexableMessage indexableMessage = IndexableMessage.from(mailboxMessage, ImmutableList.of(new MockMailboxSession("username").getUser()),
- new DefaultTextExtractor(), ZoneId.of("Europe/Paris"), IndexAttachments.YES);
+ IndexableMessage indexableMessage = IndexableMessage.builder()
+ .message(mailboxMessage)
+ .users(ImmutableList.of(new MockMailboxSession("username").getUser()))
+ .extractor(new DefaultTextExtractor())
+ .zoneId(ZoneId.of("Europe/Paris"))
+ .indexAttachments(IndexAttachments.NO)
+ .build();
// Then
assertThat(indexableMessage.getHasAttachment()).isFalse();
@@ -265,6 +336,8 @@ public class IndexableMessageTest {
TestId mailboxId = TestId.of(1);
when(mailboxMessage.getMailboxId())
.thenReturn(mailboxId);
+ when(mailboxMessage.getMessageId())
+ .thenReturn(InMemoryMessageId.of(42));
when(mailboxMessage.getFullContent())
.thenReturn(new ByteArrayInputStream(IOUtils.toByteArray(ClassLoader.getSystemResourceAsStream("eml/mailWithHeaders.eml"))));
when(mailboxMessage.createFlags())
@@ -275,8 +348,13 @@ public class IndexableMessageTest {
.thenReturn(ImmutableList.of());
// When
- IndexableMessage indexableMessage = IndexableMessage.from(mailboxMessage, ImmutableList.of(new MockMailboxSession("username").getUser()),
- new DefaultTextExtractor(), ZoneId.of("Europe/Paris"), IndexAttachments.YES);
+ IndexableMessage indexableMessage = IndexableMessage.builder()
+ .message(mailboxMessage)
+ .users(ImmutableList.of(new MockMailboxSession("username").getUser()))
+ .extractor(new DefaultTextExtractor())
+ .zoneId(ZoneId.of("Europe/Paris"))
+ .indexAttachments(IndexAttachments.NO)
+ .build();
// Then
assertThat(indexableMessage.getHasAttachment()).isFalse();
@@ -289,6 +367,8 @@ public class IndexableMessageTest {
TestId mailboxId = TestId.of(1);
when(mailboxMessage.getMailboxId())
.thenReturn(mailboxId);
+ when(mailboxMessage.getMessageId())
+ .thenReturn(InMemoryMessageId.of(42));
when(mailboxMessage.getFullContent())
.thenReturn(new ByteArrayInputStream(IOUtils.toByteArray(ClassLoader.getSystemResourceAsStream("eml/mailWithHeaders.eml"))));
when(mailboxMessage.createFlags())
@@ -297,8 +377,13 @@ public class IndexableMessageTest {
.thenReturn(MESSAGE_UID);
// When
- IndexableMessage indexableMessage = IndexableMessage.from(mailboxMessage, ImmutableList.of(new MockMailboxSession("username").getUser()),
- new DefaultTextExtractor(), ZoneId.of("Europe/Paris"), IndexAttachments.NO);
+ IndexableMessage indexableMessage = IndexableMessage.builder()
+ .message(mailboxMessage)
+ .users(ImmutableList.of(new MockMailboxSession("username").getUser()))
+ .extractor(new DefaultTextExtractor())
+ .zoneId(ZoneId.of("Europe/Paris"))
+ .indexAttachments(IndexAttachments.NO)
+ .build();
// Then
assertThat(indexableMessage.getAttachments()).isEmpty();
@@ -311,6 +396,8 @@ public class IndexableMessageTest {
TestId mailboxId = TestId.of(1);
when(mailboxMessage.getMailboxId())
.thenReturn(mailboxId);
+ when(mailboxMessage.getMessageId())
+ .thenReturn(InMemoryMessageId.of(42));
when(mailboxMessage.getFullContent())
.thenReturn(new ByteArrayInputStream(IOUtils.toByteArray(ClassLoader.getSystemResourceAsStream("eml/emailWith3Attachments.eml"))));
when(mailboxMessage.createFlags())
@@ -319,8 +406,13 @@ public class IndexableMessageTest {
.thenReturn(MESSAGE_UID);
// When
- IndexableMessage indexableMessage = IndexableMessage.from(mailboxMessage, ImmutableList.of(new MockMailboxSession("username").getUser()),
- new DefaultTextExtractor(), ZoneId.of("Europe/Paris"), IndexAttachments.YES);
+ IndexableMessage indexableMessage = IndexableMessage.builder()
+ .message(mailboxMessage)
+ .users(ImmutableList.of(new MockMailboxSession("username").getUser()))
+ .extractor(new DefaultTextExtractor())
+ .zoneId(ZoneId.of("Europe/Paris"))
+ .indexAttachments(IndexAttachments.YES)
+ .build();
// Then
assertThat(indexableMessage.getAttachments()).isNotEmpty();
@@ -333,6 +425,8 @@ public class IndexableMessageTest {
TestId mailboxId = TestId.of(1);
when(mailboxMessage.getMailboxId())
.thenReturn(mailboxId);
+ when(mailboxMessage.getMessageId())
+ .thenReturn(InMemoryMessageId.of(42));
when(mailboxMessage.getFullContent())
.thenReturn(new ByteArrayInputStream(IOUtils.toByteArray(ClassLoader.getSystemResourceAsStream("eml/emailWith3Attachments.eml"))));
when(mailboxMessage.createFlags())
@@ -347,8 +441,13 @@ public class IndexableMessageTest {
.thenReturn(new ParsedContent("third attachment content", ImmutableMap.of()));
// When
- IndexableMessage indexableMessage = IndexableMessage.from(mailboxMessage, ImmutableList.of(new MockMailboxSession("username").getUser()),
- textExtractor, ZoneId.of("Europe/Paris"), IndexAttachments.YES);
+ IndexableMessage indexableMessage = IndexableMessage.builder()
+ .message(mailboxMessage)
+ .users(ImmutableList.of(new MockMailboxSession("username").getUser()))
+ .extractor(textExtractor)
+ .zoneId(ZoneId.of("Europe/Paris"))
+ .indexAttachments(IndexAttachments.YES)
+ .build();
// Then
assertThat(indexableMessage.getText()).contains("first attachment content");
@@ -362,6 +461,8 @@ public class IndexableMessageTest {
TestId mailboxId = TestId.of(1);
when(mailboxMessage.getMailboxId())
.thenReturn(mailboxId);
+ when(mailboxMessage.getMessageId())
+ .thenReturn(InMemoryMessageId.of(42));
when(mailboxMessage.getFullContent())
.thenReturn(new ByteArrayInputStream(IOUtils.toByteArray(ClassLoader.getSystemResourceAsStream("eml/bodyMakeTikaToFail.eml"))));
when(mailboxMessage.createFlags())
@@ -370,8 +471,13 @@ public class IndexableMessageTest {
.thenReturn(MESSAGE_UID);
// When
- IndexableMessage indexableMessage = IndexableMessage.from(mailboxMessage, ImmutableList.of(new MockMailboxSession("username").getUser()),
- new TikaTextExtractor(), ZoneId.of("Europe/Paris"), IndexAttachments.YES);
+ IndexableMessage indexableMessage = IndexableMessage.builder()
+ .message(mailboxMessage)
+ .users(ImmutableList.of(new MockMailboxSession("username").getUser()))
+ .extractor(new TikaTextExtractor())
+ .zoneId(ZoneId.of("Europe/Paris"))
+ .indexAttachments(IndexAttachments.YES)
+ .build();
// Then
assertThat(indexableMessage.getText()).contains("subject should be parsed");
http://git-wip-us.apache.org/repos/asf/james-project/blob/83e9e0c4/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/MessageToElasticSearchJsonTest.java
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/MessageToElasticSearchJsonTest.java b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/MessageToElasticSearchJsonTest.java
index 7efb14a..f508766 100644
--- a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/MessageToElasticSearchJsonTest.java
+++ b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/MessageToElasticSearchJsonTest.java
@@ -95,7 +95,7 @@ public class MessageToElasticSearchJsonTest {
ImmutableList<User> users = ImmutableList.of();
assertThatThrownBy(() -> messageToElasticSearchJson.convertToJson(spamMail, users))
- .isInstanceOf(IllegalArgumentException.class);
+ .isInstanceOf(IllegalStateException.class);
}
@Test
@@ -372,7 +372,7 @@ public class MessageToElasticSearchJsonTest {
MessageToElasticSearchJson messageToElasticSearchJson = new MessageToElasticSearchJson(
new DefaultTextExtractor(),
ZoneId.of("Europe/Paris"),
- IndexAttachments.YES,
+ IndexAttachments.NO,
MessageSearchIndex.IndexMessageId.Required);
String convertToJsonWithoutAttachment = messageToElasticSearchJson.convertToJsonWithoutAttachment(message, ImmutableList.of(new MockMailboxSession("username").getUser()));
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[06/13] james-project git commit: JAMES-1934 Adding test
demonstrating HasAttachment criterion do not return inlined images
Posted by bt...@apache.org.
JAMES-1934 Adding test demonstrating HasAttachment criterion do not return inlined images
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/7d7665ab
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/7d7665ab
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/7d7665ab
Branch: refs/heads/master
Commit: 7d7665ab0b14b226f3c2a308345765ce25fa74b8
Parents: 810c764
Author: Benoit Tellier <bt...@linagora.com>
Authored: Wed Feb 8 17:36:02 2017 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Wed Feb 15 06:59:45 2017 +0700
----------------------------------------------------------------------
.../store/search/AbstractMessageSearchIndexTest.java | 14 ++++++++++----
1 file changed, 10 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/7d7665ab/mailbox/store/src/test/java/org/apache/james/mailbox/store/search/AbstractMessageSearchIndexTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/search/AbstractMessageSearchIndexTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/search/AbstractMessageSearchIndexTest.java
index f64f88d..4e1d4fc 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/search/AbstractMessageSearchIndexTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/search/AbstractMessageSearchIndexTest.java
@@ -68,6 +68,7 @@ public abstract class AbstractMessageSearchIndexTest {
private ComposedMessageId m8;
private ComposedMessageId m9;
private ComposedMessageId mailWithAttachment;
+ private ComposedMessageId mailWithInlinedAttachment;
private ComposedMessageId mOther;
@Before
@@ -155,8 +156,6 @@ public abstract class AbstractMessageSearchIndexTest {
session,
true,
new Flags(Flags.Flag.SEEN));
- // sentDate: Tue, 2 Jun 2015 12:00:55 +0200
- // Internal date : 2014/09/02 00:00:00.000
m9 = inboxMessageManager.appendMessage(
ClassLoader.getSystemResourceAsStream("eml/frnog.eml"),
new Date(1409608800000L),
@@ -171,6 +170,13 @@ public abstract class AbstractMessageSearchIndexTest {
true,
new Flags("Hello you"));
+ mailWithInlinedAttachment = myFolderMessageManager.appendMessage(
+ ClassLoader.getSystemResourceAsStream("eml/oneInlinedAttachment.eml"),
+ new Date(1409608900000L),
+ session,
+ true,
+ new Flags("Hello you"));
+
await();
}
@@ -245,7 +251,7 @@ public abstract class AbstractMessageSearchIndexTest {
SearchQuery searchQuery = new SearchQuery();
searchQuery.andCriteria(SearchQuery.hasNoAttachment());
assertThat(messageSearchIndex.search(session, mailbox2, searchQuery))
- .containsOnly(mOther.getUid());
+ .containsOnly(mOther.getUid(), mailWithInlinedAttachment.getUid());
}
@Test
@@ -935,6 +941,6 @@ public abstract class AbstractMessageSearchIndexTest {
List<MessageId> actual = messageSearchIndex.search(session, MultimailboxesSearchQuery.from(searchQuery).build(), LIMIT);
assertThat(actual).containsOnly(m1.getMessageId(), m2.getMessageId(), m3.getMessageId(), m4.getMessageId(), m5.getMessageId(),
- m6.getMessageId(), m7.getMessageId(), m8.getMessageId(), m9.getMessageId(), mOther.getMessageId(), mailWithAttachment.getMessageId());
+ m6.getMessageId(), m7.getMessageId(), m8.getMessageId(), m9.getMessageId(), mOther.getMessageId(), mailWithAttachment.getMessageId(), mailWithInlinedAttachment.getMessageId());
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[04/13] james-project git commit: JAMES-1934 add hasAttachment
criterion
Posted by bt...@apache.org.
JAMES-1934 add hasAttachment criterion
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/3705c186
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/3705c186
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/3705c186
Branch: refs/heads/master
Commit: 3705c186061dd77a7387cd2ccef45dcaba2bd66d
Parents: de54a6e
Author: Luc DUZAN <ld...@linagora.com>
Authored: Thu Feb 9 12:54:34 2017 +0100
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Wed Feb 15 06:59:45 2017 +0700
----------------------------------------------------------------------
.../apache/james/mailbox/model/SearchQuery.java | 53 ++++++++++++++++++++
.../store/mail/model/impl/PropertyBuilder.java | 13 +++++
.../mailbox/store/search/MessageSearches.java | 13 +++++
.../search/AbstractMessageSearchIndexTest.java | 27 +++++++++-
4 files changed, 105 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/3705c186/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java b/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java
index 914a7b6..a5eeca6 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java
@@ -32,6 +32,7 @@ import javax.mail.Flags;
import javax.mail.Flags.Flag;
import org.apache.james.mailbox.MessageUid;
+import org.apache.james.mailbox.model.SearchQuery.Sort;
import com.google.common.base.MoreObjects;
import com.google.common.base.Objects;
@@ -594,6 +595,14 @@ public class SearchQuery implements Serializable {
return result;
}
+ public static Criterion hasAttachment() {
+ return new AttachmentCriterion(BooleanOperator.set());
+ }
+
+ public static Criterion hasNoAttachment() {
+ return new AttachmentCriterion(BooleanOperator.unset());
+ }
+
/**
* Creates a filter on the given flag selecting messages where the given
* flag is selected.
@@ -1308,6 +1317,50 @@ public class SearchQuery implements Serializable {
}
}
+ /***
+ * Filter on attachment presence
+ */
+ public static class AttachmentCriterion extends Criterion {
+ private final BooleanOperator operator;
+
+ private AttachmentCriterion(BooleanOperator operator) {
+ this.operator = operator;
+ }
+
+ /**
+ * Gets the test to be preformed.
+ *
+ * @return the <code>BooleanOperator</code>, not null
+ */
+ public BooleanOperator getOperator() {
+ return operator;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hashCode(operator);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj instanceof AttachmentCriterion) {
+ AttachmentCriterion that = (AttachmentCriterion) obj;
+
+ return Objects.equal(this.operator, that.operator);
+ }
+
+ return false;
+ }
+
+ @Override
+ public String toString() {
+ return MoreObjects.toStringHelper(this)
+ .add("operator", operator)
+ .toString();
+ }
+ }
+
+
/**
* Filters on a standard flag.
*/
http://git-wip-us.apache.org/repos/asf/james-project/blob/3705c186/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/PropertyBuilder.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/PropertyBuilder.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/PropertyBuilder.java
index c42aa0c..152f874 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/PropertyBuilder.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/PropertyBuilder.java
@@ -49,6 +49,8 @@ import java.util.TreeMap;
import org.apache.james.mailbox.store.mail.model.Property;
+import com.google.common.base.Predicate;
+
/**
* Builds properties
*/
@@ -58,6 +60,17 @@ public class PropertyBuilder {
public static final String JAMES_INTERNALS = "JAMES_INTERNALS";
public static final String HAS_ATTACHMENT = "HAS_ATTACHMENT";
+ public static Predicate<Property> isHasAttachmentProperty() {
+ return new Predicate<Property>() {
+ @Override
+ public boolean apply(Property input) {
+ return input.getNamespace().equals(PropertyBuilder.JAMES_INTERNALS)
+ && input.getLocalName().equals(PropertyBuilder.HAS_ATTACHMENT)
+ && input.getValue().equals("true");
+ }
+ };
+ }
+
private Long textualLineCount;
private final List<SimpleProperty> properties;
http://git-wip-us.apache.org/repos/asf/james-project/blob/3705c186/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 6fe58b5..6a440b2 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
@@ -47,6 +47,8 @@ import org.apache.james.mailbox.model.SearchQuery.DateResolution;
import org.apache.james.mailbox.model.SearchQuery.UidRange;
import org.apache.james.mailbox.store.ResultUtils;
import org.apache.james.mailbox.store.mail.model.MailboxMessage;
+import org.apache.james.mailbox.store.mail.model.Property;
+import org.apache.james.mailbox.store.mail.model.impl.PropertyBuilder;
import org.apache.james.mailbox.store.search.comparator.CombinedComparator;
import org.apache.james.mime4j.MimeException;
import org.apache.james.mime4j.MimeIOException;
@@ -69,6 +71,7 @@ import org.apache.james.mime4j.utils.search.MessageMatcher;
import com.google.common.base.Function;
import com.google.common.base.Optional;
+import com.google.common.base.Predicate;
import com.google.common.collect.FluentIterable;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
@@ -94,6 +97,7 @@ public class MessageSearches implements Iterable<SimpleMessageSearchIndex.Search
public MessageSearches() {
}
+ @Override
public Iterator<SimpleMessageSearchIndex.SearchResult> iterator() {
ImmutableList.Builder<MailboxMessage> builder = ImmutableList.builder();
while (messages.hasNext()) {
@@ -187,6 +191,8 @@ public class MessageSearches implements Iterable<SimpleMessageSearchIndex.Search
result = true;
} else if (criterion instanceof SearchQuery.ConjunctionCriterion) {
result = matches((SearchQuery.ConjunctionCriterion) criterion, message, recentMessageUids);
+ } else if (criterion instanceof SearchQuery.AttachmentCriterion) {
+ result = matches((SearchQuery.AttachmentCriterion) criterion, message);
} else if (criterion instanceof SearchQuery.ModSeqCriterion) {
result = matches((SearchQuery.ModSeqCriterion) criterion, message);
} else {
@@ -523,6 +529,13 @@ public class MessageSearches implements Iterable<SimpleMessageSearchIndex.Search
return cal.getTime();
}
+
+ private boolean matches(SearchQuery.AttachmentCriterion criterion, MailboxMessage message) throws UnsupportedSearchException {
+ boolean mailHasAttachments = FluentIterable.from(message.getProperties())
+ .anyMatch(PropertyBuilder.isHasAttachmentProperty());
+ return mailHasAttachments == criterion.getOperator().isSet();
+ }
+
private boolean matches(SearchQuery.SizeCriterion criterion, MailboxMessage message) throws UnsupportedSearchException {
SearchQuery.NumericOperator operator = criterion.getOperator();
long size = message.getFullContentOctets();
http://git-wip-us.apache.org/repos/asf/james-project/blob/3705c186/mailbox/store/src/test/java/org/apache/james/mailbox/store/search/AbstractMessageSearchIndexTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/search/AbstractMessageSearchIndexTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/search/AbstractMessageSearchIndexTest.java
index b3cd404..f64f88d 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/search/AbstractMessageSearchIndexTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/search/AbstractMessageSearchIndexTest.java
@@ -67,6 +67,7 @@ public abstract class AbstractMessageSearchIndexTest {
private ComposedMessageId m7;
private ComposedMessageId m8;
private ComposedMessageId m9;
+ private ComposedMessageId mailWithAttachment;
private ComposedMessageId mOther;
@Before
@@ -162,6 +163,14 @@ public abstract class AbstractMessageSearchIndexTest {
session,
true,
new Flags("Hello you"));
+
+ mailWithAttachment = myFolderMessageManager.appendMessage(
+ ClassLoader.getSystemResourceAsStream("eml/oneAttachmentAndSomeTextInlined.eml"),
+ new Date(1409608900000L),
+ session,
+ true,
+ new Flags("Hello you"));
+
await();
}
@@ -224,6 +233,22 @@ public abstract class AbstractMessageSearchIndexTest {
}
@Test
+ public void hasAttachmentShouldOnlyReturnMessageThatHasAttachmentWhichAreNotInline() throws MailboxException {
+ SearchQuery searchQuery = new SearchQuery();
+ searchQuery.andCriteria(SearchQuery.hasAttachment());
+ assertThat(messageSearchIndex.search(session, mailbox2, searchQuery))
+ .containsOnly(mailWithAttachment.getUid());
+ }
+
+ @Test
+ public void hasNoAttachmenShouldOnlyReturnMessageThatHasNoAttachmentWhichAreNotInline() throws MailboxException {
+ SearchQuery searchQuery = new SearchQuery();
+ searchQuery.andCriteria(SearchQuery.hasNoAttachment());
+ assertThat(messageSearchIndex.search(session, mailbox2, searchQuery))
+ .containsOnly(mOther.getUid());
+ }
+
+ @Test
public void flagIsSetShouldReturnUidOfMessageMarkedAsDeletedWhenUsedWithFlagDeleted() throws MailboxException {
SearchQuery searchQuery = new SearchQuery();
searchQuery.andCriteria(SearchQuery.flagIsSet(Flags.Flag.DELETED));
@@ -910,6 +935,6 @@ public abstract class AbstractMessageSearchIndexTest {
List<MessageId> actual = messageSearchIndex.search(session, MultimailboxesSearchQuery.from(searchQuery).build(), LIMIT);
assertThat(actual).containsOnly(m1.getMessageId(), m2.getMessageId(), m3.getMessageId(), m4.getMessageId(), m5.getMessageId(),
- m6.getMessageId(), m7.getMessageId(), m8.getMessageId(), m9.getMessageId(), mOther.getMessageId());
+ m6.getMessageId(), m7.getMessageId(), m8.getMessageId(), m9.getMessageId(), mOther.getMessageId(), mailWithAttachment.getMessageId());
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[12/13] james-project git commit: JAMES-1934 indexation handle
invalid messageId instead of looking for backend indexation support
Posted by bt...@apache.org.
JAMES-1934 indexation handle invalid messageId instead of looking for backend indexation support
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/cdfe3f71
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/cdfe3f71
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/cdfe3f71
Branch: refs/heads/master
Commit: cdfe3f71371c1cddc2be47d04d56380591823dd5
Parents: 983de8d
Author: Luc DUZAN <ld...@linagora.com>
Authored: Fri Feb 10 14:09:28 2017 +0100
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Wed Feb 15 06:59:46 2017 +0700
----------------------------------------------------------------------
.../elasticsearch/json/IndexableMessage.java | 4 +-
.../json/MessageToElasticSearchJson.java | 72 ++++-----------
.../ElasticSearchIntegrationTest.java | 5 +-
.../json/IndexableMessageTest.java | 93 +++++++++++++++++++
.../json/MessageToElasticSearchJsonTest.java | 52 +++++------
.../lucene/search/LuceneMessageSearchIndex.java | 28 +++---
.../LuceneMailboxMessageSearchIndexTest.java | 3 +-
.../store/search/MessageSearchIndex.java | 5 --
.../james/mailbox/store/search/SearchUtil.java | 14 +++
.../mailbox/store/search/SearchUtilTest.java | 94 +++++++++++++++++++-
.../host/ElasticSearchHostSystem.java | 3 +-
11 files changed, 255 insertions(+), 118 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/cdfe3f71/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 c6e3ce7..e5ad24e 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
@@ -36,6 +36,7 @@ import org.apache.james.mailbox.store.mail.model.MailboxMessage;
import org.apache.james.mailbox.store.mail.model.Property;
import org.apache.james.mailbox.store.mail.model.impl.PropertyBuilder;
import org.apache.james.mailbox.store.mail.model.impl.SimpleProperty;
+import org.apache.james.mailbox.store.search.SearchUtil;
import org.apache.james.mime4j.MimeException;
import com.fasterxml.jackson.annotation.JsonProperty;
@@ -69,7 +70,6 @@ public class IndexableMessage {
public IndexableMessage build() {
Preconditions.checkNotNull(message.getMailboxId());
- Preconditions.checkNotNull(message.getMessageId());
Preconditions.checkNotNull(users);
Preconditions.checkNotNull(textExtractor);
Preconditions.checkNotNull(indexAttachments);
@@ -115,7 +115,7 @@ public class IndexableMessage {
}
private IndexableMessage instanciateIndexedMessage() throws IOException, MimeException {
- String messageId = message.getMessageId().serialize();
+ String messageId = SearchUtil.getSerializedMessageIdIfSupportedByUnderlyingStorageOrNull(message);
MimePart parsingResult = new MimePartParser(message, textExtractor).parse();
List<String> stringifiedUsers = users.stream()
http://git-wip-us.apache.org/repos/asf/james-project/blob/cdfe3f71/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 d4c896e..aacd790 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
@@ -25,13 +25,11 @@ import java.util.List;
import javax.inject.Inject;
import javax.mail.Flags;
-import org.apache.commons.lang.NotImplementedException;
import org.apache.james.mailbox.MailboxManager;
import org.apache.james.mailbox.MailboxSession.User;
import org.apache.james.mailbox.elasticsearch.IndexAttachments;
import org.apache.james.mailbox.extractor.TextExtractor;
import org.apache.james.mailbox.store.mail.model.MailboxMessage;
-import org.apache.james.mailbox.store.search.MessageSearchIndex;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
@@ -45,81 +43,45 @@ public class MessageToElasticSearchJson {
private final TextExtractor textExtractor;
private final ZoneId zoneId;
private final IndexAttachments indexAttachments;
- private final MessageSearchIndex.IndexMessageId indexMessageId;
- public MessageToElasticSearchJson(TextExtractor textExtractor, ZoneId zoneId, IndexAttachments indexAttachments, MessageSearchIndex.IndexMessageId indexMessageId) {
+ public MessageToElasticSearchJson(TextExtractor textExtractor, ZoneId zoneId, IndexAttachments indexAttachments) {
this.textExtractor = textExtractor;
this.zoneId = zoneId;
this.indexAttachments = indexAttachments;
this.mapper = new ObjectMapper();
this.mapper.registerModule(new GuavaModule());
this.mapper.registerModule(new Jdk8Module());
- this.indexMessageId = indexMessageId;
}
@Inject
public MessageToElasticSearchJson(TextExtractor textExtractor, IndexAttachments indexAttachments, MailboxManager mailboxManager) {
- this(textExtractor, ZoneId.systemDefault(), indexAttachments, indexMessageId(mailboxManager));
- }
-
- private static MessageSearchIndex.IndexMessageId indexMessageId(MailboxManager mailboxManager) {
- if (mailboxManager.getSupportedMessageCapabilities().contains(MailboxManager.MessageCapabilities.UniqueID)) {
- return MessageSearchIndex.IndexMessageId.Required;
- }
- return MessageSearchIndex.IndexMessageId.Optional;
+ this(textExtractor, ZoneId.systemDefault(), indexAttachments);
}
public String convertToJson(MailboxMessage message, List<User> users) throws JsonProcessingException {
Preconditions.checkNotNull(message);
- switch (indexMessageId) {
- case Required:
- return mapper.writeValueAsString(IndexableMessage.builder()
- .message(message)
- .users(users)
- .extractor(textExtractor)
- .zoneId(zoneId)
- .indexAttachments(indexAttachments)
- .build());
- case Optional:
- return mapper.writeValueAsString(IndexableMessage.builder()
- .message(message)
- .users(users)
- .extractor(textExtractor)
- .zoneId(zoneId)
- .indexAttachments(indexAttachments)
- .build());
- default:
- throw new NotImplementedException();
- }
+
+ return mapper.writeValueAsString(IndexableMessage.builder()
+ .message(message)
+ .users(users)
+ .extractor(textExtractor)
+ .zoneId(zoneId)
+ .indexAttachments(indexAttachments)
+ .build());
}
public String convertToJsonWithoutAttachment(MailboxMessage message, List<User> users) throws JsonProcessingException {
- Preconditions.checkNotNull(message);
- switch (indexMessageId) {
- case Required:
- return mapper.writeValueAsString(IndexableMessage.builder()
- .message(message)
- .users(users)
- .extractor(textExtractor)
- .zoneId(zoneId)
- .indexAttachments(IndexAttachments.NO)
- .build());
- case Optional:
- return mapper.writeValueAsString(IndexableMessage.builder()
- .message(message)
- .users(users)
- .extractor(textExtractor)
- .zoneId(zoneId)
- .indexAttachments(IndexAttachments.NO)
- .build());
- default:
- throw new NotImplementedException();
- }
+ return mapper.writeValueAsString(IndexableMessage.builder()
+ .message(message)
+ .users(users)
+ .extractor(textExtractor)
+ .zoneId(zoneId)
+ .indexAttachments(IndexAttachments.NO)
+ .build());
}
public String getUpdatedJsonMessagePart(Flags flags, long modSeq) throws JsonProcessingException {
Preconditions.checkNotNull(flags);
return mapper.writeValueAsString(new MessageUpdateJson(flags, modSeq));
}
-
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/cdfe3f71/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
index c406419..7ae3d09 100644
--- a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
+++ b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
@@ -46,7 +46,6 @@ import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
import org.apache.james.mailbox.store.extractor.DefaultTextExtractor;
import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
import org.apache.james.mailbox.store.search.AbstractMessageSearchIndexTest;
-import org.apache.james.mailbox.store.search.MessageSearchIndex;
import org.elasticsearch.client.Client;
import org.junit.Rule;
import org.junit.rules.RuleChain;
@@ -90,7 +89,7 @@ public class ElasticSearchIntegrationTest extends AbstractMessageSearchIndexTest
MailboxElasticsearchConstants.MAILBOX_INDEX,
MailboxElasticsearchConstants.MESSAGE_TYPE),
new ElasticSearchSearcher(client, new QueryConverter(new CriterionConverter()), SEARCH_SIZE, new InMemoryId.Factory(), messageIdFactory),
- new MessageToElasticSearchJson(new DefaultTextExtractor(), ZoneId.of("Europe/Paris"), IndexAttachments.YES, MessageSearchIndex.IndexMessageId.Required));
+ new MessageToElasticSearchJson(new DefaultTextExtractor(), ZoneId.of("Europe/Paris"), IndexAttachments.YES));
storeMailboxManager = new InMemoryMailboxManager(
mapperFactory,
new FakeAuthenticator(),
@@ -103,4 +102,4 @@ public class ElasticSearchIntegrationTest extends AbstractMessageSearchIndexTest
storeMailboxManager.setMessageSearchIndex(messageSearchIndex);
storeMailboxManager.init();
}
-}
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/james-project/blob/cdfe3f71/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessageTest.java
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessageTest.java b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessageTest.java
index 56aedb3..726eb69 100644
--- a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessageTest.java
+++ b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessageTest.java
@@ -37,6 +37,7 @@ import org.apache.james.mailbox.extractor.ParsedContent;
import org.apache.james.mailbox.extractor.TextExtractor;
import org.apache.james.mailbox.inmemory.InMemoryMessageId;
import org.apache.james.mailbox.mock.MockMailboxSession;
+import org.apache.james.mailbox.model.MessageId;
import org.apache.james.mailbox.model.TestId;
import org.apache.james.mailbox.store.extractor.DefaultTextExtractor;
import org.apache.james.mailbox.store.mail.model.MailboxMessage;
@@ -482,5 +483,97 @@ public class IndexableMessageTest {
// Then
assertThat(indexableMessage.getText()).contains("subject should be parsed");
}
+
+ @Test
+ public void shouldHandleCorrectlyMessageIdHavingSerializeMethodThatThrowAnException() throws Exception {
+ MessageId invalidMessageIdThatThrowException = mock(MessageId.class);
+ when(invalidMessageIdThatThrowException.serialize())
+ .thenThrow(new UnsupportedOperationException());
+
+ // When
+ MailboxMessage mailboxMessage = mock(MailboxMessage.class);
+ TestId mailboxId = TestId.of(1);
+ when(mailboxMessage.getMailboxId())
+ .thenReturn(mailboxId);
+ when(mailboxMessage.getMessageId())
+ .thenReturn(invalidMessageIdThatThrowException);
+ when(mailboxMessage.getFullContent())
+ .thenReturn(new ByteArrayInputStream(IOUtils.toByteArray(ClassLoader.getSystemResourceAsStream("eml/bodyMakeTikaToFail.eml"))));
+ when(mailboxMessage.createFlags())
+ .thenReturn(new Flags());
+ when(mailboxMessage.getUid())
+ .thenReturn(MESSAGE_UID);
+ IndexableMessage indexableMessage = IndexableMessage.builder()
+ .message(mailboxMessage)
+ .users(ImmutableList.of(new MockMailboxSession("username").getUser()))
+ .extractor(new TikaTextExtractor())
+ .zoneId(ZoneId.of("Europe/Paris"))
+ .indexAttachments(IndexAttachments.YES)
+ .build();
+
+ // Then
+ assertThat(indexableMessage.getMessageId()).isNull();
+ }
+
+ @Test
+ public void shouldHandleCorrectlyMessageIdHavingSerializeMethodThatReturnNull() throws Exception {
+ MessageId invalidMessageIdThatReturnNull = mock(MessageId.class);
+ when(invalidMessageIdThatReturnNull.serialize())
+ .thenReturn(null);
+
+ // When
+ MailboxMessage mailboxMessage = mock(MailboxMessage.class);
+ TestId mailboxId = TestId.of(1);
+ when(mailboxMessage.getMailboxId())
+ .thenReturn(mailboxId);
+ when(mailboxMessage.getMessageId())
+ .thenReturn(invalidMessageIdThatReturnNull);
+ when(mailboxMessage.getFullContent())
+ .thenReturn(new ByteArrayInputStream(IOUtils.toByteArray(ClassLoader.getSystemResourceAsStream("eml/bodyMakeTikaToFail.eml"))));
+ when(mailboxMessage.createFlags())
+ .thenReturn(new Flags());
+ when(mailboxMessage.getUid())
+ .thenReturn(MESSAGE_UID);
+
+ IndexableMessage indexableMessage = IndexableMessage.builder()
+ .message(mailboxMessage)
+ .users(ImmutableList.of(new MockMailboxSession("username").getUser()))
+ .extractor(new TikaTextExtractor())
+ .zoneId(ZoneId.of("Europe/Paris"))
+ .indexAttachments(IndexAttachments.YES)
+ .build();
+
+ // Then
+ assertThat(indexableMessage.getMessageId()).isNull();
+ }
+
+ @Test
+ public void shouldHandleCorrectlyNullMessageId() throws Exception {
+
+ // When
+ MailboxMessage mailboxMessage = mock(MailboxMessage.class);
+ TestId mailboxId = TestId.of(1);
+ when(mailboxMessage.getMailboxId())
+ .thenReturn(mailboxId);
+ when(mailboxMessage.getMessageId())
+ .thenReturn(null);
+ when(mailboxMessage.getFullContent())
+ .thenReturn(new ByteArrayInputStream(IOUtils.toByteArray(ClassLoader.getSystemResourceAsStream("eml/bodyMakeTikaToFail.eml"))));
+ when(mailboxMessage.createFlags())
+ .thenReturn(new Flags());
+ when(mailboxMessage.getUid())
+ .thenReturn(MESSAGE_UID);
+
+ IndexableMessage indexableMessage = IndexableMessage.builder()
+ .message(mailboxMessage)
+ .users(ImmutableList.of(new MockMailboxSession("username").getUser()))
+ .extractor(new TikaTextExtractor())
+ .zoneId(ZoneId.of("Europe/Paris"))
+ .indexAttachments(IndexAttachments.YES)
+ .build();
+
+ // Then
+ assertThat(indexableMessage.getMessageId()).isNull();
+ }
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/cdfe3f71/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/MessageToElasticSearchJsonTest.java
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/MessageToElasticSearchJsonTest.java b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/MessageToElasticSearchJsonTest.java
index f508766..ba27b58 100644
--- a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/MessageToElasticSearchJsonTest.java
+++ b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/MessageToElasticSearchJsonTest.java
@@ -45,7 +45,6 @@ import org.apache.james.mailbox.store.extractor.DefaultTextExtractor;
import org.apache.james.mailbox.store.mail.model.MailboxMessage;
import org.apache.james.mailbox.store.mail.model.impl.PropertyBuilder;
import org.apache.james.mailbox.store.mail.model.impl.SimpleMailboxMessage;
-import org.apache.james.mailbox.store.search.MessageSearchIndex;
import org.apache.james.mailbox.tika.extractor.TikaTextExtractor;
import org.junit.Before;
import org.junit.Test;
@@ -82,8 +81,7 @@ public class MessageToElasticSearchJsonTest {
public void convertToJsonShouldThrowWhenNoUser() throws Exception {
MessageToElasticSearchJson messageToElasticSearchJson = new MessageToElasticSearchJson(
new DefaultTextExtractor(),
- ZoneId.of("Europe/Paris"), IndexAttachments.YES,
- MessageSearchIndex.IndexMessageId.Required);
+ ZoneId.of("Europe/Paris"), IndexAttachments.YES);
MailboxMessage spamMail = new SimpleMailboxMessage(MESSAGE_ID,
date,
SIZE,
@@ -102,8 +100,7 @@ public class MessageToElasticSearchJsonTest {
public void spamEmailShouldBeWellConvertedToJson() throws IOException {
MessageToElasticSearchJson messageToElasticSearchJson = new MessageToElasticSearchJson(
new DefaultTextExtractor(),
- ZoneId.of("Europe/Paris"), IndexAttachments.YES,
- MessageSearchIndex.IndexMessageId.Required);
+ ZoneId.of("Europe/Paris"), IndexAttachments.YES);
MailboxMessage spamMail = new SimpleMailboxMessage(MESSAGE_ID,
date,
SIZE,
@@ -123,8 +120,7 @@ public class MessageToElasticSearchJsonTest {
public void htmlEmailShouldBeWellConvertedToJson() throws IOException {
MessageToElasticSearchJson messageToElasticSearchJson = new MessageToElasticSearchJson(
new DefaultTextExtractor(),
- ZoneId.of("Europe/Paris"), IndexAttachments.YES,
- MessageSearchIndex.IndexMessageId.Required);
+ ZoneId.of("Europe/Paris"), IndexAttachments.YES);
MailboxMessage htmlMail = new SimpleMailboxMessage(MESSAGE_ID,
date,
SIZE,
@@ -144,8 +140,7 @@ public class MessageToElasticSearchJsonTest {
public void pgpSignedEmailShouldBeWellConvertedToJson() throws IOException {
MessageToElasticSearchJson messageToElasticSearchJson = new MessageToElasticSearchJson(
new DefaultTextExtractor(),
- ZoneId.of("Europe/Paris"), IndexAttachments.YES,
- MessageSearchIndex.IndexMessageId.Required);
+ ZoneId.of("Europe/Paris"), IndexAttachments.YES);
MailboxMessage pgpSignedMail = new SimpleMailboxMessage(MESSAGE_ID,
date,
SIZE,
@@ -165,8 +160,7 @@ public class MessageToElasticSearchJsonTest {
public void simpleEmailShouldBeWellConvertedToJson() throws IOException {
MessageToElasticSearchJson messageToElasticSearchJson = new MessageToElasticSearchJson(
new DefaultTextExtractor(),
- ZoneId.of("Europe/Paris"), IndexAttachments.YES,
- MessageSearchIndex.IndexMessageId.Required);
+ ZoneId.of("Europe/Paris"), IndexAttachments.YES);
MailboxMessage mail = new SimpleMailboxMessage(MESSAGE_ID,
date,
SIZE,
@@ -187,8 +181,7 @@ public class MessageToElasticSearchJsonTest {
public void recursiveEmailShouldBeWellConvertedToJson() throws IOException {
MessageToElasticSearchJson messageToElasticSearchJson = new MessageToElasticSearchJson(
new DefaultTextExtractor(),
- ZoneId.of("Europe/Paris"), IndexAttachments.YES,
- MessageSearchIndex.IndexMessageId.Required);
+ ZoneId.of("Europe/Paris"), IndexAttachments.YES);
MailboxMessage recursiveMail = new SimpleMailboxMessage(MESSAGE_ID,
date,
SIZE,
@@ -208,8 +201,7 @@ public class MessageToElasticSearchJsonTest {
public void emailWithNoInternalDateShouldUseNowDate() throws IOException {
MessageToElasticSearchJson messageToElasticSearchJson = new MessageToElasticSearchJson(
new DefaultTextExtractor(),
- ZoneId.of("Europe/Paris"), IndexAttachments.YES,
- MessageSearchIndex.IndexMessageId.Required);
+ ZoneId.of("Europe/Paris"), IndexAttachments.YES);
MailboxMessage mailWithNoInternalDate = new SimpleMailboxMessage(MESSAGE_ID,
null,
SIZE,
@@ -243,8 +235,8 @@ public class MessageToElasticSearchJsonTest {
// When
MessageToElasticSearchJson messageToElasticSearchJson = new MessageToElasticSearchJson(
new DefaultTextExtractor(),
- ZoneId.of("Europe/Paris"), IndexAttachments.YES,
- MessageSearchIndex.IndexMessageId.Required);
+ ZoneId.of("Europe/Paris"),
+ IndexAttachments.YES);
String convertToJson = messageToElasticSearchJson.convertToJson(mailWithNoInternalDate, ImmutableList.of(new MockMailboxSession("username").getUser()));
// Then
@@ -271,8 +263,8 @@ public class MessageToElasticSearchJsonTest {
// When
MessageToElasticSearchJson messageToElasticSearchJson = new MessageToElasticSearchJson(
new DefaultTextExtractor(),
- ZoneId.of("Europe/Paris"), IndexAttachments.NO,
- MessageSearchIndex.IndexMessageId.Required);
+ ZoneId.of("Europe/Paris"),
+ IndexAttachments.NO);
String convertToJson = messageToElasticSearchJson.convertToJson(mailWithNoInternalDate, ImmutableList.of(new MockMailboxSession("username").getUser()));
// Then
@@ -286,8 +278,7 @@ public class MessageToElasticSearchJsonTest {
public void emailWithNoMailboxIdShouldThrow() throws IOException {
MessageToElasticSearchJson messageToElasticSearchJson = new MessageToElasticSearchJson(
new DefaultTextExtractor(),
- ZoneId.of("Europe/Paris"), IndexAttachments.YES,
- MessageSearchIndex.IndexMessageId.Required);
+ ZoneId.of("Europe/Paris"), IndexAttachments.YES);
MailboxMessage mailWithNoMailboxId;
try {
mailWithNoMailboxId = new SimpleMailboxMessage(MESSAGE_ID, date,
@@ -309,8 +300,8 @@ public class MessageToElasticSearchJsonTest {
public void getUpdatedJsonMessagePartShouldBehaveWellOnEmptyFlags() throws Exception {
MessageToElasticSearchJson messageToElasticSearchJson = new MessageToElasticSearchJson(
new DefaultTextExtractor(),
- ZoneId.of("Europe/Paris"), IndexAttachments.YES,
- MessageSearchIndex.IndexMessageId.Required);
+ ZoneId.of("Europe/Paris"),
+ IndexAttachments.YES);
assertThatJson(messageToElasticSearchJson.getUpdatedJsonMessagePart(new Flags(), MOD_SEQ))
.isEqualTo("{\"modSeq\":42,\"isAnswered\":false,\"isDeleted\":false,\"isDraft\":false,\"isFlagged\":false,\"isRecent\":false,\"userFlags\":[],\"isUnread\":true}");
}
@@ -319,8 +310,8 @@ public class MessageToElasticSearchJsonTest {
public void getUpdatedJsonMessagePartShouldBehaveWellOnNonEmptyFlags() throws Exception {
MessageToElasticSearchJson messageToElasticSearchJson = new MessageToElasticSearchJson(
new DefaultTextExtractor(),
- ZoneId.of("Europe/Paris"), IndexAttachments.YES,
- MessageSearchIndex.IndexMessageId.Required);
+ ZoneId.of("Europe/Paris"),
+ IndexAttachments.YES);
assertThatJson(messageToElasticSearchJson.getUpdatedJsonMessagePart(new FlagsBuilder().add(Flags.Flag.DELETED, Flags.Flag.FLAGGED).add("user").build(), MOD_SEQ))
.isEqualTo("{\"modSeq\":42,\"isAnswered\":false,\"isDeleted\":true,\"isDraft\":false,\"isFlagged\":true,\"isRecent\":false,\"userFlags\":[\"user\"],\"isUnread\":true}");
}
@@ -329,8 +320,8 @@ public class MessageToElasticSearchJsonTest {
public void getUpdatedJsonMessagePartShouldThrowIfFlagsIsNull() throws Exception {
MessageToElasticSearchJson messageToElasticSearchJson = new MessageToElasticSearchJson(
new DefaultTextExtractor(),
- ZoneId.of("Europe/Paris"), IndexAttachments.YES,
- MessageSearchIndex.IndexMessageId.Required);
+ ZoneId.of("Europe/Paris"),
+ IndexAttachments.YES);
messageToElasticSearchJson.getUpdatedJsonMessagePart(null, MOD_SEQ);
}
@@ -338,8 +329,8 @@ public class MessageToElasticSearchJsonTest {
public void spamEmailShouldBeWellConvertedToJsonWithApacheTika() throws IOException {
MessageToElasticSearchJson messageToElasticSearchJson = new MessageToElasticSearchJson(
new TikaTextExtractor(),
- ZoneId.of("Europe/Paris"), IndexAttachments.YES,
- MessageSearchIndex.IndexMessageId.Required);
+ ZoneId.of("Europe/Paris"),
+ IndexAttachments.YES);
MailboxMessage spamMail = new SimpleMailboxMessage(MESSAGE_ID, date,
SIZE,
BODY_START_OCTET,
@@ -372,8 +363,7 @@ public class MessageToElasticSearchJsonTest {
MessageToElasticSearchJson messageToElasticSearchJson = new MessageToElasticSearchJson(
new DefaultTextExtractor(),
ZoneId.of("Europe/Paris"),
- IndexAttachments.NO,
- MessageSearchIndex.IndexMessageId.Required);
+ IndexAttachments.NO);
String convertToJsonWithoutAttachment = messageToElasticSearchJson.convertToJsonWithoutAttachment(message, ImmutableList.of(new MockMailboxSession("username").getUser()));
// Then
http://git-wip-us.apache.org/repos/asf/james-project/blob/cdfe3f71/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 eb7ec7c..b46f9ad 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
@@ -70,7 +70,6 @@ import org.apache.james.mailbox.store.mail.model.Mailbox;
import org.apache.james.mailbox.store.mail.model.MailboxMessage;
import org.apache.james.mailbox.store.mail.model.impl.PropertyBuilder;
import org.apache.james.mailbox.store.search.ListeningMessageSearchIndex;
-import org.apache.james.mailbox.store.search.MessageSearchIndex;
import org.apache.james.mailbox.store.search.SearchUtil;
import org.apache.james.mime4j.MimeException;
import org.apache.james.mime4j.dom.Header;
@@ -358,7 +357,6 @@ public class LuceneMessageSearchIndex extends ListeningMessageSearchIndex {
private final MailboxId.Factory mailboxIdFactory;
private final MessageId.Factory messageIdFactory;
private final IndexWriter writer;
- private final IndexMessageId shouldIndexMessageId;
private int maxQueryResults = DEFAULT_MAX_QUERY_RESULTS;
@@ -366,31 +364,29 @@ public class LuceneMessageSearchIndex extends ListeningMessageSearchIndex {
@Inject
public LuceneMessageSearchIndex(MessageMapperFactory factory, MailboxId.Factory mailboxIdFactory, Directory directory, MessageId.Factory messageIdFactory, MailboxManager mailboxManager) throws CorruptIndexException, LockObtainFailedException, IOException {
- this(factory, mailboxIdFactory, directory, false, true, messageIdFactory, indexMessageId(mailboxManager));
+ this(factory, mailboxIdFactory, directory, false, true, messageIdFactory);
}
- private static MessageSearchIndex.IndexMessageId indexMessageId(MailboxManager mailboxManager) {
- if (mailboxManager.getSupportedMessageCapabilities().contains(MailboxManager.MessageCapabilities.UniqueID)) {
- return MessageSearchIndex.IndexMessageId.Required;
- }
- return MessageSearchIndex.IndexMessageId.Optional;
- }
-
- public LuceneMessageSearchIndex(MessageMapperFactory factory, MailboxId.Factory mailboxIdFactory, Directory directory, boolean dropIndexOnStart, boolean lenient, MessageId.Factory messageIdFactory, IndexMessageId shouldIndexMessageId) throws CorruptIndexException, LockObtainFailedException, IOException {
+ public LuceneMessageSearchIndex(
+ MessageMapperFactory factory,
+ MailboxId.Factory mailboxIdFactory,
+ Directory directory,
+ boolean dropIndexOnStart,
+ boolean lenient,
+ MessageId.Factory messageIdFactory)
+ throws CorruptIndexException, LockObtainFailedException, IOException {
super(factory);
this.mailboxIdFactory = mailboxIdFactory;
this.messageIdFactory = messageIdFactory;
this.writer = new IndexWriter(directory, createConfig(createAnalyzer(lenient), dropIndexOnStart));
- this.shouldIndexMessageId = shouldIndexMessageId;
}
- public LuceneMessageSearchIndex(MessageMapperFactory factory, MailboxId.Factory mailboxIdFactory, MessageId.Factory messageIdFactory, IndexWriter writer, IndexMessageId shouldIndexMessageId) {
+ public LuceneMessageSearchIndex(MessageMapperFactory factory, MailboxId.Factory mailboxIdFactory, MessageId.Factory messageIdFactory, IndexWriter writer) {
super(factory);
this.mailboxIdFactory = mailboxIdFactory;
this.messageIdFactory = messageIdFactory;
this.writer = writer;
- this.shouldIndexMessageId = shouldIndexMessageId;
}
@Override
@@ -561,9 +557,7 @@ public class LuceneMessageSearchIndex extends ListeningMessageSearchIndex {
doc.add(new Field(MAILBOX_ID_FIELD, membership.getMailboxId().serialize().toUpperCase(Locale.ENGLISH), Store.YES, Index.NOT_ANALYZED));
doc.add(new NumericField(UID_FIELD,Store.YES, true).setLongValue(membership.getUid().asLong()));
doc.add(new Field(HAS_ATTACHMENT_FIELD, Boolean.toString(hasAttachment(membership)), Store.YES, Index.NOT_ANALYZED));
- if (shouldIndexMessageId == IndexMessageId.Required) {
- doc.add(new Field(MESSAGE_ID_FIELD, membership.getMessageId().serialize(), Store.YES, Index.NOT_ANALYZED));
- }
+ doc.add(new Field(MESSAGE_ID_FIELD, SearchUtil.getSerializedMessageIdIfSupportedByUnderlyingStorageOrNull(membership), Store.YES, Index.NOT_ANALYZED));
// create an unqiue key for the document which can be used later on updates to find the document
doc.add(new Field(ID_FIELD, membership.getMailboxId().serialize().toUpperCase(Locale.ENGLISH) +"-" + Long.toString(membership.getUid().asLong()), Store.YES, Index.NOT_ANALYZED));
http://git-wip-us.apache.org/repos/asf/james-project/blob/cdfe3f71/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 e93cdb6..d8c39e2 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
@@ -50,7 +50,6 @@ import org.apache.james.mailbox.model.TestMessageId;
import org.apache.james.mailbox.store.MessageBuilder;
import org.apache.james.mailbox.store.SimpleMailboxMembership;
import org.apache.james.mailbox.store.mail.model.Mailbox;
-import org.apache.james.mailbox.store.search.MessageSearchIndex;
import org.apache.lucene.store.RAMDirectory;
import org.junit.Before;
import org.junit.Test;
@@ -100,7 +99,7 @@ public class LuceneMailboxMessageSearchIndexTest {
id3 = factory.generate();
id4 = factory.generate();
id5 = factory.generate();
- index = new LuceneMessageSearchIndex(null, new TestId.Factory(), new RAMDirectory(), true, useLenient(), factory, MessageSearchIndex.IndexMessageId.Required);
+ index = new LuceneMessageSearchIndex(null, new TestId.Factory(), new RAMDirectory(), true, useLenient(), factory);
index.setEnableSuffixMatch(true);
Map<String, String> headersSubject = new HashMap<String, String>();
headersSubject.put("Subject", "test (fwd)");
http://git-wip-us.apache.org/repos/asf/james-project/blob/cdfe3f71/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/MessageSearchIndex.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/MessageSearchIndex.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/MessageSearchIndex.java
index 162598a..08adfd3 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/MessageSearchIndex.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/MessageSearchIndex.java
@@ -43,11 +43,6 @@ import com.google.common.base.Optional;
*/
public interface MessageSearchIndex {
- enum IndexMessageId {
- Required,
- Optional
- }
-
/**
* Return all uids of the previous indexed {@link Mailbox}'s which match the {@link SearchQuery}
*/
http://git-wip-us.apache.org/repos/asf/james-project/blob/cdfe3f71/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/SearchUtil.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/SearchUtil.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/SearchUtil.java
index 4a9a721..2c899fa 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/SearchUtil.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/SearchUtil.java
@@ -21,6 +21,8 @@ package org.apache.james.mailbox.store.search;
import java.nio.charset.Charset;
import java.util.Locale;
+import org.apache.james.mailbox.model.MessageId;
+import org.apache.james.mailbox.store.mail.model.MailboxMessage;
import org.apache.james.mime4j.codec.DecodeMonitor;
import org.apache.james.mime4j.codec.DecoderUtil;
import org.apache.james.mime4j.dom.address.Address;
@@ -171,6 +173,18 @@ public class SearchUtil {
}
return "";
}
+
+
+ public static String getSerializedMessageIdIfSupportedByUnderlyingStorageOrNull(MailboxMessage mailboxMessage) {
+ try {
+ MessageId messageId = mailboxMessage.getMessageId();
+ if (messageId != null) {
+ return messageId.serialize();
+ }
+ } catch(UnsupportedOperationException e) {}
+
+ return null;
+ }
/**
http://git-wip-us.apache.org/repos/asf/james-project/blob/cdfe3f71/mailbox/store/src/test/java/org/apache/james/mailbox/store/search/SearchUtilTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/search/SearchUtilTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/search/SearchUtilTest.java
index 67b9066..542ef9c 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/search/SearchUtilTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/search/SearchUtilTest.java
@@ -18,8 +18,13 @@
****************************************************************/
package org.apache.james.mailbox.store.search;
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+import org.apache.james.mailbox.model.MessageId;
+import org.apache.james.mailbox.store.mail.model.MailboxMessage;
import org.junit.Test;
public class SearchUtilTest {
@@ -65,4 +70,91 @@ public class SearchUtilTest {
public void testComplexExtraction() {
assertEquals("Test", SearchUtil.getBaseSubject("Re: re:re: fwd:[fwd: \t Test] (fwd) (fwd)(fwd) "));
}
+
+ @Test
+ public void getMessageIdIfSupportedByUnderlyingStorageOrNullForNullMessageIdShouldReturnNull() {
+ //given
+ MailboxMessage message = mock(MailboxMessage.class);
+ when(message.getMessageId())
+ .thenReturn(null);
+
+ //when
+ String serialiazedMessageId = SearchUtil.getSerializedMessageIdIfSupportedByUnderlyingStorageOrNull(message);
+
+ //expect
+ assertNull(serialiazedMessageId);
+ }
+
+ @Test
+ public void getSerializedMessageIdIfSupportedByUnderlyingStorageOrNullForMessageIdThatSerializeReturnNullShouldReturnNull() {
+ //given
+ MessageId invalidMessageIdThatReturnNull = mock(MessageId.class);
+ when(invalidMessageIdThatReturnNull.serialize())
+ .thenReturn(null);
+
+ MailboxMessage message = mock(MailboxMessage.class);
+ when(message.getMessageId())
+ .thenReturn(invalidMessageIdThatReturnNull);
+
+ //when
+ String serialiazedMessageId = SearchUtil.getSerializedMessageIdIfSupportedByUnderlyingStorageOrNull(message);
+
+ //expect
+ assertNull(serialiazedMessageId);
+ }
+
+ @Test
+ public void getSerializedMessageIdIfSupportedByUnderlyingStorageOrNullForMessageIdThatSerializeReturnUnsupportedOperationExceptionShouldReturnNull() {
+ //given
+ MessageId invalidMessageIdThatThrowException = mock(MessageId.class);
+ when(invalidMessageIdThatThrowException.serialize())
+ .thenThrow(new UnsupportedOperationException());
+
+ MailboxMessage message = mock(MailboxMessage.class);
+ when(message.getMessageId())
+ .thenReturn(invalidMessageIdThatThrowException);
+
+ //when
+ String serialiazedMessageId = SearchUtil.getSerializedMessageIdIfSupportedByUnderlyingStorageOrNull(message);
+
+ //expect
+ assertNull(serialiazedMessageId);
+ }
+
+ @Test
+ public void getSerializedMessageIdIfSupportedByUnderlyingStorageOrNullForValidMessageIdShouldReturnSerializedId() {
+ //given
+ String messageIdString = "http://www.labraxeenne.com/#/";
+ MessageId messageId = mock(MessageId.class);
+ when(messageId.serialize())
+ .thenReturn(messageIdString);
+
+ MailboxMessage message = mock(MailboxMessage.class);
+ when(message.getMessageId())
+ .thenReturn(messageId);
+
+ //when
+ String serialiazedMessageId = SearchUtil.getSerializedMessageIdIfSupportedByUnderlyingStorageOrNull(message);
+
+ //expect
+ assertEquals(serialiazedMessageId, messageIdString);
+ }
+
+ @Test
+ public void getSerializedMessageIdIfSupportedByUnderlyingStorageOrNullForMessageIdThatReturnUssuportedOperationException() {
+ //given
+ MessageId messageId = mock(MessageId.class);
+ when(messageId.serialize())
+ .thenThrow(new UnsupportedOperationException());
+
+ MailboxMessage message = mock(MailboxMessage.class);
+ when(message.getMessageId())
+ .thenReturn(messageId);
+
+ //when
+ String serialiazedMessageId = SearchUtil.getSerializedMessageIdIfSupportedByUnderlyingStorageOrNull(message);
+
+ //expect
+ assertEquals(serialiazedMessageId, null);
+ }
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/cdfe3f71/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java b/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
index a745032..72e93b0 100644
--- a/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
+++ b/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
@@ -59,7 +59,6 @@ import org.apache.james.mailbox.store.extractor.DefaultTextExtractor;
import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
import org.apache.james.mailbox.store.quota.DefaultQuotaRootResolver;
import org.apache.james.mailbox.store.quota.NoQuotaManager;
-import org.apache.james.mailbox.store.search.MessageSearchIndex;
import org.apache.james.mpt.api.ImapFeatures;
import org.apache.james.mpt.api.ImapFeatures.Feature;
import org.apache.james.mpt.host.JamesImapHostSystem;
@@ -111,7 +110,7 @@ public class ElasticSearchHostSystem extends JamesImapHostSystem {
factory,
new ElasticSearchIndexer(client, new DeleteByQueryPerformer(client, Executors.newSingleThreadExecutor(), MailboxElasticsearchConstants.MAILBOX_INDEX, MailboxElasticsearchConstants.MESSAGE_TYPE), MailboxElasticsearchConstants.MAILBOX_INDEX, MailboxElasticsearchConstants.MESSAGE_TYPE),
new ElasticSearchSearcher(client, new QueryConverter(new CriterionConverter()), new InMemoryId.Factory(), messageIdFactory),
- new MessageToElasticSearchJson(new DefaultTextExtractor(), ZoneId.systemDefault(), IndexAttachments.YES, MessageSearchIndex.IndexMessageId.Required));
+ new MessageToElasticSearchJson(new DefaultTextExtractor(), ZoneId.systemDefault(), IndexAttachments.YES));
MailboxACLResolver aclResolver = new UnionMailboxACLResolver();
GroupMembershipResolver groupMembershipResolver = new SimpleGroupMembershipResolver();
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[11/13] james-project git commit: JAMES-1934 suppress useless import
Posted by bt...@apache.org.
JAMES-1934 suppress useless import
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/9fb956bf
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/9fb956bf
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/9fb956bf
Branch: refs/heads/master
Commit: 9fb956bf9d53289cdc48861a4ad95ba90219ccbe
Parents: 83e9e0c
Author: Luc DUZAN <ld...@linagora.com>
Authored: Mon Feb 13 11:44:57 2017 +0100
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Wed Feb 15 06:59:46 2017 +0700
----------------------------------------------------------------------
.../src/main/java/org/apache/james/mailbox/model/SearchQuery.java | 2 --
.../org/apache/james/mailbox/store/search/MessageSearches.java | 2 --
.../org/apache/james/mailbox/store/SimpleMailboxMembership.java | 2 --
.../org/apache/james/mailbox/jpa/migrator/JpaMigratorTest.java | 2 --
4 files changed, 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/9fb956bf/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java b/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java
index fbf8002..80764a5 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java
@@ -32,8 +32,6 @@ import javax.mail.Flags;
import javax.mail.Flags.Flag;
import org.apache.james.mailbox.MessageUid;
-import org.apache.james.mailbox.model.SearchQuery.Sort;
-
import com.google.common.base.MoreObjects;
import com.google.common.base.Objects;
http://git-wip-us.apache.org/repos/asf/james-project/blob/9fb956bf/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 6a440b2..c478a40 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
@@ -47,7 +47,6 @@ import org.apache.james.mailbox.model.SearchQuery.DateResolution;
import org.apache.james.mailbox.model.SearchQuery.UidRange;
import org.apache.james.mailbox.store.ResultUtils;
import org.apache.james.mailbox.store.mail.model.MailboxMessage;
-import org.apache.james.mailbox.store.mail.model.Property;
import org.apache.james.mailbox.store.mail.model.impl.PropertyBuilder;
import org.apache.james.mailbox.store.search.comparator.CombinedComparator;
import org.apache.james.mime4j.MimeException;
@@ -71,7 +70,6 @@ import org.apache.james.mime4j.utils.search.MessageMatcher;
import com.google.common.base.Function;
import com.google.common.base.Optional;
-import com.google.common.base.Predicate;
import com.google.common.collect.FluentIterable;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
http://git-wip-us.apache.org/repos/asf/james-project/blob/9fb956bf/mailbox/store/src/test/java/org/apache/james/mailbox/store/SimpleMailboxMembership.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/SimpleMailboxMembership.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/SimpleMailboxMembership.java
index c69e7aa..c99aaf0 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/SimpleMailboxMembership.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/SimpleMailboxMembership.java
@@ -25,7 +25,6 @@ import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.io.SequenceInputStream;
import java.io.Writer;
-import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
@@ -44,7 +43,6 @@ import org.apache.james.mailbox.store.mail.model.MailboxMessage;
import org.apache.james.mailbox.store.mail.model.Property;
import com.google.common.base.Objects;
-import com.google.common.base.Optional;
import com.google.common.collect.ImmutableList;
public class SimpleMailboxMembership implements MailboxMessage {
http://git-wip-us.apache.org/repos/asf/james-project/blob/9fb956bf/mailbox/tool/src/test/java/org/apache/james/mailbox/jpa/migrator/JpaMigratorTest.java
----------------------------------------------------------------------
diff --git a/mailbox/tool/src/test/java/org/apache/james/mailbox/jpa/migrator/JpaMigratorTest.java b/mailbox/tool/src/test/java/org/apache/james/mailbox/jpa/migrator/JpaMigratorTest.java
index f95a705..b83e6c1 100644
--- a/mailbox/tool/src/test/java/org/apache/james/mailbox/jpa/migrator/JpaMigratorTest.java
+++ b/mailbox/tool/src/test/java/org/apache/james/mailbox/jpa/migrator/JpaMigratorTest.java
@@ -18,8 +18,6 @@
****************************************************************/
package org.apache.james.mailbox.jpa.migrator;
-import org.apache.james.mailbox.jpa.migrator.JpaMigrator;
-import org.apache.james.mailbox.jpa.migrator.exception.JpaMigrateException;
import org.junit.Test;
/**
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[13/13] james-project git commit: JAMES-1929 JMAP wiring for
GetMessageList::hasAttachment filter
Posted by bt...@apache.org.
JAMES-1929 JMAP wiring for GetMessageList::hasAttachment filter
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/46feedce
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/46feedce
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/46feedce
Branch: refs/heads/master
Commit: 46feedcea1b9f609279dc12c33921c5036c9bcb6
Parents: 9fb956b
Author: Benoit Tellier <bt...@linagora.com>
Authored: Wed Feb 8 16:44:07 2017 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Wed Feb 15 06:59:46 2017 +0700
----------------------------------------------------------------------
.../apache/james/mailbox/model/SearchQuery.java | 12 +++++--
.../james/jmap/utils/FilterToSearchQuery.java | 24 ++++++--------
.../jmap/utils/FilterToSearchQueryTest.java | 33 ++++++++++++++------
3 files changed, 44 insertions(+), 25 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/46feedce/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java b/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java
index 80764a5..0c2203b 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java
@@ -593,12 +593,20 @@ public class SearchQuery implements Serializable {
return result;
}
+ public static Criterion hasAttachment(boolean value) {
+ if (value) {
+ return new AttachmentCriterion(BooleanOperator.set());
+ } else {
+ return new AttachmentCriterion(BooleanOperator.unset());
+ }
+ }
+
public static Criterion hasAttachment() {
- return new AttachmentCriterion(BooleanOperator.set());
+ return hasAttachment(true);
}
public static Criterion hasNoAttachment() {
- return new AttachmentCriterion(BooleanOperator.unset());
+ return hasAttachment(false);
}
/**
http://git-wip-us.apache.org/repos/asf/james-project/blob/46feedce/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/FilterToSearchQuery.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/FilterToSearchQuery.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/FilterToSearchQuery.java
index db7b485..d30c692 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/FilterToSearchQuery.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/FilterToSearchQuery.java
@@ -23,7 +23,6 @@ import java.util.Date;
import javax.mail.Flags.Flag;
-import org.apache.commons.lang.NotImplementedException;
import org.apache.james.jmap.model.Filter;
import org.apache.james.jmap.model.FilterCondition;
import org.apache.james.jmap.model.FilterOperator;
@@ -32,7 +31,6 @@ import org.apache.james.mailbox.model.SearchQuery.AddressType;
import org.apache.james.mailbox.model.SearchQuery.Criterion;
import org.apache.james.mailbox.model.SearchQuery.DateResolution;
-import com.github.fge.lambdas.Throwing;
import com.github.steveash.guavate.Guavate;
import com.google.common.collect.ImmutableList;
@@ -52,17 +50,15 @@ public class FilterToSearchQuery {
private SearchQuery convertCondition(FilterCondition filter) {
SearchQuery searchQuery = new SearchQuery();
- filter.getText().ifPresent(text -> {
- searchQuery.andCriteria(
- SearchQuery.or(ImmutableList.of(
- SearchQuery.address(AddressType.From, text),
- SearchQuery.address(AddressType.To, text),
- SearchQuery.address(AddressType.Cc, text),
- SearchQuery.address(AddressType.Bcc, text),
- SearchQuery.headerContains("Subject", text),
- SearchQuery.bodyContains(text)))
- );
- });
+ filter.getText().ifPresent(text -> searchQuery.andCriteria(
+ SearchQuery.or(ImmutableList.of(
+ SearchQuery.address(AddressType.From, text),
+ SearchQuery.address(AddressType.To, text),
+ SearchQuery.address(AddressType.Cc, text),
+ SearchQuery.address(AddressType.Bcc, text),
+ SearchQuery.headerContains("Subject", text),
+ SearchQuery.bodyContains(text)))
+ ));
filter.getFrom().ifPresent(from -> searchQuery.andCriteria(SearchQuery.address(AddressType.From, from)));
filter.getTo().ifPresent(to -> searchQuery.andCriteria(SearchQuery.address(AddressType.To, to)));
filter.getCc().ifPresent(cc -> searchQuery.andCriteria(SearchQuery.address(AddressType.Cc, cc)));
@@ -71,7 +67,6 @@ public class FilterToSearchQuery {
filter.getBody().ifPresent(body -> searchQuery.andCriteria(SearchQuery.bodyContains(body)));
filter.getAfter().ifPresent(after -> searchQuery.andCriteria(SearchQuery.internalDateAfter(Date.from(after.toInstant()), DateResolution.Second)));
filter.getBefore().ifPresent(before -> searchQuery.andCriteria(SearchQuery.internalDateBefore(Date.from(before.toInstant()), DateResolution.Second)));
- filter.getHasAttachment().ifPresent(Throwing.consumer(hasAttachment -> { throw new NotImplementedException(); } ));
filter.getHeader().ifPresent(header -> searchQuery.andCriteria(SearchQuery.headerContains(header.getName(), header.getValue().orElse(null))));
filter.getIsAnswered().ifPresent(isAnswered -> searchQuery.andCriteria(SearchQuery.flagIsSet(Flag.ANSWERED)));
filter.getIsDraft().ifPresent(isDraft -> searchQuery.andCriteria(SearchQuery.flagIsSet(Flag.DRAFT)));
@@ -79,6 +74,7 @@ public class FilterToSearchQuery {
filter.getIsUnread().ifPresent(isUnread -> searchQuery.andCriteria(SearchQuery.flagIsUnSet(Flag.SEEN)));
filter.getMaxSize().ifPresent(maxSize -> searchQuery.andCriteria(SearchQuery.sizeLessThan(maxSize)));
filter.getMinSize().ifPresent(minSize -> searchQuery.andCriteria(SearchQuery.sizeGreaterThan(minSize)));
+ filter.getHasAttachment().ifPresent(hasAttachment -> searchQuery.andCriteria(SearchQuery.hasAttachment(hasAttachment)));
return searchQuery;
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/46feedce/server/protocols/jmap/src/test/java/org/apache/james/jmap/utils/FilterToSearchQueryTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/utils/FilterToSearchQueryTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/utils/FilterToSearchQueryTest.java
index 41cfb39..6b3f6bf 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/utils/FilterToSearchQueryTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/utils/FilterToSearchQueryTest.java
@@ -27,7 +27,6 @@ import java.util.Date;
import javax.mail.Flags.Flag;
-import org.apache.commons.lang.NotImplementedException;
import org.apache.james.jmap.model.Filter;
import org.apache.james.jmap.model.FilterCondition;
import org.apache.james.jmap.model.FilterOperator;
@@ -97,6 +96,30 @@ public class FilterToSearchQueryTest {
}
@Test
+ public void filterConditionShouldMapWhenHasAttachment() {
+ SearchQuery expectedSearchQuery = new SearchQuery();
+ expectedSearchQuery.andCriteria(SearchQuery.hasAttachment());
+
+ SearchQuery searchQuery = new FilterToSearchQuery().convert(FilterCondition.builder()
+ .hasAttachment(true)
+ .build());
+
+ assertThat(searchQuery).isEqualTo(expectedSearchQuery);
+ }
+
+ @Test
+ public void filterConditionShouldMapWhenHasNoAttachment() {
+ SearchQuery expectedSearchQuery = new SearchQuery();
+ expectedSearchQuery.andCriteria(SearchQuery.hasNoAttachment());
+
+ SearchQuery searchQuery = new FilterToSearchQuery().convert(FilterCondition.builder()
+ .hasAttachment(false)
+ .build());
+
+ assertThat(searchQuery).isEqualTo(expectedSearchQuery);
+ }
+
+ @Test
public void filterConditionShouldMapWhenBcc() {
String bcc = "blindcopy@james.org";
SearchQuery expectedSearchQuery = new SearchQuery();
@@ -181,14 +204,6 @@ public class FilterToSearchQueryTest {
}
@Test
- public void filterConditionShouldThrowWhenHasAttachment() {
- assertThatThrownBy(() -> new FilterToSearchQuery().convert(FilterCondition.builder()
- .hasAttachment(true)
- .build()))
- .isInstanceOf(NotImplementedException.class);
- }
-
- @Test
public void filterConditionShouldMapWhenIsAnswered() {
SearchQuery expectedSearchQuery = new SearchQuery();
expectedSearchQuery.andCriteria(SearchQuery.flagIsSet(Flag.ANSWERED));
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[08/13] james-project git commit: JAMES-1934 implements hasAttachment
search for lucene
Posted by bt...@apache.org.
JAMES-1934 implements hasAttachment search for lucene
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/810c764d
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/810c764d
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/810c764d
Branch: refs/heads/master
Commit: 810c764dedb1a19a2d15c32c981545f390fcf807
Parents: c1357bc
Author: Luc DUZAN <ld...@linagora.com>
Authored: Thu Feb 9 12:57:49 2017 +0100
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Wed Feb 15 06:59:45 2017 +0700
----------------------------------------------------------------------
.../lucene/search/LuceneMessageSearchIndex.java | 29 ++++++++++++++++----
1 file changed, 23 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/810c764d/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 9b3c0c1..eb7ec7c 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
@@ -52,6 +52,7 @@ import org.apache.james.mailbox.model.MessageRange;
import org.apache.james.mailbox.model.MultimailboxesSearchQuery;
import org.apache.james.mailbox.model.SearchQuery;
import org.apache.james.mailbox.model.SearchQuery.AllCriterion;
+import org.apache.james.mailbox.model.SearchQuery.AttachmentCriterion;
import org.apache.james.mailbox.model.SearchQuery.ContainsOperator;
import org.apache.james.mailbox.model.SearchQuery.Criterion;
import org.apache.james.mailbox.model.SearchQuery.CustomFlagCriterion;
@@ -67,6 +68,7 @@ import org.apache.james.mailbox.model.UpdatedFlags;
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 org.apache.james.mailbox.store.mail.model.impl.PropertyBuilder;
import org.apache.james.mailbox.store.search.ListeningMessageSearchIndex;
import org.apache.james.mailbox.store.search.MessageSearchIndex;
import org.apache.james.mailbox.store.search.SearchUtil;
@@ -162,6 +164,11 @@ public class LuceneMessageSearchIndex extends ListeningMessageSearchIndex {
public final static String UID_FIELD = "uid";
/**
+ * {@link Field} boolean field that say if the message as an attachment or not
+ */
+ public final static String HAS_ATTACHMENT_FIELD = "hasAttachment";
+
+ /**
* {@link Field} which will contain the {@link Flags} of the {@link MailboxMessage}
*/
public final static String FLAGS_FIELD = "flags";
@@ -553,7 +560,7 @@ public class LuceneMessageSearchIndex extends ListeningMessageSearchIndex {
// TODO: Better handling
doc.add(new Field(MAILBOX_ID_FIELD, membership.getMailboxId().serialize().toUpperCase(Locale.ENGLISH), Store.YES, Index.NOT_ANALYZED));
doc.add(new NumericField(UID_FIELD,Store.YES, true).setLongValue(membership.getUid().asLong()));
-
+ doc.add(new Field(HAS_ATTACHMENT_FIELD, Boolean.toString(hasAttachment(membership)), Store.YES, Index.NOT_ANALYZED));
if (shouldIndexMessageId == IndexMessageId.Required) {
doc.add(new Field(MESSAGE_ID_FIELD, membership.getMessageId().serialize(), Store.YES, Index.NOT_ANALYZED));
}
@@ -575,6 +582,7 @@ public class LuceneMessageSearchIndex extends ListeningMessageSearchIndex {
SimpleContentHandler handler = new SimpleContentHandler() {
+ @Override
public void headers(Header header) {
Date sentDate = null;
@@ -756,6 +764,11 @@ public class LuceneMessageSearchIndex extends ListeningMessageSearchIndex {
return doc;
}
+ private static boolean hasAttachment(MailboxMessage membership) {
+ return FluentIterable.from(membership.getProperties())
+ .anyMatch(PropertyBuilder.isHasAttachmentProperty());
+ }
+
private String toSentDateField(DateResolution res) {
String field;
switch (res) {
@@ -972,6 +985,10 @@ public class LuceneMessageSearchIndex extends ListeningMessageSearchIndex {
}
}
+ private Query createAttachmentQuery(boolean isSet, Query inMailboxes) throws MailboxException, UnsupportedSearchException {
+ return new TermQuery(new Term(HAS_ATTACHMENT_FIELD, Boolean.toString(isSet)));
+ }
+
/**
* Return a {@link Query} which is build based on the given {@link SearchQuery.FlagCriterion}. This is kind of a hack
* as it will do a search for the flags in this method and
@@ -1261,6 +1278,9 @@ public class LuceneMessageSearchIndex extends ListeningMessageSearchIndex {
} else if (criterion instanceof SearchQuery.FlagCriterion) {
FlagCriterion crit = (FlagCriterion) criterion;
return createFlagQuery(toString(crit.getFlag()), crit.getOperator().isSet(), inMailboxes, recentUids);
+ } else if (criterion instanceof SearchQuery.AttachmentCriterion) {
+ AttachmentCriterion crit = (AttachmentCriterion) criterion;
+ return createAttachmentQuery(crit.getOperator().isSet(), inMailboxes);
} else if (criterion instanceof SearchQuery.CustomFlagCriterion) {
CustomFlagCriterion crit = (CustomFlagCriterion) criterion;
return createFlagQuery(crit.getFlag(), crit.getOperator().isSet(), inMailboxes, recentUids);
@@ -1284,6 +1304,7 @@ public class LuceneMessageSearchIndex extends ListeningMessageSearchIndex {
/**
* @see org.apache.james.mailbox.store.search.ListeningMessageSearchIndex#add(org.apache.james.mailbox.MailboxSession, org.apache.james.mailbox.store.mail.model.Mailbox, MailboxMessage)
*/
+ @Override
public void add(MailboxSession session, Mailbox mailbox, MailboxMessage membership) throws MailboxException {
Document doc = createMessageDocument(session, membership);
Document flagsDoc = createFlagsDocument(membership);
@@ -1424,8 +1445,4 @@ public class LuceneMessageSearchIndex extends ListeningMessageSearchIndex {
throw new MailboxException("Unable to delete message from index", e);
}
}
-
-
-
-
-}
+}
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[07/13] james-project git commit: JAMES-1934 implemens hasAttachment
search for ES
Posted by bt...@apache.org.
JAMES-1934 implemens hasAttachment search for ES
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/c1357bca
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/c1357bca
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/c1357bca
Branch: refs/heads/master
Commit: c1357bca59a99a5e422068782fef24f5195b86e8
Parents: 59cfd84
Author: Luc DUZAN <ld...@linagora.com>
Authored: Thu Feb 9 12:56:53 2017 +0100
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Wed Feb 15 06:59:45 2017 +0700
----------------------------------------------------------------------
.../elasticsearch/MailboxMappingFactory.java | 4 +
.../elasticsearch/json/IndexableMessage.java | 24 ++++--
.../json/IndexableMessageWithMessageId.java | 6 +-
.../elasticsearch/query/CriterionConverter.java | 6 ++
.../json/IndexableMessageTest.java | 80 +++++++++++++++++++-
.../src/test/resources/eml/Toto.eml | 41 ----------
.../store/src/test/resources/eml/htmlMail.json | 2 +-
.../src/test/resources/eml/nonTextual.json | 2 +-
.../store/src/test/resources/eml/spamMail.json | 2 +-
9 files changed, 111 insertions(+), 56 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/c1357bca/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/MailboxMappingFactory.java
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/MailboxMappingFactory.java b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/MailboxMappingFactory.java
index aaa0009..7c54b40 100644
--- a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/MailboxMappingFactory.java
+++ b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/MailboxMappingFactory.java
@@ -212,6 +212,10 @@ public class MailboxMappingFactory {
.endObject()
.endObject()
+ .startObject(JsonMessageConstants.HAS_ATTACHMENT)
+ .field(NodeMappingFactory.TYPE, NodeMappingFactory.BOOLEAN)
+ .endObject()
+
.startObject(JsonMessageConstants.TEXT)
.field(NodeMappingFactory.TYPE, NodeMappingFactory.STRING)
.field(NodeMappingFactory.ANALYZER, NodeMappingFactory.SNOWBALL)
http://git-wip-us.apache.org/repos/asf/james-project/blob/c1357bca/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 770f558..6150b19 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
@@ -34,6 +34,8 @@ import org.apache.james.mailbox.elasticsearch.query.DateResolutionFormater;
import org.apache.james.mailbox.extractor.TextExtractor;
import org.apache.james.mailbox.store.mail.model.MailboxMessage;
import org.apache.james.mailbox.store.mail.model.Property;
+import org.apache.james.mailbox.store.mail.model.impl.PropertyBuilder;
+import org.apache.james.mailbox.store.mail.model.impl.SimpleProperty;
import org.apache.james.mime4j.MimeException;
import com.fasterxml.jackson.annotation.JsonProperty;
@@ -46,6 +48,8 @@ import com.google.common.collect.Multimap;
public class IndexableMessage {
+ public static final SimpleProperty HAS_ATTACHMENT_PROPERTY = new SimpleProperty(PropertyBuilder.JAMES_INTERNALS, PropertyBuilder.HAS_ATTACHMENT, "true");
+
public static IndexableMessage from(MailboxMessage message, List<User> users, TextExtractor textExtractor,
ZoneId zoneId, IndexAttachments indexAttachments) {
@@ -57,6 +61,9 @@ public class IndexableMessage {
indexableMessage.users = users.stream().map(User::getUserName).collect(Guavate.toImmutableList());
indexableMessage.bodyText = parsingResult.locateFirstTextBody();
indexableMessage.bodyHtml = parsingResult.locateFirstHtmlBody();
+ indexableMessage.hasAttachment = message.getProperties()
+ .stream()
+ .anyMatch(property -> property.equals(HAS_ATTACHMENT_PROPERTY));
indexableMessage.setFlattenedAttachments(parsingResult, indexAttachments);
indexableMessage.copyHeaderFields(parsingResult.getHeaderCollection(), getSanitizedInternalDate(message, zoneId));
indexableMessage.generateText();
@@ -68,11 +75,13 @@ public class IndexableMessage {
}
private void setFlattenedAttachments(MimePart parsingResult, IndexAttachments indexAttachments) {
- if (indexAttachments.equals(IndexAttachments.YES)) {
- attachments = parsingResult.getAttachmentsStream()
- .collect(Collectors.toList());
+ List<MimePart> mimeparts = parsingResult.getAttachmentsStream()
+ .collect(Guavate.toImmutableList());
+
+ if (IndexAttachments.YES.equals(indexAttachments)) {
+ this.attachments = mimeparts;
} else {
- attachments = ImmutableList.of();
+ this.attachments = ImmutableList.of();
}
}
@@ -134,6 +143,7 @@ public class IndexableMessage {
private String date;
private String mediaType;
private String subType;
+ private boolean hasAttachment;
private boolean isUnRead;
private boolean isRecent;
private boolean isFlagged;
@@ -155,11 +165,12 @@ public class IndexableMessage {
private Optional<String> bodyHtml;
private String text;
+
public IndexableMessage(long uid, String mailboxId, List<String> users, long modSeq, long size, String date, String mediaType,
String subType, boolean isUnRead, boolean isRecent, boolean isFlagged, boolean isDeleted, boolean isDraft,
boolean isAnswered, String[] userFlags, Multimap<String, String> headers, EMailers from, EMailers to,
EMailers cc, EMailers bcc, EMailers replyTo, Subjects subjects, String sentDate, List<Property> properties,
- List<MimePart> attachments, Optional<String> bodyText, Optional<String> bodyHtml, String text) {
+ List<MimePart> attachments, boolean hasAttachment, Optional<String> bodyText, Optional<String> bodyHtml, String text) {
this.uid = uid;
this.mailboxId = mailboxId;
this.users = users;
@@ -185,6 +196,7 @@ public class IndexableMessage {
this.sentDate = sentDate;
this.properties = properties;
this.attachments = attachments;
+ this.hasAttachment = hasAttachment;
this.bodyText = bodyText;
this.bodyHtml = bodyHtml;
this.text = text;
@@ -330,7 +342,7 @@ public class IndexableMessage {
@JsonProperty(JsonMessageConstants.HAS_ATTACHMENT)
public boolean getHasAttachment() {
- return attachments.size() > 0;
+ return hasAttachment;
}
@JsonProperty(JsonMessageConstants.TEXT)
http://git-wip-us.apache.org/repos/asf/james-project/blob/c1357bca/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessageWithMessageId.java
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessageWithMessageId.java b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessageWithMessageId.java
index 8f376dc..2578580 100644
--- a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessageWithMessageId.java
+++ b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessageWithMessageId.java
@@ -43,7 +43,7 @@ public class IndexableMessageWithMessageId extends IndexableMessage {
indexableMessage.isDeleted(), indexableMessage.isDraft(), indexableMessage.isAnswered(), indexableMessage.getUserFlags(),
indexableMessage.getHeaders(), indexableMessage.getFrom(), indexableMessage.getTo(), indexableMessage.getCc(), indexableMessage.getBcc(),
indexableMessage.getReplyTo(), indexableMessage.getSubjects(), indexableMessage.getSentDate(), indexableMessage.getProperties(),
- indexableMessage.getAttachments(), indexableMessage.getBodyText(), indexableMessage.getBodyHtml(), indexableMessage.getText(),
+ indexableMessage.getAttachments(), indexableMessage.getHasAttachment(), indexableMessage.getBodyText(), indexableMessage.getBodyHtml(), indexableMessage.getText(),
message.getMessageId().serialize());
}
@@ -53,10 +53,10 @@ public class IndexableMessageWithMessageId extends IndexableMessage {
String mediaType, String subType, boolean isUnRead, boolean isRecent, boolean isFlagged,
boolean isDeleted, boolean isDraft, boolean isAnswered, String[] userFlags, Multimap<String, String> headers,
EMailers from, EMailers to, EMailers cc, EMailers bcc, EMailers replyTo, Subjects subjects,
- String sentDate, List<Property> properties, List<MimePart> attachments, Optional<String> bodyText,
+ String sentDate, List<Property> properties, List<MimePart> attachments, boolean hasAttachments, Optional<String> bodyText,
Optional<String> bodyHtml, String text, String messageId) {
super(uid, mailboxId, users, modSeq, size, date, mediaType, subType, isUnRead, isRecent, isFlagged, isDeleted,
- isDraft, isAnswered, userFlags, headers, from, to, cc, bcc, replyTo, subjects, sentDate, properties, attachments,
+ isDraft, isAnswered, userFlags, headers, from, to, cc, bcc, replyTo, subjects, sentDate, properties, attachments, hasAttachments,
bodyText, bodyHtml, text);
this.messageId = messageId;
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/c1357bca/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/query/CriterionConverter.java
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/query/CriterionConverter.java b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/query/CriterionConverter.java
index 3904a92..dcc4ff6 100644
--- a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/query/CriterionConverter.java
+++ b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/query/CriterionConverter.java
@@ -78,6 +78,8 @@ public class CriterionConverter {
registerCriterionConverter(SearchQuery.InternalDateCriterion.class,
criterion -> dateRangeFilter(JsonMessageConstants.DATE, criterion.getOperator()));
+
+ registerCriterionConverter(SearchQuery.AttachmentCriterion.class, this::convertAttachmentCriterion);
}
@SuppressWarnings("unchecked")
@@ -115,6 +117,10 @@ public class CriterionConverter {
return criterionConverterMap.get(criterion.getClass()).apply(criterion);
}
+ private QueryBuilder convertAttachmentCriterion(SearchQuery.AttachmentCriterion criterion) {
+ return termQuery(JsonMessageConstants.HAS_ATTACHMENT, criterion.getOperator().isSet());
+ }
+
private QueryBuilder convertCustomFlagCriterion(SearchQuery.CustomFlagCriterion criterion) {
QueryBuilder termQueryBuilder = termQuery(JsonMessageConstants.USER_FLAGS, criterion.getFlag());
if (criterion.getOperator().isSet()) {
http://git-wip-us.apache.org/repos/asf/james-project/blob/c1357bca/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessageTest.java
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessageTest.java b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessageTest.java
index cf98e6e..a66f326 100644
--- a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessageTest.java
+++ b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessageTest.java
@@ -20,11 +20,12 @@
package org.apache.james.mailbox.elasticsearch.json;
import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.Mockito.any;
+import static org.mockito.Matchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.io.ByteArrayInputStream;
+import java.io.IOException;
import java.time.ZoneId;
import javax.mail.Flags;
@@ -38,6 +39,8 @@ import org.apache.james.mailbox.mock.MockMailboxSession;
import org.apache.james.mailbox.model.TestId;
import org.apache.james.mailbox.store.extractor.DefaultTextExtractor;
import org.apache.james.mailbox.store.mail.model.MailboxMessage;
+import org.apache.james.mailbox.store.mail.model.impl.PropertyBuilder;
+import org.apache.james.mailbox.store.mail.model.impl.SimpleProperty;
import org.apache.james.mailbox.tika.extractor.TikaTextExtractor;
import org.junit.Test;
@@ -209,6 +212,77 @@ public class IndexableMessageTest {
}
@Test
+ public void hasAttachmentsShouldReturnTrueWhenPropertyIsPresentAndTrue() throws IOException {
+ //Given
+ MailboxMessage mailboxMessage = mock(MailboxMessage.class);
+ TestId mailboxId = TestId.of(1);
+ when(mailboxMessage.getMailboxId())
+ .thenReturn(mailboxId);
+ when(mailboxMessage.getFullContent())
+ .thenReturn(new ByteArrayInputStream(IOUtils.toByteArray(ClassLoader.getSystemResourceAsStream("eml/mailWithHeaders.eml"))));
+ when(mailboxMessage.createFlags())
+ .thenReturn(new Flags());
+ when(mailboxMessage.getUid())
+ .thenReturn(MESSAGE_UID);
+ when(mailboxMessage.getProperties()).thenReturn(ImmutableList.of(IndexableMessage.HAS_ATTACHMENT_PROPERTY));
+
+ // When
+ IndexableMessage indexableMessage = IndexableMessage.from(mailboxMessage, ImmutableList.of(new MockMailboxSession("username").getUser()),
+ new DefaultTextExtractor(), ZoneId.of("Europe/Paris"), IndexAttachments.YES);
+
+ // Then
+ assertThat(indexableMessage.getHasAttachment()).isTrue();
+ }
+
+ @Test
+ public void hasAttachmentsShouldReturnFalseWhenPropertyIsPresentButFalse() throws IOException {
+ //Given
+ MailboxMessage mailboxMessage = mock(MailboxMessage.class);
+ TestId mailboxId = TestId.of(1);
+ when(mailboxMessage.getMailboxId())
+ .thenReturn(mailboxId);
+ when(mailboxMessage.getFullContent())
+ .thenReturn(new ByteArrayInputStream(IOUtils.toByteArray(ClassLoader.getSystemResourceAsStream("eml/mailWithHeaders.eml"))));
+ when(mailboxMessage.createFlags())
+ .thenReturn(new Flags());
+ when(mailboxMessage.getUid())
+ .thenReturn(MESSAGE_UID);
+ when(mailboxMessage.getProperties())
+ .thenReturn(ImmutableList.of(new SimpleProperty(PropertyBuilder.JAMES_INTERNALS, PropertyBuilder.HAS_ATTACHMENT, "false")));
+
+ // When
+ IndexableMessage indexableMessage = IndexableMessage.from(mailboxMessage, ImmutableList.of(new MockMailboxSession("username").getUser()),
+ new DefaultTextExtractor(), ZoneId.of("Europe/Paris"), IndexAttachments.YES);
+
+ // Then
+ assertThat(indexableMessage.getHasAttachment()).isFalse();
+ }
+
+ @Test
+ public void hasAttachmentsShouldReturnFalseWhenPropertyIsAbsent() throws IOException {
+ //Given
+ MailboxMessage mailboxMessage = mock(MailboxMessage.class);
+ TestId mailboxId = TestId.of(1);
+ when(mailboxMessage.getMailboxId())
+ .thenReturn(mailboxId);
+ when(mailboxMessage.getFullContent())
+ .thenReturn(new ByteArrayInputStream(IOUtils.toByteArray(ClassLoader.getSystemResourceAsStream("eml/mailWithHeaders.eml"))));
+ when(mailboxMessage.createFlags())
+ .thenReturn(new Flags());
+ when(mailboxMessage.getUid())
+ .thenReturn(MESSAGE_UID);
+ when(mailboxMessage.getProperties())
+ .thenReturn(ImmutableList.of());
+
+ // When
+ IndexableMessage indexableMessage = IndexableMessage.from(mailboxMessage, ImmutableList.of(new MockMailboxSession("username").getUser()),
+ new DefaultTextExtractor(), ZoneId.of("Europe/Paris"), IndexAttachments.YES);
+
+ // Then
+ assertThat(indexableMessage.getHasAttachment()).isFalse();
+ }
+
+ @Test
public void attachmentsShouldNotBeenIndexedWhenAsked() throws Exception {
//Given
MailboxMessage mailboxMessage = mock(MailboxMessage.class);
@@ -216,7 +290,7 @@ public class IndexableMessageTest {
when(mailboxMessage.getMailboxId())
.thenReturn(mailboxId);
when(mailboxMessage.getFullContent())
- .thenReturn(new ByteArrayInputStream(IOUtils.toByteArray(ClassLoader.getSystemResourceAsStream("eml/Toto.eml"))));
+ .thenReturn(new ByteArrayInputStream(IOUtils.toByteArray(ClassLoader.getSystemResourceAsStream("eml/mailWithHeaders.eml"))));
when(mailboxMessage.createFlags())
.thenReturn(new Flags());
when(mailboxMessage.getUid())
@@ -238,7 +312,7 @@ public class IndexableMessageTest {
when(mailboxMessage.getMailboxId())
.thenReturn(mailboxId);
when(mailboxMessage.getFullContent())
- .thenReturn(new ByteArrayInputStream(IOUtils.toByteArray(ClassLoader.getSystemResourceAsStream("eml/Toto.eml"))));
+ .thenReturn(new ByteArrayInputStream(IOUtils.toByteArray(ClassLoader.getSystemResourceAsStream("eml/emailWith3Attachments.eml"))));
when(mailboxMessage.createFlags())
.thenReturn(new Flags());
when(mailboxMessage.getUid())
http://git-wip-us.apache.org/repos/asf/james-project/blob/c1357bca/mailbox/elasticsearch/src/test/resources/eml/Toto.eml
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/src/test/resources/eml/Toto.eml b/mailbox/elasticsearch/src/test/resources/eml/Toto.eml
deleted file mode 100644
index ab2de03..0000000
--- a/mailbox/elasticsearch/src/test/resources/eml/Toto.eml
+++ /dev/null
@@ -1,41 +0,0 @@
-Return-Path: <lr...@linagora.com>
-Received: from alderaan.linagora.com (smtp.linagora.dc1 [172.16.18.53])
- by imap (Cyrus v2.2.13-Debian-2.2.13-19+squeeze3) with LMTPA;
- Tue, 29 Nov 2016 13:57:56 +0100
-X-Sieve: CMU Sieve 2.2
-Received: from [10.69.0.146] (mne69-10-88-173-78-196.fbx.proxad.net [88.173.78.196])
- (using TLSv1 with cipher DHE-RSA-AES128-SHA (128/128 bits))
- (No client certificate requested)
- by alderaan.linagora.com (Postfix) with ESMTPSA id CB0233783
- for <lr...@linagora.com>; Tue, 29 Nov 2016 13:57:56 +0100 (CET)
-To: Laura ROYET <lr...@linagora.com>
-From: Laura Royet <lr...@linagora.com>
-Subject: Toto
-Message-ID: <25...@linagora.com>
-Date: Tue, 29 Nov 2016 13:57:56 +0100
-User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101
- Thunderbird/45.5.0
-MIME-Version: 1.0
-Content-Type: multipart/mixed;
- boundary="------------3F646081DC313215FD6847F4"
-
-This is a multi-part message in MIME format.
---------------3F646081DC313215FD6847F4
-Content-Type: text/plain; charset=utf-8; format=flowed
-Content-Transfer-Encoding: 7bit
-
-
-
---
-Laura Royet
-
-
---------------3F646081DC313215FD6847F4
-Content-Type: text/plain; charset=UTF-8;
- name="Toto.txt"
-Content-Transfer-Encoding: base64
-Content-Disposition: attachment;
- filename="Toto.txt"
-
-VG90bwpDb3B5cmlnaHQgwqkgMjAxNiBMSU5BR09SQSAKQ0MgQlktU0EsIEdOVSBGREwK
---------------3F646081DC313215FD6847F4--
http://git-wip-us.apache.org/repos/asf/james-project/blob/c1357bca/mailbox/store/src/test/resources/eml/htmlMail.json
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/resources/eml/htmlMail.json b/mailbox/store/src/test/resources/eml/htmlMail.json
index 1655f5e..a8998ef 100644
--- a/mailbox/store/src/test/resources/eml/htmlMail.json
+++ b/mailbox/store/src/test/resources/eml/htmlMail.json
@@ -159,7 +159,7 @@
"isAnswered":false,
"isFlagged":false,
"isRecent":false,
- "hasAttachment":true,
+ "hasAttachment":false,
"isUnread":false,
"users": [
"username"
http://git-wip-us.apache.org/repos/asf/james-project/blob/c1357bca/mailbox/store/src/test/resources/eml/nonTextual.json
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/resources/eml/nonTextual.json b/mailbox/store/src/test/resources/eml/nonTextual.json
index 9d1aa9c..e44e2d8 100644
--- a/mailbox/store/src/test/resources/eml/nonTextual.json
+++ b/mailbox/store/src/test/resources/eml/nonTextual.json
@@ -154,7 +154,7 @@
"isDraft":false,
"isFlagged":false,
"isRecent":false,
- "hasAttachment":true,
+ "hasAttachment":false,
"isUnread":true,
"users": [
"username"
http://git-wip-us.apache.org/repos/asf/james-project/blob/c1357bca/mailbox/store/src/test/resources/eml/spamMail.json
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/resources/eml/spamMail.json b/mailbox/store/src/test/resources/eml/spamMail.json
index b71a5ce..388aa2d 100644
--- a/mailbox/store/src/test/resources/eml/spamMail.json
+++ b/mailbox/store/src/test/resources/eml/spamMail.json
@@ -198,7 +198,7 @@
"isDraft": false,
"isFlagged": false,
"isRecent": false,
- "hasAttachment": true,
+ "hasAttachment": false,
"isUnread": true,
"users": [
"username"
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[03/13] james-project git commit: JAMES-1934 add missing override
Posted by bt...@apache.org.
JAMES-1934 add missing override
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/98e7ccb1
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/98e7ccb1
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/98e7ccb1
Branch: refs/heads/master
Commit: 98e7ccb113e645020ec0420907b2235c6145bc86
Parents: 7d7665a
Author: Luc DUZAN <ld...@linagora.com>
Authored: Wed Feb 8 16:27:10 2017 +0100
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Wed Feb 15 06:59:45 2017 +0700
----------------------------------------------------------------------
.../apache/james/mailbox/model/SearchQuery.java | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/98e7ccb1/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java b/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java
index a5eeca6..fbf8002 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java
@@ -821,6 +821,7 @@ public class SearchQuery implements Serializable {
return false;
}
+ @Override
public String toString() {
return MoreObjects.toStringHelper(this)
.add("lowValue", lowValue)
@@ -886,6 +887,7 @@ public class SearchQuery implements Serializable {
return false;
}
+ @Override
public String toString() {
return MoreObjects.toStringHelper(this)
.add("lowValue", lowValue)
@@ -957,6 +959,7 @@ public class SearchQuery implements Serializable {
return false;
}
+ @Override
public String toString() {
return MoreObjects.toStringHelper(this)
.add("criteria", criteria)
@@ -994,6 +997,7 @@ public class SearchQuery implements Serializable {
return 1729;
}
+ @Override
public String toString() {
return "AllCriterion";
}
@@ -1061,6 +1065,7 @@ public class SearchQuery implements Serializable {
return false;
}
+ @Override
public String toString() {
return MoreObjects.toStringHelper(this)
.add("operator", operator)
@@ -1118,6 +1123,7 @@ public class SearchQuery implements Serializable {
return false;
}
+ @Override
public String toString() {
return MoreObjects.toStringHelper(this)
.add("operator", operator)
@@ -1164,6 +1170,7 @@ public class SearchQuery implements Serializable {
return false;
}
+ @Override
public String toString() {
return MoreObjects.toStringHelper(this)
.add("operator", operator)
@@ -1209,6 +1216,7 @@ public class SearchQuery implements Serializable {
return false;
}
+ @Override
public String toString() {
return MoreObjects.toStringHelper(this)
.add("operator", operator)
@@ -1251,6 +1259,7 @@ public class SearchQuery implements Serializable {
return false;
}
+ @Override
public String toString() {
return MoreObjects.toStringHelper(this)
.add("operator", operator)
@@ -1309,6 +1318,7 @@ public class SearchQuery implements Serializable {
return false;
}
+ @Override
public String toString() {
return MoreObjects.toStringHelper(this)
.add("operator", operator)
@@ -1414,6 +1424,7 @@ public class SearchQuery implements Serializable {
return false;
}
+ @Override
public String toString() {
return MoreObjects.toStringHelper(this)
.add("operator", operator)
@@ -1458,6 +1469,7 @@ public class SearchQuery implements Serializable {
return false;
}
+ @Override
public String toString() {
return MoreObjects.toStringHelper(this)
.add("operator", operator)
@@ -1512,6 +1524,7 @@ public class SearchQuery implements Serializable {
return false;
}
+ @Override
public String toString() {
return MoreObjects.toStringHelper(this)
.add("address", address)
@@ -1557,6 +1570,7 @@ public class SearchQuery implements Serializable {
return false;
}
+ @Override
public String toString() {
return MoreObjects.toStringHelper(this)
.add("value", value)
@@ -1644,6 +1658,7 @@ public class SearchQuery implements Serializable {
return false;
}
+ @Override
public String toString() {
return MoreObjects.toStringHelper(this)
.add("set", set)
@@ -1707,6 +1722,7 @@ public class SearchQuery implements Serializable {
return false;
}
+ @Override
public String toString() {
return MoreObjects.toStringHelper(this)
.add("value", value)
@@ -1779,6 +1795,7 @@ public class SearchQuery implements Serializable {
return false;
}
+ @Override
public String toString() {
return MoreObjects.toStringHelper(this)
.add("date", date)
@@ -1832,6 +1849,7 @@ public class SearchQuery implements Serializable {
return true;
}
+ @Override
public String toString() {
return MoreObjects.toStringHelper(this)
.add("range", Arrays.toString(range))
@@ -1878,6 +1896,7 @@ public class SearchQuery implements Serializable {
return false;
}
+ @Override
public String toString() {
return MoreObjects.toStringHelper(this)
.add("ranges", Arrays.toString(ranges))
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[05/13] james-project git commit: JAMES-1934 add tests to
PropertyBuilder
Posted by bt...@apache.org.
JAMES-1934 add tests to PropertyBuilder
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/59cfd844
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/59cfd844
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/59cfd844
Branch: refs/heads/master
Commit: 59cfd844b98cfeeced35234dbcd8c32abff1635e
Parents: 3705c18
Author: Benoit Tellier <bt...@linagora.com>
Authored: Wed Feb 8 11:48:12 2017 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Wed Feb 15 06:59:45 2017 +0700
----------------------------------------------------------------------
.../mailbox/store/SimpleMailboxMembership.java | 8 +++-
.../mail/model/impl/PropertyBuilderTest.java | 49 ++++++++++++++++++++
2 files changed, 56 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/59cfd844/mailbox/store/src/test/java/org/apache/james/mailbox/store/SimpleMailboxMembership.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/SimpleMailboxMembership.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/SimpleMailboxMembership.java
index fd67f05..c69e7aa 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/SimpleMailboxMembership.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/SimpleMailboxMembership.java
@@ -44,6 +44,8 @@ import org.apache.james.mailbox.store.mail.model.MailboxMessage;
import org.apache.james.mailbox.store.mail.model.Property;
import com.google.common.base.Objects;
+import com.google.common.base.Optional;
+import com.google.common.collect.ImmutableList;
public class SimpleMailboxMembership implements MailboxMessage {
@@ -233,7 +235,11 @@ public class SimpleMailboxMembership implements MailboxMessage {
}
public List<Property> getProperties() {
- return new ArrayList<Property>(properties);
+ if (properties != null) {
+ return ImmutableList.<Property>copyOf(properties);
+ } else {
+ return ImmutableList.of();
+ }
}
public Long getTextualLineCount() {
http://git-wip-us.apache.org/repos/asf/james-project/blob/59cfd844/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/impl/PropertyBuilderTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/impl/PropertyBuilderTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/impl/PropertyBuilderTest.java
new file mode 100644
index 0000000..79b1548
--- /dev/null
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/impl/PropertyBuilderTest.java
@@ -0,0 +1,49 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+
+package org.apache.james.mailbox.store.mail.model.impl;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import org.junit.Test;
+
+public class PropertyBuilderTest {
+
+ @Test
+ public void emptyPropertyBuilderShouldCreateEmptyProperties() {
+ assertThat(new PropertyBuilder().toProperties()).isEmpty();
+ }
+
+ @Test
+ public void setHasAttachmentShouldAddFalseWhenCalledWithFalse() {
+ PropertyBuilder propertyBuilder = new PropertyBuilder();
+ propertyBuilder.setHasAttachment(false);
+ assertThat(propertyBuilder.toProperties())
+ .containsOnly(new SimpleProperty(PropertyBuilder.JAMES_INTERNALS, PropertyBuilder.HAS_ATTACHMENT, "false"));
+ }
+
+ @Test
+ public void setHasAttachmentShouldAddTrueWhenCalledWithTrue() {
+ PropertyBuilder propertyBuilder = new PropertyBuilder();
+ propertyBuilder.setHasAttachment(true);
+ assertThat(propertyBuilder.toProperties())
+ .containsOnly(new SimpleProperty(PropertyBuilder.JAMES_INTERNALS, PropertyBuilder.HAS_ATTACHMENT, "true"));
+ }
+
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[10/13] james-project git commit: JAMES-1929 Adding integration tests
for hasAttachment filter support
Posted by bt...@apache.org.
JAMES-1929 Adding integration tests for hasAttachment filter support
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/983de8dd
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/983de8dd
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/983de8dd
Branch: refs/heads/master
Commit: 983de8dd1e0714dbf5256d7be7bea21aa7123221
Parents: 46feedc
Author: Benoit Tellier <bt...@linagora.com>
Authored: Wed Feb 8 17:04:36 2017 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Wed Feb 15 06:59:46 2017 +0700
----------------------------------------------------------------------
.../integration/GetMessageListMethodTest.java | 46 ++++++++++++++++++++
1 file changed, 46 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/983de8dd/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 be275d9..034575c 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
@@ -127,6 +127,52 @@ public abstract class GetMessageListMethodTest {
}
@Test
+ public void getMessageListShouldSupportHasAttachmentSetToTrue() throws Exception {
+ jmapServer.serverProbe().createMailbox(MailboxConstants.USER_NAMESPACE, username, "mailbox");
+
+ jmapServer.serverProbe().appendMessage(username, new MailboxPath(MailboxConstants.USER_NAMESPACE, username, "mailbox"),
+ new ByteArrayInputStream("Subject: test\r\n\r\ntestmail".getBytes()), new Date(), false, new Flags());
+ ComposedMessageId message2 = jmapServer.serverProbe().appendMessage(username, new MailboxPath(MailboxConstants.USER_NAMESPACE, username, "mailbox"),
+ ClassLoader.getSystemResourceAsStream("eml/twoAttachments.eml"), new Date(), false, new Flags());
+ jmapServer.serverProbe().appendMessage(username, new MailboxPath(MailboxConstants.USER_NAMESPACE, username, "mailbox"),
+ ClassLoader.getSystemResourceAsStream("eml/oneInlinedImage.eml"), new Date(), false, new Flags());
+ await();
+
+ given()
+ .header("Authorization", accessToken.serialize())
+ .body("[[\"getMessageList\", {\"filter\":{\"hasAttachment\":\"true\"}}, \"#0\"]]")
+ .when()
+ .post("/jmap")
+ .then()
+ .statusCode(200)
+ .body(NAME, equalTo("messageList"))
+ .body(ARGUMENTS + ".messageIds", contains(message2.getMessageId().serialize()));
+ }
+
+ @Test
+ public void getMessageListShouldSupportHasAttachmentSetToFalse() throws Exception {
+ jmapServer.serverProbe().createMailbox(MailboxConstants.USER_NAMESPACE, username, "mailbox");
+
+ ComposedMessageId message1 = jmapServer.serverProbe().appendMessage(username, new MailboxPath(MailboxConstants.USER_NAMESPACE, username, "mailbox"),
+ new ByteArrayInputStream("Subject: test\r\n\r\ntestmail".getBytes()), new Date(), false, new Flags());
+ jmapServer.serverProbe().appendMessage(username, new MailboxPath(MailboxConstants.USER_NAMESPACE, username, "mailbox"),
+ ClassLoader.getSystemResourceAsStream("eml/twoAttachments.eml"), new Date(), false, new Flags());
+ ComposedMessageId message3 = jmapServer.serverProbe().appendMessage(username, new MailboxPath(MailboxConstants.USER_NAMESPACE, username, "mailbox"),
+ ClassLoader.getSystemResourceAsStream("eml/oneInlinedImage.eml"), new Date(), false, new Flags());
+ await();
+
+ given()
+ .header("Authorization", accessToken.serialize())
+ .body("[[\"getMessageList\", {\"filter\":{\"hasAttachment\":\"false\"}}, \"#0\"]]")
+ .when()
+ .post("/jmap")
+ .then()
+ .statusCode(200)
+ .body(NAME, equalTo("messageList"))
+ .body(ARGUMENTS + ".messageIds", contains(message1.getMessageId().serialize(), message3.getMessageId().serialize()));
+ }
+
+ @Test
public void getMessageListShouldNotFailWhenHeaderIsValid() throws Exception {
given()
.header("Authorization", accessToken.serialize())
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org