Example usage for com.google.common.util.concurrent Futures addCallback

List of usage examples for com.google.common.util.concurrent Futures addCallback

Introduction

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

Prototype

public static <V> void addCallback(ListenableFuture<V> future, FutureCallback<? super V> callback) 

Source Link

Document

Registers separate success and failure callbacks to be run when the Future 's computation is java.util.concurrent.Future#isDone() complete or, if the computation is already complete, immediately.

Usage

From source file:io.druid.client.RoutingDruidClient.java

public ListenableFuture<FinalType> postQuery(URI uri, Query query,
        HttpResponseHandler<IntermediateType, FinalType> responseHandler) {
    final ListenableFuture<FinalType> future;

    try {// w  ww .j  ava 2  s . co  m
        log.debug("Querying url[%s]", uri);
        future = httpClient.post(uri.toURL()).setContent(objectMapper.writeValueAsBytes(query))
                .setHeader(HttpHeaders.Names.CONTENT_TYPE,
                        isSmile ? QueryResource.APPLICATION_SMILE : QueryResource.APPLICATION_JSON)
                .go(responseHandler);

        openConnections.getAndIncrement();

        Futures.addCallback(future, new FutureCallback<FinalType>() {
            @Override
            public void onSuccess(FinalType result) {
                openConnections.getAndDecrement();
            }

            @Override
            public void onFailure(Throwable t) {
                openConnections.getAndDecrement();
            }
        });
    } catch (IOException e) {
        throw Throwables.propagate(e);
    }

    return future;
}

From source file:es.udc.pfc.gameroom.GameComponent.java

public final ListenableFuture<Room> newRoom(final String type) {
    final SettableFuture<Room> future = SettableFuture.create();
    Futures.addCallback(getUniqueRoomName(), new FutureCallback<String>() {
        @Override/*from   www .j a  v  a 2s. co  m*/
        public void onSuccess(String roomID) {
            if (roomID == null) {
                log.severe("Error requesting unique room name");
                future.setException(new Exception("Error requesting unique room name"));
                return;
            }

            final Room newRoom;

            if (type.equals("minichess")) {
                newRoom = new MiniChessRoom(GameComponent.this, JID.jid(getMUCServiceName(), roomID, null));
            } else {
                log.severe("Unknown game type " + type);
                future.setException(new Exception("Unknown game type " + type));
                return;
            }

            rooms.put(roomID, newRoom);

            newRoom.joinRoom();
            newRoom.configureRoom();

            future.set(newRoom);
        }

        @Override
        public void onFailure(Throwable t) {
            future.setException(t);
        }
    });

    return future;
}

From source file:demos.AsynchronousInsert.java

@Override
public void run() {
    try {/*from www.  ja  va  2 s .c  o  m*/
        logger.info("Preparing to insert metric data points");

        Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build();
        Session session = cluster.connect("demo");
        PreparedStatement insert = session
                .prepare("insert into metric_data (metric_id, time, value) values (?, ?, ?)");
        Random random = new Random();
        DateTime time = DateTime.now().minusYears(1);
        final CountDownLatch latch = new CountDownLatch(NUM_INSERTS);

        FutureCallback<ResultSet> callback = new FutureCallback<ResultSet>() {
            @Override
            public void onSuccess(ResultSet result) {
                latch.countDown();
            }

            @Override
            public void onFailure(Throwable t) {
                logger.warn("There was an error inserting data", t);
                latch.countDown();
            }
        };

        Stopwatch stopwatch = new Stopwatch().start();
        for (int i = 0; i < NUM_INSERTS; ++i) {
            String metricId = "metric-" + Math.abs(random.nextInt() % NUM_METRICS);
            double value = random.nextDouble();
            ResultSetFuture future = session.executeAsync(insert.bind(metricId, time.toDate(), value));
            time = time.plusSeconds(10);
            Futures.addCallback(future, callback);
        }
        latch.await();
        stopwatch.stop();

        logger.info("Finished inserting {} data points in {} ms", NUM_INSERTS,
                stopwatch.elapsed(TimeUnit.MILLISECONDS));
    } catch (InterruptedException e) {
        logger.info("There was an interrupt while waiting for inserts to complete");
    }
}

From source file:org.opendaylight.controller.config.yang.netconf.mdsal.monitoring.MonitoringToMdsalWriter.java

@Override
public void onStateChanged(final NetconfState state) {
    Preconditions.checkState(dataBroker != null);
    final WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
    tx.put(LogicalDatastoreType.OPERATIONAL, InstanceIdentifier.create(NetconfState.class), state);
    // FIXME first attempt (right after we register to binding broker) always fails
    // Is it due to the fact that we are writing from the onSessionInitiated callback ?
    final CheckedFuture<Void, TransactionCommitFailedException> submit = tx.submit();

    Futures.addCallback(submit, new FutureCallback<Void>() {
        @Override/*  w  w  w. j a  v  a  2s . c  o  m*/
        public void onSuccess(final Void aVoid) {
            LOG.debug("Netconf state updated successfully");
        }

        @Override
        public void onFailure(final Throwable throwable) {
            LOG.warn("Unable to update netconf state", throwable);
        }
    });
}

From source file:org.hawkular.metrics.api.jaxrs.handler.CounterHandler.java

@POST
@Path("/{group}")
@ApiOperation(value = "Update multiple counters in a single counter group", hidden = true)
public void updateCounterForGroup(@Suspended final AsyncResponse asyncResponse,
        @PathParam("group") String group, Collection<Counter> counters) {
    for (Counter counter : counters) {
        counter.setGroup(group);/*from   w  w w. j a  v a2  s .c o  m*/
    }
    ListenableFuture<Void> future = metricsService.updateCounters(counters);
    Futures.addCallback(future, new NoDataCallback<>(asyncResponse));
}

From source file:io.crate.executor.transport.kill.TransportKillNodeAction.java

@Override
public void nodeOperation(Request request, final ActionListener<KillResponse> listener) {
    Futures.addCallback(doKill(request), new FutureCallback<Integer>() {
        @Override/*from  w w w  .  j ava2  s.  co m*/
        public void onSuccess(@Nullable Integer result) {
            assert result != null;
            listener.onResponse(new KillResponse(result));
        }

        @Override
        public void onFailure(@Nonnull Throwable t) {
            listener.onFailure(t);
        }
    });
}

From source file:es.udc.pfc.xmpp.component.AbstractXMPPComponent.java

@Override
public final void receivedIQ(final IQ iq) {
    checkNotNull(iq);/*from   ww  w .ja v  a  2  s .c  o  m*/
    log.finest("Received iq: " + iq.toString());
    if (iq.isRequest()) {
        Futures.addCallback(handleIQ(iq), new FutureCallback<IQ>() {

            @Override
            public void onSuccess(IQ result) {
                send(result);
            }

            @Override
            public void onFailure(Throwable t) {
                // TODO: send an error
            }
        });
    } else if (iq.isResponse()) {
        final SettableFuture<IQ> future = futureHandlers.remove(iq.getId());
        if (future == null) {
            log.warning("No handler for ID " + iq.getId());
            return;
        }

        if (iq.getType() == IQ.Type.result) {
            future.set(iq);
        } else if (iq.getType() == IQ.Type.error) {
            future.setException(new Exception("Error IQ: " + iq.toString()));
        }
    } else {
        log.warning("IQ not request or response");
    }
}

From source file:fr.duminy.components.swing.listpanel.JListComponentWrapper.java

@Override
public void updateItem(final int i) {
    if (isValidIndex(i, true, true)) {
        final B oldItem = model.getElementAt(i);
        final ListenableFuture<B> futureNewItem = itemManager.updateItem(oldItem);

        Futures.addCallback(futureNewItem, new FutureCallback<B>() {
            @Override/*ww w  . jav  a 2  s  .  c  om*/
            public void onSuccess(B newItem) {
                if (oldItem == newItem) {
                    //TODO also give a user feedback
                    throw new IllegalStateException(
                            "The element returned by " + itemManager.getClass().getName()
                                    + ".updateItem(oldItem) must not be the same instance as oldItem");
                }

                model.set(i, newItem);
            }

            @Override
            public void onFailure(Throwable t) {
                if (t instanceof CancellationException) {
                    LOG.info("the user has cancelled the update of an item");
                } else {
                    //TODO give a user feedback
                    LOG.error("Can't update the item {} : {}", oldItem, t);
                }
            }
        });
    }
}

From source file:com.github.nethad.clustermeister.example.fractals.ComputeMandelbrotAsync.java

public void computePicture(final FractalConfiguration config) {
    try {//from ww  w. j a v a2 s .  com
        if (clustermeister == null) {
            clustermeister = ClustermeisterFactory.create();
        }
        int nbTask = config.bsize;
        logger.info("Executing " + nbTask + " tasks");

        Map<String, Object> jobData = new HashMap<String, Object>();
        jobData.put("config", config);

        Job<MandelbrotResult> job = JobFactory.create("Clustermeister Mandelbrot", jobData);

        newImage(config);

        for (int i = 0; i < nbTask; i++) {
            job.addTask(new MandelbrotCMTask(i, config));
        }

        long start = System.currentTimeMillis();

        //            List<MandelbrotResult> results = clustermeister.executeJob(job);
        final List<ListenableFuture<MandelbrotResult>> futures = clustermeister.executeJobAsyncTasks(job);
        final FutureCallback<MandelbrotResult> callback = new FutureCallback<MandelbrotResult>() {
            public void onSuccess(MandelbrotResult result) {
                processPictureLine(result, config);
                //                    logger.info("process line {}", result.getRow());
            }

            public void onFailure(Throwable t) {
                logger.warn("Parts of the picture could not be computed.", t);
            }
        };

        for (ListenableFuture<MandelbrotResult> future : futures) {
            Futures.addCallback(future, callback);
        }

        Futures.successfulAsList(futures).get(); // wait for all jobs to be finished

        long elapsed = System.currentTimeMillis() - start;
        logger.info("Computation performed in " + StringUtils.toStringDuration(elapsed));

        //            generateMandelbrotImage(results, config);

        refreshImage();

    } catch (Exception ex) {
        ex.printStackTrace();
    }
}

From source file:org.anhonesteffort.dsp.plot.SpectrumFrame.java

public SpectrumFrame(ExecutorService executor, DftWidth dftWidth, Integer averaging, Integer frameRate,
        Integer samplesQueueSize) {
    super("DFT Plot");

    setLayout(new BorderLayout());
    setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);

    spectrumPanel = new SpectrumPanel(averaging, frameRate);
    gridPanel = new SpectrumGridOverlayPanel();

    getLayeredPane().add(spectrumPanel, 0, 0);
    getLayeredPane().add(gridPanel, 1, 0);

    addWindowListener(this);
    addWindowListener(spectrumPanel);/*w w  w . java 2s.  c om*/
    getLayeredPane().addComponentListener(this);

    dftConverter = new SamplesToDftConverter(dftWidth, samplesQueueSize);
    Filter<DftFrame> decibelConverter = new DftToDecibelConverter();

    dftConverter.addSink(decibelConverter);
    decibelConverter.addSink(spectrumPanel);

    dftConverterFuture = MoreExecutors.listeningDecorator(executor).submit(dftConverter);
    Futures.addCallback(dftConverterFuture, this);
}