FutureConverter.java
package au.com.mountainpass.hyperstate.core;
import java.util.concurrent.CompletableFuture;
import org.springframework.util.concurrent.ListenableFuture;
import org.springframework.util.concurrent.ListenableFutureCallback;
public class FutureConverter {
public static <T> CompletableFuture<T> convert(final ListenableFuture<T> listenableFuture) {
// create an instance of CompletableFuture
final CompletableFuture<T> completable = new CompletableFuture<T>() {
@Override
public boolean cancel(final boolean mayInterruptIfRunning) {
// propagate cancel to the listenable future
final boolean result = listenableFuture.cancel(mayInterruptIfRunning);
super.cancel(mayInterruptIfRunning);
return result;
}
};
// add callback
listenableFuture.addCallback(new ListenableFutureCallback<T>() {
@Override
public void onFailure(final Throwable t) {
completable.completeExceptionally(t);
}
@Override
public void onSuccess(final T result) {
completable.complete(result);
}
});
return completable;
}
}