Example usage for com.google.common.util.concurrent ListenableFuture addListener

List of usage examples for com.google.common.util.concurrent ListenableFuture addListener

Introduction

In this page you can find the example usage for com.google.common.util.concurrent ListenableFuture addListener.

Prototype

void addListener(Runnable listener, Executor executor);

Source Link

Document

Registers a listener to be Executor#execute(Runnable) run on the given executor.

Usage

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;
}