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 ro...@apache.org on 2018/01/25 15:36:37 UTC

[04/14] james-project git commit: JAMES-2291 Optional + future unwrapping tool

JAMES-2291 Optional + future unwrapping tool


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/bc102e3b
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/bc102e3b
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/bc102e3b

Branch: refs/heads/master
Commit: bc102e3ba856c9acdb008e7991d984da3ce31a84
Parents: 4fbc8f3
Author: benwa <bt...@linagora.com>
Authored: Wed Jan 24 14:29:39 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Thu Jan 25 12:02:53 2018 +0700

----------------------------------------------------------------------
 .../apache/james/util/CompletableFutureUtil.java |  6 ++++++
 .../james/util/CompletableFutureUtilTest.java    | 19 +++++++++++++++++++
 2 files changed, 25 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/bc102e3b/server/container/util-java8/src/main/java/org/apache/james/util/CompletableFutureUtil.java
----------------------------------------------------------------------
diff --git a/server/container/util-java8/src/main/java/org/apache/james/util/CompletableFutureUtil.java b/server/container/util-java8/src/main/java/org/apache/james/util/CompletableFutureUtil.java
index 67ee055..d2e83af 100644
--- a/server/container/util-java8/src/main/java/org/apache/james/util/CompletableFutureUtil.java
+++ b/server/container/util-java8/src/main/java/org/apache/james/util/CompletableFutureUtil.java
@@ -29,6 +29,12 @@ import java.util.stream.Stream;
 
 public class CompletableFutureUtil {
 
+    public static <T> CompletableFuture<Optional<T>> unwrap(CompletableFuture<Optional<CompletableFuture<T>>> base) {
+        return base.thenCompose(
+            optional -> optional.map(future -> future.thenApply(Optional::of))
+                .orElse(CompletableFuture.completedFuture(Optional.empty())));
+    }
+
     @SafeVarargs
     public static <T> CompletableFuture<Stream<T>> allOfArray(CompletableFuture<T>... futures) {
         return allOf(Stream.of(futures));

http://git-wip-us.apache.org/repos/asf/james-project/blob/bc102e3b/server/container/util-java8/src/test/java/org/apache/james/util/CompletableFutureUtilTest.java
----------------------------------------------------------------------
diff --git a/server/container/util-java8/src/test/java/org/apache/james/util/CompletableFutureUtilTest.java b/server/container/util-java8/src/test/java/org/apache/james/util/CompletableFutureUtilTest.java
index b4ea41d..c0b892c 100644
--- a/server/container/util-java8/src/test/java/org/apache/james/util/CompletableFutureUtilTest.java
+++ b/server/container/util-java8/src/test/java/org/apache/james/util/CompletableFutureUtilTest.java
@@ -21,6 +21,7 @@ package org.apache.james.util;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
+import java.util.Optional;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ConcurrentLinkedDeque;
 import java.util.concurrent.ExecutorService;
@@ -402,4 +403,22 @@ public class CompletableFutureUtilTest {
                 .join())
             .isEqualTo(6L);
     }
+
+    @Test
+    public void unwrapShouldUnwrapWhenValue() {
+        assertThat(
+            CompletableFutureUtil.unwrap(
+                    CompletableFuture.completedFuture(Optional.of(CompletableFuture.completedFuture(1L))))
+                .join())
+            .isEqualTo(Optional.of(1L));
+    }
+
+    @Test
+    public void unwrapShouldUnwrapWhenEmpty() {
+        assertThat(
+            CompletableFutureUtil.unwrap(
+                    CompletableFuture.completedFuture(Optional.empty()))
+                .join())
+            .isEmpty();
+    }
 }


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