JAMES-2287 Cassandra mailbox should depend on ObjectStore API

And not on its implementations


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

Branch: refs/heads/master
Commit: ea12b94b50b49b3dfc8739825a60c87321fd0329
Parents: c4c370e
Author: benwa <[email protected]>
Authored: Thu Jan 18 11:22:15 2018 +0700
Committer: benwa <[email protected]>
Committed: Fri Jan 19 09:07:28 2018 +0700

----------------------------------------------------------------------
 mailbox/cassandra/pom.xml                       |  5 ++++
 .../CassandraMailboxSessionMapperFactory.java   | 15 ++++++----
 .../mail/CassandraAttachmentDAOV2.java          | 11 +++----
 .../mail/CassandraAttachmentMapper.java         | 14 ++++-----
 .../cassandra/mail/CassandraMessageDAO.java     | 30 ++++++++++----------
 .../mail/migration/AttachmentV2Migration.java   | 10 +++----
 .../CassandraSubscriptionManagerTest.java       |  7 ++++-
 ...estCassandraMailboxSessionMapperFactory.java | 11 +++----
 .../mail/CassandraAttachmentDAOV2Test.java      |  6 ++--
 .../mail/CassandraAttachmentFallbackTest.java   |  4 ++-
 .../cassandra/mail/CassandraMessageDAOTest.java |  5 +++-
 .../AttachmentMessageIdCreationTest.java        |  3 +-
 .../migration/AttachmentV2MigrationTest.java    | 22 +++++++-------
 mpt/impl/imap-mailbox/cassandra/pom.xml         |  4 +++
 14 files changed, 87 insertions(+), 60 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/ea12b94b/mailbox/cassandra/pom.xml
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/pom.xml b/mailbox/cassandra/pom.xml
index 0826db3..2be705b 100644
--- a/mailbox/cassandra/pom.xml
+++ b/mailbox/cassandra/pom.xml
@@ -64,7 +64,12 @@
         </dependency>
         <dependency>
             <groupId>${project.groupId}</groupId>
+            <artifactId>blob-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
             <artifactId>blob-cassandra</artifactId>
+            <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>${project.groupId}</groupId>

http://git-wip-us.apache.org/repos/asf/james-project/blob/ea12b94b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java
index 3969700..d95d1a0 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java
@@ -23,7 +23,8 @@ import javax.inject.Inject;
 
 import org.apache.james.backends.cassandra.init.CassandraConfiguration;
 import org.apache.james.backends.cassandra.utils.CassandraUtils;
-import org.apache.james.blob.cassandra.CassandraBlobsDAO;
+import org.apache.james.blob.api.BlobId;
+import org.apache.james.blob.api.ObjectStore;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.cassandra.mail.CassandraACLMapper;
 import org.apache.james.mailbox.cassandra.mail.CassandraAnnotationMapper;
@@ -85,11 +86,12 @@ public class CassandraMailboxSessionMapperFactory extends 
MailboxSessionMapperFa
     private final CassandraAttachmentDAO attachmentDAO;
     private final CassandraAttachmentDAOV2 attachmentDAOV2;
     private final CassandraDeletedMessageDAO deletedMessageDAO;
-    private final CassandraBlobsDAO blobsDAO;
+    private final ObjectStore objectStore;
     private final CassandraAttachmentMessageIdDAO attachmentMessageIdDAO;
     private final CassandraAttachmentOwnerDAO ownerDAO;
     private final CassandraACLMapper aclMapper;
     private final CassandraUserMailboxRightsDAO userMailboxRightsDAO;
+    private final BlobId.Factory blobIdFactory;
     private final CassandraUtils cassandraUtils;
     private final CassandraConfiguration cassandraConfiguration;
 
@@ -100,10 +102,10 @@ public class CassandraMailboxSessionMapperFactory extends 
MailboxSessionMapperFa
                                                 CassandraMailboxCounterDAO 
mailboxCounterDAO, CassandraMailboxRecentsDAO mailboxRecentsDAO, 
CassandraMailboxDAO mailboxDAO,
                                                 CassandraMailboxPathDAO 
mailboxPathDAO, CassandraFirstUnseenDAO firstUnseenDAO, 
CassandraApplicableFlagDAO applicableFlagDAO,
                                                 CassandraAttachmentDAO 
attachmentDAO, CassandraAttachmentDAOV2 attachmentDAOV2, 
CassandraDeletedMessageDAO deletedMessageDAO,
-                                                CassandraBlobsDAO blobsDAO, 
CassandraAttachmentMessageIdDAO attachmentMessageIdDAO,
+                                                ObjectStore objectStore, 
CassandraAttachmentMessageIdDAO attachmentMessageIdDAO,
                                                 CassandraAttachmentOwnerDAO 
ownerDAO, CassandraACLMapper aclMapper,
                                                 CassandraUserMailboxRightsDAO 
userMailboxRightsDAO,
-                                                CassandraUtils cassandraUtils, 
CassandraConfiguration cassandraConfiguration) {
+                                                BlobId.Factory blobIdFactory, 
CassandraUtils cassandraUtils, CassandraConfiguration cassandraConfiguration) {
         this.uidProvider = uidProvider;
         this.modSeqProvider = modSeqProvider;
         this.session = session;
@@ -119,10 +121,11 @@ public class CassandraMailboxSessionMapperFactory extends 
MailboxSessionMapperFa
         this.attachmentDAOV2 = attachmentDAOV2;
         this.deletedMessageDAO = deletedMessageDAO;
         this.applicableFlagDAO = applicableFlagDAO;
-        this.blobsDAO = blobsDAO;
+        this.objectStore = objectStore;
         this.attachmentMessageIdDAO = attachmentMessageIdDAO;
         this.aclMapper = aclMapper;
         this.userMailboxRightsDAO = userMailboxRightsDAO;
+        this.blobIdFactory = blobIdFactory;
         this.cassandraUtils = cassandraUtils;
         this.ownerDAO = ownerDAO;
         this.cassandraConfiguration = cassandraConfiguration;
@@ -168,7 +171,7 @@ public class CassandraMailboxSessionMapperFactory extends 
MailboxSessionMapperFa
 
     @Override
     public CassandraAttachmentMapper createAttachmentMapper(MailboxSession 
mailboxSession) {
-        return new CassandraAttachmentMapper(attachmentDAO, attachmentDAOV2, 
blobsDAO, attachmentMessageIdDAO, ownerDAO);
+        return new CassandraAttachmentMapper(attachmentDAO, attachmentDAOV2, 
objectStore, attachmentMessageIdDAO, ownerDAO);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/ea12b94b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAOV2.java
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAOV2.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAOV2.java
index 8a40ef8..f88723f 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAOV2.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAOV2.java
@@ -39,7 +39,6 @@ import javax.inject.Inject;
 
 import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor;
 import org.apache.james.blob.api.BlobId;
-import org.apache.james.blob.cassandra.CassandraBlobId;
 import org.apache.james.mailbox.model.Attachment;
 import org.apache.james.mailbox.model.AttachmentId;
 
@@ -113,20 +112,22 @@ public class CassandraAttachmentDAOV2 {
             attachment.getSize());
     }
 
-    private static DAOAttachment fromRow(Row row) {
+    private static DAOAttachment fromRow(Row row, BlobId.Factory 
blobIfFactory) {
         return new DAOAttachment(
             AttachmentId.from(row.getString(ID)),
-            CassandraBlobId.from(row.getString(BLOB_ID)),
+            blobIfFactory.from(row.getString(BLOB_ID)),
             row.getString(TYPE),
             row.getLong(SIZE));
     }
 
+    private final BlobId.Factory blobIdFactory;
     private final CassandraAsyncExecutor cassandraAsyncExecutor;
     private final PreparedStatement insertStatement;
     private final PreparedStatement selectStatement;
 
     @Inject
-    public CassandraAttachmentDAOV2(Session session) {
+    public CassandraAttachmentDAOV2(BlobId.Factory blobIdFactory, Session 
session) {
+        this.blobIdFactory = blobIdFactory;
         this.cassandraAsyncExecutor = new CassandraAsyncExecutor(session);
 
         this.selectStatement = prepareSelect(session);
@@ -154,7 +155,7 @@ public class CassandraAttachmentDAOV2 {
         return cassandraAsyncExecutor.executeSingleRow(
             selectStatement.bind()
                 .setUUID(ID_AS_UUID, attachmentId.asUUID()))
-            .thenApply(row -> row.map(CassandraAttachmentDAOV2::fromRow));
+            .thenApply(rowOptional -> rowOptional.map(row -> 
CassandraAttachmentDAOV2.fromRow(row, blobIdFactory)));
     }
 
     public CompletableFuture<Void> storeAttachment(DAOAttachment attachment) {

http://git-wip-us.apache.org/repos/asf/james-project/blob/ea12b94b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentMapper.java
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentMapper.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentMapper.java
index d9a282f..ef0294b 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentMapper.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentMapper.java
@@ -28,7 +28,7 @@ import java.util.stream.Stream;
 
 import javax.inject.Inject;
 
-import org.apache.james.blob.cassandra.CassandraBlobsDAO;
+import org.apache.james.blob.api.ObjectStore;
 import 
org.apache.james.mailbox.cassandra.mail.CassandraAttachmentDAOV2.DAOAttachment;
 import org.apache.james.mailbox.exception.AttachmentNotFoundException;
 import org.apache.james.mailbox.exception.MailboxException;
@@ -51,15 +51,15 @@ public class CassandraAttachmentMapper implements 
AttachmentMapper {
 
     private final CassandraAttachmentDAO attachmentDAO;
     private final CassandraAttachmentDAOV2 attachmentDAOV2;
-    private final CassandraBlobsDAO blobsDAO;
+    private final ObjectStore objectStore;
     private final CassandraAttachmentMessageIdDAO attachmentMessageIdDAO;
     private final CassandraAttachmentOwnerDAO ownerDAO;
 
     @Inject
-    public CassandraAttachmentMapper(CassandraAttachmentDAO attachmentDAO, 
CassandraAttachmentDAOV2 attachmentDAOV2, CassandraBlobsDAO blobsDAO, 
CassandraAttachmentMessageIdDAO attachmentMessageIdDAO, final 
CassandraAttachmentOwnerDAO ownerDAO) {
+    public CassandraAttachmentMapper(CassandraAttachmentDAO attachmentDAO, 
CassandraAttachmentDAOV2 attachmentDAOV2, ObjectStore objectStore, 
CassandraAttachmentMessageIdDAO attachmentMessageIdDAO, 
CassandraAttachmentOwnerDAO ownerDAO) {
         this.attachmentDAO = attachmentDAO;
         this.attachmentDAOV2 = attachmentDAOV2;
-        this.blobsDAO = blobsDAO;
+        this.objectStore = objectStore;
         this.attachmentMessageIdDAO = attachmentMessageIdDAO;
         this.ownerDAO = ownerDAO;
     }
@@ -87,7 +87,7 @@ public class CassandraAttachmentMapper implements 
AttachmentMapper {
             return CompletableFuture.completedFuture(Optional.empty());
         }
         DAOAttachment daoAttachment = daoAttachmentOptional.get();
-        return blobsDAO.read(daoAttachment.getBlobId())
+        return objectStore.read(daoAttachment.getBlobId())
             .thenApply(bytes -> 
Optional.of(daoAttachment.toAttachment(bytes)));
     }
 
@@ -126,7 +126,7 @@ public class CassandraAttachmentMapper implements 
AttachmentMapper {
     @Override
     public void storeAttachmentForOwner(Attachment attachment, Username owner) 
throws MailboxException {
         ownerDAO.addOwner(attachment.getAttachmentId(), owner)
-            .thenCompose(any -> blobsDAO.save(attachment.getBytes()))
+            .thenCompose(any -> objectStore.save(attachment.getBytes()))
             .thenApply(blobId -> CassandraAttachmentDAOV2.from(attachment, 
blobId))
             .thenCompose(attachmentDAOV2::storeAttachment)
             .join();
@@ -152,7 +152,7 @@ public class CassandraAttachmentMapper implements 
AttachmentMapper {
     }
 
     public CompletableFuture<Void> storeAttachmentAsync(Attachment attachment, 
MessageId ownerMessageId) {
-        return blobsDAO.save(attachment.getBytes())
+        return objectStore.save(attachment.getBytes())
             .thenApply(blobId -> CassandraAttachmentDAOV2.from(attachment, 
blobId))
             .thenCompose(daoAttachment -> 
storeAttachmentWithIndex(daoAttachment, ownerMessageId));
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/ea12b94b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAO.java
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAO.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAO.java
index 72fe82e..e00ca41 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAO.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAO.java
@@ -60,8 +60,7 @@ import 
org.apache.james.backends.cassandra.init.CassandraTypesProvider;
 import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor;
 import org.apache.james.backends.cassandra.utils.CassandraUtils;
 import org.apache.james.blob.api.BlobId;
-import org.apache.james.blob.cassandra.CassandraBlobId;
-import org.apache.james.blob.cassandra.CassandraBlobsDAO;
+import org.apache.james.blob.api.ObjectStore;
 import org.apache.james.mailbox.cassandra.ids.CassandraMessageId;
 import org.apache.james.mailbox.cassandra.mail.utils.Limit;
 import org.apache.james.mailbox.cassandra.table.CassandraMessageV2Table;
@@ -103,7 +102,8 @@ public class CassandraMessageDAO {
 
     private final CassandraAsyncExecutor cassandraAsyncExecutor;
     private final CassandraTypesProvider typesProvider;
-    private final CassandraBlobsDAO blobsDAO;
+    private final ObjectStore objectStore;
+    private final BlobId.Factory blobIdFactory;
     private final CassandraConfiguration configuration;
     private final CassandraUtils cassandraUtils;
     private final CassandraMessageId.Factory messageIdFactory;
@@ -117,11 +117,13 @@ public class CassandraMessageDAO {
     private final Cid.CidParser cidParser;
 
     @Inject
-    public CassandraMessageDAO(Session session, CassandraTypesProvider 
typesProvider, CassandraBlobsDAO blobsDAO, CassandraConfiguration 
cassandraConfiguration,
+    public CassandraMessageDAO(Session session, CassandraTypesProvider 
typesProvider, ObjectStore objectStore,
+                               BlobId.Factory blobIdFactory, 
CassandraConfiguration cassandraConfiguration,
             CassandraUtils cassandraUtils, CassandraMessageId.Factory 
messageIdFactory) {
         this.cassandraAsyncExecutor = new CassandraAsyncExecutor(session);
         this.typesProvider = typesProvider;
-        this.blobsDAO = blobsDAO;
+        this.objectStore = objectStore;
+        this.blobIdFactory = blobIdFactory;
         this.configuration = cassandraConfiguration;
         this.cassandraUtils = cassandraUtils;
         this.messageIdFactory = messageIdFactory;
@@ -137,9 +139,9 @@ public class CassandraMessageDAO {
     }
 
     @VisibleForTesting
-    public CassandraMessageDAO(Session session, CassandraTypesProvider 
typesProvider, CassandraBlobsDAO blobsDAO,
-            CassandraUtils cassandraUtils, CassandraMessageId.Factory 
messageIdFactory) {
-        this(session, typesProvider, blobsDAO, 
CassandraConfiguration.DEFAULT_CONFIGURATION, cassandraUtils, messageIdFactory);
+    public CassandraMessageDAO(Session session, CassandraTypesProvider 
typesProvider, ObjectStore objectStore,
+                               BlobId.Factory blobIdFactory, CassandraUtils 
cassandraUtils, CassandraMessageId.Factory messageIdFactory) {
+        this(session, typesProvider, objectStore,  blobIdFactory, 
CassandraConfiguration.DEFAULT_CONFIGURATION, cassandraUtils, messageIdFactory);
     }
 
     private PreparedStatement prepareSelect(Session session, String[] fields) {
@@ -180,13 +182,11 @@ public class CassandraMessageDAO {
 
     private CompletableFuture<Pair<BlobId, BlobId>> saveContent(MailboxMessage 
message) throws MailboxException {
         try {
+            byte[] headerContent = 
IOUtils.toByteArray(message.getHeaderContent());
+            byte[] bodyContent = IOUtils.toByteArray(message.getBodyContent());
             return CompletableFutureUtil.combine(
-                blobsDAO.save(
-                    IOUtils.toByteArray(
-                        message.getHeaderContent())),
-                blobsDAO.save(
-                    IOUtils.toByteArray(
-                        message.getBodyContent())),
+                objectStore.save(headerContent),
+                objectStore.save(bodyContent),
                 Pair::of);
         } catch (IOException e) {
             throw new MailboxException("Error saving mail content", e);
@@ -372,7 +372,7 @@ public class CassandraMessageDAO {
     }
 
     private CompletableFuture<byte[]> getFieldContent(String field, Row row) {
-        return blobsDAO.read(CassandraBlobId.from(row.getString(field)));
+        return objectStore.read(blobIdFactory.from(row.getString(field)));
     }
 
     public static MessageResult notFound(ComposedMessageIdWithMetaData id) {

http://git-wip-us.apache.org/repos/asf/james-project/blob/ea12b94b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/migration/AttachmentV2Migration.java
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/migration/AttachmentV2Migration.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/migration/AttachmentV2Migration.java
index 651b381..0e074f4 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/migration/AttachmentV2Migration.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/migration/AttachmentV2Migration.java
@@ -22,7 +22,7 @@ package org.apache.james.mailbox.cassandra.mail.migration;
 import javax.inject.Inject;
 
 import org.apache.james.backends.cassandra.migration.Migration;
-import org.apache.james.blob.cassandra.CassandraBlobsDAO;
+import org.apache.james.blob.api.ObjectStore;
 import org.apache.james.mailbox.cassandra.mail.CassandraAttachmentDAO;
 import org.apache.james.mailbox.cassandra.mail.CassandraAttachmentDAOV2;
 import org.apache.james.mailbox.model.Attachment;
@@ -34,15 +34,15 @@ public class AttachmentV2Migration implements Migration {
     private static final Logger LOGGER = 
LoggerFactory.getLogger(AttachmentV2Migration.class);
     private final CassandraAttachmentDAO attachmentDAOV1;
     private final CassandraAttachmentDAOV2 attachmentDAOV2;
-    private final CassandraBlobsDAO blobsDAO;
+    private final ObjectStore objectStore;
 
     @Inject
     public AttachmentV2Migration(CassandraAttachmentDAO attachmentDAOV1,
                                  CassandraAttachmentDAOV2 attachmentDAOV2,
-                                 CassandraBlobsDAO blobsDAO) {
+                                 ObjectStore objectStore) {
         this.attachmentDAOV1 = attachmentDAOV1;
         this.attachmentDAOV2 = attachmentDAOV2;
-        this.blobsDAO = blobsDAO;
+        this.objectStore = objectStore;
     }
 
     @Override
@@ -59,7 +59,7 @@ public class AttachmentV2Migration implements Migration {
 
     private Result migrateAttachment(Attachment attachment) {
         try {
-            blobsDAO.save(attachment.getBytes())
+            objectStore.save(attachment.getBytes())
                 .thenApply(blobId -> CassandraAttachmentDAOV2.from(attachment, 
blobId))
                 .thenCompose(attachmentDAOV2::storeAttachment)
                 .thenCompose(any -> 
attachmentDAOV1.deleteAttachment(attachment.getAttachmentId()))

http://git-wip-us.apache.org/repos/asf/james-project/blob/ea12b94b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraSubscriptionManagerTest.java
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraSubscriptionManagerTest.java
 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraSubscriptionManagerTest.java
index c55cc11..153a859 100644
--- 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraSubscriptionManagerTest.java
+++ 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraSubscriptionManagerTest.java
@@ -24,6 +24,8 @@ import 
org.apache.james.backends.cassandra.DockerCassandraRule;
 import org.apache.james.backends.cassandra.init.CassandraConfiguration;
 import org.apache.james.backends.cassandra.init.CassandraModuleComposite;
 import org.apache.james.backends.cassandra.utils.CassandraUtils;
+import org.apache.james.blob.api.BlobId;
+import org.apache.james.blob.api.ObjectStore;
 import org.apache.james.blob.cassandra.CassandraBlobsDAO;
 import org.apache.james.mailbox.AbstractSubscriptionManagerTest;
 import org.apache.james.mailbox.SubscriptionManager;
@@ -99,6 +101,8 @@ public class CassandraSubscriptionManagerTest extends 
AbstractSubscriptionManage
         CassandraAttachmentOwnerDAO ownerDAO = null;
         CassandraACLMapper aclMapper = null;
         CassandraUserMailboxRightsDAO userMailboxRightsDAO = null;
+        BlobId.Factory blobIdFactory = null;
+        ObjectStore objectStore = null;
         return new CassandraSubscriptionManager(
             new CassandraMailboxSessionMapperFactory(
                 new CassandraUidProvider(cassandra.getConf()),
@@ -116,11 +120,12 @@ public class CassandraSubscriptionManagerTest extends 
AbstractSubscriptionManage
                 attachmentDAO,
                 attachmentDAOV2,
                 deletedMessageDAO,
-                cassandraBlobsDAO,
+                objectStore,
                 attachmentMessageIdDAO,
                 ownerDAO,
                 aclMapper,
                 userMailboxRightsDAO,
+                blobIdFactory,
                 CassandraUtils.WITH_DEFAULT_CONFIGURATION,
                 CassandraConfiguration.DEFAULT_CONFIGURATION));
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/ea12b94b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/TestCassandraMailboxSessionMapperFactory.java
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/TestCassandraMailboxSessionMapperFactory.java
 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/TestCassandraMailboxSessionMapperFactory.java
index a6d854c..c4503b1 100644
--- 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/TestCassandraMailboxSessionMapperFactory.java
+++ 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/TestCassandraMailboxSessionMapperFactory.java
@@ -22,6 +22,7 @@ package org.apache.james.mailbox.cassandra;
 import org.apache.james.backends.cassandra.init.CassandraConfiguration;
 import org.apache.james.backends.cassandra.init.CassandraTypesProvider;
 import org.apache.james.backends.cassandra.utils.CassandraUtils;
+import org.apache.james.blob.cassandra.CassandraBlobId;
 import org.apache.james.blob.cassandra.CassandraBlobsDAO;
 import org.apache.james.mailbox.cassandra.ids.CassandraMessageId;
 import org.apache.james.mailbox.cassandra.mail.CassandraACLMapper;
@@ -49,11 +50,12 @@ public class TestCassandraMailboxSessionMapperFactory {
     public static CassandraMailboxSessionMapperFactory forTests(Session 
session, CassandraTypesProvider typesProvider,
                                                                 
CassandraMessageId.Factory factory) {
         CassandraBlobsDAO cassandraBlobsDAO = new CassandraBlobsDAO(session);
+        CassandraBlobId.Factory blobIdFactory = new CassandraBlobId.Factory();
         return new CassandraMailboxSessionMapperFactory(
             new CassandraUidProvider(session),
             new CassandraModSeqProvider(session),
             session,
-            new CassandraMessageDAO(session, typesProvider, cassandraBlobsDAO, 
CassandraUtils.WITH_DEFAULT_CONFIGURATION, factory),
+            new CassandraMessageDAO(session, typesProvider, cassandraBlobsDAO, 
blobIdFactory, CassandraUtils.WITH_DEFAULT_CONFIGURATION, factory),
             new CassandraMessageIdDAO(session, factory),
             new CassandraMessageIdToImapUidDAO(session, factory),
             new CassandraMailboxCounterDAO(session),
@@ -63,16 +65,15 @@ public class TestCassandraMailboxSessionMapperFactory {
             new CassandraFirstUnseenDAO(session),
             new CassandraApplicableFlagDAO(session),
             new CassandraAttachmentDAO(session, 
CassandraUtils.WITH_DEFAULT_CONFIGURATION, 
CassandraConfiguration.DEFAULT_CONFIGURATION),
-            new CassandraAttachmentDAOV2(session),
+            new CassandraAttachmentDAOV2(blobIdFactory, session),
             new CassandraDeletedMessageDAO(session),
-            cassandraBlobsDAO,
-            new CassandraAttachmentMessageIdDAO(session, factory, 
CassandraUtils.WITH_DEFAULT_CONFIGURATION),
+            cassandraBlobsDAO, new CassandraAttachmentMessageIdDAO(session, 
factory, CassandraUtils.WITH_DEFAULT_CONFIGURATION),
             new CassandraAttachmentOwnerDAO(session, 
CassandraUtils.WITH_DEFAULT_CONFIGURATION),
             new CassandraACLMapper(session,
                 new CassandraUserMailboxRightsDAO(session, 
CassandraUtils.WITH_DEFAULT_CONFIGURATION),
                 CassandraConfiguration.DEFAULT_CONFIGURATION),
             new CassandraUserMailboxRightsDAO(session, 
CassandraUtils.WITH_DEFAULT_CONFIGURATION),
-            CassandraUtils.WITH_DEFAULT_CONFIGURATION,
+            blobIdFactory, CassandraUtils.WITH_DEFAULT_CONFIGURATION,
             CassandraConfiguration.DEFAULT_CONFIGURATION);
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/ea12b94b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAOV2Test.java
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAOV2Test.java
 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAOV2Test.java
index f5a8285..d5f7ca4 100644
--- 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAOV2Test.java
+++ 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAOV2Test.java
@@ -26,6 +26,7 @@ import java.util.Optional;
 
 import org.apache.james.backends.cassandra.CassandraCluster;
 import org.apache.james.backends.cassandra.DockerCassandraRule;
+import org.apache.james.blob.api.BlobId;
 import org.apache.james.blob.cassandra.CassandraBlobId;
 import 
org.apache.james.mailbox.cassandra.mail.CassandraAttachmentDAOV2.DAOAttachment;
 import org.apache.james.mailbox.cassandra.modules.CassandraAttachmentModule;
@@ -38,6 +39,7 @@ import org.junit.Test;
 
 public class CassandraAttachmentDAOV2Test {
     public static final AttachmentId ATTACHMENT_ID = AttachmentId.from("id1");
+    private static final CassandraBlobId.Factory BLOB_ID_FACTORY = new 
CassandraBlobId.Factory();
 
     @ClassRule
     public static DockerCassandraRule cassandraServer = new 
DockerCassandraRule();
@@ -53,7 +55,7 @@ public class CassandraAttachmentDAOV2Test {
             cassandraServer.getIp(),
             cassandraServer.getBindingPort());
 
-        testee = new CassandraAttachmentDAOV2(cassandra.getConf());
+        testee = new CassandraAttachmentDAOV2(BLOB_ID_FACTORY, 
cassandra.getConf());
     }
 
     @After
@@ -75,7 +77,7 @@ public class CassandraAttachmentDAOV2Test {
             .type("application/json")
             
.bytes("{\"property\":`\"value\"}".getBytes(StandardCharsets.UTF_8))
             .build();
-        CassandraBlobId blobId = CassandraBlobId.from("blobId");
+        BlobId blobId = BLOB_ID_FACTORY.from("blobId");
         DAOAttachment daoAttachment = 
CassandraAttachmentDAOV2.from(attachment, blobId);
         testee.storeAttachment(daoAttachment).join();
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/ea12b94b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentFallbackTest.java
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentFallbackTest.java
 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentFallbackTest.java
index 0658b1a..175c479 100644
--- 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentFallbackTest.java
+++ 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentFallbackTest.java
@@ -30,6 +30,7 @@ import 
org.apache.james.backends.cassandra.init.CassandraConfiguration;
 import org.apache.james.backends.cassandra.init.CassandraModuleComposite;
 import org.apache.james.backends.cassandra.utils.CassandraUtils;
 import org.apache.james.blob.api.BlobId;
+import org.apache.james.blob.cassandra.CassandraBlobId;
 import org.apache.james.blob.cassandra.CassandraBlobModule;
 import org.apache.james.blob.cassandra.CassandraBlobsDAO;
 import org.apache.james.mailbox.cassandra.ids.CassandraMessageId;
@@ -46,6 +47,7 @@ import 
org.testcontainers.shaded.com.google.common.collect.ImmutableList;
 public class CassandraAttachmentFallbackTest {
     public static final AttachmentId ATTACHMENT_ID_1 = 
AttachmentId.from("id1");
     public static final AttachmentId ATTACHMENT_ID_2 = 
AttachmentId.from("id2");
+    private static final CassandraBlobId.Factory BLOB_ID_FACTORY = new 
CassandraBlobId.Factory();
 
     @ClassRule
     public static DockerCassandraRule cassandraServer = new 
DockerCassandraRule();
@@ -69,7 +71,7 @@ public class CassandraAttachmentFallbackTest {
             cassandraServer.getIp(),
             cassandraServer.getBindingPort());
 
-        attachmentDAOV2 = new CassandraAttachmentDAOV2(cassandra.getConf());
+        attachmentDAOV2 = new CassandraAttachmentDAOV2(BLOB_ID_FACTORY, 
cassandra.getConf());
         attachmentDAO = new CassandraAttachmentDAO(cassandra.getConf(),
             CassandraUtils.WITH_DEFAULT_CONFIGURATION,
             CassandraConfiguration.DEFAULT_CONFIGURATION);

http://git-wip-us.apache.org/repos/asf/james-project/blob/ea12b94b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAOTest.java
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAOTest.java
 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAOTest.java
index eee499f..f9d3f45 100644
--- 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAOTest.java
+++ 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAOTest.java
@@ -38,6 +38,7 @@ import org.apache.james.backends.cassandra.CassandraCluster;
 import org.apache.james.backends.cassandra.DockerCassandraRule;
 import org.apache.james.backends.cassandra.init.CassandraModuleComposite;
 import org.apache.james.backends.cassandra.utils.CassandraUtils;
+import org.apache.james.blob.cassandra.CassandraBlobId;
 import org.apache.james.blob.cassandra.CassandraBlobModule;
 import org.apache.james.blob.cassandra.CassandraBlobsDAO;
 import org.apache.james.mailbox.MessageUid;
@@ -89,7 +90,9 @@ public class CassandraMessageDAOTest {
         messageIdFactory = new CassandraMessageId.Factory();
         messageId = messageIdFactory.generate();
         CassandraBlobsDAO blobsDAO = new 
CassandraBlobsDAO(cassandra.getConf());
-        testee = new CassandraMessageDAO(cassandra.getConf(), 
cassandra.getTypesProvider(), blobsDAO, 
CassandraUtils.WITH_DEFAULT_CONFIGURATION, new CassandraMessageId.Factory());
+        CassandraBlobId.Factory blobIdFactory = new CassandraBlobId.Factory();
+        testee = new CassandraMessageDAO(cassandra.getConf(), 
cassandra.getTypesProvider(), blobsDAO, blobIdFactory,
+            CassandraUtils.WITH_DEFAULT_CONFIGURATION, new 
CassandraMessageId.Factory());
 
         messageIds = ImmutableList.of(ComposedMessageIdWithMetaData.builder()
                 .composedMessageId(new ComposedMessageId(MAILBOX_ID, 
messageId, messageUid))

http://git-wip-us.apache.org/repos/asf/james-project/blob/ea12b94b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/AttachmentMessageIdCreationTest.java
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/AttachmentMessageIdCreationTest.java
 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/AttachmentMessageIdCreationTest.java
index 67d5b1e..1a491fd 100644
--- 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/AttachmentMessageIdCreationTest.java
+++ 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/AttachmentMessageIdCreationTest.java
@@ -39,6 +39,7 @@ import 
org.apache.james.backends.cassandra.DockerCassandraRule;
 import org.apache.james.backends.cassandra.init.CassandraModuleComposite;
 import org.apache.james.backends.cassandra.migration.Migration;
 import org.apache.james.backends.cassandra.utils.CassandraUtils;
+import org.apache.james.blob.cassandra.CassandraBlobId;
 import org.apache.james.blob.cassandra.CassandraBlobModule;
 import org.apache.james.blob.cassandra.CassandraBlobsDAO;
 import org.apache.james.mailbox.MessageUid;
@@ -87,7 +88,7 @@ public class AttachmentMessageIdCreationTest {
 
         blobsDAO = new CassandraBlobsDAO(cassandra.getConf());
         cassandraMessageDAO = new CassandraMessageDAO(cassandra.getConf(), 
cassandra.getTypesProvider(),
-            blobsDAO, CassandraUtils.WITH_DEFAULT_CONFIGURATION, 
messageIdFactory);
+            blobsDAO, new CassandraBlobId.Factory(), 
CassandraUtils.WITH_DEFAULT_CONFIGURATION, messageIdFactory);
 
         attachmentMessageIdDAO = new 
CassandraAttachmentMessageIdDAO(cassandra.getConf(),
             new CassandraMessageId.Factory(), 
CassandraUtils.WITH_DEFAULT_CONFIGURATION);

http://git-wip-us.apache.org/repos/asf/james-project/blob/ea12b94b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/AttachmentV2MigrationTest.java
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/AttachmentV2MigrationTest.java
 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/AttachmentV2MigrationTest.java
index 70792a8..68d53a6 100644
--- 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/AttachmentV2MigrationTest.java
+++ 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/AttachmentV2MigrationTest.java
@@ -49,6 +49,7 @@ import org.junit.Test;
 public class AttachmentV2MigrationTest {
     public static final AttachmentId ATTACHMENT_ID = AttachmentId.from("id1");
     public static final AttachmentId ATTACHMENT_ID_2 = 
AttachmentId.from("id2");
+    private static final CassandraBlobId.Factory BLOB_ID_FACTORY = new 
CassandraBlobId.Factory();
 
     @ClassRule
     public static DockerCassandraRule cassandraServer = new 
DockerCassandraRule();
@@ -72,9 +73,8 @@ public class AttachmentV2MigrationTest {
         attachmentDAO = new CassandraAttachmentDAO(cassandra.getConf(),
             CassandraUtils.WITH_DEFAULT_CONFIGURATION,
             CassandraConfiguration.DEFAULT_CONFIGURATION);
-        attachmentDAOV2 = new CassandraAttachmentDAOV2(cassandra.getConf());
+        attachmentDAOV2 = new CassandraAttachmentDAOV2(BLOB_ID_FACTORY, 
cassandra.getConf());
         blobsDAO = new CassandraBlobsDAO(cassandra.getConf());
-
         migration = new AttachmentV2Migration(attachmentDAO, attachmentDAOV2, 
blobsDAO);
 
         attachment1 = Attachment.builder()
@@ -112,12 +112,12 @@ public class AttachmentV2MigrationTest {
         migration.run();
 
         assertThat(attachmentDAOV2.getAttachment(ATTACHMENT_ID).join())
-            .contains(CassandraAttachmentDAOV2.from(attachment1, 
CassandraBlobId.forPayload(attachment1.getBytes())));
+            .contains(CassandraAttachmentDAOV2.from(attachment1, 
BLOB_ID_FACTORY.forPayload(attachment1.getBytes())));
         assertThat(attachmentDAOV2.getAttachment(ATTACHMENT_ID_2).join())
-            .contains(CassandraAttachmentDAOV2.from(attachment2, 
CassandraBlobId.forPayload(attachment2.getBytes())));
-        
assertThat(blobsDAO.read(CassandraBlobId.forPayload(attachment1.getBytes())).join())
+            .contains(CassandraAttachmentDAOV2.from(attachment2, 
BLOB_ID_FACTORY.forPayload(attachment2.getBytes())));
+        
assertThat(blobsDAO.read(BLOB_ID_FACTORY.forPayload(attachment1.getBytes())).join())
             .isEqualTo(attachment1.getBytes());
-        
assertThat(blobsDAO.read(CassandraBlobId.forPayload(attachment2.getBytes())).join())
+        
assertThat(blobsDAO.read(BLOB_ID_FACTORY.forPayload(attachment2.getBytes())).join())
             .isEqualTo(attachment2.getBytes());
     }
 
@@ -172,9 +172,9 @@ public class AttachmentV2MigrationTest {
             attachment1,
             attachment2));
         when(blobsDAO.save(attachment1.getBytes()))
-            
.thenReturn(CompletableFuture.completedFuture(CassandraBlobId.forPayload(attachment1.getBytes())));
+            
.thenReturn(CompletableFuture.completedFuture(BLOB_ID_FACTORY.forPayload(attachment1.getBytes())));
         when(blobsDAO.save(attachment2.getBytes()))
-            
.thenReturn(CompletableFuture.completedFuture(CassandraBlobId.forPayload(attachment2.getBytes())));
+            
.thenReturn(CompletableFuture.completedFuture(BLOB_ID_FACTORY.forPayload(attachment2.getBytes())));
         when(attachmentDAOV2.storeAttachment(any())).thenThrow(new 
RuntimeException());
 
         assertThat(migration.run()).isEqualTo(Migration.Result.PARTIAL);
@@ -191,9 +191,9 @@ public class AttachmentV2MigrationTest {
             attachment1,
             attachment2));
         when(blobsDAO.save(attachment1.getBytes()))
-            
.thenReturn(CompletableFuture.completedFuture(CassandraBlobId.forPayload(attachment1.getBytes())));
+            
.thenReturn(CompletableFuture.completedFuture(BLOB_ID_FACTORY.forPayload(attachment1.getBytes())));
         when(blobsDAO.save(attachment2.getBytes()))
-            
.thenReturn(CompletableFuture.completedFuture(CassandraBlobId.forPayload(attachment2.getBytes())));
+            
.thenReturn(CompletableFuture.completedFuture(BLOB_ID_FACTORY.forPayload(attachment2.getBytes())));
         
when(attachmentDAOV2.storeAttachment(any())).thenReturn(CompletableFuture.completedFuture(null));
         when(attachmentDAO.deleteAttachment(any())).thenThrow(new 
RuntimeException());
 
@@ -211,7 +211,7 @@ public class AttachmentV2MigrationTest {
             attachment1,
             attachment2));
         when(blobsDAO.save(attachment1.getBytes()))
-            
.thenReturn(CompletableFuture.completedFuture(CassandraBlobId.forPayload(attachment1.getBytes())));
+            
.thenReturn(CompletableFuture.completedFuture(BLOB_ID_FACTORY.forPayload(attachment1.getBytes())));
         when(blobsDAO.save(attachment2.getBytes()))
             .thenThrow(new RuntimeException());
         
when(attachmentDAOV2.storeAttachment(any())).thenReturn(CompletableFuture.completedFuture(null));

http://git-wip-us.apache.org/repos/asf/james-project/blob/ea12b94b/mpt/impl/imap-mailbox/cassandra/pom.xml
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/cassandra/pom.xml 
b/mpt/impl/imap-mailbox/cassandra/pom.xml
index bec05c3..2c325cd 100644
--- a/mpt/impl/imap-mailbox/cassandra/pom.xml
+++ b/mpt/impl/imap-mailbox/cassandra/pom.xml
@@ -55,5 +55,9 @@
             <groupId>${project.groupId}</groupId>
             <artifactId>apache-james-mpt-imapmailbox-core</artifactId>
         </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>blob-cassandra</artifactId>
+        </dependency>
     </dependencies>
 </project>


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to