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