List of usage examples for com.google.common.util.concurrent ListenableFuture addListener
void addListener(Runnable listener, Executor executor);
From source file:com.helion3.prism.util.DataUtil.java
public static CompletableFuture<List<Result>> translateUuidsToNames(List<Result> results, List<UUID> uuidsPendingLookup) { CompletableFuture<List<Result>> future = new CompletableFuture<List<Result>>(); ListenableFuture<Collection<GameProfile>> profiles = Prism.getGame().getServer().getGameProfileManager() .getAllById(uuidsPendingLookup, true); profiles.addListener(() -> { try {/*w ww. ja v a 2 s. com*/ for (GameProfile profile : profiles.get()) { for (Result r : results) { Optional<Object> cause = r.data.get(DataQueries.Cause); if (cause.isPresent() && ((String) cause.get()).equals(profile.getUniqueId().toString())) { r.data.set(DataQueries.Cause, profile.getName()); } } } } catch (InterruptedException | ExecutionException e) { e.printStackTrace(); } future.complete(results); }, MoreExecutors.sameThreadExecutor()); return future; }
From source file:org.springframework.data.cassandra.core.cql.session.DefaultBridgedReactiveSession.java
/** * Adapt {@link ListenableFuture} signals (completion, error) and propagate these to {@link MonoSink}. * * @param future the originating future. * @param sink the sink receiving signals. */// w w w. ja v a 2 s . c om private static <T> void adaptFuture(ListenableFuture<T> future, MonoSink<T> sink) { future.addListener(() -> { if (future.isDone()) { try { sink.success(future.get()); } catch (ExecutionException cause) { sink.error(cause.getCause()); } catch (Exception cause) { sink.error(cause); } } }, Runnable::run); }
From source file:com.helion3.prism.api.query.QueryBuilder.java
/** * Builds a {@link Query} by parsing an array of arguments. * * @param parameters String[] Parameter:value list * @return {@link Query} Database query object *///from w w w . j a va 2s .c om public static CompletableFuture<Query> fromArguments(QuerySession session, @Nullable String[] arguments) throws ParameterException { checkNotNull(session); Query query = new Query(); CompletableFuture<Query> future = new CompletableFuture<Query>(); // Track all parameter pairs Map<String, String> definedParameters = new HashMap<String, String>(); if (arguments.length > 0) { List<ListenableFuture<?>> futures = new ArrayList<ListenableFuture<?>>(); for (String arg : arguments) { Optional<ListenableFuture<?>> listenable; if (flagPattern.matcher(arg).matches()) { listenable = parseFlagFromArgument(session, query, arg); } else { // Get alias/value pair Pair<String, String> pair = getParameterKeyValue(arg); // Parse for handler listenable = parseParameterFromArgument(session, query, pair); // Add to list of defined definedParameters.put(pair.getKey(), pair.getValue()); } if (listenable.isPresent()) { futures.add(listenable.get()); } } if (!futures.isEmpty()) { ListenableFuture<List<Object>> combinedFuture = Futures.allAsList(futures); combinedFuture.addListener(new Runnable() { @Override public void run() { future.complete(query); } }, MoreExecutors.sameThreadExecutor()); } else { future.complete(query); } } else { future.complete(query); } if (Prism.getConfig().getNode("defaults", "enabled").getBoolean()) { // Require any parameter defaults String defaultsUsed = ""; for (ParameterHandler handler : Prism.getParameterHandlers()) { boolean aliasFound = false; for (String alias : handler.getAliases()) { if (definedParameters.containsKey(alias)) { aliasFound = true; break; } } if (!aliasFound) { Optional<Pair<String, String>> pair = handler.processDefault(session, query); if (pair.isPresent()) { defaultsUsed += pair.get().getKey() + ":" + pair.get().getValue() + " "; } } } // @todo should move this if (!defaultsUsed.isEmpty()) { session.getCommandSource().get().sendMessage( Format.subduedHeading(Text.of(String.format("Defaults used: %s", defaultsUsed)))); } } return future; }
From source file:com.yahoo.yqlplus.engine.internal.java.sequences.Sequences.java
public static <ROW, SEQUENCE extends Iterable<ROW>, SET> ListenableFuture<List<ROW>> invokeAsyncSet( final Executor executor, final AsyncFunction<List<SET>, SEQUENCE> source, List<SET> keys, Tracer tracer, Timeout timeout, TimeoutHandler handler) throws Exception { // TODO OPTIMIZE: List not needed in this case List<ListenableFuture<SEQUENCE>> results = Lists.newArrayList(); final Tracer childTracer = tracer.start(tracer.getGroup(), tracer.getName()); ListenableFuture<SEQUENCE> result = source.apply(keys); results.add(result);// w w w . j a va 2 s . c o m result.addListener(new Runnable() { @Override public void run() { childTracer.end(); } }, MoreExecutors.sameThreadExecutor()); ListenableFuture<List<SEQUENCE>> gather = Futures.allAsList(results); return handler.withTimeout(gatherResults(executor, gather, 1), timeout.verify(), timeout.getTickUnits()); }
From source file:rx.observable.ListenableFutureObservable.java
/** * Converts from {@link ListenableFuture} to {@link rx.Observable}. * /* w ww . j ava 2 s .co m*/ * @param future the {@link ListenableFuture} to register a listener on. * @param executor the {@link Executor} where the callback will be executed. The will be where the {@link Observer#onNext(Object)} call from. * @return an {@link Observable} that emits the one value when the future completes. */ public static <T> Observable<T> from(final ListenableFuture<T> future, final Executor executor) { return Observable.create(new OnSubscribe<T>() { @Override public void call(final Subscriber<? super T> subscriber) { final SingleDelayedProducer<T> sdp = new SingleDelayedProducer<T>(subscriber); subscriber.setProducer(sdp); future.addListener(new Runnable() { @Override public void run() { try { T t = future.get(); sdp.setValue(t); } catch (Exception e) { subscriber.onError(e); } } }, executor); } }); }
From source file:com.yahoo.yqlplus.engine.internal.java.sequences.Sequences.java
public static <ROW, SEQUENCE extends Iterable<ROW>, KEY> ListenableFuture<List<ROW>> invokeAsyncScatter( final Executor executor, final AsyncFunction<KEY, SEQUENCE> source, List<KEY> keys, Tracer tracer, Timeout timeout, TimeoutHandler handler) throws Exception { List<ListenableFuture<SEQUENCE>> results = Lists.newArrayList(); int idx = -1; for (KEY key : keys) { if (key != null) { final Tracer childTracer = tracer.start(tracer.getGroup(), tracer.getName() + "." + (++idx)); ListenableFuture<SEQUENCE> result = source.apply(key); results.add(result);/* w w w. j av a 2s . c o m*/ result.addListener(new Runnable() { @Override public void run() { childTracer.end(); } }, MoreExecutors.sameThreadExecutor()); } } ListenableFuture<List<SEQUENCE>> gather = Futures.allAsList(results); final int estimatedResultSize = results.size(); return handler.withTimeout(gatherResults(executor, gather, estimatedResultSize), timeout.verify(), timeout.getTickUnits()); }
From source file:com.yahoo.yqlplus.engine.internal.java.sequences.Sequences.java
public static <ROW, SEQUENCE extends Iterable<ROW>, SET> ListenableFuture<List<ROW>> invokeAsyncBatchSet( final Executor executor, final AsyncFunction<List<SET>, SEQUENCE> source, List<SET> keys, Tracer tracer, Timeout timeout, TimeoutHandler handler) throws Exception { List<ListenableFuture<SEQUENCE>> results = Lists.newArrayList(); final Tracer childTracer = tracer.start(tracer.getGroup(), tracer.getName()); List<SET> methodArgs = Lists.newArrayList(); for (int i = 0; i < keys.size(); i++) { if (keys.get(i) != null) { methodArgs.add(keys.get(i)); } else {/*from w w w . j av a 2 s . com*/ ListenableFuture<SEQUENCE> result = source.apply(methodArgs); results.add(result); result.addListener(new Runnable() { @Override public void run() { childTracer.end(); } }, MoreExecutors.sameThreadExecutor()); methodArgs = Lists.newArrayList(); } } ListenableFuture<List<SEQUENCE>> gather = Futures.allAsList(results); return handler.withTimeout(gatherResults(executor, gather, 1), timeout.verify(), timeout.getTickUnits()); }
From source file:com.yahoo.yqlplus.engine.internal.java.sequences.Sequences.java
public static <ROW, SEQUENCE extends Iterable<ROW>, SET> ListenableFuture<List<ROW>> invokeAsyncBatchSet( final Executor executor, final AsyncFunction<List<SET>, SEQUENCE> source, final Tracer tracer, final Timeout timeout, final TimeoutHandler handler, final List<ROW>... inputs) throws Exception { final List<ListenableFuture<SEQUENCE>> results = Lists.newArrayList(); final Tracer childTracer = tracer.start(tracer.getGroup(), tracer.getName()); for (List<ROW> input : inputs) { for (int i = 0; i < input.size(); i++) { Record record = (Record) input.get(i); List methodArgs = Lists.newArrayList(); Iterable<String> fieldNames = record.getFieldNames(); for (String fieldName : fieldNames) { methodArgs.add(record.get(fieldName)); }//w w w . ja v a 2 s .c o m ListenableFuture<SEQUENCE> result = source.apply(methodArgs); results.add(result); result.addListener(new Runnable() { @Override public void run() { childTracer.end(); } }, MoreExecutors.sameThreadExecutor()); } } final ListenableFuture<List<SEQUENCE>> gather = Futures.allAsList(results); return handler.withTimeout(gatherResults(executor, gather, 1), timeout.verify(), timeout.getTickUnits()); }
From source file:c5db.util.C5Futures.java
public static <V> void addCallback(@NotNull ListenableFuture<V> future, @NotNull Consumer<? super V> success, @NotNull Consumer<Throwable> failure, @NotNull Fiber fiber) { Runnable callbackListener = () -> { final V value; try {//from w w w. j a va 2s .com value = getUninterruptibly(future); } catch (ExecutionException | RuntimeException | Error e) { failure.accept(e); return; } success.accept(value); }; future.addListener(callbackListener, fiber); }
From source file:io.datakernel.service.ServiceGraphModule.java
private static ListenableFuture<?> combineFutures(List<ListenableFuture<?>> futures, final Executor executor) { final SettableFuture<?> resultFuture = SettableFuture.create(); final AtomicInteger count = new AtomicInteger(futures.size()); final AtomicReference<Throwable> exception = new AtomicReference<>(); for (ListenableFuture<?> future : futures) { final ListenableFuture<?> finalFuture = future != null ? future : Futures.immediateFuture(null); finalFuture.addListener(new Runnable() { @Override/*from ww w. jav a2 s .co m*/ public void run() { try { finalFuture.get(); } catch (InterruptedException | ExecutionException e) { exception.set(Throwables.getRootCause(e)); } if (count.decrementAndGet() == 0) { if (exception.get() != null) resultFuture.setException(exception.get()); else resultFuture.set(null); } } }, executor); } return resultFuture; }