MAILBOX-304 Relies Attachment DAO

 - Separation of concern between DAO and business code
 - Prepared statements
 - Will make upgrading storage easier
 - Also this commit allow not propagating CassandraMailboxSessionMapperFactory 
internal DAOs to test implementers (limit code spread upon Cassandra coding)
 - Adding unit tests for attachment DAO


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

Branch: refs/heads/master
Commit: b8303bef410f3a0eafc599d1626ed61ca7b3ae7d
Parents: 6ad3c7e
Author: benwa <btell...@linagora.com>
Authored: Wed Sep 6 16:51:00 2017 +0700
Committer: benwa <btell...@linagora.com>
Committed: Wed Sep 6 17:55:52 2017 +0700

----------------------------------------------------------------------
 .../CassandraMailboxSessionMapperFactory.java   |  49 ++++----
 .../cassandra/mail/CassandraAttachmentDAO.java  | 119 +++++++++++++++++++
 .../mail/CassandraAttachmentMapper.java         |  68 ++---------
 .../CassandraMailboxManagerProvider.java        |  41 +------
 .../CassandraSubscriptionManagerTest.java       |   9 +-
 .../cassandra/CassandraTestSystemFixture.java   |  42 +------
 .../mail/CassandraAttachmentDAOTest.java        |  79 ++++++++++++
 .../CassandraMailboxManagerAttachmentTest.java  |  23 +---
 .../cassandra/mail/CassandraMapperProvider.java |  23 +---
 .../cassandra/host/CassandraHostSystem.java     |  45 +------
 10 files changed, 258 insertions(+), 240 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/b8303bef/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 3d6ee37..2db0e01 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
@@ -22,11 +22,15 @@ package org.apache.james.mailbox.cassandra;
 import javax.inject.Inject;
 
 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.mailbox.MailboxSession;
+import org.apache.james.mailbox.cassandra.ids.CassandraMessageId;
 import org.apache.james.mailbox.cassandra.mail.CassandraAnnotationMapper;
 import org.apache.james.mailbox.cassandra.mail.CassandraApplicableFlagDAO;
+import org.apache.james.mailbox.cassandra.mail.CassandraAttachmentDAO;
 import org.apache.james.mailbox.cassandra.mail.CassandraAttachmentMapper;
+import org.apache.james.mailbox.cassandra.mail.CassandraBlobsDAO;
 import org.apache.james.mailbox.cassandra.mail.CassandraDeletedMessageDAO;
 import org.apache.james.mailbox.cassandra.mail.CassandraFirstUnseenDAO;
 import org.apache.james.mailbox.cassandra.mail.CassandraIndexTableHandler;
@@ -73,6 +77,7 @@ public class CassandraMailboxSessionMapperFactory extends 
MailboxSessionMapperFa
     private final CassandraMailboxPathDAO mailboxPathDAO;
     private final CassandraFirstUnseenDAO firstUnseenDAO;
     private final CassandraApplicableFlagDAO applicableFlagDAO;
+    private final CassandraAttachmentDAO attachmentDAO;
     private CassandraUtils cassandraUtils;
     private CassandraConfiguration cassandraConfiguration;
     private final CassandraDeletedMessageDAO deletedMessageDAO;
@@ -83,7 +88,8 @@ public class CassandraMailboxSessionMapperFactory extends 
MailboxSessionMapperFa
                                                 CassandraMessageIdDAO 
messageIdDAO, CassandraMessageIdToImapUidDAO imapUidDAO,
                                                 CassandraMailboxCounterDAO 
mailboxCounterDAO, CassandraMailboxRecentsDAO mailboxRecentsDAO, 
CassandraMailboxDAO mailboxDAO,
                                                 CassandraMailboxPathDAO 
mailboxPathDAO, CassandraFirstUnseenDAO firstUnseenDAO, 
CassandraApplicableFlagDAO applicableFlagDAO,
-                                                CassandraDeletedMessageDAO 
deletedMessageDAO, CassandraUtils cassandraUtils, CassandraConfiguration 
cassandraConfiguration) {
+                                                CassandraAttachmentDAO 
attachmentDAO, CassandraDeletedMessageDAO deletedMessageDAO, CassandraUtils 
cassandraUtils,
+                                                CassandraConfiguration 
cassandraConfiguration) {
         this.uidProvider = uidProvider;
         this.modSeqProvider = modSeqProvider;
         this.session = session;
@@ -95,6 +101,7 @@ public class CassandraMailboxSessionMapperFactory extends 
MailboxSessionMapperFa
         this.mailboxDAO = mailboxDAO;
         this.mailboxPathDAO = mailboxPathDAO;
         this.firstUnseenDAO = firstUnseenDAO;
+        this.attachmentDAO = attachmentDAO;
         this.deletedMessageDAO = deletedMessageDAO;
         this.applicableFlagDAO = applicableFlagDAO;
         this.cassandraUtils = cassandraUtils;
@@ -107,24 +114,24 @@ public class CassandraMailboxSessionMapperFactory extends 
MailboxSessionMapperFa
             deletedMessageDAO);
     }
 
-    public CassandraMailboxSessionMapperFactory(
-        CassandraUidProvider uidProvider,
-        CassandraModSeqProvider modSeqProvider,
-        Session session,
-        CassandraMessageDAO messageDAO,
-        CassandraMessageIdDAO messageIdDAO,
-        CassandraMessageIdToImapUidDAO imapUidDAO,
-        CassandraMailboxCounterDAO mailboxCounterDAO,
-        CassandraMailboxRecentsDAO mailboxRecentsDAO,
-        CassandraMailboxDAO mailboxDAO,
-        CassandraMailboxPathDAO mailboxPathDAO,
-        CassandraFirstUnseenDAO firstUnseenDAO,
-        CassandraApplicableFlagDAO applicableFlagDAO,
-        CassandraDeletedMessageDAO deletedMesageDAO) {
-
-        this(uidProvider, modSeqProvider, session, messageDAO, messageIdDAO, 
imapUidDAO, mailboxCounterDAO,
-            mailboxRecentsDAO, mailboxDAO, mailboxPathDAO, firstUnseenDAO, 
applicableFlagDAO, deletedMesageDAO,
-            CassandraUtils.WITH_DEFAULT_CONFIGURATION, 
CassandraConfiguration.DEFAULT_CONFIGURATION);
+    public CassandraMailboxSessionMapperFactory(Session session, 
CassandraTypesProvider typesProvider,
+                                                CassandraMessageId.Factory 
factory) {
+        this(new CassandraUidProvider(session),
+            new CassandraModSeqProvider(session),
+            session,
+            new CassandraMessageDAO(session, typesProvider, new 
CassandraBlobsDAO(session)),
+            new CassandraMessageIdDAO(session, factory),
+            new CassandraMessageIdToImapUidDAO(session, factory),
+            new CassandraMailboxCounterDAO(session),
+            new CassandraMailboxRecentsDAO(session),
+            new CassandraMailboxDAO(session, typesProvider),
+            new CassandraMailboxPathDAO(session, typesProvider),
+            new CassandraFirstUnseenDAO(session),
+            new CassandraApplicableFlagDAO(session),
+            new CassandraAttachmentDAO(session),
+            new CassandraDeletedMessageDAO(session),
+            CassandraUtils.WITH_DEFAULT_CONFIGURATION,
+            CassandraConfiguration.DEFAULT_CONFIGURATION);
     }
 
     @Override
@@ -134,7 +141,7 @@ public class CassandraMailboxSessionMapperFactory extends 
MailboxSessionMapperFa
                                           modSeqProvider,
                                           null,
                                           (CassandraAttachmentMapper) 
createAttachmentMapper(mailboxSession),
-            messageDAO,
+                                          messageDAO,
                                           messageIdDAO,
                                           imapUidDAO,
                                           mailboxCounterDAO,
@@ -161,7 +168,7 @@ public class CassandraMailboxSessionMapperFactory extends 
MailboxSessionMapperFa
 
     @Override
     public AttachmentMapper createAttachmentMapper(MailboxSession 
mailboxSession) {
-        return new CassandraAttachmentMapper(session);
+        return new CassandraAttachmentMapper(attachmentDAO);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/b8303bef/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAO.java
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAO.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAO.java
new file mode 100644
index 0000000..386d8df
--- /dev/null
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAO.java
@@ -0,0 +1,119 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+
+package org.apache.james.mailbox.cassandra.mail;
+
+import static com.datastax.driver.core.querybuilder.QueryBuilder.bindMarker;
+import static com.datastax.driver.core.querybuilder.QueryBuilder.eq;
+import static com.datastax.driver.core.querybuilder.QueryBuilder.insertInto;
+import static com.datastax.driver.core.querybuilder.QueryBuilder.select;
+import static 
org.apache.james.mailbox.cassandra.table.CassandraAttachmentTable.FIELDS;
+import static 
org.apache.james.mailbox.cassandra.table.CassandraAttachmentTable.ID;
+import static 
org.apache.james.mailbox.cassandra.table.CassandraAttachmentTable.PAYLOAD;
+import static 
org.apache.james.mailbox.cassandra.table.CassandraAttachmentTable.SIZE;
+import static 
org.apache.james.mailbox.cassandra.table.CassandraAttachmentTable.TABLE_NAME;
+import static 
org.apache.james.mailbox.cassandra.table.CassandraAttachmentTable.TYPE;
+
+import java.io.IOException;
+import java.nio.ByteBuffer;
+import java.util.Optional;
+import java.util.concurrent.CompletableFuture;
+
+import javax.inject.Inject;
+
+import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor;
+import org.apache.james.mailbox.model.Attachment;
+import org.apache.james.mailbox.model.AttachmentId;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.datastax.driver.core.PreparedStatement;
+import com.datastax.driver.core.Row;
+import com.datastax.driver.core.Session;
+import com.google.common.base.Preconditions;
+
+public class CassandraAttachmentDAO {
+
+    private static final Logger LOGGER = 
LoggerFactory.getLogger(CassandraAttachmentMapper.class);
+    private static final boolean NO_LOG_IF_EMPTY = false;
+
+    private final CassandraAsyncExecutor cassandraAsyncExecutor;
+    private final PreparedStatement insertStatement;
+    private final PreparedStatement selectStatement;
+
+    @Inject
+    public CassandraAttachmentDAO(Session session) {
+        this.cassandraAsyncExecutor = new CassandraAsyncExecutor(session);
+
+        this.selectStatement = prepareSelect(session);
+        this.insertStatement = prepareInsert(session);
+    }
+
+    private PreparedStatement prepareInsert(Session session) {
+        return session.prepare(
+            insertInto(TABLE_NAME)
+                .value(ID, bindMarker(ID))
+                .value(PAYLOAD, bindMarker(PAYLOAD))
+                .value(TYPE, bindMarker(TYPE))
+                .value(SIZE, bindMarker(SIZE)));
+    }
+
+    private PreparedStatement prepareSelect(Session session) {
+        return session.prepare(select(FIELDS)
+            .from(TABLE_NAME)
+            .where(eq(ID, bindMarker(ID))));
+    }
+
+    public CompletableFuture<Optional<Attachment>> getAttachment(AttachmentId 
attachmentId) {
+        return getAttachment(attachmentId, NO_LOG_IF_EMPTY);
+    }
+
+    public CompletableFuture<Optional<Attachment>> getAttachment(AttachmentId 
attachmentId, boolean logIfEmpty) {
+        Preconditions.checkArgument(attachmentId != null);
+        return cassandraAsyncExecutor.executeSingleRow(
+            selectStatement.bind()
+                .setString(ID, attachmentId.getId()))
+            .thenApply(optional -> optional.map(this::attachment))
+            .thenApply(optional -> logNotFound(attachmentId, logIfEmpty, 
optional));
+    }
+
+    private Optional<Attachment> logNotFound(AttachmentId attachmentId, 
boolean logIfEmpty, Optional<Attachment> optional) {
+        if (!optional.isPresent() && logIfEmpty) {
+            LOGGER.warn("Failed retrieving attachment {}", attachmentId);
+        }
+        return optional;
+    }
+
+    public CompletableFuture<Void> storeAttachment(Attachment attachment) 
throws IOException {
+        return cassandraAsyncExecutor.executeVoid(
+            insertStatement.bind()
+                .setString(ID, attachment.getAttachmentId().getId())
+                .setLong(SIZE, attachment.getSize())
+                .setString(TYPE, attachment.getType())
+                .setBytes(PAYLOAD, ByteBuffer.wrap(attachment.getBytes())));
+    }
+
+    private Attachment attachment(Row row) {
+        return Attachment.builder()
+            .attachmentId(AttachmentId.from(row.getString(ID)))
+            .bytes(row.getBytes(PAYLOAD).array())
+            .type(row.getString(TYPE))
+            .build();
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/b8303bef/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 a385751..0a346e8 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
@@ -19,18 +19,7 @@
 
 package org.apache.james.mailbox.cassandra.mail;
 
-import static com.datastax.driver.core.querybuilder.QueryBuilder.eq;
-import static com.datastax.driver.core.querybuilder.QueryBuilder.insertInto;
-import static com.datastax.driver.core.querybuilder.QueryBuilder.select;
-import static 
org.apache.james.mailbox.cassandra.table.CassandraAttachmentTable.FIELDS;
-import static 
org.apache.james.mailbox.cassandra.table.CassandraAttachmentTable.ID;
-import static 
org.apache.james.mailbox.cassandra.table.CassandraAttachmentTable.PAYLOAD;
-import static 
org.apache.james.mailbox.cassandra.table.CassandraAttachmentTable.SIZE;
-import static 
org.apache.james.mailbox.cassandra.table.CassandraAttachmentTable.TABLE_NAME;
-import static 
org.apache.james.mailbox.cassandra.table.CassandraAttachmentTable.TYPE;
-
 import java.io.IOException;
-import java.nio.ByteBuffer;
 import java.util.Collection;
 import java.util.List;
 import java.util.Optional;
@@ -39,7 +28,6 @@ import java.util.stream.Stream;
 
 import javax.inject.Inject;
 
-import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor;
 import org.apache.james.mailbox.exception.AttachmentNotFoundException;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.Attachment;
@@ -47,11 +35,7 @@ import org.apache.james.mailbox.model.AttachmentId;
 import org.apache.james.mailbox.store.mail.AttachmentMapper;
 import org.apache.james.util.FluentFutureStream;
 import org.apache.james.util.OptionalUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
-import com.datastax.driver.core.Row;
-import com.datastax.driver.core.Session;
 import com.github.fge.lambdas.Throwing;
 import com.github.fge.lambdas.ThrownByLambdaException;
 import com.github.steveash.guavate.Guavate;
@@ -60,12 +44,13 @@ import com.google.common.collect.ImmutableList;
 
 public class CassandraAttachmentMapper implements AttachmentMapper {
 
-    private static final Logger LOGGER = 
LoggerFactory.getLogger(CassandraAttachmentMapper.class);
-    private final CassandraAsyncExecutor cassandraAsyncExecutor;
+    private static final boolean LOG_IF_EMPTY = true;
+
+    private final CassandraAttachmentDAO attachmentDAO;
 
     @Inject
-    public CassandraAttachmentMapper(Session session) {
-        this.cassandraAsyncExecutor = new CassandraAsyncExecutor(session);
+    public CassandraAttachmentMapper(CassandraAttachmentDAO attachmentDAO) {
+        this.attachmentDAO = attachmentDAO;
     }
 
     @Override
@@ -80,23 +65,11 @@ public class CassandraAttachmentMapper implements 
AttachmentMapper {
     @Override
     public Attachment getAttachment(AttachmentId attachmentId) throws 
AttachmentNotFoundException {
         Preconditions.checkArgument(attachmentId != null);
-        return cassandraAsyncExecutor.executeSingleRow(
-            select(FIELDS)
-                .from(TABLE_NAME)
-                .where(eq(ID, attachmentId.getId())))
-            .thenApply(optional -> optional.map(this::attachment))
+        return attachmentDAO.getAttachment(attachmentId)
             .join()
             .orElseThrow(() -> new 
AttachmentNotFoundException(attachmentId.getId()));
     }
 
-    private Attachment attachment(Row row) {
-        return Attachment.builder()
-                .attachmentId(AttachmentId.from(row.getString(ID)))
-                .bytes(row.getBytes(PAYLOAD).array())
-                .type(row.getString(TYPE))
-                .build();
-    }
-
     @Override
     public List<Attachment> getAttachments(Collection<AttachmentId> 
attachmentIds) {
         return getAttachmentsAsFuture(attachmentIds).join();
@@ -108,7 +81,7 @@ public class CassandraAttachmentMapper implements 
AttachmentMapper {
         Stream<CompletableFuture<Optional<Attachment>>> attachments = 
attachmentIds
                 .stream()
                 .distinct()
-                .map(this::getAttachmentAsFuture);
+                .map(id -> attachmentDAO.getAttachment(id, LOG_IF_EMPTY));
 
         return FluentFutureStream
             .of(attachments)
@@ -116,44 +89,21 @@ public class CassandraAttachmentMapper implements 
AttachmentMapper {
             .collect(Guavate.toImmutableList());
     }
 
-    private CompletableFuture<Optional<Attachment>> 
getAttachmentAsFuture(AttachmentId attachmentId) {
-        String id = attachmentId.getId();
-
-        return cassandraAsyncExecutor.executeSingleRow(
-            select(FIELDS)
-                .from(TABLE_NAME)
-                .where(eq(ID, id)))
-            .thenApply(optional ->
-                OptionalUtils.ifEmpty(
-                    optional.map(this::attachment),
-                    () -> LOGGER.warn("Failed retrieving attachment {}", 
attachmentId)));
-    }
-
     @Override
     public void storeAttachment(Attachment attachment) throws MailboxException 
{
         try {
-            asyncStoreAttachment(attachment).join();
+            attachmentDAO.storeAttachment(attachment).join();
         } catch (IOException e) {
             throw new MailboxException(e.getMessage(), e);
         }
     }
 
-    private CompletableFuture<Void> asyncStoreAttachment(Attachment 
attachment) throws IOException {
-        return cassandraAsyncExecutor.executeVoid(
-            insertInto(TABLE_NAME)
-                .value(ID, attachment.getAttachmentId().getId())
-                .value(PAYLOAD, ByteBuffer.wrap(attachment.getBytes()))
-                .value(TYPE, attachment.getType())
-                .value(SIZE, attachment.getSize())
-        );
-    }
-
     @Override
     public void storeAttachments(Collection<Attachment> attachments) throws 
MailboxException {
         try {
             FluentFutureStream.of(
                 attachments.stream()
-                    .map(Throwing.function(this::asyncStoreAttachment)))
+                    .map(Throwing.function(attachmentDAO::storeAttachment)))
                 .join();
         } catch (ThrownByLambdaException e) {
             throw new MailboxException(e.getCause().getMessage(), 
e.getCause());

http://git-wip-us.apache.org/repos/asf/james-project/blob/b8303bef/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerProvider.java
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerProvider.java
 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerProvider.java
index 0589cc6..9baf216 100644
--- 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerProvider.java
+++ 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerProvider.java
@@ -25,19 +25,6 @@ import org.apache.james.mailbox.acl.MailboxACLResolver;
 import org.apache.james.mailbox.acl.SimpleGroupMembershipResolver;
 import org.apache.james.mailbox.acl.UnionMailboxACLResolver;
 import org.apache.james.mailbox.cassandra.ids.CassandraMessageId;
-import org.apache.james.mailbox.cassandra.mail.CassandraApplicableFlagDAO;
-import org.apache.james.mailbox.cassandra.mail.CassandraBlobsDAO;
-import org.apache.james.mailbox.cassandra.mail.CassandraDeletedMessageDAO;
-import org.apache.james.mailbox.cassandra.mail.CassandraFirstUnseenDAO;
-import org.apache.james.mailbox.cassandra.mail.CassandraMailboxCounterDAO;
-import org.apache.james.mailbox.cassandra.mail.CassandraMailboxDAO;
-import org.apache.james.mailbox.cassandra.mail.CassandraMailboxPathDAO;
-import org.apache.james.mailbox.cassandra.mail.CassandraMailboxRecentsDAO;
-import org.apache.james.mailbox.cassandra.mail.CassandraMessageDAO;
-import org.apache.james.mailbox.cassandra.mail.CassandraMessageIdDAO;
-import org.apache.james.mailbox.cassandra.mail.CassandraMessageIdToImapUidDAO;
-import org.apache.james.mailbox.cassandra.mail.CassandraModSeqProvider;
-import org.apache.james.mailbox.cassandra.mail.CassandraUidProvider;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.store.Authenticator;
 import org.apache.james.mailbox.store.Authorizator;
@@ -52,34 +39,12 @@ public class CassandraMailboxManagerProvider {
     private static final int LIMIT_ANNOTATION_SIZE = 30;
 
     public static CassandraMailboxManager provideMailboxManager(Session 
session, CassandraTypesProvider cassandraTypesProvider) {
-        CassandraUidProvider uidProvider = new CassandraUidProvider(session);
-        CassandraModSeqProvider modSeqProvider = new 
CassandraModSeqProvider(session);
         CassandraMessageId.Factory messageIdFactory = new 
CassandraMessageId.Factory();
-        CassandraMessageIdDAO messageIdDAO = new 
CassandraMessageIdDAO(session, messageIdFactory);
-        CassandraMessageIdToImapUidDAO imapUidDAO = new 
CassandraMessageIdToImapUidDAO(session, messageIdFactory);
-        CassandraBlobsDAO blobsDAO = new CassandraBlobsDAO(session);
-        CassandraMessageDAO messageDAO = new CassandraMessageDAO(session, 
cassandraTypesProvider, blobsDAO);
-        CassandraMailboxCounterDAO mailboxCounterDAO = new 
CassandraMailboxCounterDAO(session);
-        CassandraMailboxRecentsDAO mailboxRecentsDAO = new 
CassandraMailboxRecentsDAO(session);
-        CassandraMailboxDAO mailboxDAO = new CassandraMailboxDAO(session, 
cassandraTypesProvider);
-        CassandraMailboxPathDAO mailboxPathDAO = new 
CassandraMailboxPathDAO(session, cassandraTypesProvider);
-        CassandraFirstUnseenDAO firstUnseenDAO = new 
CassandraFirstUnseenDAO(session);
-        CassandraApplicableFlagDAO applicableFlagDAO = new 
CassandraApplicableFlagDAO(session);
-        CassandraDeletedMessageDAO deletedMessageDAO = new 
CassandraDeletedMessageDAO(session);
 
-        CassandraMailboxSessionMapperFactory mapperFactory = new 
CassandraMailboxSessionMapperFactory(uidProvider,
-            modSeqProvider,
+        CassandraMailboxSessionMapperFactory mapperFactory = new 
CassandraMailboxSessionMapperFactory(
             session,
-            messageDAO,
-            messageIdDAO,
-            imapUidDAO,
-            mailboxCounterDAO,
-            mailboxRecentsDAO,
-            mailboxDAO,
-            mailboxPathDAO,
-            firstUnseenDAO,
-            applicableFlagDAO,
-            deletedMessageDAO);
+            cassandraTypesProvider,
+            messageIdFactory);
 
         MailboxACLResolver aclResolver = new UnionMailboxACLResolver();
         GroupMembershipResolver groupMembershipResolver = new 
SimpleGroupMembershipResolver();

http://git-wip-us.apache.org/repos/asf/james-project/blob/b8303bef/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 bd3a31e..8f8139c 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
@@ -21,10 +21,13 @@ package org.apache.james.mailbox.cassandra;
 
 import org.apache.james.backends.cassandra.CassandraCluster;
 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.mailbox.AbstractSubscriptionManagerTest;
 import org.apache.james.mailbox.SubscriptionManager;
 import org.apache.james.mailbox.cassandra.mail.CassandraApplicableFlagDAO;
+import org.apache.james.mailbox.cassandra.mail.CassandraAttachmentDAO;
 import org.apache.james.mailbox.cassandra.mail.CassandraDeletedMessageDAO;
 import org.apache.james.mailbox.cassandra.mail.CassandraFirstUnseenDAO;
 import org.apache.james.mailbox.cassandra.mail.CassandraMailboxCounterDAO;
@@ -82,6 +85,7 @@ public class CassandraSubscriptionManagerTest extends 
AbstractSubscriptionManage
         CassandraMailboxPathDAO mailboxPathDAO = null;
         CassandraFirstUnseenDAO firstUnseenDAO = null;
         CassandraApplicableFlagDAO applicableFlagDAO = null;
+        CassandraAttachmentDAO attachmentDAO = null;
         CassandraDeletedMessageDAO deletedMessageDAO = null;
         return new CassandraSubscriptionManager(
             new CassandraMailboxSessionMapperFactory(
@@ -97,6 +101,9 @@ public class CassandraSubscriptionManagerTest extends 
AbstractSubscriptionManage
                 mailboxPathDAO,
                 firstUnseenDAO,
                 applicableFlagDAO,
-                deletedMessageDAO));
+                attachmentDAO,
+                deletedMessageDAO,
+                CassandraUtils.WITH_DEFAULT_CONFIGURATION,
+                CassandraConfiguration.DEFAULT_CONFIGURATION));
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/b8303bef/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java
 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java
index 6450073..3606d81 100644
--- 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java
+++ 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java
@@ -23,19 +23,6 @@ import static org.mockito.Mockito.mock;
 
 import org.apache.james.backends.cassandra.CassandraCluster;
 import org.apache.james.mailbox.cassandra.ids.CassandraMessageId;
-import org.apache.james.mailbox.cassandra.mail.CassandraApplicableFlagDAO;
-import org.apache.james.mailbox.cassandra.mail.CassandraBlobsDAO;
-import org.apache.james.mailbox.cassandra.mail.CassandraDeletedMessageDAO;
-import org.apache.james.mailbox.cassandra.mail.CassandraFirstUnseenDAO;
-import org.apache.james.mailbox.cassandra.mail.CassandraMailboxCounterDAO;
-import org.apache.james.mailbox.cassandra.mail.CassandraMailboxDAO;
-import org.apache.james.mailbox.cassandra.mail.CassandraMailboxPathDAO;
-import org.apache.james.mailbox.cassandra.mail.CassandraMailboxRecentsDAO;
-import org.apache.james.mailbox.cassandra.mail.CassandraMessageDAO;
-import org.apache.james.mailbox.cassandra.mail.CassandraMessageIdDAO;
-import org.apache.james.mailbox.cassandra.mail.CassandraMessageIdToImapUidDAO;
-import org.apache.james.mailbox.cassandra.mail.CassandraModSeqProvider;
-import org.apache.james.mailbox.cassandra.mail.CassandraUidProvider;
 import org.apache.james.mailbox.cassandra.quota.CassandraCurrentQuotaManager;
 import 
org.apache.james.mailbox.cassandra.quota.CassandraPerUserMaxQuotaManager;
 import org.apache.james.mailbox.quota.CurrentQuotaManager;
@@ -55,35 +42,12 @@ public class CassandraTestSystemFixture {
     public static final int MOD_SEQ = 452;
 
     public static CassandraMailboxSessionMapperFactory 
createMapperFactory(CassandraCluster cassandra) {
-        CassandraUidProvider uidProvider = new 
CassandraUidProvider(cassandra.getConf());
-        CassandraModSeqProvider modSeqProvider = new 
CassandraModSeqProvider(cassandra.getConf());
         CassandraMessageId.Factory messageIdFactory = new 
CassandraMessageId.Factory();
-        CassandraMessageIdDAO messageIdDAO = new 
CassandraMessageIdDAO(cassandra.getConf(), messageIdFactory);
-        CassandraMessageIdToImapUidDAO imapUidDAO = new 
CassandraMessageIdToImapUidDAO(cassandra.getConf(), messageIdFactory);
-        CassandraBlobsDAO blobsDAO = new 
CassandraBlobsDAO(cassandra.getConf());
-        CassandraMessageDAO messageDAO = new 
CassandraMessageDAO(cassandra.getConf(), cassandra.getTypesProvider(), 
blobsDAO);
-        CassandraMailboxCounterDAO mailboxCounterDAO = new 
CassandraMailboxCounterDAO(cassandra.getConf());
-        CassandraMailboxRecentsDAO mailboxRecentsDAO = new 
CassandraMailboxRecentsDAO(cassandra.getConf());
-        CassandraApplicableFlagDAO applicableFlagDAO = new 
CassandraApplicableFlagDAO(cassandra.getConf());
 
-        CassandraMailboxDAO mailboxDAO = new 
CassandraMailboxDAO(cassandra.getConf(), cassandra.getTypesProvider());
-        CassandraMailboxPathDAO mailboxPathDAO = new 
CassandraMailboxPathDAO(cassandra.getConf(), cassandra.getTypesProvider());
-        CassandraFirstUnseenDAO firstUnseenDAO = new 
CassandraFirstUnseenDAO(cassandra.getConf());
-        CassandraDeletedMessageDAO deletedMessageDAO = new 
CassandraDeletedMessageDAO(cassandra.getConf());
-        
-        return new CassandraMailboxSessionMapperFactory(uidProvider,
-            modSeqProvider,
+        return new CassandraMailboxSessionMapperFactory(
             cassandra.getConf(),
-            messageDAO,
-            messageIdDAO,
-            imapUidDAO,
-            mailboxCounterDAO,
-            mailboxRecentsDAO,
-            mailboxDAO,
-            mailboxPathDAO,
-            firstUnseenDAO,
-            applicableFlagDAO,
-            deletedMessageDAO);
+            cassandra.getTypesProvider(),
+            messageIdFactory);
     }
 
     public static CassandraMailboxManager 
createMailboxManager(CassandraMailboxSessionMapperFactory mapperFactory) throws 
Exception{

http://git-wip-us.apache.org/repos/asf/james-project/blob/b8303bef/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAOTest.java
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAOTest.java
 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAOTest.java
new file mode 100644
index 0000000..c44bde8
--- /dev/null
+++ 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAOTest.java
@@ -0,0 +1,79 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+
+package org.apache.james.mailbox.cassandra.mail;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import java.nio.charset.StandardCharsets;
+import java.util.Optional;
+
+import org.apache.james.backends.cassandra.CassandraCluster;
+import org.apache.james.backends.cassandra.DockerCassandraRule;
+import org.apache.james.mailbox.cassandra.modules.CassandraAttachmentModule;
+import org.apache.james.mailbox.model.Attachment;
+import org.apache.james.mailbox.model.AttachmentId;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.ClassRule;
+import org.junit.Test;
+
+public class CassandraAttachmentDAOTest {
+    public static final AttachmentId ATTACHMENT_ID = AttachmentId.from("id1");
+
+    @ClassRule
+    public static DockerCassandraRule cassandraServer = new 
DockerCassandraRule();
+
+    private CassandraCluster cassandra;
+
+    private CassandraAttachmentDAO testee;
+
+    @Before
+    public void setUp() throws Exception {
+        cassandra = CassandraCluster.create(new CassandraAttachmentModule(),
+            cassandraServer.getIp(), cassandraServer.getBindingPort());
+        testee = new CassandraAttachmentDAO(cassandra.getConf());
+    }
+
+    @After
+    public void tearDown() throws Exception {
+        cassandra.close();
+    }
+
+    @Test
+    public void getAttachmentShouldReturnEmptyWhenAbsent() {
+        Optional<Attachment> attachment = 
testee.getAttachment(ATTACHMENT_ID).join();
+
+        assertThat(attachment).isEmpty();
+    }
+
+    @Test
+    public void getAttachmentShouldReturnAttachmentWhenStored() throws 
Exception {
+        Attachment attachment = Attachment.builder()
+            .attachmentId(ATTACHMENT_ID)
+            .type("application/json")
+            
.bytes("{\"property\":`\"value\"}".getBytes(StandardCharsets.UTF_8))
+            .build();
+        testee.storeAttachment(attachment).join();
+
+        Optional<Attachment> actual = 
testee.getAttachment(ATTACHMENT_ID).join();
+
+        assertThat(actual).contains(attachment);
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/b8303bef/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxManagerAttachmentTest.java
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxManagerAttachmentTest.java
 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxManagerAttachmentTest.java
index ccafa4a..c196a0f 100644
--- 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxManagerAttachmentTest.java
+++ 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxManagerAttachmentTest.java
@@ -91,27 +91,10 @@ public class CassandraMailboxManagerAttachmentTest extends 
AbstractMailboxManage
     private void initSystemUnderTest() throws Exception {
         CassandraMessageId.Factory messageIdFactory = new 
CassandraMessageId.Factory();
 
-        CassandraMailboxDAO mailboxDAO = new 
CassandraMailboxDAO(cassandra.getConf(), cassandra.getTypesProvider());
-        CassandraMailboxPathDAO mailboxPathDAO = new 
CassandraMailboxPathDAO(cassandra.getConf(), cassandra.getTypesProvider());
-        CassandraFirstUnseenDAO firstUnseenDAO = new 
CassandraFirstUnseenDAO(cassandra.getConf());
-        CassandraDeletedMessageDAO deletedMessageDAO = new 
CassandraDeletedMessageDAO(cassandra.getConf());
-
-        CassandraBlobsDAO blobsDAO = new 
CassandraBlobsDAO(cassandra.getConf());
-        CassandraMessageDAO messageDAO = new 
CassandraMessageDAO(cassandra.getConf(), cassandra.getTypesProvider(), 
blobsDAO);
         mailboxSessionMapperFactory = new CassandraMailboxSessionMapperFactory(
-                new CassandraUidProvider(cassandra.getConf()),
-                new CassandraModSeqProvider(cassandra.getConf()),
-                cassandra.getConf(),
-            messageDAO,
-                new CassandraMessageIdDAO(cassandra.getConf(), 
messageIdFactory),
-                new CassandraMessageIdToImapUidDAO(cassandra.getConf(), 
messageIdFactory),
-                new CassandraMailboxCounterDAO(cassandra.getConf()),
-                new CassandraMailboxRecentsDAO(cassandra.getConf()),
-                mailboxDAO,
-                mailboxPathDAO,
-                firstUnseenDAO,
-                new CassandraApplicableFlagDAO(cassandra.getConf()),
-                deletedMessageDAO);
+            cassandra.getConf(),
+            cassandra.getTypesProvider(),
+            messageIdFactory);
         Authenticator noAuthenticator = null;
         Authorizator noAuthorizator = null;
         mailboxManager = new 
CassandraMailboxManager(mailboxSessionMapperFactory, noAuthenticator, 
noAuthorizator, new NoMailboxPathLocker(), new MessageParser(), 
messageIdFactory); 

http://git-wip-us.apache.org/repos/asf/james-project/blob/b8303bef/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMapperProvider.java
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMapperProvider.java
 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMapperProvider.java
index d29f520..245acbf 100644
--- 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMapperProvider.java
+++ 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMapperProvider.java
@@ -78,26 +78,9 @@ public class CassandraMapperProvider implements 
MapperProvider {
     }
 
     private CassandraMailboxSessionMapperFactory createMapperFactory() {
-        CassandraMailboxDAO mailboxDAO = new 
CassandraMailboxDAO(cassandra.getConf(), cassandra.getTypesProvider());
-        CassandraMailboxPathDAO mailboxPathDAO = new 
CassandraMailboxPathDAO(cassandra.getConf(), cassandra.getTypesProvider());
-        CassandraFirstUnseenDAO firstUnseenDAO = new 
CassandraFirstUnseenDAO(cassandra.getConf());
-        CassandraDeletedMessageDAO deletedMessageDAO = new 
CassandraDeletedMessageDAO(cassandra.getConf());
-        CassandraBlobsDAO blobsDAO = new 
CassandraBlobsDAO(cassandra.getConf());
-        CassandraMessageDAO messageDAO = new 
CassandraMessageDAO(cassandra.getConf(), cassandra.getTypesProvider(), 
blobsDAO);
-        return new CassandraMailboxSessionMapperFactory(
-            new CassandraUidProvider(cassandra.getConf()),
-            cassandraModSeqProvider,
-            cassandra.getConf(),
-            messageDAO,
-            new CassandraMessageIdDAO(cassandra.getConf(), MESSAGE_ID_FACTORY),
-            new CassandraMessageIdToImapUidDAO(cassandra.getConf(), 
MESSAGE_ID_FACTORY),
-            new CassandraMailboxCounterDAO(cassandra.getConf()),
-            new CassandraMailboxRecentsDAO(cassandra.getConf()),
-            mailboxDAO,
-            mailboxPathDAO,
-            firstUnseenDAO,
-            new CassandraApplicableFlagDAO(cassandra.getConf()),
-            deletedMessageDAO);
+        return new CassandraMailboxSessionMapperFactory(cassandra.getConf(),
+            cassandra.getTypesProvider(),
+            new CassandraMessageId.Factory());
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/b8303bef/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
----------------------------------------------------------------------
diff --git 
a/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
 
b/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
index 2f47b9c..e0c2468 100644
--- 
a/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
+++ 
b/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
@@ -21,7 +21,6 @@ package org.apache.james.mpt.imapmailbox.cassandra.host;
 import org.apache.james.backends.cassandra.CassandraCluster;
 import org.apache.james.backends.cassandra.components.CassandraModule;
 import org.apache.james.backends.cassandra.init.CassandraModuleComposite;
-import org.apache.james.backends.cassandra.init.CassandraTypesProvider;
 import org.apache.james.imap.encode.main.DefaultImapEncoderFactory;
 import org.apache.james.imap.main.DefaultImapDecoderFactory;
 import org.apache.james.imap.processor.main.DefaultImapProcessorFactory;
@@ -29,19 +28,6 @@ import org.apache.james.mailbox.SubscriptionManager;
 import org.apache.james.mailbox.cassandra.CassandraMailboxManager;
 import org.apache.james.mailbox.cassandra.CassandraMailboxSessionMapperFactory;
 import org.apache.james.mailbox.cassandra.ids.CassandraMessageId;
-import org.apache.james.mailbox.cassandra.mail.CassandraApplicableFlagDAO;
-import org.apache.james.mailbox.cassandra.mail.CassandraBlobsDAO;
-import org.apache.james.mailbox.cassandra.mail.CassandraDeletedMessageDAO;
-import org.apache.james.mailbox.cassandra.mail.CassandraFirstUnseenDAO;
-import org.apache.james.mailbox.cassandra.mail.CassandraMailboxCounterDAO;
-import org.apache.james.mailbox.cassandra.mail.CassandraMailboxDAO;
-import org.apache.james.mailbox.cassandra.mail.CassandraMailboxPathDAO;
-import org.apache.james.mailbox.cassandra.mail.CassandraMailboxRecentsDAO;
-import org.apache.james.mailbox.cassandra.mail.CassandraMessageDAO;
-import org.apache.james.mailbox.cassandra.mail.CassandraMessageIdDAO;
-import org.apache.james.mailbox.cassandra.mail.CassandraMessageIdToImapUidDAO;
-import org.apache.james.mailbox.cassandra.mail.CassandraModSeqProvider;
-import org.apache.james.mailbox.cassandra.mail.CassandraUidProvider;
 import org.apache.james.mailbox.cassandra.modules.CassandraAclModule;
 import org.apache.james.mailbox.cassandra.modules.CassandraAnnotationModule;
 import 
org.apache.james.mailbox.cassandra.modules.CassandraApplicableFlagsModule;
@@ -115,36 +101,11 @@ public class CassandraHostSystem extends 
JamesImapHostSystem {
         super.beforeTest();
         cassandra = CassandraCluster.create(mailboxModule, cassandraHost, 
cassandraPort);
         com.datastax.driver.core.Session session = cassandra.getConf();
-        CassandraModSeqProvider modSeqProvider = new 
CassandraModSeqProvider(session);
-        CassandraUidProvider uidProvider = new CassandraUidProvider(session);
-        CassandraTypesProvider typesProvider = new 
CassandraTypesProvider(mailboxModule, session);
         CassandraMessageId.Factory messageIdFactory = new 
CassandraMessageId.Factory();
-        CassandraBlobsDAO cassandraBlobsDAO = new CassandraBlobsDAO(session);
-        CassandraMessageDAO messageDAO = new CassandraMessageDAO(session, 
typesProvider, cassandraBlobsDAO);
-        CassandraMessageIdDAO messageIdDAO = new 
CassandraMessageIdDAO(session, messageIdFactory);
-        CassandraMessageIdToImapUidDAO imapUidDAO = new 
CassandraMessageIdToImapUidDAO(session, messageIdFactory);
-        CassandraMailboxCounterDAO mailboxCounterDAO = new 
CassandraMailboxCounterDAO(session);
-        CassandraMailboxRecentsDAO mailboxRecentsDAO = new 
CassandraMailboxRecentsDAO(session);
-        CassandraMailboxDAO mailboxDAO = new CassandraMailboxDAO(session, 
typesProvider);
-        CassandraMailboxPathDAO mailboxPathDAO = new 
CassandraMailboxPathDAO(session, typesProvider);
-        CassandraFirstUnseenDAO firstUnseenDAO = new 
CassandraFirstUnseenDAO(session);
-        CassandraApplicableFlagDAO applicableFlagDAO = new 
CassandraApplicableFlagDAO(session);
-        CassandraDeletedMessageDAO deletedMessageDAO = new 
CassandraDeletedMessageDAO(session);
-
         CassandraMailboxSessionMapperFactory mapperFactory = new 
CassandraMailboxSessionMapperFactory(
-            uidProvider,
-            modSeqProvider,
-            session,
-            messageDAO,
-            messageIdDAO,
-            imapUidDAO,
-            mailboxCounterDAO,
-            mailboxRecentsDAO,
-            mailboxDAO,
-            mailboxPathDAO,
-            firstUnseenDAO,
-            applicableFlagDAO,
-            deletedMessageDAO);
+            cassandra.getConf(),
+            cassandra.getTypesProvider(),
+            messageIdFactory);
 
         mailboxManager = new CassandraMailboxManager(mapperFactory, 
authenticator, authorizator, new JVMMailboxPathLocker(), new MessageParser(), 
messageIdFactory);
         QuotaRootResolver quotaRootResolver = new 
DefaultQuotaRootResolver(mapperFactory);


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

Reply via email to