@@ -0,0 +1,1711 @@
+package com.dataloom.hazelcast;%0A%0Aimport com.google.common.util.concurrent.ListenableFuture;%0Aimport com.hazelcast.core.ExecutionCallback;%0Aimport com.hazelcast.core.ICompletableFuture;%0Aimport org.slf4j.Logger;%0Aimport org.slf4j.LoggerFactory;%0A%0Aimport java.util.concurrent.ExecutionException;%0Aimport java.util.concurrent.Executor;%0Aimport java.util.concurrent.TimeUnit;%0Aimport java.util.concurrent.TimeoutException;%0A%0Apublic class ListenableHazelcastFuture%3CT%3E implements ListenableFuture%3CT%3E %7B%0A    private static final Logger logger = LoggerFactory.getLogger( ListenableHazelcastFuture.class );%0A    private final ICompletableFuture%3CT%3E f;%0A%0A    public ListenableHazelcastFuture( ICompletableFuture%3CT%3E f ) %7B%0A        this.f = f;%0A    %7D%0A%0A    @Override%0A    public void addListener( Runnable listener, Executor executor ) %7B%0A        f.andThen( new ExecutionCallback%3CT%3E() %7B%0A            @Override public void onResponse( T response ) %7B%0A                listener.run();%0A            %7D%0A%0A            @Override public void onFailure( Throwable t ) %7B%0A                logger.error( %22Unable to retrieve Ace.%22, t );%0A            %7D%0A        %7D );%0A    %7D%0A%0A    @Override%0A    public boolean cancel( boolean mayInterruptIfRunning ) %7B%0A        return f.cancel( mayInterruptIfRunning );%0A    %7D%0A%0A    @Override public boolean isCancelled() %7B%0A        return f.isCancelled();%0A    %7D%0A%0A    @Override%0A    public boolean isDone() %7B%0A        return f.isDone();%0A    %7D%0A%0A    @Override public T get() throws InterruptedException, ExecutionException %7B%0A        return f.get();%0A    %7D%0A%0A    @Override public T get( long timeout, TimeUnit unit )%0A            throws InterruptedException, ExecutionException, TimeoutException %7B%0A        return f.get( timeout, unit );%0A    %7D%0A%7D%0A

Move ICompletableFuture adapter to Rhizome