/** * Returns a new {@link Promise} representing the status of a list of other * promises. More generally this is known as {code}sequence{code} as both List * and Promise are traversable monads. * * @param promises The promises that the new promise should track * @return The new, aggregate promise */ public static <A> Promise<List<A>> when(Iterable<? extends Promise<? extends A>> promises) { return forListenableFuture(Futures.<A> allAsList(promises)); }
@Override public <B> Promise<B> map(Function<? super A, ? extends B> function) { return forListenableFuture(Futures.transform(this, function)); }
FutureOperation(final Callable<T> operation) { this.operation = operation; this.future = SettableFuture.create(); this.promise = Promises.forListenableFuture(future); }
@Override public <T> Promise<T> submit(Callable<T> task) { return Promises.forListenableFuture(executorService.submit(task)); }
@Override public Promise<?> schedule(final Runnable task, long delay, TimeUnit unit) { final SettableFuture<Void> future = SettableFuture.create(); executorService.schedule(new Runnable () { @Override public void run() { try { task.run(); future.set(null); } catch (Throwable ex) { future.setException(ex); } } }, delay, unit); return Promises.forListenableFuture(future); }
@Override public Promise<?> submit(Runnable task) { return Promises.forListenableFuture(executorService.submit(task)); }
@Override public <V> Promise<V> schedule(final Callable<V> task, long delay, TimeUnit unit) { final SettableFuture<V> future = SettableFuture.create(); executorService.schedule(new Runnable () { @Override public void run() { try { final V result = task.call(); future.set(result); } catch (Throwable ex) { future.setException(ex); } } }, delay, unit); return Promises.forListenableFuture(future); }
@Override public Promise<Void> handleHipChatLinkInstalled() { logger.debug("Handling HipChat link installed..."); final SettableFuture<Void> complete = SettableFuture.create(); doOperation(new Callable<Void>() { @Override public Void call() throws Exception { complete.set(null); return null; } }); SynchronisationActivity currentSynchronisationActivity = currentSynchronisationActionRef.get(); currentSynchronisationActivity.signalLinkInstalled(); return Promises.forListenableFuture(complete); }
@Override public Promise<HttpResponse> execute(HttpUriRequest request, HttpContext context) { final SettableFuture<HttpResponse> future = SettableFuture.create(); client.execute(request, context, new ThreadLocalContextAwareFutureCallback<C, HttpResponse>(threadLocalContextManager) { @Override void doCompleted(final HttpResponse httpResponse) { executor.execute( () -> future.set(httpResponse)); } @Override void doFailed(final Exception ex) { executor.execute(() -> future.setException(ex)); } @Override void doCancelled() { final TimeoutException timeoutException = new TimeoutException(); executor.execute(() -> future.setException(timeoutException)); } }); return Promises.forListenableFuture(future); }
return Promises.forListenableFuture(future);
return Promises.forListenableFuture(complete);