[prev in list] [next in list] [prev in thread] [next in thread]
List: james-dev
Subject: [12/31] james-project git commit: MAILBOX-307 Dealing with CassandraACLMapper is the job of Cassandr
From: matthieu () apache ! org
Date: 2017-09-29 7:21:50
Message-ID: 8470aa480f3c4a1a9b2f7763298db2ce () git ! apache ! org
[Download RAW message or body]
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 <btellier@linagora.com>
Authored: Mon Sep 25 16:59:46 2017 +0700
Committer: Matthieu Baechler <matthieu@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
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic