You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by ma...@apache.org on 2017/09/29 07:21:50 UTC

[12/31] james-project git commit: MAILBOX-307 Dealing with CassandraACLMapper is the job of CassandraMailboxMapper, not of its DAO

MAILBOX-307 Dealing with CassandraACLMapper is the job of CassandraMailboxMapper, not of its 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/ee68d17c
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/ee68d17c
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/ee68d17c

Branch: refs/heads/master
Commit: ee68d17cba1d10e14d2cb6de2e605dc7c10bddb9
Parents: edf8a9a
Author: benwa <bt...@linagora.com>
Authored: Mon Sep 25 16:59:46 2017 +0700
Committer: Matthieu Baechler <ma...@apache.org>
Committed: Fri Sep 29 09:20:40 2017 +0200

----------------------------------------------------------------------
 .../cassandra/mail/CassandraMailboxDAO.java     | 39 +++-----------------
 .../cassandra/mail/CassandraMailboxMapper.java  | 32 ++++++++++++++--
 2 files changed, 34 insertions(+), 37 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/ee68d17c/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxDAO.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxDAO.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxDAO.java
index 7d0dead..96075a4 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxDAO.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxDAO.java
@@ -34,22 +34,18 @@ import static org.apache.james.mailbox.cassandra.table.CassandraMailboxTable.UID
 
 import java.util.Optional;
 import java.util.concurrent.CompletableFuture;
-import java.util.stream.Stream;
 
 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.CassandraAsyncExecutor;
 import org.apache.james.backends.cassandra.utils.CassandraUtils;
 import org.apache.james.mailbox.cassandra.ids.CassandraId;
 import org.apache.james.mailbox.cassandra.mail.utils.MailboxBaseTupleUtil;
 import org.apache.james.mailbox.cassandra.table.CassandraMailboxTable;
-import org.apache.james.mailbox.model.MailboxACL;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
 import org.apache.james.mailbox.store.mail.model.impl.SimpleMailbox;
-import org.apache.james.util.CompletableFutureUtil;
 import org.apache.james.util.FluentFutureStream;
 
 import com.datastax.driver.core.PreparedStatement;
@@ -68,10 +64,9 @@ public class CassandraMailboxDAO {
     private final PreparedStatement deleteStatement;
     private final PreparedStatement insertStatement;
     private final PreparedStatement updateStatement;
-    private CassandraACLMapper cassandraACLMapper;
 
     @Inject
-    public CassandraMailboxDAO(Session session, CassandraTypesProvider typesProvider, CassandraUtils cassandraUtils, CassandraConfiguration cassandraConfiguration) {
+    public CassandraMailboxDAO(Session session, CassandraTypesProvider typesProvider, CassandraUtils cassandraUtils) {
         this.executor = new CassandraAsyncExecutor(session);
         this.mailboxBaseTupleUtil = new MailboxBaseTupleUtil(typesProvider);
         this.insertStatement = prepareInsert(session);
@@ -80,12 +75,11 @@ public class CassandraMailboxDAO {
         this.listStatement = prepareList(session);
         this.readStatement = prepareRead(session);
         this.cassandraUtils = cassandraUtils;
-        this.cassandraACLMapper = new CassandraACLMapper(session, cassandraConfiguration);
     }
 
     @VisibleForTesting
     public CassandraMailboxDAO(Session session, CassandraTypesProvider typesProvider) {
-        this(session, typesProvider, CassandraUtils.WITH_DEFAULT_CONFIGURATION, CassandraConfiguration.DEFAULT_CONFIGURATION);
+        this(session, typesProvider, CassandraUtils.WITH_DEFAULT_CONFIGURATION);
     }
 
     private PreparedStatement prepareInsert(Session session) {
@@ -140,17 +134,10 @@ public class CassandraMailboxDAO {
     }
 
     public CompletableFuture<Optional<SimpleMailbox>> retrieveMailbox(CassandraId mailboxId) {
-        CompletableFuture<MailboxACL> aclCompletableFuture = cassandraACLMapper.getACL(mailboxId);
-
-        CompletableFuture<Optional<SimpleMailbox>> simpleMailboxFuture = executor.executeSingleRow(readStatement.bind()
+        return executor.executeSingleRow(readStatement.bind()
             .setUUID(ID, mailboxId.asUuid()))
             .thenApply(rowOptional -> rowOptional.map(this::mailboxFromRow))
             .thenApply(mailbox -> addMailboxId(mailboxId, mailbox));
-
-        return CompletableFutureUtil.combine(
-            aclCompletableFuture,
-            simpleMailboxFuture,
-            this::addAcl);
     }
 
     private Optional<SimpleMailbox> addMailboxId(CassandraId cassandraId, Optional<SimpleMailbox> mailboxOptional) {
@@ -158,11 +145,6 @@ public class CassandraMailboxDAO {
         return mailboxOptional;
     }
 
-    private Optional<SimpleMailbox> addAcl(MailboxACL acl, Optional<SimpleMailbox> mailboxOptional) {
-        mailboxOptional.ifPresent(mailbox -> mailbox.setACL(acl));
-        return mailboxOptional;
-    }
-
     private SimpleMailbox mailboxFromRow(Row row) {
         return new SimpleMailbox(
             new MailboxPath(
@@ -172,12 +154,10 @@ public class CassandraMailboxDAO {
             row.getLong(UIDVALIDITY));
     }
 
-    public CompletableFuture<Stream<SimpleMailbox>> retrieveAllMailboxes() {
+    public FluentFutureStream<SimpleMailbox> retrieveAllMailboxes() {
         return FluentFutureStream.of(executor.execute(listStatement.bind())
             .thenApply(cassandraUtils::convertToStream))
-            .map(this::toMailboxWithId)
-            .thenComposeOnAll(this::toMailboxWithAclFuture)
-            .completableFuture();
+            .map(this::toMailboxWithId);
     }
 
     private SimpleMailbox toMailboxWithId(Row row) {
@@ -186,13 +166,4 @@ public class CassandraMailboxDAO {
         return mailbox;
     }
 
-    private CompletableFuture<SimpleMailbox> toMailboxWithAclFuture(SimpleMailbox mailbox) {
-        CassandraId cassandraId = (CassandraId) mailbox.getMailboxId();
-        return cassandraACLMapper.getACL(cassandraId)
-            .thenApply(acl -> {
-                mailbox.setACL(acl);
-                return mailbox;
-            });
-    }
-
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/ee68d17c/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java
index a997152..a9a31d8 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java
@@ -107,11 +107,27 @@ public class CassandraMailboxMapper implements MailboxMapper {
     @Override
     public Mailbox findMailboxById(MailboxId id) throws MailboxException {
         CassandraId mailboxId = (CassandraId) id;
-        return mailboxDAO.retrieveMailbox(mailboxId)
+        return retrieveMailbox(mailboxId)
             .join()
             .orElseThrow(() -> new MailboxNotFoundException(id.serialize()));
     }
 
+    private CompletableFuture<Optional<SimpleMailbox>> retrieveMailbox(CassandraId mailboxId) {
+        CompletableFuture<MailboxACL> aclCompletableFuture = cassandraACLMapper.getACL(mailboxId);
+
+        CompletableFuture<Optional<SimpleMailbox>> simpleMailboxFuture = mailboxDAO.retrieveMailbox(mailboxId);
+
+        return CompletableFutureUtil.combine(
+            aclCompletableFuture,
+            simpleMailboxFuture,
+            this::addAcl);
+    }
+
+    private Optional<SimpleMailbox> addAcl(MailboxACL acl, Optional<SimpleMailbox> mailboxOptional) {
+        mailboxOptional.ifPresent(mailbox -> mailbox.setACL(acl));
+        return mailboxOptional;
+    }
+
     @Override
     public List<Mailbox> findMailboxWithPathLike(MailboxPath path) throws MailboxException {
         Pattern regex = Pattern.compile(constructEscapedRegexForMailboxNameMatching(path));
@@ -124,7 +140,7 @@ public class CassandraMailboxMapper implements MailboxMapper {
     }
 
     private CompletableFuture<Optional<SimpleMailbox>> retrieveMailbox(CassandraMailboxPathDAO.CassandraIdAndPath idAndPath) {
-        return mailboxDAO.retrieveMailbox(idAndPath.getCassandraId())
+        return retrieveMailbox(idAndPath.getCassandraId())
             .thenApply(optional -> OptionalUtils.ifEmpty(optional,
                 () -> LOGGER.warn("Could not retrieve mailbox {} with path {} in mailbox table.", idAndPath.getCassandraId(), idAndPath.getMailboxPath())));
     }
@@ -150,7 +166,7 @@ public class CassandraMailboxMapper implements MailboxMapper {
     private CompletableFuture<Boolean> trySave(SimpleMailbox cassandraMailbox, CassandraId cassandraId) {
         return mailboxPathDAO.save(cassandraMailbox.generateAssociatedPath(), cassandraId)
             .thenCompose(CompletableFutureUtil.composeIfTrue(
-                () -> mailboxDAO.retrieveMailbox(cassandraId)
+                () -> retrieveMailbox(cassandraId)
                     .thenCompose(optional -> CompletableFuture
                         .allOf(optional
                                 .map(storedMailbox -> mailboxPathDAO.delete(storedMailbox.generateAssociatedPath()))
@@ -189,6 +205,7 @@ public class CassandraMailboxMapper implements MailboxMapper {
     @Override
     public List<Mailbox> list() throws MailboxException {
         return mailboxDAO.retrieveAllMailboxes()
+            .thenComposeOnAll(this::toMailboxWithAclFuture)
             .join()
             .collect(Guavate.toImmutableList());
     }
@@ -231,4 +248,13 @@ public class CassandraMailboxMapper implements MailboxMapper {
         }
     }
 
+    private CompletableFuture<SimpleMailbox> toMailboxWithAclFuture(SimpleMailbox mailbox) {
+        CassandraId cassandraId = (CassandraId) mailbox.getMailboxId();
+        return cassandraACLMapper.getACL(cassandraId)
+            .thenApply(acl -> {
+                mailbox.setACL(acl);
+                return mailbox;
+            });
+    }
+
 }


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