JAMES-2143 Setting JMAP blobId Message property
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/0024a0c7 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/0024a0c7 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/0024a0c7 Branch: refs/heads/master Commit: 0024a0c76582bc90a64c7412d7de05f91739940d Parents: 4e0e860 Author: benwa <btell...@linagora.com> Authored: Mon Sep 11 17:34:51 2017 +0700 Committer: Antoine Duprat <adup...@linagora.com> Committed: Wed Sep 13 10:19:53 2017 +0200 ---------------------------------------------------------------------- .../org/apache/james/mailbox/BlobManager.java | 3 +++ .../james/mailbox/store/StoreBlobManager.java | 5 ++++ .../mailbox/store/StoreBlobManagerTest.java | 6 +++++ .../org/apache/james/jmap/model/BlobId.java | 11 +++++++++ .../apache/james/jmap/model/MessageFactory.java | 8 +++++-- .../jmap/methods/GetMessagesMethodTest.java | 21 ++++++++++------- .../SetMessagesCreationProcessorTest.java | 8 ++++++- .../org/apache/james/jmap/model/BlobIdTest.java | 2 +- .../james/jmap/model/MessageFactoryTest.java | 24 +++++++++++++------- .../apache/james/jmap/send/MailFactoryTest.java | 9 ++++++-- 10 files changed, 75 insertions(+), 22 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/0024a0c7/mailbox/api/src/main/java/org/apache/james/mailbox/BlobManager.java ---------------------------------------------------------------------- diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/BlobManager.java b/mailbox/api/src/main/java/org/apache/james/mailbox/BlobManager.java index ad453b7..e41b30b 100644 --- a/mailbox/api/src/main/java/org/apache/james/mailbox/BlobManager.java +++ b/mailbox/api/src/main/java/org/apache/james/mailbox/BlobManager.java @@ -23,7 +23,10 @@ import org.apache.james.mailbox.exception.BlobNotFoundException; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.model.Blob; import org.apache.james.mailbox.model.BlobId; +import org.apache.james.mailbox.model.MessageId; public interface BlobManager { + BlobId toBlobId(MessageId messageId); + Blob retrieve(BlobId blobId, MailboxSession mailboxSession) throws MailboxException, BlobNotFoundException; } http://git-wip-us.apache.org/repos/asf/james-project/blob/0024a0c7/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreBlobManager.java ---------------------------------------------------------------------- diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreBlobManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreBlobManager.java index 2869354..c70d479 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreBlobManager.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreBlobManager.java @@ -57,6 +57,11 @@ public class StoreBlobManager implements BlobManager { } @Override + public BlobId toBlobId(MessageId messageId) { + return BlobId.fromString(messageId.serialize()); + } + + @Override public Blob retrieve(BlobId blobId, MailboxSession mailboxSession) throws MailboxException, BlobNotFoundException { return getBlobFromAttachment(blobId, mailboxSession) .orElseGet(() -> getBlobFromMessage(blobId, mailboxSession) http://git-wip-us.apache.org/repos/asf/james-project/blob/0024a0c7/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreBlobManagerTest.java ---------------------------------------------------------------------- diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreBlobManagerTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreBlobManagerTest.java index 366bc76..197d8d7 100644 --- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreBlobManagerTest.java +++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreBlobManagerTest.java @@ -221,4 +221,10 @@ public class StoreBlobManagerTest { .isInstanceOf(RuntimeException.class); } + @Test + public void toBlobIdShouldReturnBlobIdCorrespondingToAMessageId() { + assertThat(blobManager.toBlobId(MESSAGE_ID)) + .isEqualTo(BlobId.fromString("125")); + } + } http://git-wip-us.apache.org/repos/asf/james-project/blob/0024a0c7/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/BlobId.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/BlobId.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/BlobId.java index 578c09f..9c4b8df 100644 --- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/BlobId.java +++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/BlobId.java @@ -31,6 +31,10 @@ public class BlobId { return new BlobId(rawValue); } + public static BlobId of(org.apache.james.mailbox.model.BlobId blobId) { + return new BlobId(blobId.asString()); + } + private final String rawValue; private BlobId(String rawValue) { @@ -55,4 +59,11 @@ public class BlobId { public final int hashCode() { return Objects.hashCode(this.rawValue); } + + @Override + public String toString() { + return "BlobId{" + + "rawValue='" + rawValue + '\'' + + '}'; + } } http://git-wip-us.apache.org/repos/asf/james-project/blob/0024a0c7/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MessageFactory.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MessageFactory.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MessageFactory.java index 1533637..236be87 100644 --- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MessageFactory.java +++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MessageFactory.java @@ -30,11 +30,13 @@ import java.util.Optional; import java.util.Set; import java.util.function.Function; import java.util.stream.Collectors; + import javax.inject.Inject; import javax.mail.Flags; import javax.mail.internet.SharedInputStream; import org.apache.james.jmap.utils.HtmlTextExtractor; +import org.apache.james.mailbox.BlobManager; import org.apache.james.mailbox.MessageUid; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.model.Cid; @@ -69,12 +71,14 @@ public class MessageFactory { .setMaxLineLen(-1) .build(); + private final BlobManager blobManager; private final MessagePreviewGenerator messagePreview; private final MessageContentExtractor messageContentExtractor; private final HtmlTextExtractor htmlTextExtractor; @Inject - public MessageFactory(MessagePreviewGenerator messagePreview, MessageContentExtractor messageContentExtractor, HtmlTextExtractor htmlTextExtractor) { + public MessageFactory(BlobManager blobManager, MessagePreviewGenerator messagePreview, MessageContentExtractor messageContentExtractor, HtmlTextExtractor htmlTextExtractor) { + this.blobManager = blobManager; this.messagePreview = messagePreview; this.messageContentExtractor = messageContentExtractor; this.htmlTextExtractor = htmlTextExtractor; @@ -89,7 +93,7 @@ public class MessageFactory { String preview = messagePreview.compute(mainTextContent); return Message.builder() .id(message.getMessageId()) - .blobId(BlobId.of(String.valueOf(message.getUid().asLong()))) + .blobId(BlobId.of(blobManager.toBlobId(message.getMessageId()))) .threadId(message.getMessageId().serialize()) .mailboxIds(message.getMailboxIds()) .inReplyToMessageId(getHeader(mimeMessage, "in-reply-to")) http://git-wip-us.apache.org/repos/asf/james-project/blob/0024a0c7/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/GetMessagesMethodTest.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/GetMessagesMethodTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/GetMessagesMethodTest.java index fb1353b..36e4348 100644 --- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/GetMessagesMethodTest.java +++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/GetMessagesMethodTest.java @@ -23,6 +23,7 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.mockito.Matchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; + import java.io.ByteArrayInputStream; import java.util.Date; import java.util.List; @@ -35,7 +36,6 @@ import java.util.stream.Collectors; import javax.mail.Flags; import javax.mail.Flags.Flag; -import com.google.common.collect.ImmutableSet; import org.apache.commons.lang.NotImplementedException; import org.apache.james.jmap.model.ClientId; import org.apache.james.jmap.model.GetMessagesRequest; @@ -46,6 +46,7 @@ import org.apache.james.jmap.model.MessagePreviewGenerator; import org.apache.james.jmap.model.MessageProperties.MessageProperty; import org.apache.james.jmap.utils.HtmlTextExtractor; import org.apache.james.jmap.utils.JsoupHtmlTextExtractor; +import org.apache.james.mailbox.BlobManager; import org.apache.james.mailbox.FlagsBuilder; import org.apache.james.mailbox.MailboxManager; import org.apache.james.mailbox.MailboxSession; @@ -56,11 +57,18 @@ import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.inmemory.InMemoryMessageIdManager; import org.apache.james.mailbox.inmemory.manager.InMemoryIntegrationResources; import org.apache.james.mailbox.mock.MockMailboxSession; +import org.apache.james.mailbox.model.BlobId; import org.apache.james.mailbox.model.ComposedMessageId; import org.apache.james.mailbox.model.MailboxId; import org.apache.james.mailbox.model.MailboxPath; +import org.apache.james.mailbox.model.MessageId; import org.apache.james.metrics.logger.DefaultMetricFactory; import org.apache.james.util.mime.MessageContentExtractor; +import org.assertj.core.api.Condition; +import org.assertj.core.data.MapEntry; +import org.assertj.core.groups.Tuple; +import org.junit.Before; +import org.junit.Test; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter; @@ -69,15 +77,10 @@ import com.github.steveash.guavate.Guavate; import com.google.common.base.Charsets; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; import com.google.common.collect.Sets; import com.jayway.jsonpath.JsonPath; -import org.assertj.core.api.Condition; -import org.assertj.core.data.MapEntry; -import org.assertj.core.groups.Tuple; -import org.junit.Before; -import org.junit.Test; - public class GetMessagesMethodTest { private final static String FORWARDED = "forwarded"; public static final Flags FLAGS = null; @@ -130,7 +133,9 @@ public class GetMessagesMethodTest { HtmlTextExtractor htmlTextExtractor = new JsoupHtmlTextExtractor(); MessagePreviewGenerator messagePreview = new MessagePreviewGenerator(); MessageContentExtractor messageContentExtractor = new MessageContentExtractor(); - MessageFactory messageFactory = new MessageFactory(messagePreview, messageContentExtractor, htmlTextExtractor); + BlobManager blobManager = mock(BlobManager.class); + when(blobManager.toBlobId(any(MessageId.class))).thenReturn(BlobId.fromString("fake")); + MessageFactory messageFactory = new MessageFactory(blobManager, messagePreview, messageContentExtractor, htmlTextExtractor); InMemoryIntegrationResources inMemoryIntegrationResources = new InMemoryIntegrationResources(); GroupMembershipResolver groupMembershipResolver = inMemoryIntegrationResources.createGroupMembershipResolver(); mailboxManager = inMemoryIntegrationResources.createMailboxManager(groupMembershipResolver); http://git-wip-us.apache.org/repos/asf/james-project/blob/0024a0c7/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/SetMessagesCreationProcessorTest.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/SetMessagesCreationProcessorTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/SetMessagesCreationProcessorTest.java index 84bf14d..8f15c63 100644 --- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/SetMessagesCreationProcessorTest.java +++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/SetMessagesCreationProcessorTest.java @@ -26,11 +26,13 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; + import java.io.InputStream; import java.sql.Date; import java.util.Optional; import java.util.function.Supplier; import java.util.stream.Stream; + import javax.mail.Flags; import org.apache.james.jmap.exceptions.AttachmentsNotFoundException; @@ -53,6 +55,7 @@ import org.apache.james.jmap.send.MailSpool; import org.apache.james.jmap.utils.HtmlTextExtractor; import org.apache.james.jmap.utils.SystemMailboxesProvider; import org.apache.james.mailbox.AttachmentManager; +import org.apache.james.mailbox.BlobManager; import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.MessageManager; import org.apache.james.mailbox.MessageUid; @@ -63,6 +66,7 @@ import org.apache.james.mailbox.mock.MockMailboxSession; import org.apache.james.mailbox.model.AttachmentId; import org.apache.james.mailbox.model.ComposedMessageId; import org.apache.james.mailbox.model.MailboxPath; +import org.apache.james.mailbox.model.MessageId; import org.apache.james.mailbox.model.TestMessageId; import org.apache.james.metrics.api.NoopMetricFactory; import org.apache.james.util.OptionalUtils; @@ -124,7 +128,9 @@ public class SetMessagesCreationProcessorTest { MessagePreviewGenerator messagePreview = mock(MessagePreviewGenerator.class); MessageContentExtractor messageContentExtractor = new MessageContentExtractor(); when(messagePreview.compute(any())).thenReturn("text preview"); - messageFactory = new MessageFactory(messagePreview, messageContentExtractor, htmlTextExtractor); + BlobManager blobManager = mock(BlobManager.class); + when(blobManager.toBlobId(any(MessageId.class))).thenReturn(org.apache.james.mailbox.model.BlobId.fromString("fake")); + messageFactory = new MessageFactory(blobManager, messagePreview, messageContentExtractor, htmlTextExtractor); mockedMailSpool = mock(MailSpool.class); mockedMailFactory = mock(MailFactory.class); mockedAttachmentManager = mock(AttachmentManager.class); http://git-wip-us.apache.org/repos/asf/james-project/blob/0024a0c7/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/BlobIdTest.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/BlobIdTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/BlobIdTest.java index bf04a1e..1fb256e 100644 --- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/BlobIdTest.java +++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/BlobIdTest.java @@ -34,7 +34,7 @@ public class BlobIdTest { @Test public void shouldNotAllowNullInput() { - assertThatThrownBy(() -> BlobId.of(null)).isInstanceOf(IllegalArgumentException.class); + assertThatThrownBy(() -> BlobId.of((String) null)).isInstanceOf(IllegalArgumentException.class); } @Test http://git-wip-us.apache.org/repos/asf/james-project/blob/0024a0c7/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageFactoryTest.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageFactoryTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageFactoryTest.java index 76a5e14..2d86294 100644 --- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageFactoryTest.java +++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageFactoryTest.java @@ -19,33 +19,39 @@ package org.apache.james.jmap.model; import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + import java.io.ByteArrayInputStream; import java.time.Instant; import java.util.Optional; + import javax.mail.Flags; import javax.mail.Flags.Flag; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.StringUtils; import org.apache.james.jmap.model.MessageFactory.MetaDataWithContent; import org.apache.james.jmap.utils.HtmlTextExtractor; import org.apache.james.jmap.utils.JsoupHtmlTextExtractor; +import org.apache.james.mailbox.BlobManager; import org.apache.james.mailbox.FlagsBuilder; import org.apache.james.mailbox.MessageUid; import org.apache.james.mailbox.inmemory.InMemoryId; import org.apache.james.mailbox.model.AttachmentId; import org.apache.james.mailbox.model.Cid; import org.apache.james.mailbox.model.MessageAttachment; +import org.apache.james.mailbox.model.MessageId; import org.apache.james.mailbox.model.TestMessageId; import org.apache.james.util.mime.MessageContentExtractor; -import org.apache.commons.io.IOUtils; -import org.apache.commons.lang3.StringUtils; +import org.junit.Before; +import org.junit.Test; import com.google.common.base.Charsets; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; -import org.junit.Before; -import org.junit.Test; - public class MessageFactoryTest { private static final String FORWARDED = "forwarded"; private static final InMemoryId MAILBOX_ID = InMemoryId.of(18L); @@ -62,7 +68,9 @@ public class MessageFactoryTest { messagePreview = new MessagePreviewGenerator(); MessageContentExtractor messageContentExtractor = new MessageContentExtractor(); - messageFactory = new MessageFactory(messagePreview, messageContentExtractor, htmlTextExtractor); + BlobManager blobManager = mock(BlobManager.class); + when(blobManager.toBlobId(any(MessageId.class))).thenReturn(org.apache.james.mailbox.model.BlobId.fromString("blobId")); + messageFactory = new MessageFactory(blobManager, messagePreview, messageContentExtractor, htmlTextExtractor); } @Test @@ -151,7 +159,7 @@ public class MessageFactoryTest { Message testee = messageFactory.fromMetaDataWithContent(testMail); Message expected = Message.builder() .id(TestMessageId.of(2)) - .blobId(BlobId.of("2")) + .blobId(BlobId.of("blobId")) .threadId("2") .mailboxId(MAILBOX_ID) .inReplyToMessageId("<snt124-w2664003139c1e520cf4f6787...@phx.gbl>") @@ -205,7 +213,7 @@ public class MessageFactoryTest { Message testee = messageFactory.fromMetaDataWithContent(testMail); Message expected = Message.builder() .id(TestMessageId.of(2)) - .blobId(BlobId.of("2")) + .blobId(BlobId.of("blobId")) .threadId("2") .mailboxId(MAILBOX_ID) .headers(headersMap) http://git-wip-us.apache.org/repos/asf/james-project/blob/0024a0c7/server/protocols/jmap/src/test/java/org/apache/james/jmap/send/MailFactoryTest.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/send/MailFactoryTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/send/MailFactoryTest.java index bec084b..dd5e0f7 100644 --- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/send/MailFactoryTest.java +++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/send/MailFactoryTest.java @@ -29,19 +29,22 @@ import java.util.Collection; import javax.mail.Flags; import javax.mail.util.SharedByteArrayInputStream; +import org.apache.james.core.MailAddress; import org.apache.james.jmap.model.Message; import org.apache.james.jmap.model.MessageFactory; import org.apache.james.jmap.model.MessageFactory.MetaDataWithContent; import org.apache.james.jmap.model.MessagePreviewGenerator; import org.apache.james.jmap.utils.HtmlTextExtractor; +import org.apache.james.mailbox.BlobManager; import org.apache.james.mailbox.FlagsBuilder; import org.apache.james.mailbox.MessageUid; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.inmemory.InMemoryId; +import org.apache.james.mailbox.model.BlobId; +import org.apache.james.mailbox.model.MessageId; import org.apache.james.mailbox.model.TestMessageId; import org.apache.james.util.mime.MessageContentExtractor; import org.apache.mailet.Mail; -import org.apache.james.core.MailAddress; import org.junit.Before; import org.junit.Test; @@ -81,7 +84,9 @@ public class MailFactoryTest { when(messagePreview.compute(any())).thenReturn("text preview"); MessageContentExtractor messageContentExtractor = new MessageContentExtractor(); - MessageFactory messageFactory = new MessageFactory(messagePreview, messageContentExtractor, htmlTextExtractor); + BlobManager blobManager = mock(BlobManager.class); + when(blobManager.toBlobId(any(MessageId.class))).thenReturn(BlobId.fromString("fake")); + MessageFactory messageFactory = new MessageFactory(blobManager, messagePreview, messageContentExtractor, htmlTextExtractor); jmapMessage = messageFactory.fromMetaDataWithContent(message); } --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org