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]
