List of usage examples for com.google.common.util.concurrent ListenableFuture ListenableFuture
ListenableFuture
From source file:bio.gcat.batch.Batch.java
public ListenableFuture<Result> execute(Collection<Tuple> tuples) { final Result result = new Result(tuples); Queue<Action> queue = new LinkedList<>(actions); if (queue.isEmpty()) return new DefiniteListenableFuture<>(result); Action action;//from w w w . ja v a 2s . c o m Future<Collection<Tuple>> future = new DefiniteFuture<>(tuples); ListeningExecutorService service = MoreExecutors.listeningDecorator(Executors.newSingleThreadExecutor()); while ((action = queue.poll()) != null) future = service.submit(InjectionLogger.injectLogger(result, action.new Task(future))); final ListenableFuture<Collection<Tuple>> lastFuture = (ListenableFuture<Collection<Tuple>>) future; return new ListenableFuture<Result>() { @Override public boolean isDone() { return lastFuture.isDone(); } @Override public boolean isCancelled() { return lastFuture.isCancelled(); } @Override public Result get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException { result.setTuples(lastFuture.get(timeout, unit)); return result; } @Override public Result get() throws InterruptedException, ExecutionException { result.setTuples(lastFuture.get()); return result; } @Override public boolean cancel(boolean mayInterruptIfRunning) { return lastFuture.cancel(mayInterruptIfRunning); } @Override public void addListener(Runnable listener, Executor executor) { lastFuture.addListener(listener, executor); } }; }