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 <btell...@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-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org