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(
ListenableFuture<T> listenableFuture) {
// create an instance of CompletableFuture
CompletableFuture<T> completable = new CompletableFuture<T>() {
@Override
public boolean cancel(boolean mayInterruptIfRunning) {
// propagate cancel to the listenable future
boolean result = listenableFuture.cancel(mayInterruptIfRunning);
super.cancel(mayInterruptIfRunning);
return result;
}
};
// add callback
listenableFuture.addCallback(new ListenableFutureCallback<T>() {
@Override
public void onSuccess(T result) {
completable.complete(result);
}
@Override
public void onFailure(Throwable t) {
completable.completeExceptionally(t);
}
});
return completable;
}
}