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