package org.zalando.riptide;
import org.springframework.util.concurrent.ListenableFuture;
import org.springframework.util.concurrent.ListenableFutureCallback;
import java.util.concurrent.CompletableFuture;
final class ListenableCompletableFutureAdapter<T> extends CompletableFuture<T> {
private final ListenableFuture<T> future;
ListenableCompletableFutureAdapter(final ListenableFuture<T> future) {
this.future = future;
future.addCallback(new ListenableFutureCallback<T>() {
@Override
public void onSuccess(final T result) {
complete(result);
}
@Override
public void onFailure(final Throwable throwable) {
completeExceptionally(throwable);
}
});
}
@Override
public boolean cancel(final boolean mayInterruptIfRunning) {
final boolean cancelled = future.cancel(mayInterruptIfRunning);
super.cancel(mayInterruptIfRunning);
return cancelled;
}
}