List of usage examples for com.google.common.util.concurrent Futures addCallback
public static <V> void addCallback(final ListenableFuture<V> future, final FutureCallback<? super V> callback, Executor executor)
From source file:com.facebook.presto.util.MoreFutures.java
public static <T> ListenableFuture<T> addTimeout(final ListenableFuture<T> future, final Callable<T> timeoutTask, Duration timeout, ScheduledExecutorService executorService) { // if the future is already complete, just return it if (future.isDone()) { return future; }//from w w w . j av a 2 s.co m // wrap the future, so we can set the result directly final SettableFuture<T> settableFuture = SettableFuture.create(); // schedule a task to complete the future when the time expires final ScheduledFuture<?> timeoutTaskFuture = executorService.schedule( new TimeoutFutureTask<>(settableFuture, timeoutTask, future), timeout.toMillis(), TimeUnit.MILLISECONDS); // add a listener to the core future, which simply updates the settable future Futures.addCallback(future, new FutureCallback<T>() { @Override public void onSuccess(@Nullable T result) { settableFuture.set(result); timeoutTaskFuture.cancel(true); } @Override public void onFailure(Throwable t) { settableFuture.setException(t); timeoutTaskFuture.cancel(true); } }, executorService); return settableFuture; }
From source file:com.orangerhymelabs.helenus.cassandra.database.DatabaseService.java
public void read(String name, FutureCallback<Database> callback) { Futures.addCallback(read(name), callback, MoreExecutors.directExecutor()); }
From source file:com.android.tools.idea.apk.viewer.diff.ApkDiffPanel.java
public ApkDiffPanel(ApkDiffParser apkDiffParser) { // construct the main tree ListenableFuture<DefaultMutableTreeNode> treeStructureFuture = apkDiffParser.constructTreeStructure(); FutureCallBackAdapter<DefaultMutableTreeNode> setRootNode = new FutureCallBackAdapter<DefaultMutableTreeNode>() { @Override/* w w w .j a va 2 s . c o m*/ public void onSuccess(DefaultMutableTreeNode result) { setRootNode(result); } }; Futures.addCallback(treeStructureFuture, setRootNode, EdtExecutor.INSTANCE); }
From source file:org.glowroot.central.util.MoreFutures.java
public static <V> ListenableFuture<V> onSuccessAndFailure(ListenableFuture<V> future, Runnable onSuccess, Runnable onFailure) {/*from w w w . ja v a 2 s . co m*/ SettableFuture<V> outerFuture = SettableFuture.create(); Futures.addCallback(future, new FutureCallback<V>() { @Override public void onSuccess(V result) { onSuccess.run(); outerFuture.set(result); } @Override public void onFailure(Throwable t) { logger.debug(t.getMessage(), t); onFailure.run(); outerFuture.setException(t); } }, MoreExecutors.directExecutor()); return outerFuture; }
From source file:com.datastax.driver.stress.AsynchronousConsumer.java
protected void handle(QueryGenerator.Request request) { final Reporter.Context ctx = reporter.newRequest(); ResultSetFuture resultSetFuture = request.executeAsync(session); Futures.addCallback(resultSetFuture, new FutureCallback<ResultSet>() { @Override//from ww w. ja v a 2s . c o m public void onSuccess(final ResultSet result) { ctx.done(); request(); } @Override public void onFailure(final Throwable t) { // Could do better I suppose System.err.println("Error during request: " + t); ctx.done(); request(); } }, executorService); }
From source file:com.spotify.futures.FuturesExtra.java
/** * Returns a future that fails with a {@link TimeoutException} if the parent future has not * finished before the timeout. The new returned future will always be executed on the provided * scheduledExecutorService, even when the parent future does not timeout. * * @param scheduledExecutorService executor that runs the timeout code. If the future times out, * this is also the thread any callbacks will run on. * @param future the future to wrap as a timeout future. * @param timeout how long to wait before timing out a future * @param unit unit of the timeout * @return a future that may timeout before the parent future is done. *///from w w w.ja v a 2 s . c o m public static <T> ListenableFuture<T> makeTimeoutFuture(ScheduledExecutorService scheduledExecutorService, ListenableFuture<T> future, final long timeout, final TimeUnit unit) { final SettableFuture<T> promise = SettableFuture.create(); scheduledExecutorService.schedule(new Runnable() { @Override public void run() { String message = "Future timed out after " + timeout + " " + unit.name(); promise.setException(new TimeoutException(message)); } }, timeout, unit); Futures.addCallback(future, new FutureCallback<T>() { @Override public void onSuccess(T result) { promise.set(result); } @Override public void onFailure(Throwable t) { promise.setException(t); } }, scheduledExecutorService); return promise; }
From source file:com.orangerhymelabs.helenus.cassandra.database.DatabaseService.java
public void readAll(FutureCallback<List<Database>> callback, Object... parms) { Futures.addCallback(readAll(parms), callback, MoreExecutors.directExecutor()); }
From source file:io.v.v23.InputChannels.java
private static <T> FutureCallback<T> newCallbackForList(final InputChannel<T> channel, final List<T> list, final SettableFuture<List<T>> future, final Executor executor) { return new FutureCallback<T>() { @Override// w ww . j av a 2 s.c o m public void onSuccess(T result) { list.add(result); Futures.addCallback(channel.recv(), newCallbackForList(channel, list, future, executor), executor); } @Override public void onFailure(Throwable t) { if (t instanceof EndOfFileException) { future.set(list); } else { future.setException(t); } } }; }
From source file:io.v.android.apps.reader.DeviceSetChooserActivity.java
@Override protected void onStart() { super.onStart(); // Set the adapter only after the DB is initialized. Futures.addCallback(getDB().onInitialized(), new FutureCallback<Void>() { @Override//w w w . j a v a 2 s . c o m public void onSuccess(Void result) { // The adapter for the recycler view mAdapter = new DeviceSetListAdapter(DeviceSetChooserActivity.this); // When a file is clicked from the list, start the PdfViewerActivity. mAdapter.setOnDeviceSetClickListener((adapter, v, position) -> { Intent intent = PdfViewerActivity.createIntent(getApplicationContext(), adapter.getDeviceSetId(position)); startActivity(intent); }); mRecyclerView.setAdapter(mAdapter); } @Override public void onFailure(Throwable t) { Log.e(TAG, "Could not initialize the database.", t); } }, Utils.mainThreadExecutor()); // ItemTouchHelper for handling the swipe action. ItemTouchHelper.SimpleCallback touchCallback; touchCallback = new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT) { @Override public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) { return false; } @Override public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { // Delete the device set on left swipe. if (direction == ItemTouchHelper.LEFT) { getDB().deleteDeviceSet(mAdapter.getDeviceSetId(viewHolder.getLayoutPosition())); } } }; new ItemTouchHelper(touchCallback).attachToRecyclerView(mRecyclerView); }
From source file:com.skcraft.launcher.update.UpdateManager.java
public void performUpdate(final Window window) { final URL url = pendingUpdateUrl; if (url != null) { SelfUpdater downloader = new SelfUpdater(launcher, url); ObservableFuture<File> future = new ObservableFuture<File>(launcher.getExecutor().submit(downloader), downloader);//from ww w . jav a2s.c o m Futures.addCallback(future, new FutureCallback<File>() { @Override public void onSuccess(File result) { propertySupport.firePropertyChange("pendingUpdate", true, false); UpdateManager.this.pendingUpdateUrl = null; SwingHelper.showMessageDialog(window, SharedLocale.tr("launcher.selfUpdateComplete"), SharedLocale.tr("launcher.selfUpdateCompleteTitle"), null, JOptionPane.INFORMATION_MESSAGE); } @Override public void onFailure(Throwable t) { } }, SwingExecutor.INSTANCE); ProgressDialog.showProgress(window, future, SharedLocale.tr("launcher.selfUpdatingTitle"), SharedLocale.tr("launcher.selfUpdatingStatus")); SwingHelper.addErrorDialogCallback(window, future); } else { propertySupport.firePropertyChange("pendingUpdate", false, false); } }