This is an automated email from the ASF dual-hosted git repository. btellier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit b4d4fcc60516ecb46961f1a733b88eeb1da58167 Author: Tran Tien Duc <[email protected]> AuthorDate: Fri Nov 29 10:41:46 2019 +0700 JAMES-2992 MessageViewFactory getMessageViews from MessageIds Turn the MessageViewFactory to take List<MessageId> instead of MessageResult. This is the effort of optimize fetching message in case of FastMessage, we need to determine whether a MessageId is in the MessagePreviewStore first then take the decision to give the good FetchType to MessageIdManager --- .../jmap/draft/methods/GetMessagesMethod.java | 30 +--- .../jmap/draft/model/GetMessagesResponse.java | 2 +- .../model/message/view/MessageFullViewFactory.java | 36 +++-- .../message/view/MessageHeaderViewFactory.java | 35 +++-- .../message/view/MessageMetadataViewFactory.java | 24 ++- .../model/message/view/MessageViewFactory.java | 168 +++++++++++++-------- .../model/message/view/MetaMessageViewFactory.java | 2 +- .../jmap/draft/methods/GetMessagesMethodTest.java | 164 ++++++++++---------- .../jmap/draft/methods/MessageSenderTest.java | 4 +- .../methods/SetMessagesCreationProcessorTest.java | 3 +- .../message/view/MessageFullViewFactoryTest.java | 15 +- .../message/view/MessageHeaderViewFactoryTest.java | 15 +- .../view/MessageMetadataViewFactoryTest.java | 16 +- 13 files changed, 269 insertions(+), 245 deletions(-) diff --git a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/GetMessagesMethod.java b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/GetMessagesMethod.java index f4a8315..a3e07e7 100644 --- a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/GetMessagesMethod.java +++ b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/GetMessagesMethod.java @@ -19,9 +19,8 @@ package org.apache.james.jmap.draft.methods; -import java.util.Collection; +import java.util.List; import java.util.Optional; -import java.util.function.Function; import java.util.stream.Stream; import javax.inject.Inject; @@ -39,7 +38,6 @@ import org.apache.james.jmap.draft.model.message.view.MetaMessageViewFactory; import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.MessageIdManager; import org.apache.james.mailbox.exception.MailboxException; -import org.apache.james.mailbox.model.MessageResult; import org.apache.james.metrics.api.MetricFactory; import org.apache.james.util.MDCBuilder; import org.slf4j.Logger; @@ -47,7 +45,6 @@ import org.slf4j.LoggerFactory; import com.fasterxml.jackson.databind.ser.PropertyFilter; import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider; -import com.github.steveash.guavate.Guavate; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableSet; @@ -123,19 +120,11 @@ public class GetMessagesMethod implements Method { try { MessageProperties.ReadProfile readProfile = getMessagesRequest.getProperties().computeReadLevel(); - MessageViewFactory factory = messageViewFactory.getFactory(readProfile); + MessageViewFactory<? extends MessageView> factory = messageViewFactory.getFactory(readProfile); + List<? extends MessageView> messageViews = factory.fromMessageIds(getMessagesRequest.getIds(), mailboxSession); return GetMessagesResponse.builder() - .messages( - messageIdManager.getMessages(getMessagesRequest.getIds(), readProfile.getFetchGroup(), mailboxSession) - .stream() - .collect(Guavate.toImmutableListMultimap(MessageResult::getMessageId)) - .asMap() - .values() - .stream() - .filter(collection -> !collection.isEmpty()) - .flatMap(toMessageViews(factory)) - .collect(Guavate.toImmutableList())) + .messages(messageViews) .expectedMessageIds(getMessagesRequest.getIds()) .build(); } catch (MailboxException e) { @@ -143,17 +132,6 @@ public class GetMessagesMethod implements Method { } } - private Function<Collection<MessageResult>, Stream<MessageView>> toMessageViews(MessageViewFactory factory) { - return messageResults -> { - try { - return Stream.of(factory.fromMessageResults(messageResults)); - } catch (Exception e) { - LOGGER.error("Can not convert MessageResults to Message for {}", messageResults.iterator().next().getMessageId().serialize(), e); - return Stream.of(); - } - }; - } - private static void notImplemented(String field) { throw new JmapFieldNotSupportedException(ISSUER, field); } diff --git a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/GetMessagesResponse.java b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/GetMessagesResponse.java index 14b813f..53ddd60 100644 --- a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/GetMessagesResponse.java +++ b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/GetMessagesResponse.java @@ -55,7 +55,7 @@ public class GetMessagesResponse implements Method.Response { return this; } - public Builder messages(List<MessageView> messages) { + public Builder messages(List<? extends MessageView> messages) { this.messages = ImmutableList.copyOf(messages); return this; } diff --git a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/MessageFullViewFactory.java b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/MessageFullViewFactory.java index 913d547..b5b20c1 100644 --- a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/MessageFullViewFactory.java +++ b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/MessageFullViewFactory.java @@ -34,8 +34,11 @@ import org.apache.james.jmap.api.model.Preview; import org.apache.james.jmap.draft.model.Attachment; import org.apache.james.jmap.draft.model.BlobId; import org.apache.james.jmap.draft.model.Keywords; +import org.apache.james.jmap.draft.model.MessageProperties; import org.apache.james.jmap.draft.utils.HtmlTextExtractor; import org.apache.james.mailbox.BlobManager; +import org.apache.james.mailbox.MailboxSession; +import org.apache.james.mailbox.MessageIdManager; import org.apache.james.mailbox.MessageUid; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.model.Cid; @@ -57,18 +60,21 @@ public class MessageFullViewFactory implements MessageViewFactory<MessageFullVie private final BlobManager blobManager; private final MessageContentExtractor messageContentExtractor; private final HtmlTextExtractor htmlTextExtractor; + private final MessageIdManager messageIdManager; @Inject public MessageFullViewFactory(BlobManager blobManager, MessageContentExtractor messageContentExtractor, - HtmlTextExtractor htmlTextExtractor) { + HtmlTextExtractor htmlTextExtractor, MessageIdManager messageIdManager) { this.blobManager = blobManager; this.messageContentExtractor = messageContentExtractor; this.htmlTextExtractor = htmlTextExtractor; + this.messageIdManager = messageIdManager; } @Override - public MessageFullView fromMessageResults(Collection<MessageResult> messageResults) throws MailboxException { - return fromMetaDataWithContent(toMetaDataWithContent(messageResults)); + public List<MessageFullView> fromMessageIds(List<MessageId> messageIds, MailboxSession mailboxSession) throws MailboxException { + List<MessageResult> messages = messageIdManager.getMessages(messageIds, MessageProperties.ReadProfile.Full.getFetchGroup(), mailboxSession); + return Helpers.toMessageViews(messages, this::fromMessageResults); } public MessageFullView fromMetaDataWithContent(MetaDataWithContent message) throws MailboxException { @@ -85,15 +91,15 @@ public class MessageFullViewFactory implements MessageViewFactory<MessageFullVie .blobId(BlobId.of(blobManager.toBlobId(message.getMessageId()))) .threadId(message.getMessageId().serialize()) .mailboxIds(message.getMailboxIds()) - .inReplyToMessageId(getHeader(mimeMessage, "in-reply-to")) + .inReplyToMessageId(Helpers.getHeader(mimeMessage, "in-reply-to")) .keywords(message.getKeywords()) .subject(Strings.nullToEmpty(mimeMessage.getSubject()).trim()) - .headers(toMap(mimeMessage.getHeader().getFields())) - .from(firstFromMailboxList(mimeMessage.getFrom())) - .to(fromAddressList(mimeMessage.getTo())) - .cc(fromAddressList(mimeMessage.getCc())) - .bcc(fromAddressList(mimeMessage.getBcc())) - .replyTo(fromAddressList(mimeMessage.getReplyTo())) + .headers(Helpers.toMap(mimeMessage.getHeader().getFields())) + .from(Helpers.firstFromMailboxList(mimeMessage.getFrom())) + .to(Helpers.fromAddressList(mimeMessage.getTo())) + .cc(Helpers.fromAddressList(mimeMessage.getCc())) + .bcc(Helpers.fromAddressList(mimeMessage.getBcc())) + .replyTo(Helpers.fromAddressList(mimeMessage.getReplyTo())) .size(message.getSize()) .date(getDateFromHeaderOrInternalDateOtherwise(mimeMessage, message)) .textBody(textBody) @@ -103,12 +109,16 @@ public class MessageFullViewFactory implements MessageViewFactory<MessageFullVie .build(); } + private MessageFullView fromMessageResults(Collection<MessageResult> messageResults) throws MailboxException { + return fromMetaDataWithContent(toMetaDataWithContent(messageResults)); + } + private MetaDataWithContent toMetaDataWithContent(Collection<MessageResult> messageResults) throws MailboxException { - assertOneMessageId(messageResults); + Helpers.assertOneMessageId(messageResults); MessageResult firstMessageResult = messageResults.iterator().next(); - List<MailboxId> mailboxIds = getMailboxIds(messageResults); - Keywords keywords = getKeywords(messageResults); + List<MailboxId> mailboxIds = Helpers.getMailboxIds(messageResults); + Keywords keywords = Helpers.getKeywords(messageResults); return MetaDataWithContent.builderFromMessageResult(firstMessageResult) .messageId(firstMessageResult.getMessageId()) diff --git a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/MessageHeaderViewFactory.java b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/MessageHeaderViewFactory.java index 27392f7..e840d2d 100644 --- a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/MessageHeaderViewFactory.java +++ b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/MessageHeaderViewFactory.java @@ -29,9 +29,13 @@ import java.util.Optional; import javax.inject.Inject; import org.apache.james.jmap.draft.model.BlobId; +import org.apache.james.jmap.draft.model.MessageProperties; import org.apache.james.mailbox.BlobManager; +import org.apache.james.mailbox.MailboxSession; +import org.apache.james.mailbox.MessageIdManager; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.model.MailboxId; +import org.apache.james.mailbox.model.MessageId; import org.apache.james.mailbox.model.MessageResult; import org.apache.james.mime4j.dom.Message; import org.apache.james.mime4j.stream.MimeConfig; @@ -41,19 +45,26 @@ import com.google.common.base.Strings; public class MessageHeaderViewFactory implements MessageViewFactory<MessageHeaderView> { private final BlobManager blobManager; + private final MessageIdManager messageIdManager; @Inject @VisibleForTesting - public MessageHeaderViewFactory(BlobManager blobManager) { + public MessageHeaderViewFactory(BlobManager blobManager, MessageIdManager messageIdManager) { this.blobManager = blobManager; + this.messageIdManager = messageIdManager; } @Override - public MessageHeaderView fromMessageResults(Collection<MessageResult> messageResults) throws MailboxException { - assertOneMessageId(messageResults); + public List<MessageHeaderView> fromMessageIds(List<MessageId> messageIds, MailboxSession mailboxSession) throws MailboxException { + List<MessageResult> messages = messageIdManager.getMessages(messageIds, MessageProperties.ReadProfile.Header.getFetchGroup(), mailboxSession); + return Helpers.toMessageViews(messages, this::fromMessageResults); + } + + private MessageHeaderView fromMessageResults(Collection<MessageResult> messageResults) throws MailboxException { + Helpers.assertOneMessageId(messageResults); MessageResult firstMessageResult = messageResults.iterator().next(); - List<MailboxId> mailboxIds = getMailboxIds(messageResults); + List<MailboxId> mailboxIds = Helpers.getMailboxIds(messageResults); Message mimeMessage = parse(firstMessageResult); @@ -62,16 +73,16 @@ public class MessageHeaderViewFactory implements MessageViewFactory<MessageHeade .mailboxIds(mailboxIds) .blobId(BlobId.of(blobManager.toBlobId(firstMessageResult.getMessageId()))) .threadId(firstMessageResult.getMessageId().serialize()) - .keywords(getKeywords(messageResults)) + .keywords(Helpers.getKeywords(messageResults)) .size(firstMessageResult.getSize()) - .inReplyToMessageId(getHeader(mimeMessage, "in-reply-to")) + .inReplyToMessageId(Helpers.getHeader(mimeMessage, "in-reply-to")) .subject(Strings.nullToEmpty(mimeMessage.getSubject()).trim()) - .headers(toMap(mimeMessage.getHeader().getFields())) - .from(firstFromMailboxList(mimeMessage.getFrom())) - .to(fromAddressList(mimeMessage.getTo())) - .cc(fromAddressList(mimeMessage.getCc())) - .bcc(fromAddressList(mimeMessage.getBcc())) - .replyTo(fromAddressList(mimeMessage.getReplyTo())) + .headers(Helpers.toMap(mimeMessage.getHeader().getFields())) + .from(Helpers.firstFromMailboxList(mimeMessage.getFrom())) + .to(Helpers.fromAddressList(mimeMessage.getTo())) + .cc(Helpers.fromAddressList(mimeMessage.getCc())) + .bcc(Helpers.fromAddressList(mimeMessage.getBcc())) + .replyTo(Helpers.fromAddressList(mimeMessage.getReplyTo())) .date(getDateFromHeaderOrInternalDateOtherwise(mimeMessage, firstMessageResult)) .build(); } diff --git a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/MessageMetadataViewFactory.java b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/MessageMetadataViewFactory.java index e98f609..4b88288 100644 --- a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/MessageMetadataViewFactory.java +++ b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/MessageMetadataViewFactory.java @@ -25,36 +25,50 @@ import java.util.List; import javax.inject.Inject; import org.apache.james.jmap.draft.model.BlobId; +import org.apache.james.jmap.draft.model.MessageProperties.ReadProfile; import org.apache.james.mailbox.BlobManager; +import org.apache.james.mailbox.MailboxSession; +import org.apache.james.mailbox.MessageIdManager; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.model.MailboxId; +import org.apache.james.mailbox.model.MessageId; import org.apache.james.mailbox.model.MessageResult; import com.google.common.annotations.VisibleForTesting; public class MessageMetadataViewFactory implements MessageViewFactory<MessageMetadataView> { + private final BlobManager blobManager; + private final MessageIdManager messageIdManager; @Inject @VisibleForTesting - public MessageMetadataViewFactory(BlobManager blobManager) { + public MessageMetadataViewFactory(BlobManager blobManager, MessageIdManager messageIdManager) { this.blobManager = blobManager; + this.messageIdManager = messageIdManager; } @Override - public MessageMetadataView fromMessageResults(Collection<MessageResult> messageResults) throws MailboxException { - assertOneMessageId(messageResults); + public List<MessageMetadataView> fromMessageIds(List<MessageId> messageIds, MailboxSession session) throws MailboxException { + List<MessageResult> messages = messageIdManager.getMessages(messageIds, ReadProfile.Metadata.getFetchGroup(), session); + return Helpers.toMessageViews(messages, this::fromMessageResults); + } + + @VisibleForTesting + public MessageMetadataView fromMessageResults(Collection<MessageResult> messageResults) { + Helpers.assertOneMessageId(messageResults); MessageResult firstMessageResult = messageResults.iterator().next(); - List<MailboxId> mailboxIds = getMailboxIds(messageResults); + List<MailboxId> mailboxIds = Helpers.getMailboxIds(messageResults); return MessageMetadataView.messageMetadataBuilder() .id(firstMessageResult.getMessageId()) .mailboxIds(mailboxIds) .blobId(BlobId.of(blobManager.toBlobId(firstMessageResult.getMessageId()))) .threadId(firstMessageResult.getMessageId().serialize()) - .keywords(getKeywords(messageResults)) + .keywords(Helpers.getKeywords(messageResults)) .size(firstMessageResult.getSize()) .build(); } + } diff --git a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/MessageViewFactory.java b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/MessageViewFactory.java index 4afb117..1a08705 100644 --- a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/MessageViewFactory.java +++ b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/MessageViewFactory.java @@ -24,18 +24,23 @@ import java.util.List; import java.util.Map; import java.util.function.Function; import java.util.stream.Collectors; +import java.util.stream.Stream; import org.apache.james.jmap.draft.model.Emailer; import org.apache.james.jmap.draft.model.Keywords; import org.apache.james.jmap.draft.utils.KeywordsCombiner; +import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.model.MailboxId; +import org.apache.james.mailbox.model.MessageId; import org.apache.james.mailbox.model.MessageResult; import org.apache.james.mime4j.dom.address.AddressList; import org.apache.james.mime4j.dom.address.Mailbox; import org.apache.james.mime4j.dom.address.MailboxList; import org.apache.james.mime4j.stream.Field; import org.apache.james.mime4j.util.MimeUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import com.github.steveash.guavate.Guavate; import com.google.common.base.Preconditions; @@ -44,96 +49,127 @@ import com.google.common.collect.ImmutableMap; import com.google.common.collect.Multimaps; public interface MessageViewFactory<T extends MessageView> { + + Logger LOGGER = LoggerFactory.getLogger(MessageViewFactory.class); + KeywordsCombiner KEYWORDS_COMBINER = new KeywordsCombiner(); Keywords.KeywordsFactory KEYWORDS_FACTORY = Keywords.lenientFactory(); String JMAP_MULTIVALUED_FIELD_DELIMITER = "\n"; - T fromMessageResults(Collection<MessageResult> messageResults) throws MailboxException; + List<T> fromMessageIds(List<MessageId> messageIds, MailboxSession mailboxSession) throws MailboxException; - default void assertOneMessageId(Collection<MessageResult> messageResults) { - Preconditions.checkArgument(!messageResults.isEmpty(), "MessageResults cannot be empty"); - Preconditions.checkArgument(hasOnlyOneMessageId(messageResults), "MessageResults need to share the same messageId"); - } + class Helpers { + interface FromMessageResult<T extends MessageView> { + T fromMessageResults(Collection<MessageResult> messageResults) throws MailboxException; + } - default boolean hasOnlyOneMessageId(Collection<MessageResult> messageResults) { - return messageResults - .stream() - .map(MessageResult::getMessageId) - .distinct() - .count() == 1; - } + static void assertOneMessageId(Collection<MessageResult> messageResults) { + Preconditions.checkArgument(!messageResults.isEmpty(), "MessageResults cannot be empty"); + Preconditions.checkArgument(hasOnlyOneMessageId(messageResults), "MessageResults need to share the same messageId"); + } - default List<MailboxId> getMailboxIds(Collection<MessageResult> messageResults) { - return messageResults.stream() + static boolean hasOnlyOneMessageId(Collection<MessageResult> messageResults) { + return messageResults + .stream() + .map(MessageResult::getMessageId) + .distinct() + .count() == 1; + } + + static List<MailboxId> getMailboxIds(Collection<MessageResult> messageResults) { + return messageResults.stream() .map(MessageResult::getMailboxId) .distinct() .collect(Guavate.toImmutableList()); - } + } - default Keywords getKeywords(Collection<MessageResult> messageResults) { - return messageResults.stream() + static Keywords getKeywords(Collection<MessageResult> messageResults) { + return messageResults.stream() .map(MessageResult::getFlags) .map(KEYWORDS_FACTORY::fromFlags) .reduce(KEYWORDS_COMBINER) .get(); - } + } - default String getHeader(org.apache.james.mime4j.dom.Message message, String header) { - Field field = message.getHeader().getField(header); - if (field == null) { - return null; + static String getHeader(org.apache.james.mime4j.dom.Message message, String header) { + Field field = message.getHeader().getField(header); + if (field == null) { + return null; + } + return field.getBody(); } - return field.getBody(); - } - default ImmutableMap<String, String> toMap(List<Field> fields) { - Function<Map.Entry<String, Collection<Field>>, String> bodyConcatenator = fieldListEntry -> fieldListEntry.getValue() - .stream() - .map(Field::getBody) - .map(MimeUtil::unscrambleHeaderValue) - .collect(Collectors.toList()) - .stream() - .collect(Collectors.joining(JMAP_MULTIVALUED_FIELD_DELIMITER)); - - return Multimaps.index(fields, Field::getName) - .asMap() - .entrySet() - .stream() - .collect(Guavate.toImmutableMap(Map.Entry::getKey, bodyConcatenator)); - } + static ImmutableMap<String, String> toMap(List<Field> fields) { + Function<Map.Entry<String, Collection<Field>>, String> bodyConcatenator = fieldListEntry -> fieldListEntry.getValue() + .stream() + .map(Field::getBody) + .map(MimeUtil::unscrambleHeaderValue) + .collect(Collectors.toList()) + .stream() + .collect(Collectors.joining(JMAP_MULTIVALUED_FIELD_DELIMITER)); + + return Multimaps.index(fields, Field::getName) + .asMap() + .entrySet() + .stream() + .collect(Guavate.toImmutableMap(Map.Entry::getKey, bodyConcatenator)); + } - default Emailer firstFromMailboxList(MailboxList list) { - if (list == null) { - return null; + static Emailer firstFromMailboxList(MailboxList list) { + if (list == null) { + return null; + } + return list.stream() + .map(Helpers::fromMailbox) + .findFirst() + .orElse(null); } - return list.stream() - .map(this::fromMailbox) - .findFirst() - .orElse(null); - } - default Emailer fromMailbox(Mailbox mailbox) { - return Emailer.builder() - .name(getNameOrAddress(mailbox)) - .email(mailbox.getAddress()) - .allowInvalid() - .build(); - } + static Emailer fromMailbox(Mailbox mailbox) { + return Emailer.builder() + .name(getNameOrAddress(mailbox)) + .email(mailbox.getAddress()) + .allowInvalid() + .build(); + } - default String getNameOrAddress(Mailbox mailbox) { - if (mailbox.getName() != null) { - return mailbox.getName(); + static String getNameOrAddress(Mailbox mailbox) { + if (mailbox.getName() != null) { + return mailbox.getName(); + } + return mailbox.getAddress(); } - return mailbox.getAddress(); - } - default ImmutableList<Emailer> fromAddressList(AddressList list) { - if (list == null) { - return ImmutableList.of(); + static ImmutableList<Emailer> fromAddressList(AddressList list) { + if (list == null) { + return ImmutableList.of(); + } + return list.flatten() + .stream() + .map(Helpers::fromMailbox) + .collect(Guavate.toImmutableList()); + } + + static <T extends MessageView> Function<Collection<MessageResult>, Stream<T>> toMessageViews(FromMessageResult<T> converter) { + return messageResults -> { + try { + return Stream.of(converter.fromMessageResults(messageResults)); + } catch (Exception e) { + LOGGER.error("Can not convert MessageResults to Message for {}", messageResults.iterator().next().getMessageId().serialize(), e); + return Stream.of(); + } + }; + } + + static <T extends MessageView> List<T> toMessageViews(List<MessageResult> messageResults, FromMessageResult<T> converter) { + return messageResults.stream() + .collect(Guavate.toImmutableListMultimap(MessageResult::getMessageId)) + .asMap() + .values() + .stream() + .filter(collection -> !collection.isEmpty()) + .flatMap(toMessageViews(converter)) + .collect(Guavate.toImmutableList()); } - return list.flatten() - .stream() - .map(this::fromMailbox) - .collect(Guavate.toImmutableList()); } } diff --git a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/MetaMessageViewFactory.java b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/MetaMessageViewFactory.java index f513613..149be58 100644 --- a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/MetaMessageViewFactory.java +++ b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/MetaMessageViewFactory.java @@ -35,7 +35,7 @@ public class MetaMessageViewFactory { this.messageMetadataViewFactory = messageMetadataViewFactory; } - public MessageViewFactory getFactory(MessageProperties.ReadProfile readProfile) { + public MessageViewFactory<? extends MessageView> getFactory(MessageProperties.ReadProfile readProfile) { switch (readProfile) { case Full: return messageFullViewFactory; diff --git a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/GetMessagesMethodTest.java b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/GetMessagesMethodTest.java index 833c8ac..e0fe458 100644 --- a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/GetMessagesMethodTest.java +++ b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/GetMessagesMethodTest.java @@ -109,12 +109,6 @@ public class GetMessagesMethodTest { MessageContentExtractor messageContentExtractor = new MessageContentExtractor(); BlobManager blobManager = mock(BlobManager.class); when(blobManager.toBlobId(any(MessageId.class))).thenReturn(BlobId.fromString("fake")); - messageMetadataViewFactory = spy(new MessageMetadataViewFactory(blobManager)); - MetaMessageViewFactory metaMessageViewFactory = new MetaMessageViewFactory( - new MessageFullViewFactory(blobManager, messageContentExtractor, htmlTextExtractor), - new MessageHeaderViewFactory(blobManager), - messageMetadataViewFactory); - InMemoryIntegrationResources resources = InMemoryIntegrationResources.defaultResources(); mailboxManager = resources.getMailboxManager(); @@ -124,6 +118,12 @@ public class GetMessagesMethodTest { mailboxManager.createMailbox(inboxPath, session); mailboxManager.createMailbox(customMailboxPath, session); messageIdManager = resources.getMessageIdManager(); + + messageMetadataViewFactory = spy(new MessageMetadataViewFactory(blobManager, messageIdManager)); + MetaMessageViewFactory metaMessageViewFactory = new MetaMessageViewFactory( + new MessageFullViewFactory(blobManager, messageContentExtractor, htmlTextExtractor, messageIdManager), + new MessageHeaderViewFactory(blobManager, messageIdManager), + messageMetadataViewFactory); testee = new GetMessagesMethod(metaMessageViewFactory, messageIdManager, new DefaultMetricFactory()); messageContent1 = org.apache.james.mime4j.dom.Message.Builder.of() @@ -141,7 +141,7 @@ public class GetMessagesMethodTest { .setBody("my message", StandardCharsets.UTF_8) .build(); } - + @Test public void processShouldThrowWhenNullRequest() { GetMessagesRequest request = null; @@ -163,9 +163,9 @@ public class GetMessagesMethodTest { @Test public void processShouldThrowWhenRequestHasAccountId() { assertThatThrownBy(() -> testee.process( - GetMessagesRequest.builder().accountId("abc").build(), mock(MethodCallId.class), mock(MailboxSession.class))).isInstanceOf(NotImplementedException.class); + GetMessagesRequest.builder().accountId("abc").build(), mock(MethodCallId.class), mock(MailboxSession.class))).isInstanceOf(NotImplementedException.class); } - + @Test @SuppressWarnings("unchecked") public void processShouldFetchMessages() throws Exception { @@ -173,15 +173,15 @@ public class GetMessagesMethodTest { ComposedMessageId message1 = inbox.appendMessage(AppendCommand.from(messageContent1), session); ComposedMessageId message2 = inbox.appendMessage(AppendCommand.from(messageContent2), session); ComposedMessageId message3 = inbox.appendMessage(AppendCommand.from(messageContent3), session); - + GetMessagesRequest request = GetMessagesRequest.builder() - .ids(ImmutableList.of(message1.getMessageId(), - message2.getMessageId(), - message3.getMessageId())) - .build(); + .ids(ImmutableList.of(message1.getMessageId(), + message2.getMessageId(), + message3.getMessageId())) + .build(); List<JmapResponse> result = testee.process(request, methodCallId, session).collect(Collectors.toList()); - + assertThat(result).hasSize(1) .extracting(JmapResponse::getResponse) .hasOnlyElementsOfType(GetMessagesResponse.class) @@ -195,24 +195,24 @@ public class GetMessagesMethodTest { Tuple.tuple(message2.getMessageId(), "message 2 subject", Optional.of("my message")), Tuple.tuple(message3.getMessageId(), "", Optional.of("my message"))); } - + @Test @SuppressWarnings("unchecked") public void processShouldFetchHtmlMessage() throws Exception { MessageManager inbox = mailboxManager.getMailbox(inboxPath, session); ComposedMessageId message = inbox.appendMessage( AppendCommand.from( - org.apache.james.mime4j.dom.Message.Builder.of() - .setSubject("message 1 subject") - .setBody("my <b>HTML</b> message", "html", StandardCharsets.UTF_8)), + org.apache.james.mime4j.dom.Message.Builder.of() + .setSubject("message 1 subject") + .setBody("my <b>HTML</b> message", "html", StandardCharsets.UTF_8)), session); - + GetMessagesRequest request = GetMessagesRequest.builder() - .ids(ImmutableList.of(message.getMessageId())) - .build(); + .ids(ImmutableList.of(message.getMessageId())) + .build(); List<JmapResponse> result = testee.process(request, methodCallId, session).collect(Collectors.toList()); - + assertThat(result).hasSize(1) .extracting(JmapResponse::getResponse) .hasOnlyElementsOfType(GetMessagesResponse.class) @@ -228,11 +228,11 @@ public class GetMessagesMethodTest { public void processShouldReturnOnlyMandatoryPropertiesOnEmptyPropertyList() throws Exception { MessageManager inbox = mailboxManager.getMailbox(inboxPath, session); ComposedMessageId message1 = inbox.appendMessage(AppendCommand.from(this.messageContent1), session); - + GetMessagesRequest request = GetMessagesRequest.builder() - .ids(ImmutableList.of(message1.getMessageId())) - .properties(ImmutableList.of()) - .build(); + .ids(ImmutableList.of(message1.getMessageId())) + .properties(ImmutableList.of()) + .build(); List<JmapResponse> result = testee.process(request, methodCallId, session).collect(Collectors.toList()); @@ -246,10 +246,10 @@ public class GetMessagesMethodTest { MessageManager inbox = mailboxManager.getMailbox(inboxPath, session); ComposedMessageId message1 = inbox.appendMessage(AppendCommand.from(messageContent1), session); - + GetMessagesRequest request = GetMessagesRequest.builder() - .ids(ImmutableList.of(message1.getMessageId())) - .build(); + .ids(ImmutableList.of(message1.getMessageId())) + .build(); List<JmapResponse> result = testee.process(request, methodCallId, session).collect(Collectors.toList()); assertThat(result).hasSize(1); @@ -262,11 +262,11 @@ public class GetMessagesMethodTest { MessageManager inbox = mailboxManager.getMailbox(inboxPath, session); ComposedMessageId message1 = inbox.appendMessage(AppendCommand.from(messageContent1), session); - + GetMessagesRequest request = GetMessagesRequest.builder() - .ids(ImmutableList.of(message1.getMessageId())) - .properties(ImmutableList.of(MessageProperty.subject.asFieldName())) - .build(); + .ids(ImmutableList.of(message1.getMessageId())) + .properties(ImmutableList.of(MessageProperty.subject.asFieldName())) + .build(); Set<MessageProperty> expected = Sets.newHashSet(MessageProperty.id, MessageProperty.subject); @@ -275,17 +275,17 @@ public class GetMessagesMethodTest { assertThat(result.get(0).getProperties()) .isEqualTo(Optional.of(expected)); } - + @Test public void processShouldReturnTextBodyWhenBodyInPropertyListAndEmptyHtmlBody() throws Exception { MessageManager inbox = mailboxManager.getMailbox(inboxPath, session); ComposedMessageId message1 = inbox.appendMessage(AppendCommand.from(messageContent1), session); - + GetMessagesRequest request = GetMessagesRequest.builder() - .ids(ImmutableList.of(message1.getMessageId())) - .properties(ImmutableList.of(MessageProperty.body.asFieldName())) - .build(); + .ids(ImmutableList.of(message1.getMessageId())) + .properties(ImmutableList.of(MessageProperty.body.asFieldName())) + .build(); Set<MessageProperty> expected = Sets.newHashSet(MessageProperty.id, MessageProperty.textBody); @@ -332,8 +332,8 @@ public class GetMessagesMethodTest { ComposedMessageId message = inbox.appendMessage( AppendCommand.from(org.apache.james.mime4j.dom.Message.Builder.of() - .setSubject("message 1 subject") - .setBody("", "html", StandardCharsets.UTF_8)), + .setSubject("message 1 subject") + .setBody("", "html", StandardCharsets.UTF_8)), session); GetMessagesRequest request = GetMessagesRequest.builder() @@ -360,14 +360,14 @@ public class GetMessagesMethodTest { ComposedMessageId message = inbox.appendMessage( AppendCommand.from(org.apache.james.mime4j.dom.Message.Builder.of() - .setSubject("message subject") - .setBody(MultipartBuilder.create() - .setSubType("alternative") - .addBodyPart(BodyPartBuilder.create() - .setBody("My plain message", "plain", StandardCharsets.UTF_8)) - .addBodyPart(BodyPartBuilder.create() - .setBody("<a>The </a> <strong>HTML</strong> message", "html", StandardCharsets.UTF_8)) - .build())), + .setSubject("message subject") + .setBody(MultipartBuilder.create() + .setSubType("alternative") + .addBodyPart(BodyPartBuilder.create() + .setBody("My plain message", "plain", StandardCharsets.UTF_8)) + .addBodyPart(BodyPartBuilder.create() + .setBody("<a>The </a> <strong>HTML</strong> message", "html", StandardCharsets.UTF_8)) + .build())), session); GetMessagesRequest request = GetMessagesRequest.builder() @@ -400,11 +400,11 @@ public class GetMessagesMethodTest { .setSubject("message 1 subject") .setBody("my message", StandardCharsets.UTF_8)), session); - + GetMessagesRequest request = GetMessagesRequest.builder() - .ids(ImmutableList.of(message1.getMessageId())) - .properties(ImmutableList.of("headers.from", "headers.heADER2")) - .build(); + .ids(ImmutableList.of(message1.getMessageId())) + .properties(ImmutableList.of("headers.from", "headers.heADER2")) + .build(); Set<MessageProperty> expected = Sets.newHashSet(MessageProperty.id, MessageProperty.headers); @@ -414,7 +414,7 @@ public class GetMessagesMethodTest { assertThat(result.get(0).getProperties()) .isEqualTo(Optional.of(expected)); } - + @Test public void processShouldReturnPropertyFilterWhenFilteringHeadersRequested() throws Exception { MessageManager inbox = mailboxManager.getMailbox(inboxPath, session); @@ -428,11 +428,11 @@ public class GetMessagesMethodTest { .setSubject("message 1 subject") .setBody("my message", StandardCharsets.UTF_8)), session); - + GetMessagesRequest request = GetMessagesRequest.builder() - .ids(ImmutableList.of(message1.getMessageId())) - .properties(ImmutableList.of("headers.from", "headers.heADER2")) - .build(); + .ids(ImmutableList.of(message1.getMessageId())) + .properties(ImmutableList.of("headers.from", "headers.heADER2")) + .build(); List<JmapResponse> result = testee.process(request, methodCallId, session).collect(Collectors.toList()); @@ -662,16 +662,16 @@ public class GetMessagesMethodTest { .extracting(MessageFullView.class::cast) .extracting(MessageFullView::getKeywords) .containsOnlyElementsOf( - ImmutableList.of( - ImmutableMap.of( - "$Answered", true, - "$Draft", true), - ImmutableMap.of( - "$Answered", true, - "$Draft", true), - ImmutableMap.of( - "$Answered", true, - "$Draft", true))); + ImmutableList.of( + ImmutableMap.of( + "$Answered", true, + "$Draft", true), + ImmutableMap.of( + "$Answered", true, + "$Draft", true), + ImmutableMap.of( + "$Answered", true, + "$Draft", true))); } @@ -721,16 +721,16 @@ public class GetMessagesMethodTest { .extracting(MessageFullView.class::cast) .extracting(MessageFullView::getKeywords) .containsOnlyElementsOf( - ImmutableList.of( - ImmutableMap.of( - "$Answered", true, - "$Draft", true), - ImmutableMap.of( - "$Answered", true, - "$Draft", true), - ImmutableMap.of( - "$Answered", true, - "$Draft", true))); + ImmutableList.of( + ImmutableMap.of( + "$Answered", true, + "$Draft", true), + ImmutableMap.of( + "$Answered", true, + "$Draft", true), + ImmutableMap.of( + "$Answered", true, + "$Draft", true))); } @@ -763,10 +763,10 @@ public class GetMessagesMethodTest { .extracting(MessageFullView.class::cast) .extracting(MessageFullView::getKeywords) .containsOnlyElementsOf( - ImmutableList.of( - ImmutableMap.of( - "$Answered", true, - FORWARDED, true))); + ImmutableList.of( + ImmutableMap.of( + "$Answered", true, + FORWARDED, true))); } } diff --git a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/MessageSenderTest.java b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/MessageSenderTest.java index fe2615d..3791de6 100644 --- a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/MessageSenderTest.java +++ b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/MessageSenderTest.java @@ -41,6 +41,7 @@ import org.apache.james.jmap.draft.model.message.view.MessageFullViewFactory; import org.apache.james.jmap.draft.model.message.view.MessageFullViewFactory.MetaDataWithContent; import org.apache.james.jmap.draft.utils.HtmlTextExtractor; import org.apache.james.mailbox.BlobManager; +import org.apache.james.mailbox.MessageIdManager; import org.apache.james.mailbox.MessageUid; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.inmemory.InMemoryId; @@ -88,7 +89,8 @@ class MessageSenderTest { MessageContentExtractor messageContentExtractor = new MessageContentExtractor(); BlobManager blobManager = mock(BlobManager.class); when(blobManager.toBlobId(any(MessageId.class))).thenReturn(BlobId.fromString("fake")); - MessageFullViewFactory messageFullViewFactory = new MessageFullViewFactory(blobManager, messageContentExtractor, htmlTextExtractor); + MessageIdManager messageIdManager = mock(MessageIdManager.class); + MessageFullViewFactory messageFullViewFactory = new MessageFullViewFactory(blobManager, messageContentExtractor, htmlTextExtractor, messageIdManager); jmapMessage = messageFullViewFactory.fromMetaDataWithContent(message); envelope = EnvelopeUtils.fromMessage(jmapMessage); } diff --git a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/SetMessagesCreationProcessorTest.java b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/SetMessagesCreationProcessorTest.java index 4bf45dc..92f0adb 100644 --- a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/SetMessagesCreationProcessorTest.java +++ b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/SetMessagesCreationProcessorTest.java @@ -124,7 +124,8 @@ public class SetMessagesCreationProcessorTest { MessageContentExtractor messageContentExtractor = new MessageContentExtractor(); BlobManager blobManager = mock(BlobManager.class); when(blobManager.toBlobId(any(MessageId.class))).thenReturn(org.apache.james.mailbox.model.BlobId.fromString("fake")); - messageFullViewFactory = new MessageFullViewFactory(blobManager, messageContentExtractor, htmlTextExtractor); + MessageIdManager messageIdManager = mock(MessageIdManager.class); + messageFullViewFactory = new MessageFullViewFactory(blobManager, messageContentExtractor, htmlTextExtractor, messageIdManager); mockedMailSpool = mock(MailSpool.class); mockedAttachmentManager = mock(AttachmentManager.class); mockedMailboxManager = mock(MailboxManager.class); diff --git a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageFullViewFactoryTest.java b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageFullViewFactoryTest.java index cc71703..c717a41 100644 --- a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageFullViewFactoryTest.java +++ b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageFullViewFactoryTest.java @@ -29,7 +29,6 @@ import static org.assertj.core.api.Assertions.assertThat; import java.io.ByteArrayInputStream; import java.nio.charset.StandardCharsets; import java.time.Instant; -import java.util.List; import java.util.Optional; import javax.mail.Flags; @@ -56,12 +55,10 @@ import org.apache.james.mailbox.inmemory.manager.InMemoryIntegrationResources; import org.apache.james.mailbox.model.AttachmentId; import org.apache.james.mailbox.model.Cid; import org.apache.james.mailbox.model.ComposedMessageId; -import org.apache.james.mailbox.model.FetchGroup; import org.apache.james.mailbox.model.MailboxId; import org.apache.james.mailbox.model.MailboxPath; import org.apache.james.mailbox.model.MessageAttachment; import org.apache.james.mailbox.model.MessageRange; -import org.apache.james.mailbox.model.MessageResult; import org.apache.james.mailbox.model.TestMessageId; import org.apache.james.util.ClassLoaderUtils; import org.apache.james.util.mime.MessageContentExtractor; @@ -106,15 +103,12 @@ class MessageFullViewFactoryTest { .build(ClassLoaderUtils.getSystemResourceAsSharedStream("fullMessage.eml")), session); - messageFullViewFactory = new MessageFullViewFactory(resources.getBlobManager(), messageContentExtractor, htmlTextExtractor); + messageFullViewFactory = new MessageFullViewFactory(resources.getBlobManager(), messageContentExtractor, htmlTextExtractor, messageIdManager); } @Test void fromMessageResultsShouldReturnCorrectView() throws Exception { - List<MessageResult> messages = messageIdManager - .getMessages(ImmutableList.of(message1.getMessageId()), FetchGroup.FULL_CONTENT, session); - - MessageFullView actual = messageFullViewFactory.fromMessageResults(messages); + MessageFullView actual = messageFullViewFactory.fromMessageIds(ImmutableList.of(message1.getMessageId()), session).get(0); SoftAssertions.assertSoftly(softly -> { softly.assertThat(actual.getId()).isEqualTo(message1.getMessageId()); softly.assertThat(actual.getMailboxIds()).containsExactly(bobInbox.getId()); @@ -145,10 +139,7 @@ class MessageFullViewFactoryTest { messageIdManager.setInMailboxes(message1.getMessageId(), ImmutableList.of(bobInbox.getId(), bobMailbox.getId()), session); bobMailbox.setFlags(new Flags(Flags.Flag.FLAGGED), MessageManager.FlagsUpdateMode.REPLACE, MessageRange.all(), session); - List<MessageResult> messages = messageIdManager - .getMessages(ImmutableList.of(message1.getMessageId()), FetchGroup.FULL_CONTENT, session); - - MessageFullView actual = messageFullViewFactory.fromMessageResults(messages); + MessageFullView actual = messageFullViewFactory.fromMessageIds(ImmutableList.of(message1.getMessageId()), session).get(0); SoftAssertions.assertSoftly(softly -> { softly.assertThat(actual.getId()).isEqualTo(message1.getMessageId()); softly.assertThat(actual.getKeywords()).isEqualTo(Keywords.strictFactory().from(Keyword.SEEN, Keyword.FLAGGED).asMap()); diff --git a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageHeaderViewFactoryTest.java b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageHeaderViewFactoryTest.java index 4973e1e..8ed0b63 100644 --- a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageHeaderViewFactoryTest.java +++ b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageHeaderViewFactoryTest.java @@ -26,7 +26,6 @@ import static org.apache.james.jmap.draft.model.message.view.MessageViewFixture. import static org.apache.james.jmap.draft.model.message.view.MessageViewFixture.JACK_EMAIL; import static org.apache.james.jmap.draft.model.message.view.MessageViewFixture.JACOB_EMAIL; -import java.util.List; import java.util.Optional; import javax.mail.Flags; @@ -41,11 +40,9 @@ import org.apache.james.mailbox.MessageManager; import org.apache.james.mailbox.inmemory.InMemoryMailboxManager; import org.apache.james.mailbox.inmemory.manager.InMemoryIntegrationResources; import org.apache.james.mailbox.model.ComposedMessageId; -import org.apache.james.mailbox.model.FetchGroup; import org.apache.james.mailbox.model.MailboxId; import org.apache.james.mailbox.model.MailboxPath; import org.apache.james.mailbox.model.MessageRange; -import org.apache.james.mailbox.model.MessageResult; import org.apache.james.util.ClassLoaderUtils; import org.assertj.core.api.SoftAssertions; import org.junit.jupiter.api.BeforeEach; @@ -79,15 +76,12 @@ class MessageHeaderViewFactoryTest { .build(ClassLoaderUtils.getSystemResourceAsSharedStream("fullMessage.eml")), session); - testee = new MessageHeaderViewFactory(resources.getBlobManager()); + testee = new MessageHeaderViewFactory(resources.getBlobManager(), messageIdManager); } @Test void fromMessageResultsShouldReturnCorrectView() throws Exception { - List<MessageResult> messages = messageIdManager - .getMessages(ImmutableList.of(message1.getMessageId()), FetchGroup.HEADERS, session); - - MessageHeaderView actual = testee.fromMessageResults(messages); + MessageHeaderView actual = testee.fromMessageIds(ImmutableList.of(message1.getMessageId()), session).get(0); SoftAssertions.assertSoftly(softly -> { softly.assertThat(actual.getId()).isEqualTo(message1.getMessageId()); softly.assertThat(actual.getMailboxIds()).containsExactly(bobInbox.getId()); @@ -112,10 +106,7 @@ class MessageHeaderViewFactoryTest { messageIdManager.setInMailboxes(message1.getMessageId(), ImmutableList.of(bobInbox.getId(), bobMailbox.getId()), session); bobMailbox.setFlags(new Flags(Flags.Flag.FLAGGED), MessageManager.FlagsUpdateMode.REPLACE, MessageRange.all(), session); - List<MessageResult> messages = messageIdManager - .getMessages(ImmutableList.of(message1.getMessageId()), FetchGroup.HEADERS, session); - - MessageHeaderView actual = testee.fromMessageResults(messages); + MessageHeaderView actual = testee.fromMessageIds(ImmutableList.of(message1.getMessageId()), session).get(0); SoftAssertions.assertSoftly(softly -> { softly.assertThat(actual.getId()).isEqualTo(message1.getMessageId()); softly.assertThat(actual.getKeywords()).isEqualTo(Keywords.strictFactory().from(Keyword.SEEN, Keyword.FLAGGED).asMap()); diff --git a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageMetadataViewFactoryTest.java b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageMetadataViewFactoryTest.java index d6626f4..348e1ef 100644 --- a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageMetadataViewFactoryTest.java +++ b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageMetadataViewFactoryTest.java @@ -21,8 +21,6 @@ package org.apache.james.jmap.draft.model.message.view; import static org.apache.james.jmap.draft.model.message.view.MessageViewFixture.BOB; -import java.util.List; - import javax.mail.Flags; import org.apache.james.jmap.draft.model.BlobId; @@ -35,11 +33,9 @@ import org.apache.james.mailbox.MessageManager; import org.apache.james.mailbox.inmemory.InMemoryMailboxManager; import org.apache.james.mailbox.inmemory.manager.InMemoryIntegrationResources; import org.apache.james.mailbox.model.ComposedMessageId; -import org.apache.james.mailbox.model.FetchGroup; import org.apache.james.mailbox.model.MailboxId; import org.apache.james.mailbox.model.MailboxPath; import org.apache.james.mailbox.model.MessageRange; -import org.apache.james.mailbox.model.MessageResult; import org.assertj.core.api.SoftAssertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -72,15 +68,12 @@ class MessageMetadataViewFactoryTest { .build("header: value\r\n\r\nbody"), session); - testee = new MessageMetadataViewFactory(resources.getBlobManager()); + testee = new MessageMetadataViewFactory(resources.getBlobManager(), messageIdManager); } @Test void fromMessageResultsShouldReturnCorrectView() throws Exception { - List<MessageResult> messages = messageIdManager - .getMessages(ImmutableList.of(message1.getMessageId()), FetchGroup.MINIMAL, session); - - MessageMetadataView actual = testee.fromMessageResults(messages); + MessageMetadataView actual = testee.fromMessageIds(ImmutableList.of(message1.getMessageId()), session).get(0); SoftAssertions.assertSoftly(softly -> { softly.assertThat(actual.getId()).isEqualTo(message1.getMessageId()); softly.assertThat(actual.getMailboxIds()).containsExactly(bobInbox.getId()); @@ -96,10 +89,7 @@ class MessageMetadataViewFactoryTest { messageIdManager.setInMailboxes(message1.getMessageId(), ImmutableList.of(bobInbox.getId(), bobMailbox.getId()), session); bobMailbox.setFlags(new Flags(Flags.Flag.FLAGGED), MessageManager.FlagsUpdateMode.REPLACE, MessageRange.all(), session); - List<MessageResult> messages = messageIdManager - .getMessages(ImmutableList.of(message1.getMessageId()), FetchGroup.MINIMAL, session); - - MessageMetadataView actual = testee.fromMessageResults(messages); + MessageMetadataView actual = testee.fromMessageIds(ImmutableList.of(message1.getMessageId()), session).get(0); SoftAssertions.assertSoftly(softly -> { softly.assertThat(actual.getId()).isEqualTo(message1.getMessageId()); softly.assertThat(actual.getKeywords()).isEqualTo(Keywords.strictFactory().from(Keyword.SEEN, Keyword.FLAGGED).asMap()); --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
