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 <[email protected]>
Authored: Mon Jun 18 10:14:14 2018 +0700
Committer: benwa <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to