
org.redisson.misc.CompletableFutureWrapper Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of redisson Show documentation
Show all versions of redisson Show documentation
Redis Java client with features of In-Memory Data Grid
/**
* Copyright (c) 2013-2022 Nikita Koksharov
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.redisson.misc;
import org.redisson.api.RFuture;
import java.util.concurrent.*;
import java.util.function.BiConsumer;
import java.util.function.BiFunction;
import java.util.function.Consumer;
import java.util.function.Function;
/**
*
*
* @author Nikita Koksharov
* @param value type
*/
public class CompletableFutureWrapper implements RFuture {
private final CompletableFuture future;
private CompletableFuture lastFuture;
public CompletableFutureWrapper(V value) {
this(CompletableFuture.completedFuture(value));
}
public CompletableFutureWrapper(Throwable ex) {
this(new CompletableFuture<>());
this.future.completeExceptionally(ex);
}
public CompletableFutureWrapper(CompletionStage stage) {
this.future = stage.toCompletableFuture();
this.lastFuture = future;
}
public CompletableFutureWrapper(CompletableFuture future) {
this.future = future;
this.lastFuture = future;
}
@Override
public CompletionStage thenApply(Function super V, ? extends U> fn) {
return future.thenApply(fn);
}
@Override
public CompletionStage thenApplyAsync(Function super V, ? extends U> fn) {
return future.thenApplyAsync(fn);
}
@Override
public CompletionStage thenApplyAsync(Function super V, ? extends U> fn, Executor executor) {
return future.thenApplyAsync(fn, executor);
}
@Override
public CompletionStage thenAccept(Consumer super V> action) {
return future.thenAccept(action);
}
@Override
public CompletionStage thenAcceptAsync(Consumer super V> action) {
return future.thenAcceptAsync(action);
}
@Override
public CompletionStage thenAcceptAsync(Consumer super V> action, Executor executor) {
return future.thenAcceptAsync(action, executor);
}
@Override
public CompletionStage thenRun(Runnable action) {
return future.thenRun(action);
}
@Override
public CompletionStage thenRunAsync(Runnable action) {
return future.thenRunAsync(action);
}
@Override
public CompletionStage thenRunAsync(Runnable action, Executor executor) {
return future.thenRunAsync(action, executor);
}
@Override
public CompletionStage thenCombine(CompletionStage extends U> other, BiFunction super V, ? super U, ? extends V1> fn) {
return future.thenCombine(other, fn);
}
@Override
public CompletionStage thenCombineAsync(CompletionStage extends U> other, BiFunction super V, ? super U, ? extends V1> fn) {
return future.thenCombineAsync(other, fn);
}
@Override
public CompletionStage thenCombineAsync(CompletionStage extends U> other, BiFunction super V, ? super U, ? extends V1> fn, Executor executor) {
return future.thenCombineAsync(other, fn, executor);
}
@Override
public CompletionStage thenAcceptBoth(CompletionStage extends U> other, BiConsumer super V, ? super U> action) {
return future.thenAcceptBoth(other, action);
}
@Override
public CompletionStage thenAcceptBothAsync(CompletionStage extends U> other, BiConsumer super V, ? super U> action) {
return future.thenAcceptBothAsync(other, action);
}
@Override
public CompletionStage thenAcceptBothAsync(CompletionStage extends U> other, BiConsumer super V, ? super U> action, Executor executor) {
return future.thenAcceptBothAsync(other, action, executor);
}
@Override
public CompletionStage runAfterBoth(CompletionStage> other, Runnable action) {
return future.runAfterBoth(other, action);
}
@Override
public CompletionStage runAfterBothAsync(CompletionStage> other, Runnable action) {
return future.runAfterBothAsync(other, action);
}
@Override
public CompletionStage runAfterBothAsync(CompletionStage> other, Runnable action, Executor executor) {
return future.runAfterBothAsync(other, action, executor);
}
@Override
public CompletionStage applyToEither(CompletionStage extends V> other, Function super V, U> fn) {
return future.applyToEither(other, fn);
}
@Override
public CompletionStage applyToEitherAsync(CompletionStage extends V> other, Function super V, U> fn) {
return future.applyToEitherAsync(other, fn);
}
@Override
public CompletionStage applyToEitherAsync(CompletionStage extends V> other, Function super V, U> fn, Executor executor) {
return future.applyToEitherAsync(other, fn, executor);
}
@Override
public CompletionStage acceptEither(CompletionStage extends V> other, Consumer super V> action) {
return future.acceptEither(other, action);
}
@Override
public CompletionStage acceptEitherAsync(CompletionStage extends V> other, Consumer super V> action) {
return future.acceptEitherAsync(other, action);
}
@Override
public CompletionStage acceptEitherAsync(CompletionStage extends V> other, Consumer super V> action, Executor executor) {
return future.acceptEitherAsync(other, action, executor);
}
@Override
public CompletionStage runAfterEither(CompletionStage> other, Runnable action) {
return future.runAfterEither(other, action);
}
@Override
public CompletionStage runAfterEitherAsync(CompletionStage> other, Runnable action) {
return future.runAfterEitherAsync(other, action);
}
@Override
public CompletionStage runAfterEitherAsync(CompletionStage> other, Runnable action, Executor executor) {
return future.runAfterEitherAsync(other, action, executor);
}
@Override
public CompletionStage thenCompose(Function super V, ? extends CompletionStage> fn) {
return future.thenCompose(fn);
}
@Override
public CompletionStage thenComposeAsync(Function super V, ? extends CompletionStage> fn) {
return future.thenComposeAsync(fn);
}
@Override
public CompletionStage thenComposeAsync(Function super V, ? extends CompletionStage> fn, Executor executor) {
return future.thenComposeAsync(fn, executor);
}
@Override
public CompletionStage handle(BiFunction super V, Throwable, ? extends U> fn) {
return future.handle(fn);
}
@Override
public CompletionStage handleAsync(BiFunction super V, Throwable, ? extends U> fn) {
return future.handleAsync(fn);
}
@Override
public CompletionStage handleAsync(BiFunction super V, Throwable, ? extends U> fn, Executor executor) {
return future.handleAsync(fn, executor);
}
@Override
public CompletionStage whenComplete(BiConsumer super V, ? super Throwable> action) {
return future.whenComplete(action);
}
@Override
public CompletionStage whenCompleteAsync(BiConsumer super V, ? super Throwable> action) {
return future.whenCompleteAsync(action);
}
@Override
public CompletionStage whenCompleteAsync(BiConsumer super V, ? super Throwable> action, Executor executor) {
return future.whenCompleteAsync(action, executor);
}
@Override
public CompletionStage exceptionally(Function fn) {
return future.exceptionally(fn);
}
@Override
public CompletableFuture toCompletableFuture() {
return future;
}
public V getNow(V valueIfAbsent) {
return future.getNow(valueIfAbsent);
}
public boolean complete(V value) {
return future.complete(value);
}
@Override
public boolean cancel(boolean mayInterruptIfRunning) {
return future.cancel(mayInterruptIfRunning);
}
@Override
public boolean isCancelled() {
return future.isCancelled();
}
@Override
public boolean isDone() {
return future.isDone();
}
@Override
public V get() throws InterruptedException, ExecutionException {
return future.get();
}
@Override
public V get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException {
return future.get(timeout, unit);
}
@Override
public boolean isSuccess() {
return future.isDone() && !future.isCompletedExceptionally();
}
@Override
public Throwable cause() {
if (future.isDone()) {
try {
future.getNow(null);
} catch (CompletionException e) {
return e.getCause();
} catch (CancellationException e) {
return e;
}
}
return null;
}
@Override
public V getNow() {
return future.getNow(null);
}
@Override
public V join() {
return future.join();
}
@Override
public boolean await(long timeout, TimeUnit unit) throws InterruptedException {
try {
future.get(timeout, unit);
} catch (ExecutionException e) {
// skip
} catch (TimeoutException e) {
return false;
}
return true;
}
@Override
public boolean await(long timeoutMillis) throws InterruptedException {
return await(timeoutMillis, TimeUnit.MILLISECONDS);
}
@Override
public RFuture sync() throws InterruptedException {
try {
future.get();
return this;
} catch (ExecutionException e) {
throw (RuntimeException) e.getCause();
}
}
@Override
public RFuture syncUninterruptibly() {
try {
future.join();
return this;
} catch (CompletionException e) {
throw (RuntimeException) e.getCause();
}
}
@Override
public RFuture await() throws InterruptedException {
try {
future.get();
} catch (ExecutionException e) {
// skip
}
return this;
}
@Override
public RFuture awaitUninterruptibly() {
try {
future.join();
} catch (Exception e) {
// skip
}
return this;
}
@Override
public boolean awaitUninterruptibly(long timeout, TimeUnit unit) {
try {
future.get(timeout, unit);
} catch (ExecutionException | TimeoutException e) {
// skip
} catch (InterruptedException e) {
awaitUninterruptibly(timeout, unit);
}
return future.isDone();
}
@Override
public boolean awaitUninterruptibly(long timeoutMillis) {
return awaitUninterruptibly(timeoutMillis, TimeUnit.MILLISECONDS);
}
@Override
public void onComplete(BiConsumer super V, ? super Throwable> action) {
lastFuture = lastFuture.whenComplete(action);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy