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]

Reply via email to