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 a6b44ca3ecf647b50acfd9bd5144cb97bfd71431
Author: Benoit Tellier <[email protected]>
AuthorDate: Sun Apr 12 13:08:39 2020 +0700

    JAMES-3148 MessageRepresentation should only ship information stored in 
CassandraMessageDAO
    
    Caller should carry over the mailbox context
    
    This allows reading basic metadata without the mailbox content of a message.
---
 .../mailbox/cassandra/mail/AttachmentLoader.java   |  9 ++++--
 .../cassandra/mail/CassandraMessageDAO.java        | 24 +++++++--------
 .../cassandra/mail/CassandraMessageIdMapper.java   |  3 +-
 .../cassandra/mail/CassandraMessageMapper.java     |  7 +++--
 .../cassandra/mail/MessageRepresentation.java      | 34 ++++------------------
 5 files changed, 28 insertions(+), 49 deletions(-)

diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/AttachmentLoader.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/AttachmentLoader.java
index a765dcd..17f0975 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/AttachmentLoader.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/AttachmentLoader.java
@@ -21,7 +21,9 @@ package org.apache.james.mailbox.cassandra.mail;
 import java.util.List;
 import java.util.stream.Stream;
 
+import org.apache.commons.lang3.tuple.Pair;
 import org.apache.james.mailbox.model.AttachmentMetadata;
+import org.apache.james.mailbox.model.ComposedMessageIdWithMetaData;
 import org.apache.james.mailbox.model.MessageAttachmentMetadata;
 import org.apache.james.mailbox.store.mail.MessageMapper;
 import org.apache.james.mailbox.store.mail.model.MailboxMessage;
@@ -41,9 +43,10 @@ public class AttachmentLoader {
         this.attachmentMapper = attachmentMapper;
     }
 
-    public Mono<MailboxMessage> addAttachmentToMessage(MessageRepresentation 
messageRepresentation, MessageMapper.FetchType fetchType) {
-        return 
loadAttachments(messageRepresentation.getAttachments().stream(), fetchType)
-            .map(messageRepresentation::toMailboxMessage);
+    public Mono<MailboxMessage> 
addAttachmentToMessage(Pair<ComposedMessageIdWithMetaData, 
MessageRepresentation> messageRepresentation,
+                                                       MessageMapper.FetchType 
fetchType) {
+        return 
loadAttachments(messageRepresentation.getRight().getAttachments().stream(), 
fetchType)
+            .map(attachments -> 
messageRepresentation.getRight().toMailboxMessage(messageRepresentation.getLeft(),
 attachments));
     }
 
     private Mono<List<MessageAttachmentMetadata>> 
loadAttachments(Stream<MessageAttachmentRepresentation> 
messageAttachmentRepresentations, MessageMapper.FetchType fetchType) {
diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAO.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAO.java
index 07dfbd1..baa1466 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAO.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAO.java
@@ -64,7 +64,6 @@ import 
org.apache.james.mailbox.cassandra.table.CassandraMessageV2Table.Properti
 import org.apache.james.mailbox.exception.MailboxException;
 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.ComposedMessageIdWithMetaData;
 import org.apache.james.mailbox.model.MessageAttachmentMetadata;
 import org.apache.james.mailbox.store.mail.MessageMapper.FetchType;
@@ -227,23 +226,24 @@ public class CassandraMessageDAO {
     }
 
     public Mono<MessageRepresentation> 
retrieveMessage(ComposedMessageIdWithMetaData id, FetchType fetchType) {
-        return retrieveRow(id, fetchType)
-                .flatMap(resultSet -> message(resultSet, id, fetchType));
+        CassandraMessageId cassandraMessageId = (CassandraMessageId) 
id.getComposedMessageId().getMessageId();
+        return retrieveMessage(fetchType, cassandraMessageId);
     }
 
-    private Mono<ResultSet> retrieveRow(ComposedMessageIdWithMetaData 
messageId, FetchType fetchType) {
-        CassandraMessageId cassandraMessageId = (CassandraMessageId) 
messageId.getComposedMessageId().getMessageId();
+    private Mono<MessageRepresentation> retrieveMessage(FetchType fetchType, 
CassandraMessageId cassandraMessageId) {
+        return retrieveRow(cassandraMessageId, fetchType)
+                .flatMap(resultSet -> message(resultSet, cassandraMessageId, 
fetchType));
+    }
 
+    private Mono<ResultSet> retrieveRow(CassandraMessageId messageId, 
FetchType fetchType) {
         return cassandraAsyncExecutor.execute(retrieveSelect(fetchType)
             .bind()
-            .setUUID(MESSAGE_ID, cassandraMessageId.get())
+            .setUUID(MESSAGE_ID, messageId.get())
             .setConsistencyLevel(QUORUM));
     }
 
     private Mono<MessageRepresentation>
-    message(ResultSet rows,ComposedMessageIdWithMetaData 
messageIdWithMetaData, FetchType fetchType) {
-        ComposedMessageId messageId = 
messageIdWithMetaData.getComposedMessageId();
-
+    message(ResultSet rows, CassandraMessageId cassandraMessageId, FetchType 
fetchType) {
         if (rows.isExhausted()) {
             return Mono.empty();
         }
@@ -251,16 +251,12 @@ public class CassandraMessageDAO {
         Row row = rows.one();
         return buildContentRetriever(fetchType, row).map(content ->
             new MessageRepresentation(
-                messageId.getMessageId(),
+                cassandraMessageId,
                 row.getTimestamp(INTERNAL_DATE),
                 row.getLong(FULL_CONTENT_OCTETS),
                 row.getInt(BODY_START_OCTET),
                 new SharedByteArrayInputStream(content),
-                messageIdWithMetaData.getFlags(),
                 getPropertyBuilder(row),
-                messageId.getMailboxId(),
-                messageId.getUid(),
-                messageIdWithMetaData.getModSeq(),
                 hasAttachment(row),
                 getAttachments(row).collect(Guavate.toImmutableList())));
     }
diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapper.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapper.java
index 43b3c7c..281fb2b 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapper.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapper.java
@@ -101,7 +101,8 @@ public class CassandraMessageIdMapper implements 
MessageIdMapper {
     public Flux<MailboxMessage> findReactive(Collection<MessageId> messageIds, 
FetchType fetchType) {
         return Flux.fromStream(messageIds.stream())
             .flatMap(messageId -> imapUidDAO.retrieve((CassandraMessageId) 
messageId, Optional.empty()), cassandraConfiguration.getMessageReadChunkSize())
-            .flatMap(composedMessageId -> 
messageDAO.retrieveMessage(composedMessageId, fetchType), 
cassandraConfiguration.getMessageReadChunkSize())
+            .flatMap(composedMessageId -> 
messageDAO.retrieveMessage(composedMessageId, fetchType)
+                .map(messageRepresentation -> Pair.of(composedMessageId, 
messageRepresentation)), cassandraConfiguration.getMessageReadChunkSize())
             .flatMap(messageRepresentation -> 
attachmentLoader.addAttachmentToMessage(messageRepresentation, fetchType), 
cassandraConfiguration.getMessageReadChunkSize())
             .groupBy(MailboxMessage::getMailboxId)
             .flatMap(this::keepMessageIfMailboxExists);
diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java
index f5b9d55..465c9cf 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java
@@ -29,6 +29,7 @@ import java.util.Optional;
 import javax.mail.Flags;
 import javax.mail.Flags.Flag;
 
+import org.apache.commons.lang3.tuple.Pair;
 import 
org.apache.james.backends.cassandra.init.configuration.CassandraConfiguration;
 import org.apache.james.mailbox.ApplicableFlagBuilder;
 import org.apache.james.mailbox.FlagsBuilder;
@@ -172,7 +173,7 @@ public class CassandraMessageMapper implements 
MessageMapper {
 
     private Mono<MailboxMessage> retrieveMessage(ComposedMessageIdWithMetaData 
messageId, FetchType fetchType) {
         return messageDAO.retrieveMessage(messageId, fetchType)
-            .flatMap(messageRepresentation -> 
attachmentLoader.addAttachmentToMessage(messageRepresentation, fetchType));
+            .flatMap(messageRepresentation -> 
attachmentLoader.addAttachmentToMessage(Pair.of(messageId, 
messageRepresentation), fetchType));
     }
 
     @Override
@@ -213,8 +214,8 @@ public class CassandraMessageMapper implements 
MessageMapper {
     private Mono<SimpleMailboxMessage> expungeOne(CassandraId mailboxId, 
MessageUid messageUid) {
         return retrieveComposedId(mailboxId, messageUid)
             .flatMap(idWithMetadata -> 
deleteUsingMailboxId(idWithMetadata).thenReturn(idWithMetadata))
-            .flatMap(idWithMetadata -> 
messageDAO.retrieveMessage(idWithMetadata, FetchType.Metadata))
-            .map(pair -> pair.toMailboxMessage(ImmutableList.of()));
+            .flatMap(idWithMetadata -> 
messageDAO.retrieveMessage(idWithMetadata, FetchType.Metadata)
+                .map(pair -> pair.toMailboxMessage(idWithMetadata, 
ImmutableList.of())));
     }
 
     private Mono<ComposedMessageIdWithMetaData> retrieveComposedId(CassandraId 
mailboxId, MessageUid uid) {
diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/MessageRepresentation.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/MessageRepresentation.java
index 5416730..d627f2b 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/MessageRepresentation.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/MessageRepresentation.java
@@ -22,14 +22,9 @@ package org.apache.james.mailbox.cassandra.mail;
 import java.util.Date;
 import java.util.List;
 
-import javax.mail.Flags;
 import javax.mail.util.SharedByteArrayInputStream;
 
-import org.apache.james.mailbox.MessageUid;
-import org.apache.james.mailbox.ModSeq;
-import org.apache.james.mailbox.model.ComposedMessageId;
 import org.apache.james.mailbox.model.ComposedMessageIdWithMetaData;
-import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MessageAttachmentMetadata;
 import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.store.mail.model.impl.PropertyBuilder;
@@ -41,60 +36,43 @@ public class MessageRepresentation {
     private final Long size;
     private final Integer bodySize;
     private final SharedByteArrayInputStream content;
-    private final Flags flags;
     private final PropertyBuilder propertyBuilder;
-    private final MailboxId mailboxId;
-    private final MessageUid messageUid;
-    private final ModSeq modSeq;
     private final boolean hasAttachment;
     private final List<MessageAttachmentRepresentation> attachments;
 
     public MessageRepresentation(MessageId messageId, Date internalDate, Long 
size, Integer bodySize, SharedByteArrayInputStream content,
-                                 Flags flags, PropertyBuilder propertyBuilder, 
MailboxId mailboxId, MessageUid messageUid, ModSeq modSeq,
-                                 boolean hasAttachment, 
List<MessageAttachmentRepresentation> attachments) {
+                                 PropertyBuilder propertyBuilder, boolean 
hasAttachment, List<MessageAttachmentRepresentation> attachments) {
         this.messageId = messageId;
         this.internalDate = internalDate;
         this.size = size;
         this.bodySize = bodySize;
         this.content = content;
-        this.flags = flags;
         this.propertyBuilder = propertyBuilder;
-        this.mailboxId = mailboxId;
-        this.messageUid = messageUid;
-        this.modSeq = modSeq;
         this.hasAttachment = hasAttachment;
         this.attachments = attachments;
     }
 
-    public SimpleMailboxMessage 
toMailboxMessage(List<MessageAttachmentMetadata> attachments) {
+    public SimpleMailboxMessage toMailboxMessage(ComposedMessageIdWithMetaData 
metadata, List<MessageAttachmentMetadata> attachments) {
         return SimpleMailboxMessage.builder()
             .messageId(messageId)
-            .mailboxId(mailboxId)
-            .uid(messageUid)
-            .modseq(modSeq)
+            .mailboxId(metadata.getComposedMessageId().getMailboxId())
+            .uid(metadata.getComposedMessageId().getUid())
+            .modseq(metadata.getModSeq())
             .internalDate(internalDate)
             .bodyStartOctet(bodySize)
             .size(size)
             .content(content)
-            .flags(flags)
+            .flags(metadata.getFlags())
             .propertyBuilder(propertyBuilder)
             .addAttachments(attachments)
             .hasAttachment(hasAttachment)
             .build();
     }
 
-    public MailboxId getMailboxId() {
-        return mailboxId;
-    }
-
     public MessageId getMessageId() {
         return messageId;
     }
 
-    public ComposedMessageIdWithMetaData getMetadata() {
-        return new ComposedMessageIdWithMetaData(new 
ComposedMessageId(mailboxId, messageId, messageUid), flags, modSeq);
-    }
-
     public SharedByteArrayInputStream getContent() {
         return content;
     }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to