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 2018/06/19 08:11:35 UTC

[07/11] james-project git commit: JAMES-2414 Rely on capabilities for copying messages with attachments

JAMES-2414 Rely on capabilities for copying messages with attachments


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/0c84c453
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/0c84c453
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/0c84c453

Branch: refs/heads/master
Commit: 0c84c453757f77440dbfa8d4b6914e5931cd2a49
Parents: fe22488
Author: benwa <bt...@linagora.com>
Authored: Mon Jun 18 10:14:14 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Tue Jun 19 15:09:48 2018 +0700

----------------------------------------------------------------------
 .../cassandra/CassandraMailboxManager.java       | 19 +++++++++++--------
 .../cassandra/CassandraMessageManager.java       | 10 +---------
 .../james/mailbox/hbase/HBaseMailboxManager.java |  6 ++++--
 .../james/mailbox/hbase/HBaseMessageManager.java |  2 +-
 .../james/mailbox/jcr/JCRMessageManager.java     |  2 +-
 .../james/mailbox/jpa/JPAMailboxManager.java     |  8 +++++---
 .../james/mailbox/jpa/JPAMessageManager.java     |  2 +-
 .../mailbox/inmemory/InMemoryMailboxManager.java | 17 ++++++++++-------
 .../mailbox/inmemory/InMemoryMessageManager.java | 11 +----------
 .../james/mailbox/store/StoreMailboxManager.java |  5 +++--
 .../james/mailbox/store/StoreMessageManager.java | 17 +++++++++++++++--
 11 files changed, 53 insertions(+), 46 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/0c84c453/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java
index be5d71c..aded5ad 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java
@@ -47,6 +47,15 @@ import org.apache.james.mailbox.store.search.MessageSearchIndex;
  * Cassandra implementation of {@link StoreMailboxManager}
  */
 public class CassandraMailboxManager extends StoreMailboxManager {
+    public static final EnumSet<MailboxCapabilities> MAILBOX_CAPABILITIES = EnumSet.of(
+        MailboxCapabilities.Move,
+        MailboxCapabilities.UserFlag,
+        MailboxCapabilities.Namespace,
+        MailboxCapabilities.Annotation,
+        MailboxCapabilities.ACL,
+        MailboxCapabilities.Quota);
+    public static final EnumSet<MessageCapabilities> MESSAGE_CAPABILITIES = EnumSet.of(MessageCapabilities.Attachment, MessageCapabilities.UniqueID);
+
     private final MailboxPathLocker locker;
     private final CassandraMailboxSessionMapperFactory mapperFactory;
 
@@ -78,18 +87,12 @@ public class CassandraMailboxManager extends StoreMailboxManager {
 
     @Override
     public EnumSet<MailboxManager.MailboxCapabilities> getSupportedMailboxCapabilities() {
-        return EnumSet.of(
-            MailboxCapabilities.Move,
-            MailboxCapabilities.UserFlag,
-            MailboxCapabilities.Namespace,
-            MailboxCapabilities.Annotation,
-            MailboxCapabilities.ACL,
-            MailboxCapabilities.Quota);
+        return MAILBOX_CAPABILITIES;
     }
 
     @Override
     public EnumSet<MessageCapabilities> getSupportedMessageCapabilities() {
-        return EnumSet.of(MessageCapabilities.Attachment, MessageCapabilities.UniqueID);
+        return MESSAGE_CAPABILITIES;
     }
     
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/0c84c453/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMessageManager.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMessageManager.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMessageManager.java
index 09b773c..f396f1c 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMessageManager.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMessageManager.java
@@ -38,7 +38,6 @@ import org.apache.james.mailbox.store.event.MailboxEventDispatcher;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
 import org.apache.james.mailbox.store.mail.model.MailboxMessage;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
-import org.apache.james.mailbox.store.mail.model.impl.SimpleMailboxMessage;
 import org.apache.james.mailbox.store.search.MessageSearchIndex;
 
 import com.github.steveash.guavate.Guavate;
@@ -56,7 +55,7 @@ public class CassandraMessageManager extends StoreMessageManager {
                                    QuotaRootResolver quotaRootResolver, MessageParser messageParser, MessageId.Factory messageIdFactory,
                                    BatchSizes batchSizes, ImmutableMailboxMessage.Factory immutableMailboxMessageFactory,
                                    StoreRightManager storeRightManager) throws MailboxException {
-        super(mapperFactory, index, dispatcher, locker, mailbox,
+        super(CassandraMailboxManager.MESSAGE_CAPABILITIES, mapperFactory, index, dispatcher, locker, mailbox,
             quotaManager, quotaRootResolver, messageParser, messageIdFactory, batchSizes, immutableMailboxMessageFactory, storeRightManager);
 
         this.mapperFactory = mapperFactory;
@@ -82,11 +81,4 @@ public class CassandraMessageManager extends StoreMessageManager {
                 message.getMessageId());
     }
 
-    @Override
-    protected MailboxMessage copyMessage(MailboxMessage message) throws MailboxException {
-        SimpleMailboxMessage copy = SimpleMailboxMessage.copy(message.getMailboxId(), message);
-        copy.setUid(message.getUid());
-        copy.setModSeq(message.getModSeq());
-        return copy;
-    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/0c84c453/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMailboxManager.java b/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMailboxManager.java
index 5fe1378..eba9b3e 100644
--- a/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMailboxManager.java
+++ b/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMailboxManager.java
@@ -45,6 +45,8 @@ import org.apache.james.mailbox.store.transaction.Mapper;
  */
 public class HBaseMailboxManager extends StoreMailboxManager {
 
+    public static final EnumSet<MailboxCapabilities> MAILBOX_CAPABILITIES = EnumSet.of(MailboxCapabilities.Namespace);
+
     public HBaseMailboxManager(HBaseMailboxSessionMapperFactory mapperFactory,
                                Authenticator authenticator,
                                Authorizator authorizator,
@@ -60,7 +62,7 @@ public class HBaseMailboxManager extends StoreMailboxManager {
     }
 
     @Override
-    protected Mailbox doCreateMailbox(MailboxPath mailboxPath, MailboxSession session) throws MailboxException {
+    protected Mailbox doCreateMailbox(MailboxPath mailboxPath, MailboxSession session) {
         return new HBaseMailbox(mailboxPath, randomUidValidity());
     }
 
@@ -80,7 +82,7 @@ public class HBaseMailboxManager extends StoreMailboxManager {
 
     @Override
     public EnumSet<MailboxCapabilities> getSupportedMailboxCapabilities() {
-        return EnumSet.of(MailboxCapabilities.Namespace);
+        return MAILBOX_CAPABILITIES;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/0c84c453/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMessageManager.java
----------------------------------------------------------------------
diff --git a/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMessageManager.java b/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMessageManager.java
index 95884c4..7e26219 100644
--- a/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMessageManager.java
+++ b/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMessageManager.java
@@ -54,7 +54,7 @@ public class HBaseMessageManager extends StoreMessageManager {
                                BatchSizes batchSizes,
                                ImmutableMailboxMessage.Factory immutableMailboxMessageFactory,
                                StoreRightManager storeRightManager) throws MailboxException {
-        super(mapperFactory, index, dispatcher, locker, mailbox, quotaManager,
+        super(HBaseMailboxManager.DEFAULT_NO_MESSAGE_CAPABILITIES, mapperFactory, index, dispatcher, locker, mailbox, quotaManager,
                 quotaRootResolver, messageParser, messageIdFactory, batchSizes, immutableMailboxMessageFactory, storeRightManager);
 
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/0c84c453/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMessageManager.java
----------------------------------------------------------------------
diff --git a/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMessageManager.java b/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMessageManager.java
index 00012c5..f859afd 100644
--- a/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMessageManager.java
+++ b/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMessageManager.java
@@ -63,7 +63,7 @@ public class JCRMessageManager extends StoreMessageManager {
                              ImmutableMailboxMessage.Factory immutableMailboxMessageFactory,
                              StoreRightManager storeRightManager)
                     throws MailboxException {
-        super(mapperFactory, index, dispatcher, locker, mailbox, quotaManager,
+        super(JCRMailboxManager.DEFAULT_NO_MESSAGE_CAPABILITIES, mapperFactory, index, dispatcher, locker, mailbox, quotaManager,
                 quotaRootResolver, messageParser, messageIdFactory, batchSizes, immutableMailboxMessageFactory, storeRightManager);
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/0c84c453/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxManager.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxManager.java
index f6282d2..d8c4491 100644
--- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxManager.java
+++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxManager.java
@@ -43,6 +43,10 @@ import org.apache.james.mailbox.store.transaction.Mapper;
  */
 public abstract class JPAMailboxManager extends StoreMailboxManager {
 
+    public static final EnumSet<MailboxCapabilities> MAILBOX_CAPABILITIES = EnumSet.of(MailboxCapabilities.UserFlag,
+        MailboxCapabilities.Namespace,
+        MailboxCapabilities.Annotation);
+
     public JPAMailboxManager(JPAMailboxSessionMapperFactory mailboxSessionMapperFactory,
                              Authenticator authenticator,
                              Authorizator authorizator,
@@ -65,9 +69,7 @@ public abstract class JPAMailboxManager extends StoreMailboxManager {
 
     @Override
     public EnumSet<MailboxCapabilities> getSupportedMailboxCapabilities() {
-        return EnumSet.of(MailboxCapabilities.UserFlag,
-            MailboxCapabilities.Namespace,
-            MailboxCapabilities.Annotation);
+        return MAILBOX_CAPABILITIES;
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/james-project/blob/0c84c453/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMessageManager.java
----------------------------------------------------------------------
diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMessageManager.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMessageManager.java
index c37b5c4..77feb6d 100644
--- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMessageManager.java
+++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMessageManager.java
@@ -63,7 +63,7 @@ public class JPAMessageManager extends StoreMessageManager {
                              ImmutableMailboxMessage.Factory immutableMailboxMessageFactory,
                              StoreRightManager storeRightManager) throws MailboxException {
 
-        super(mapperFactory, index, dispatcher, locker, mailbox,
+        super(JPAMailboxManager.DEFAULT_NO_MESSAGE_CAPABILITIES, mapperFactory, index, dispatcher, locker, mailbox,
             quotaManager, quotaRootResolver, messageParser, messageIdFactory, batchSizes, immutableMailboxMessageFactory, storeRightManager);
     }
     

http://git-wip-us.apache.org/repos/asf/james-project/blob/0c84c453/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java
index 2d5a11d..e2c51e2 100644
--- a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java
+++ b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java
@@ -42,6 +42,14 @@ import org.apache.james.mailbox.store.search.MessageSearchIndex;
 
 public class InMemoryMailboxManager extends StoreMailboxManager {
 
+    public static final EnumSet<MailboxCapabilities> MAILBOX_CAPABILITIES = EnumSet.of(MailboxCapabilities.Move,
+        MailboxCapabilities.UserFlag,
+        MailboxCapabilities.Namespace,
+        MailboxCapabilities.Annotation,
+        MailboxCapabilities.ACL,
+        MailboxCapabilities.Quota);
+    public static final EnumSet<MessageCapabilities> MESSAGE_CAPABILITIES = EnumSet.of(MessageCapabilities.Attachment, MessageCapabilities.UniqueID);
+
     @Inject
     public InMemoryMailboxManager(MailboxSessionMapperFactory mailboxSessionMapperFactory, Authenticator authenticator, Authorizator authorizator,
                                   MailboxPathLocker locker, MessageParser messageParser, MessageId.Factory messageIdFactory, MailboxEventDispatcher dispatcher,
@@ -61,17 +69,12 @@ public class InMemoryMailboxManager extends StoreMailboxManager {
 
     @Override
     public EnumSet<MailboxCapabilities> getSupportedMailboxCapabilities() {
-        return EnumSet.of(MailboxCapabilities.Move,
-            MailboxCapabilities.UserFlag,
-            MailboxCapabilities.Namespace,
-            MailboxCapabilities.Annotation,
-            MailboxCapabilities.ACL,
-            MailboxCapabilities.Quota);
+        return MAILBOX_CAPABILITIES;
     }
     
     @Override
     public EnumSet<MessageCapabilities> getSupportedMessageCapabilities() {
-        return EnumSet.of(MessageCapabilities.Attachment, MessageCapabilities.UniqueID);
+        return MESSAGE_CAPABILITIES;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/0c84c453/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageManager.java
----------------------------------------------------------------------
diff --git a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageManager.java b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageManager.java
index 458e97d..7bc1b13 100644
--- a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageManager.java
+++ b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageManager.java
@@ -20,7 +20,6 @@ import org.apache.james.mailbox.store.event.MailboxEventDispatcher;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
 import org.apache.james.mailbox.store.mail.model.MailboxMessage;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
-import org.apache.james.mailbox.store.mail.model.impl.SimpleMailboxMessage;
 import org.apache.james.mailbox.store.search.MessageSearchIndex;
 
 import com.github.steveash.guavate.Guavate;
@@ -41,7 +40,7 @@ public class InMemoryMessageManager extends StoreMessageManager {
                                   BatchSizes batchSizes,
                                   ImmutableMailboxMessage.Factory immutableMailboxMessageFactory,
                                   StoreRightManager storeRightManager) throws MailboxException {
-        super(mapperFactory, index, dispatcher, locker, mailbox, quotaManager, quotaRootResolver,
+        super(InMemoryMailboxManager.MESSAGE_CAPABILITIES, mapperFactory, index, dispatcher, locker, mailbox, quotaManager, quotaRootResolver,
             messageParser, messageIdFactory, batchSizes, immutableMailboxMessageFactory, storeRightManager);
         this.mapperFactory = (InMemoryMailboxSessionMapperFactory) mapperFactory;
     }
@@ -62,12 +61,4 @@ public class InMemoryMessageManager extends StoreMessageManager {
                     .collect(Guavate.toImmutableList()),
                 message.getMessageId());
     }
-
-    @Override
-    protected MailboxMessage copyMessage(MailboxMessage message) throws MailboxException {
-        SimpleMailboxMessage copy = SimpleMailboxMessage.copy(message.getMailboxId(), message);
-        copy.setUid(message.getUid());
-        copy.setModSeq(message.getModSeq());
-        return copy;
-    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/0c84c453/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
index a8125fd..3746257 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
@@ -100,6 +100,7 @@ import com.google.common.collect.Iterables;
 public class StoreMailboxManager implements MailboxManager {
     private static final Logger LOGGER = LoggerFactory.getLogger(StoreMailboxManager.class);
     public static final char SQL_WILDCARD_CHAR = '%';
+    public static final EnumSet<MessageCapabilities> DEFAULT_NO_MESSAGE_CAPABILITIES = EnumSet.noneOf(MessageCapabilities.class);
 
     private final MailboxEventDispatcher dispatcher;
     private final DelegatingMailboxListener delegatingListener;
@@ -243,7 +244,7 @@ public class StoreMailboxManager implements MailboxManager {
 
     @Override
     public EnumSet<MessageCapabilities> getSupportedMessageCapabilities() {
-        return EnumSet.noneOf(MessageCapabilities.class);
+        return DEFAULT_NO_MESSAGE_CAPABILITIES;
     }
     
     @Override
@@ -415,7 +416,7 @@ public class StoreMailboxManager implements MailboxManager {
      * @return storeMailbox
      */
     protected StoreMessageManager createMessageManager(Mailbox mailbox, MailboxSession session) throws MailboxException {
-        return new StoreMessageManager(getMapperFactory(), getMessageSearchIndex(), getEventDispatcher(), 
+        return new StoreMessageManager(DEFAULT_NO_MESSAGE_CAPABILITIES, getMapperFactory(), getMessageSearchIndex(), getEventDispatcher(),
                 getLocker(), mailbox, getQuotaManager(),
                 getQuotaRootResolver(), getMessageParser(), getMessageIdFactory(), getBatchSizes(),
                 getImmutableMailboxMessageFactory(), getStoreRightManager());

http://git-wip-us.apache.org/repos/asf/james-project/blob/0c84c453/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
index af19c66..cb0f22f 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
@@ -25,6 +25,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.Date;
+import java.util.EnumSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
@@ -39,6 +40,7 @@ import javax.mail.util.SharedFileInputStream;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.io.input.TeeInputStream;
 import org.apache.james.mailbox.MailboxListener;
+import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxPathLocker;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageManager;
@@ -127,6 +129,8 @@ public class StoreMessageManager implements org.apache.james.mailbox.MessageMana
 
     private static final Logger LOG = LoggerFactory.getLogger(StoreMessageManager.class);
 
+    private final EnumSet<MailboxManager.MessageCapabilities> messageCapabilities;
+
     private final Mailbox mailbox;
 
     private final MailboxEventDispatcher dispatcher;
@@ -151,11 +155,12 @@ public class StoreMessageManager implements org.apache.james.mailbox.MessageMana
 
     private final ImmutableMailboxMessage.Factory immutableMailboxMessageFactory;
 
-    public StoreMessageManager(MailboxSessionMapperFactory mapperFactory, MessageSearchIndex index, MailboxEventDispatcher dispatcher, 
+    public StoreMessageManager(EnumSet<MailboxManager.MessageCapabilities> messageCapabilities, MailboxSessionMapperFactory mapperFactory, MessageSearchIndex index, MailboxEventDispatcher dispatcher,
             MailboxPathLocker locker, Mailbox mailbox,
             QuotaManager quotaManager, QuotaRootResolver quotaRootResolver, MessageParser messageParser, MessageId.Factory messageIdFactory, BatchSizes batchSizes,
             ImmutableMailboxMessage.Factory immutableMailboxMessageFactory, StoreRightManager storeRightManager)
                     throws MailboxException {
+        this.messageCapabilities = messageCapabilities;
         this.mailbox = mailbox;
         this.dispatcher = dispatcher;
         this.mapperFactory = mapperFactory;
@@ -466,12 +471,20 @@ public class StoreMessageManager implements org.apache.james.mailbox.MessageMana
     }
 
     protected MailboxMessage copyMessage(MailboxMessage message) throws MailboxException {
-        SimpleMailboxMessage copy = SimpleMailboxMessage.copyWithoutAttachments(message.getMailboxId(), message);
+        SimpleMailboxMessage copy = copyMessageWithoutMetadata(message);
         copy.setUid(message.getUid());
         copy.setModSeq(message.getModSeq());
         return copy;
     }
 
+    private SimpleMailboxMessage copyMessageWithoutMetadata(MailboxMessage message) throws MailboxException {
+        if (messageCapabilities.contains(MailboxManager.MessageCapabilities.Attachment)) {
+            return SimpleMailboxMessage.copy(message.getMailboxId(), message);
+        } else {
+            return SimpleMailboxMessage.copyWithoutAttachments(message.getMailboxId(), message);
+        }
+    }
+
     @Override
     public boolean isWriteable(MailboxSession session) throws MailboxException {
         return storeRightManager.isReadWrite(session, mailbox, getSharedPermanentFlags(session));


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