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 2019/12/06 02:34:17 UTC

[james-project] 07/21: JAMES-2992 JMAP Fast ReadProfile goes with MessageFastViewFactory

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 a76aa626290fdf6a4fd4762ba2233533c5f7d5d1
Author: Tran Tien Duc <dt...@linagora.com>
AuthorDate: Mon Dec 2 15:47:54 2019 +0700

    JAMES-2992 JMAP Fast ReadProfile goes with MessageFastViewFactory
---
 .../james/jmap/draft/model/MessageProperties.java   | 21 +++++++--------------
 .../model/message/view/MessageFastViewFactory.java  |  4 ++--
 .../model/message/view/MessageFullViewFactory.java  |  4 ++--
 .../message/view/MessageHeaderViewFactory.java      |  4 ++--
 .../message/view/MessageMetadataViewFactory.java    |  4 ++--
 .../model/message/view/MetaMessageViewFactory.java  |  7 ++++++-
 .../jmap/draft/methods/GetMessagesMethodTest.java   | 12 ++++++++++--
 .../jmap/draft/model/MessagePropertiesTest.java     | 20 ++++++++++++++++++--
 8 files changed, 49 insertions(+), 27 deletions(-)

diff --git a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/MessageProperties.java b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/MessageProperties.java
index 12fa16a..a157d21 100644
--- a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/MessageProperties.java
+++ b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/MessageProperties.java
@@ -24,8 +24,6 @@ import java.util.Objects;
 import java.util.Optional;
 import java.util.stream.Stream;
 
-import org.apache.james.mailbox.model.FetchGroup;
-
 import com.github.steveash.guavate.Guavate;
 import com.google.common.base.MoreObjects;
 import com.google.common.base.Preconditions;
@@ -152,7 +150,7 @@ public class MessageProperties {
         isAnswered("isAnswered", ReadProfile.Metadata),
         isDraft("isDraft", ReadProfile.Metadata),
         isForwarded("isForwarded", ReadProfile.Metadata),
-        hasAttachment("hasAttachment", ReadProfile.Full),
+        hasAttachment("hasAttachment", ReadProfile.Fast),
         headers("headers", ReadProfile.Header),
         from("from", ReadProfile.Header),
         to("to", ReadProfile.Header),
@@ -162,7 +160,7 @@ public class MessageProperties {
         subject("subject", ReadProfile.Header),
         date("date", ReadProfile.Header),
         size("size", ReadProfile.Metadata),
-        preview("preview", ReadProfile.Full),
+        preview("preview", ReadProfile.Fast),
         textBody("textBody", ReadProfile.Full),
         htmlBody("htmlBody", ReadProfile.Full),
         attachments("attachments", ReadProfile.Full),
@@ -215,9 +213,10 @@ public class MessageProperties {
     }
 
     public enum ReadProfile {
-        Metadata(0, FetchGroup.MINIMAL),
-        Header(1, FetchGroup.HEADERS),
-        Full(2, FetchGroup.FULL_CONTENT);
+        Metadata(0),
+        Header(1),
+        Fast(2),
+        Full(3);
 
         static ReadProfile combine(ReadProfile readProfile1, ReadProfile readProfile2) {
             if (readProfile1.priority > readProfile2.priority) {
@@ -227,15 +226,9 @@ public class MessageProperties {
         }
 
         private final int priority;
-        private final FetchGroup fetchGroup;
 
-        ReadProfile(int priority, FetchGroup fetchGroup) {
+        ReadProfile(int priority) {
             this.priority = priority;
-            this.fetchGroup = fetchGroup;
-        }
-
-        public FetchGroup getFetchGroup() {
-            return fetchGroup;
         }
     }
 
diff --git a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/MessageFastViewFactory.java b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/MessageFastViewFactory.java
index e33993b..b212c11 100644
--- a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/MessageFastViewFactory.java
+++ b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/MessageFastViewFactory.java
@@ -108,8 +108,8 @@ public class MessageFastViewFactory implements MessageViewFactory<MessageFastVie
 
     @Inject
     @VisibleForTesting
-    MessageFastViewFactory(BlobManager blobManager, MessageIdManager messageIdManager, MessageFastViewProjection fastViewProjection,
-                           MessageFullViewFactory messageFullViewFactory) {
+    public MessageFastViewFactory(BlobManager blobManager, MessageIdManager messageIdManager, MessageFastViewProjection fastViewProjection,
+                                  MessageFullViewFactory messageFullViewFactory) {
         this.blobManager = blobManager;
         this.messageIdManager = messageIdManager;
         this.fastViewProjection = fastViewProjection;
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 7cbd989..f6361e8 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
@@ -35,7 +35,6 @@ import org.apache.james.jmap.draft.model.Attachment;
 import org.apache.james.jmap.draft.model.BlobId;
 import org.apache.james.jmap.draft.model.Emailer;
 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;
@@ -43,6 +42,7 @@ 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;
+import org.apache.james.mailbox.model.FetchGroup;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MessageAttachment;
 import org.apache.james.mailbox.model.MessageId;
@@ -73,7 +73,7 @@ public class MessageFullViewFactory implements MessageViewFactory<MessageFullVie
 
     @Override
     public List<MessageFullView> fromMessageIds(List<MessageId> messageIds, MailboxSession mailboxSession) throws MailboxException {
-        List<MessageResult> messages = messageIdManager.getMessages(messageIds, MessageProperties.ReadProfile.Full.getFetchGroup(), mailboxSession);
+        List<MessageResult> messages = messageIdManager.getMessages(messageIds, FetchGroup.FULL_CONTENT, mailboxSession);
         return Helpers.toMessageViews(messages, this::fromMessageResults);
     }
 
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 b519b87..05f548d 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
@@ -27,11 +27,11 @@ import javax.inject.Inject;
 
 import org.apache.james.jmap.draft.model.BlobId;
 import org.apache.james.jmap.draft.model.Emailer;
-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.FetchGroup;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.model.MessageResult;
@@ -53,7 +53,7 @@ public class MessageHeaderViewFactory implements MessageViewFactory<MessageHeade
 
     @Override
     public List<MessageHeaderView> fromMessageIds(List<MessageId> messageIds, MailboxSession mailboxSession) throws MailboxException {
-        List<MessageResult> messages = messageIdManager.getMessages(messageIds, MessageProperties.ReadProfile.Header.getFetchGroup(), mailboxSession);
+        List<MessageResult> messages = messageIdManager.getMessages(messageIds, FetchGroup.HEADERS, mailboxSession);
         return Helpers.toMessageViews(messages, this::fromMessageResults);
     }
 
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 4b88288..c17e9dc 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,11 +25,11 @@ 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.FetchGroup;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.model.MessageResult;
@@ -50,7 +50,7 @@ public class MessageMetadataViewFactory implements MessageViewFactory<MessageMet
 
     @Override
     public List<MessageMetadataView> fromMessageIds(List<MessageId> messageIds, MailboxSession session) throws MailboxException {
-        List<MessageResult> messages = messageIdManager.getMessages(messageIds, ReadProfile.Metadata.getFetchGroup(), session);
+        List<MessageResult> messages = messageIdManager.getMessages(messageIds, FetchGroup.MINIMAL, session);
         return Helpers.toMessageViews(messages, this::fromMessageResults);
     }
 
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 149be58..3e0f678 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
@@ -27,12 +27,15 @@ public class MetaMessageViewFactory {
     private final MessageFullViewFactory messageFullViewFactory;
     private final MessageHeaderViewFactory messageHeaderViewFactory;
     private final MessageMetadataViewFactory messageMetadataViewFactory;
+    private final MessageFastViewFactory messageFastViewFactory;
 
     @Inject
-    public MetaMessageViewFactory(MessageFullViewFactory messageFullViewFactory, MessageHeaderViewFactory messageHeaderViewFactory, MessageMetadataViewFactory messageMetadataViewFactory) {
+    public MetaMessageViewFactory(MessageFullViewFactory messageFullViewFactory, MessageHeaderViewFactory messageHeaderViewFactory,
+                                  MessageMetadataViewFactory messageMetadataViewFactory, MessageFastViewFactory messageFastViewFactory) {
         this.messageFullViewFactory = messageFullViewFactory;
         this.messageHeaderViewFactory = messageHeaderViewFactory;
         this.messageMetadataViewFactory = messageMetadataViewFactory;
+        this.messageFastViewFactory = messageFastViewFactory;
     }
 
     public MessageViewFactory<? extends MessageView> getFactory(MessageProperties.ReadProfile readProfile) {
@@ -41,6 +44,8 @@ public class MetaMessageViewFactory {
                 return messageFullViewFactory;
             case Header:
                 return messageHeaderViewFactory;
+            case Fast:
+                return messageFastViewFactory;
             case Metadata:
                 return messageMetadataViewFactory;
             default:
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 e0fe458..5a3686b 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
@@ -42,6 +42,7 @@ import org.apache.james.jmap.draft.model.GetMessagesRequest;
 import org.apache.james.jmap.draft.model.GetMessagesResponse;
 import org.apache.james.jmap.draft.model.MessageProperties.MessageProperty;
 import org.apache.james.jmap.draft.model.MethodCallId;
+import org.apache.james.jmap.draft.model.message.view.MessageFastViewFactory;
 import org.apache.james.jmap.draft.model.message.view.MessageFullView;
 import org.apache.james.jmap.draft.model.message.view.MessageFullViewFactory;
 import org.apache.james.jmap.draft.model.message.view.MessageHeaderView;
@@ -51,6 +52,7 @@ import org.apache.james.jmap.draft.model.message.view.MessageMetadataViewFactory
 import org.apache.james.jmap.draft.model.message.view.MetaMessageViewFactory;
 import org.apache.james.jmap.draft.utils.HtmlTextExtractor;
 import org.apache.james.jmap.draft.utils.JsoupHtmlTextExtractor;
+import org.apache.james.jmap.memory.projections.MemoryMessageFastViewProjection;
 import org.apache.james.mailbox.BlobManager;
 import org.apache.james.mailbox.FlagsBuilder;
 import org.apache.james.mailbox.MailboxSession;
@@ -120,10 +122,16 @@ public class GetMessagesMethodTest {
         messageIdManager = resources.getMessageIdManager();
 
         messageMetadataViewFactory = spy(new MessageMetadataViewFactory(blobManager, messageIdManager));
+        MessageFullViewFactory messageFullViewFactory = new MessageFullViewFactory(blobManager, messageContentExtractor,
+            htmlTextExtractor, messageIdManager);
+        MessageFastViewFactory messageFastViewFactory = new MessageFastViewFactory(blobManager, messageIdManager,
+            new MemoryMessageFastViewProjection(), messageFullViewFactory);
+
         MetaMessageViewFactory metaMessageViewFactory = new MetaMessageViewFactory(
-            new MessageFullViewFactory(blobManager, messageContentExtractor, htmlTextExtractor, messageIdManager),
+            messageFullViewFactory,
             new MessageHeaderViewFactory(blobManager, messageIdManager),
-            messageMetadataViewFactory);
+            messageMetadataViewFactory,
+            messageFastViewFactory);
         testee = new GetMessagesMethod(metaMessageViewFactory, messageIdManager, new DefaultMetricFactory());
 
         messageContent1 = org.apache.james.mime4j.dom.Message.Builder.of()
diff --git a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/MessagePropertiesTest.java b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/MessagePropertiesTest.java
index 5c94f10..82d7dd1 100644
--- a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/MessagePropertiesTest.java
+++ b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/MessagePropertiesTest.java
@@ -152,6 +152,14 @@ class MessagePropertiesTest {
         }
 
         @Test
+        void combineShouldReturnFastWhenOnlyFast() {
+            assertThat(MessageProperties.ReadProfile.combine(
+                    MessageProperties.ReadProfile.Fast,
+                    MessageProperties.ReadProfile.Fast))
+                .isEqualTo(MessageProperties.ReadProfile.Fast);
+        }
+
+        @Test
         void combineShouldReturnHeaderWhenHeaderAndMetadata() {
             assertThat(MessageProperties.ReadProfile.combine(
                 MessageProperties.ReadProfile.Metadata,
@@ -168,9 +176,17 @@ class MessagePropertiesTest {
         }
 
         @Test
-        void combineShouldReturnFullWhenFullAndHeader() {
+        void combineShouldReturnFastWhenFastAndHeader() {
             assertThat(MessageProperties.ReadProfile.combine(
                 MessageProperties.ReadProfile.Header,
+                MessageProperties.ReadProfile.Fast))
+                .isEqualTo(MessageProperties.ReadProfile.Fast);
+        }
+
+        @Test
+        void combineShouldReturnFullWhenFullAndFast() {
+            assertThat(MessageProperties.ReadProfile.combine(
+                MessageProperties.ReadProfile.Fast,
                 MessageProperties.ReadProfile.Full))
                 .isEqualTo(MessageProperties.ReadProfile.Full);
         }
@@ -179,7 +195,7 @@ class MessagePropertiesTest {
         void combineShouldCommute() {
             assertThat(MessageProperties.ReadProfile.combine(
                 MessageProperties.ReadProfile.Full,
-                MessageProperties.ReadProfile.Header))
+                MessageProperties.ReadProfile.Fast))
                 .isEqualTo(MessageProperties.ReadProfile.Full);
         }
     }


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org