@Override public void addListener(Runnable runnable, Executor executor) { immediateFuture.addListener(runnable, executor); }
@Override public void addListener(Runnable runnable, Executor executor) { initialFuture.addListener(runnable, executor); }
@Override public void addListener(Runnable runnable, Executor executor) { initialFuture.addListener(runnable, executor); }
@Override public void addCallbackTo(ApiFuture<String> convertedFuture) { ApiFutures.addCallback(convertedFuture, callback); convertedFuture.addListener(this::callbackCalled, MoreExecutors.directExecutor()); } }
@Override public void setAttemptFuture(ApiFuture<ResponseT> attemptFuture) { if (isDone()) { return; } synchronized (lock) { if (isDone()) { return; } attemptFutureCompletionListener = new AttemptCompletionListener(attemptFuture); // Using direct addListener instead of ApiFutures.addCallback allows greatly reduce // layering. Also listener is more suitable here (as we don't really need two methods - // one for failure and one for success). attemptFuture.addListener(attemptFutureCompletionListener, MoreExecutors.directExecutor()); } }
@Override public void setAttemptFuture(ApiFuture<ResponseT> attemptFuture) { if (isDone()) { return; } synchronized (lock) { if (isDone()) { return; } attemptFutureCompletionListener = new AttemptCompletionListener(attemptFuture); // Using direct addListener instead of ApiFutures.addCallback allows greatly reduce // layering. Also listener is more suitable here (as we don't really need two methods - // one for failure and one for success). attemptFuture.addListener(attemptFutureCompletionListener, MoreExecutors.directExecutor()); } }
private static BiConsumer<AbstractCustomView, List<String>> getOnFileSelectedFn( PhotosLibraryClient client, Album album) { return (abstractCustomView, mediaItemPaths) -> { PhotoListView photoListView = (PhotoListView) abstractCustomView; for (String mediaItemPath : mediaItemPaths) { try { UploadMediaItemRequest.Builder uploadRequestBuilder = UploadMediaItemRequest.newBuilder(); uploadRequestBuilder .setFileName(mediaItemPath) .setDataFile(new RandomAccessFile(mediaItemPath, FILE_ACCESS_MODE)); ApiFuture<UploadMediaItemResponse> uploadResponseFuture = client.uploadMediaItemCallable().futureCall(uploadRequestBuilder.build()); // Show loading dialog while uploading LoadingView.getLoadingView().showView(); uploadResponseFuture.addListener( getOnUploadFinished(client, photoListView, uploadResponseFuture, album), MoreExecutors.directExecutor()); } catch (FileNotFoundException e) { LoadingView.getLoadingView().hideView(); JOptionPane.showMessageDialog(photoListView, e.getMessage()); } } }; }