Repository: james-project Updated Branches: refs/heads/master 7d6cbe24a -> 7273a4a2d
JAMES-1925 CompletableFutureUtil::thenCombine is redoundant with thenCombine Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/7273a4a2 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/7273a4a2 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/7273a4a2 Branch: refs/heads/master Commit: 7273a4a2d64624c231fa9e6cd5b52a01f4713337 Parents: 78113b2 Author: Benoit Tellier <[email protected]> Authored: Thu Oct 18 09:32:51 2018 +0700 Committer: Benoit Tellier <[email protected]> Committed: Wed Oct 31 09:12:08 2018 +0700 ---------------------------------------------------------------------- .../cassandra/mail/CassandraMailboxMapper.java | 5 +---- .../cassandra/mail/CassandraMessageDAO.java | 15 +++++++-------- .../james/util/CompletableFutureUtil.java | 5 ----- .../james/util/CompletableFutureUtilTest.java | 14 -------------- .../cassandra/CassandraSieveRepository.java | 8 ++++---- .../james/jmap/mailet/VacationMailet.java | 20 +++++++++----------- 6 files changed, 21 insertions(+), 46 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/7273a4a2/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 69c092d..4d3b7fd 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 @@ -138,10 +138,7 @@ public class CassandraMailboxMapper implements MailboxMapper { CompletableFuture<Optional<SimpleMailbox>> simpleMailboxFuture = mailboxDAO.retrieveMailbox(mailboxId); - return CompletableFutureUtil.combine( - aclCompletableFuture, - simpleMailboxFuture, - this::addAcl); + return aclCompletableFuture.thenCombine(simpleMailboxFuture, this::addAcl); } private Optional<SimpleMailbox> addAcl(MailboxACL acl, Optional<SimpleMailbox> mailboxOptional) { http://git-wip-us.apache.org/repos/asf/james-project/blob/7273a4a2/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 1a06cd9..23297ee 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 @@ -184,10 +184,11 @@ public class CassandraMessageDAO { try { byte[] headerContent = IOUtils.toByteArray(message.getHeaderContent()); byte[] bodyContent = IOUtils.toByteArray(message.getBodyContent()); - return CompletableFutureUtil.combine( - blobStore.save(headerContent), - blobStore.save(bodyContent), - Pair::of); + + CompletableFuture<BlobId> bodyFuture = blobStore.save(bodyContent); + CompletableFuture<BlobId> headerFuture = blobStore.save(headerContent); + + return headerFuture.thenCombine(bodyFuture, Pair::of); } catch (IOException e) { throw new MailboxException("Error saving mail content", e); } @@ -357,10 +358,8 @@ public class CassandraMessageDAO { } private CompletableFuture<byte[]> getFullContent(Row row) { - return CompletableFutureUtil.combine( - getHeaderContent(row), - getBodyContent(row), - Bytes::concat); + return getHeaderContent(row) + .thenCombine(getBodyContent(row), Bytes::concat); } private CompletableFuture<byte[]> getBodyContent(Row row) { http://git-wip-us.apache.org/repos/asf/james-project/blob/7273a4a2/server/container/util/src/main/java/org/apache/james/util/CompletableFutureUtil.java ---------------------------------------------------------------------- diff --git a/server/container/util/src/main/java/org/apache/james/util/CompletableFutureUtil.java b/server/container/util/src/main/java/org/apache/james/util/CompletableFutureUtil.java index f51261a..19bf712 100644 --- a/server/container/util/src/main/java/org/apache/james/util/CompletableFutureUtil.java +++ b/server/container/util/src/main/java/org/apache/james/util/CompletableFutureUtil.java @@ -40,11 +40,6 @@ public class CompletableFutureUtil { .orElse(CompletableFuture.completedFuture(Optional.empty()))); } - public static <T, U, V> CompletableFuture<V> combine(CompletableFuture<T> t, CompletableFuture<U> u, BiFunction<T,U,V> combiner) { - return t.thenCompose(valueT -> - u.thenApply(valueU -> combiner.apply(valueT, valueU))); - } - public static <T> CompletableFuture<Stream<T>> allOf(Stream<CompletableFuture<T>> futureStream) { CompletableFuture<T>[] arrayOfFutures = futureStream.toArray(CompletableFuture[]::new); http://git-wip-us.apache.org/repos/asf/james-project/blob/7273a4a2/server/container/util/src/test/java/org/apache/james/util/CompletableFutureUtilTest.java ---------------------------------------------------------------------- diff --git a/server/container/util/src/test/java/org/apache/james/util/CompletableFutureUtilTest.java b/server/container/util/src/test/java/org/apache/james/util/CompletableFutureUtilTest.java index 7b651a5..bf136ca 100644 --- a/server/container/util/src/test/java/org/apache/james/util/CompletableFutureUtilTest.java +++ b/server/container/util/src/test/java/org/apache/james/util/CompletableFutureUtilTest.java @@ -53,20 +53,6 @@ public class CompletableFutureUtilTest { } @Test - public void combineShouldReturnCombinationOfBothSuppliedFutures() { - int value1 = 18; - int value2 = 12; - - assertThat(CompletableFutureUtil.combine( - CompletableFuture.completedFuture(value1), - CompletableFuture.completedFuture(value2), - (a, b) -> 2 * a + b) - .join()) - .isEqualTo(2 * value1 + value2); - - } - - @Test public void allOfShouldUnboxEmptyStream() { assertThat( CompletableFutureUtil.allOf(Stream.empty()) http://git-wip-us.apache.org/repos/asf/james-project/blob/7273a4a2/server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/CassandraSieveRepository.java ---------------------------------------------------------------------- diff --git a/server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/CassandraSieveRepository.java b/server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/CassandraSieveRepository.java index a3874ee..fa52b4a 100644 --- a/server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/CassandraSieveRepository.java +++ b/server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/CassandraSieveRepository.java @@ -246,10 +246,10 @@ public class CassandraSieveRepository implements SieveRepository { @Override public boolean hasQuota(User user) { - return CompletableFutureUtil.combine( - cassandraSieveQuotaDAO.getQuota(user).thenApply(Optional::isPresent), - cassandraSieveQuotaDAO.getQuota().thenApply(Optional::isPresent), - (b1, b2) -> b1 || b2) + CompletableFuture<Boolean> hasUserQuota = cassandraSieveQuotaDAO.getQuota(user).thenApply(Optional::isPresent); + CompletableFuture<Boolean> hasGlobalQuota = cassandraSieveQuotaDAO.getQuota().thenApply(Optional::isPresent); + + return hasUserQuota.thenCombine(hasGlobalQuota, (a, b) -> a || b) .join(); } http://git-wip-us.apache.org/repos/asf/james-project/blob/7273a4a2/server/protocols/jmap/src/main/java/org/apache/james/jmap/mailet/VacationMailet.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/mailet/VacationMailet.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/mailet/VacationMailet.java index c4ac14f..7a291b2 100644 --- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/mailet/VacationMailet.java +++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/mailet/VacationMailet.java @@ -21,11 +21,11 @@ package org.apache.james.jmap.mailet; import java.time.ZonedDateTime; import java.util.concurrent.CompletableFuture; -import java.util.function.Function; import javax.inject.Inject; import javax.mail.MessagingException; +import org.apache.commons.lang3.tuple.Pair; import org.apache.james.core.MailAddress; import org.apache.james.jmap.api.vacation.AccountId; import org.apache.james.jmap.api.vacation.NotificationRegistry; @@ -33,7 +33,6 @@ import org.apache.james.jmap.api.vacation.RecipientId; import org.apache.james.jmap.api.vacation.Vacation; import org.apache.james.jmap.api.vacation.VacationRepository; import org.apache.james.jmap.utils.MimeMessageBodyGenerator; -import org.apache.james.util.CompletableFutureUtil; import org.apache.james.util.date.ZonedDateTimeProvider; import org.apache.mailet.Mail; import org.apache.mailet.base.AutomaticallySentMailDetector; @@ -80,17 +79,16 @@ public class VacationMailet extends GenericMailet { } } - public CompletableFuture<Void> manageVacation(MailAddress recipient, Mail processedMail, ZonedDateTime processingDate) { + private CompletableFuture<Void> manageVacation(MailAddress recipient, Mail processedMail, ZonedDateTime processingDate) { AccountId accountId = AccountId.fromString(recipient.toString()); - return CompletableFutureUtil.combine( - vacationRepository.retrieveVacation(accountId), - notificationRegistry.isRegistered( - AccountId.fromString(recipient.toString()), - RecipientId.fromMailAddress(processedMail.getMaybeSender().get())), - (vacation, alreadySent) -> - sendNotificationIfRequired(recipient, processedMail, processingDate, vacation, alreadySent)) - .thenCompose(Function.identity()); + CompletableFuture<Vacation> vacationFuture = vacationRepository.retrieveVacation(accountId); + CompletableFuture<Boolean> alreadySentFuture = notificationRegistry.isRegistered( + AccountId.fromString(recipient.toString()), + RecipientId.fromMailAddress(processedMail.getMaybeSender().get())); + + return vacationFuture.thenCombine(alreadySentFuture, Pair::of) + .thenCompose(pair -> sendNotificationIfRequired(recipient, processedMail, processingDate, pair.getKey(), pair.getValue())); } private CompletableFuture<Void> sendNotificationIfRequired(MailAddress recipient, Mail processedMail, ZonedDateTime processingDate, Vacation vacation, Boolean alreadySent) { --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
