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(final ListenableFuture<V> future, final FutureCallback<? super V> callback,
        Executor executor) 

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.v.discoverysample.MainActivity.java

private void flipAdvertise() {
    advertiseButton.setEnabled(false);/*from w  w w  .jav a  2  s.  c o  m*/
    if (advCtx == null) { // not advertising
        advCtx = rootCtx.withCancel();
        Futures.addCallback(discovery.advertise(advCtx, SERVICE_TO_ADVERTISE, NO_PATTERNS),
                new FutureCallback<ListenableFuture<Void>>() {
                    @Override
                    public void onSuccess(ListenableFuture<Void> result) {
                        // Advertising started.
                        advertiseButton.setText("Stop advertising");
                        advertiseButton.setEnabled(true);
                        Futures.transform(result, new Function<Void, Void>() {
                            @Override
                            public Void apply(Void input) {
                                // Advertising done.
                                advertiseButton.setText("Advertise");
                                advertiseButton.setEnabled(true);
                                return null;
                            }
                        }, UiThreadExecutor.INSTANCE);
                    }

                    @Override
                    public void onFailure(final Throwable t) {
                        if (!(t instanceof CanceledException)) {
                            // advertising wasn't stopped via advCtx.cancel()
                            String msg = "Couldn't start advertising: " + t.getMessage();
                            Toast.makeText(MainActivity.this, msg, Toast.LENGTH_LONG).show();
                        }
                        advertiseButton.setText("Advertise");
                        advertiseButton.setEnabled(true);
                    }
                }, UiThreadExecutor.INSTANCE);
    } else { // advertising
        advCtx.cancel();
        advCtx = null;
    }
}

From source file:com.android.tools.idea.monitor.tool.StudioProfilerDeviceManager.java

public StudioProfilerDeviceManager(@NotNull Project project) throws IOException {
    final File adb = AndroidSdkUtils.getAdb(project);
    if (adb == null) {
        throw new IllegalStateException("No adb found");
    }/*from www . ja  v  a  2  s.com*/

    //TODO: Spawn the datastore in the right place (service)?
    myDataStoreService = new DataStoreService(DATASTORE_NAME);

    // The client is referenced in the update devices callback. As such the client needs to be set before we register
    // ourself as a listener for this callback. Otherwise we may get the callback before we are fully constructed
    myClient = new ProfilerClient(DATASTORE_NAME);

    ListenableFuture<AndroidDebugBridge> future = AdbService.getInstance().getDebugBridge(adb);
    Futures.addCallback(future, new FutureCallback<AndroidDebugBridge>() {
        @Override
        public void onSuccess(@Nullable AndroidDebugBridge bridge) {
            myBridge = bridge;
        }

        @Override
        public void onFailure(@NotNull Throwable t) {
        }
    }, EdtExecutor.INSTANCE);

    AndroidDebugBridge.addClientChangeListener(this);
    AndroidDebugBridge.addDeviceChangeListener(this);
    AndroidDebugBridge.addDebugBridgeChangeListener(this);

    myLegacyAllocationTracker = new StudioLegacyAllocationTracker();
    myDataStoreService.setLegacyAllocationTracker(myLegacyAllocationTracker);
}

From source file:com.skcraft.launcher.launch.LaunchSupervisor.java

public void launch(LaunchOptions options) {
    final Window window = options.getWindow();
    final Instance instance = options.getInstance();
    final LaunchListener listener = options.getListener();

    try {//ww w  .j a v  a  2 s .c om
        boolean update = options.getUpdatePolicy().isUpdateEnabled() && instance.isUpdatePending();

        // Store last access date
        Date now = new Date();
        instance.setLastAccessed(now);
        Persistence.commitAndForget(instance);

        // Perform login
        final Session session;
        if (options.getSession() != null) {
            session = options.getSession();
        } else {
            session = LoginDialog.showLoginRequest(window, launcher);
            if (session == null) {
                return;
            }
        }

        // If we have to update, we have to update
        if (!instance.isInstalled()) {
            update = true;
        }

        if (update) {
            // Execute the updater
            Updater updater = new Updater(launcher, instance);
            updater.setOnline(options.getUpdatePolicy() == UpdatePolicy.ALWAYS_UPDATE || session.isOnline());
            ObservableFuture<Instance> future = new ObservableFuture<Instance>(
                    launcher.getExecutor().submit(updater), updater);

            // Show progress
            ProgressDialog.showProgress(window, future, SharedLocale.tr("launcher.updatingTitle"),
                    tr("launcher.updatingStatus", instance.getTitle()));
            SwingHelper.addErrorDialogCallback(window, future);

            // Update the list of instances after updating
            future.addListener(new Runnable() {
                @Override
                public void run() {
                    SwingUtilities.invokeLater(new Runnable() {
                        @Override
                        public void run() {
                            listener.instancesUpdated();
                        }
                    });
                }
            }, SwingExecutor.INSTANCE);

            // On success, launch also
            Futures.addCallback(future, new FutureCallback<Instance>() {
                @Override
                public void onSuccess(Instance result) {
                    launch(window, instance, session, listener);
                }

                @Override
                public void onFailure(Throwable t) {
                }
            }, SwingExecutor.INSTANCE);
        } else {
            launch(window, instance, session, listener);
        }
    } catch (ArrayIndexOutOfBoundsException e) {
        SwingHelper.showErrorDialog(window, SharedLocale.tr("launcher.noInstanceError"),
                SharedLocale.tr("launcher.noInstanceTitle"));
    }
}

From source file:com.android.tools.idea.apk.viewer.dex.DexFileViewer.java

public DexFileViewer(@NotNull VirtualFile dexFile) {
    //noinspection Convert2Lambda // we need a new instance of this disposable every time, not just a lambda method
    myDisposable = new Disposable() {
        @Override/*from  ww w . jav  a2  s  . c  o m*/
        public void dispose() {
        }
    };

    myLoadingPanel = new JBLoadingPanel(new BorderLayout(), myDisposable);
    myLoadingPanel.startLoading();

    DefaultTreeModel treeModel = new DefaultTreeModel(new LoadingNode());

    myTree = new Tree(treeModel);
    myTree.setRootVisible(true);
    myTree.setShowsRootHandles(true);

    new TreeSpeedSearch(myTree, path -> {
        Object o = path.getLastPathComponent();
        if (!(o instanceof PackageTreeNode)) {
            return "";
        }

        PackageTreeNode node = (PackageTreeNode) o;
        return node.getName();
    });

    ColumnTreeBuilder builder = new ColumnTreeBuilder(myTree)
            .addColumn(new ColumnTreeBuilder.ColumnBuilder().setName("Class").setPreferredWidth(500)
                    .setHeaderAlignment(SwingConstants.LEFT).setRenderer(new PackageTreeNodeRenderer()))
            .addColumn(new ColumnTreeBuilder.ColumnBuilder().setName("Defined Methods").setPreferredWidth(100)
                    .setHeaderAlignment(SwingConstants.LEFT).setRenderer(new MethodCountRenderer(true)))
            .addColumn(new ColumnTreeBuilder.ColumnBuilder().setName("Referenced Methods")
                    .setPreferredWidth(100).setHeaderAlignment(SwingConstants.LEFT)
                    .setRenderer(new MethodCountRenderer(false)));
    JComponent columnTree = builder.build();
    myLoadingPanel.add(columnTree, BorderLayout.CENTER);

    DexParser dexParser = new DexParser(MoreExecutors.listeningDecorator(PooledThreadExecutor.INSTANCE),
            dexFile);
    ListenableFuture<PackageTreeNode> future = dexParser.constructMethodRefCountTree();
    Futures.addCallback(future, new FutureCallback<PackageTreeNode>() {
        @Override
        public void onSuccess(PackageTreeNode result) {
            myTree.setModel(new DefaultTreeModel(result));
            myTree.setRootVisible(false);
            myLoadingPanel.stopLoading();
        }

        @Override
        public void onFailure(Throwable t) {
        }
    }, EdtExecutor.INSTANCE);

    SimpleColoredComponent titleComponent = new SimpleColoredComponent();
    Futures.addCallback(dexParser.getDexFileStats(), new FutureCallback<DexParser.DexFileStats>() {
        @Override
        public void onSuccess(DexParser.DexFileStats result) {
            titleComponent.setIcon(AllIcons.General.Information);
            titleComponent.append("This dex file defines ");
            titleComponent.append(Integer.toString(result.classCount),
                    SimpleTextAttributes.REGULAR_BOLD_ATTRIBUTES);
            titleComponent.append(" classes with ");
            titleComponent.append(Integer.toString(result.definedMethodCount),
                    SimpleTextAttributes.REGULAR_BOLD_ATTRIBUTES);
            titleComponent.append(" methods, and references ");
            titleComponent.append(Integer.toString(result.referencedMethodCount),
                    SimpleTextAttributes.REGULAR_BOLD_ATTRIBUTES);
            titleComponent.append(" methods.");
        }

        @Override
        public void onFailure(Throwable t) {
        }
    });
    myLoadingPanel.add(titleComponent, BorderLayout.NORTH);
}

From source file:com.skcraft.plume.common.util.concurrent.DeferredImpl.java

@Override
public Deferred<I> fail(Callback<Throwable> onFailure, ListeningExecutorService executor) {
    Futures.addCallback(future, new FutureCallback<I>() {
        @Override/* w w  w. j a  va  2  s .  c  om*/
        public void onSuccess(I result) {
        }

        @Override
        public void onFailure(Throwable t) {
            try {
                onFailure.handle(t);
            } catch (Exception e) {
                log.log(Level.WARNING, "Exception thrown during callback", e);
            }
        }
    }, executor);

    return this;
}

From source file:com.newlandframework.rpc.netty.MessageRecvExecutor.java

public static void submit(Callable<Boolean> task, final ChannelHandlerContext ctx, final MessageRequest request,
        final MessageResponse response) {
    if (threadPoolExecutor == null) {
        synchronized (MessageRecvExecutor.class) {
            if (threadPoolExecutor == null) {
                threadPoolExecutor = MoreExecutors
                        .listeningDecorator((ThreadPoolExecutor) (RpcSystemConfig.isMonitorServerSupport()
                                ? RpcThreadPool.getExecutorWithJmx(threadNums, queueNums)
                                : RpcThreadPool.getExecutor(threadNums, queueNums)));
            }//from w w w .  j  a  va2  s.c om
        }
    }

    ListenableFuture<Boolean> listenableFuture = threadPoolExecutor.submit(task);
    Futures.addCallback(listenableFuture, new FutureCallback<Boolean>() {
        public void onSuccess(Boolean result) {
            ctx.writeAndFlush(response).addListener(new ChannelFutureListener() {
                public void operationComplete(ChannelFuture channelFuture) throws Exception {
                    System.out.println("RPC Server Send message-id respone:" + request.getMessageId());
                }
            });
        }

        public void onFailure(Throwable t) {
            t.printStackTrace();
        }
    }, threadPoolExecutor);
}

From source file:org.apache.twill.internal.zookeeper.LeaderElection.java

@Override
protected void doStop() {
    final SettableFuture<String> completion = SettableFuture.create();
    Futures.addCallback(completion, new FutureCallback<String>() {
        @Override//from w w w.j ava2 s .  c  om
        public void onSuccess(String result) {
            try {
                notifyStopped();
            } finally {
                executor.shutdown();
            }
        }

        @Override
        public void onFailure(Throwable t) {
            try {
                notifyFailed(t);
            } finally {
                executor.shutdown();
            }
        }
    }, Threads.SAME_THREAD_EXECUTOR);

    executor.execute(new Runnable() {
        @Override
        public void run() {
            if (watcherCancellable != null) {
                watcherCancellable.cancel();
            }
            if (state != State.CANCELLED) {
                // becomeFollower has to be called before deleting node to make sure no two active leader.
                if (state == State.LEADER) {
                    becomeFollower();
                }
                state = State.CANCELLED;
                doDeleteNode(completion);
            }
        }
    });
}

From source file:co.cask.cdap.common.service.RetryOnStartFailureService.java

@Override
protected void doStop() {
    startupThread.interrupt();//from  w w w .  j  a  v  a2 s . c o  m
    Uninterruptibles.joinUninterruptibly(startupThread);

    Service service = currentDelegate;
    if (service != null) {
        Futures.addCallback(service.stop(), new FutureCallback<State>() {
            @Override
            public void onSuccess(State result) {
                notifyStopped();
            }

            @Override
            public void onFailure(Throwable t) {
                notifyFailed(t);
            }
        }, Threads.SAME_THREAD_EXECUTOR);
    } else {
        notifyStopped();
    }
}

From source file:us.physion.ovation.ui.editor.PlainTextVisualizationFactory.java

@Override
public DataVisualization createVisualization(final Content r) {
    return new AbstractDataVisualization() {
        @Override//from w w w  .  ja v a 2  s. c o m
        public JComponent generatePanel() {
            class PlainTextArea extends JTextArea {

                private boolean scrollableTracksViewportWidth = false;

                @Override
                public boolean getScrollableTracksViewportWidth() {
                    return scrollableTracksViewportWidth;
                }

                private void setScrollableTracksViewportWidth(boolean b) {
                    if (b == scrollableTracksViewportWidth) {
                        return;
                    }
                    scrollableTracksViewportWidth = b;
                }

                private void failed() {
                    setText(Bundle.LBL_TextLoadingFailed(ContentUtils.contentLabel(r)));
                }

                @Override
                public void addNotify() {
                    super.addNotify();

                    ListenableFuture<File> data;

                    try {
                        data = r.getData();
                    } catch (ResourceNotFoundException ex) {
                        log.warn("Resource not found", ex);
                        failed();

                        return;
                    }

                    Futures.addCallback(data, new FutureCallback<File>() {
                        @Override
                        public void onSuccess(File f) {
                            try {
                                FileReader fr = new FileReader(f);
                                try {
                                    final String text = IOUtils.toString(fr);
                                    EventQueue.invokeLater(new Runnable() {
                                        @Override
                                        public void run() {
                                            setText(text);
                                            setCaretPosition(0);
                                            repaint();
                                        }
                                    });
                                } finally {
                                    IOUtils.closeQuietly(fr);
                                }
                            } catch (IOException ex) {
                                log.warn("Could not load text", ex);
                                failed();
                            }
                        }

                        @Override
                        public void onFailure(Throwable ex) {
                            log.warn("Could not get file", ex);
                            failed();
                        }
                    }, loadFileExecutors);
                }
            }

            final PlainTextArea t = new PlainTextArea();

            t.setEditable(false);
            t.setText(Bundle.LBL_TextLoading());

            ParentWidthPanel panel = new ParentWidthPanel();

            panel.add(new JScrollPane(t), BorderLayout.CENTER);

            {
                JToolBar toolbar = new JToolBar(SwingConstants.HORIZONTAL);
                toolbar.setBackground(Color.WHITE);

                toolbar.add(new JToggleButton(new AbstractAction(Bundle.LBL_LineWrap()) {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        boolean selected = ((JToggleButton) e.getSource()).isSelected();

                        t.setLineWrap(selected);
                        t.setScrollableTracksViewportWidth(selected);
                        t.setCaretPosition(0);

                        t.revalidate();
                        t.repaint();
                    }
                }));

                panel.add(toolbar, BorderLayout.NORTH);
            }

            return panel;
        }

        @Override
        public boolean shouldAdd(Content r) {
            return false;
        }

        @Override
        public void add(Content r) {
            throw new UnsupportedOperationException();
        }

        @Override
        public Iterable<? extends OvationEntity> getEntities() {
            return Sets.newHashSet((OvationEntity) r);
        }
    };
}

From source file:org.opendaylight.groupbasedpolicy.renderer.apic.ApicRenderer.java

private void readConfig() {
    ListenableFuture<Optional<ApicConfig>> dao = dataBroker.newReadOnlyTransaction()
            .read(LogicalDatastoreType.CONFIGURATION, configIid);
    Futures.addCallback(dao, new FutureCallback<Optional<ApicConfig>>() {
        @Override//from www . j a v a  2s.  c  o  m
        public void onSuccess(final Optional<ApicConfig> result) {
            if (!result.isPresent())
                return;
            if (result.get() instanceof ApicConfig) {
                config = (ApicConfig) result.get();
                applyConfig();
            }
        }

        @Override
        public void onFailure(Throwable t) {
            LOG.error("Failed to read configuration", t);
        }
    }, executor);
}