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