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 2020/04/22 02:32:10 UTC

[james-project] 30/37: JAMES-2997 JPA and maildir should generate fix AttachmentId

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 7cdf09deef962abce320af4b7039cebb623e9773
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Tue Feb 4 13:37:16 2020 +0700

    JAMES-2997 JPA and maildir should generate fix AttachmentId
    
    Calling two time getAttachments() should yeld the same result...
    
    In order to do so, we adopt a `${messageIdentifier}-${attachmentPosition}` naming pattern
---
 .../mailbox/jpa/mail/model/openjpa/AbstractJPAMailboxMessage.java | 8 +++++++-
 .../apache/james/mailbox/maildir/mail/model/MaildirMessage.java   | 8 +++++++-
 .../main/java/org/apache/james/mailbox/store/MessageStorer.java   | 4 +++-
 3 files changed, 17 insertions(+), 3 deletions(-)

diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMailboxMessage.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMailboxMessage.java
index 68afe5d..e3e800e 100644
--- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMailboxMessage.java
+++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMailboxMessage.java
@@ -25,6 +25,7 @@ import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
 
 import javax.mail.Flags;
 import javax.persistence.Basic;
@@ -507,10 +508,11 @@ public abstract class AbstractJPAMailboxMessage implements MailboxMessage {
     @Override
     public List<MessageAttachment> getAttachments() {
         try {
+            AtomicInteger counter = new AtomicInteger(0);
             return new MessageParser().retrieveAttachments(getFullContent())
                 .stream()
                 .map(Throwing.<ParsedAttachment, MessageAttachment>function(
-                    attachmentMetadata -> attachmentMetadata.asMessageAttachment(AttachmentId.random()))
+                    attachmentMetadata -> attachmentMetadata.asMessageAttachment(generateFixedAttachmentId(counter.incrementAndGet())))
                     .sneakyThrow())
                 .collect(Guavate.toImmutableList());
         } catch (IOException e) {
@@ -518,6 +520,10 @@ public abstract class AbstractJPAMailboxMessage implements MailboxMessage {
         }
     }
 
+    private AttachmentId generateFixedAttachmentId(int position) {
+        return AttachmentId.from(getMailboxId().serialize() + "-" + getUid().asLong() + "-" + position);
+    }
+
     @Override
     public boolean hasAttachment() {
         return !getAttachments().isEmpty();
diff --git a/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/model/MaildirMessage.java b/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/model/MaildirMessage.java
index b2b4725..cfdb7a3 100644
--- a/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/model/MaildirMessage.java
+++ b/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/model/MaildirMessage.java
@@ -25,6 +25,7 @@ import java.io.InputStream;
 import java.io.PushbackInputStream;
 import java.util.Date;
 import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
 
 import javax.mail.util.SharedFileInputStream;
 
@@ -275,10 +276,11 @@ public class MaildirMessage implements Message {
     @Override
     public List<MessageAttachment> getAttachments() {
         try {
+            AtomicInteger counter = new AtomicInteger(0);
             return new MessageParser().retrieveAttachments(getFullContent())
                 .stream()
                 .map(Throwing.<ParsedAttachment, MessageAttachment>function(
-                    attachmentMetadata -> attachmentMetadata.asMessageAttachment(AttachmentId.random()))
+                    attachmentMetadata -> attachmentMetadata.asMessageAttachment(generateFixedAttachmentId(counter.incrementAndGet())))
                     .sneakyThrow())
                 .collect(Guavate.toImmutableList());
         } catch (IOException e) {
@@ -286,6 +288,10 @@ public class MaildirMessage implements Message {
         }
     }
 
+    private AttachmentId generateFixedAttachmentId(int position) {
+        return AttachmentId.from(messageName.getFullName() + "-" + position);
+    }
+
     @Override
     public boolean hasAttachment() {
         return !getAttachments().isEmpty();
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/MessageStorer.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/MessageStorer.java
index 7b1df1d..b7b391b 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/MessageStorer.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/MessageStorer.java
@@ -60,6 +60,8 @@ public interface MessageStorer {
      */
     class WithAttachment implements MessageStorer {
         private static final Logger LOGGER = LoggerFactory.getLogger(WithAttachment.class);
+        private static final int START = 0;
+        private static final int UNLIMITED = -1;
 
         private final MailboxSessionMapperFactory mapperFactory;
         private final MessageId.Factory messageIdFactory;
@@ -98,7 +100,7 @@ public interface MessageStorer {
 
         private List<ParsedAttachment> extractAttachments(SharedInputStream contentIn) {
             try {
-                return messageParser.retrieveAttachments(contentIn.newStream(0, -1));
+                return messageParser.retrieveAttachments(contentIn.newStream(START, UNLIMITED));
             } catch (Exception e) {
                 LOGGER.warn("Error while parsing mail's attachments: {}", e.getMessage(), e);
                 return ImmutableList.of();


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