com.skcraft.concurrency.ObservableFuture.java Source code

Java tutorial

Introduction

Here is the source code for com.skcraft.concurrency.ObservableFuture.java

Source

/*
 * SK's Minecraft Launcher
 * Copyright (C) 2010-2014 Albert Pham <http://www.sk89q.com> and contributors
 * Please see LICENSE.txt for license information.
 */

package com.skcraft.concurrency;

import com.google.common.util.concurrent.ListenableFuture;
import lombok.NonNull;

import java.util.concurrent.ExecutionException;
import java.util.concurrent.Executor;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

/**
 * A pair of ProgressObservable and ListenableFuture.
 *
 * @param <V> the result type
 */
public class ObservableFuture<V> implements ListenableFuture<V>, ProgressObservable {

    private final ListenableFuture<V> future;
    private final ProgressObservable observable;

    /**
     * Construct a new ObservableFuture.
     *
     * @param future the delegate future
     * @param observable the observable
     */
    public ObservableFuture(@NonNull ListenableFuture<V> future, @NonNull ProgressObservable observable) {
        this.future = future;
        this.observable = observable;
    }

    @Override
    public boolean cancel(boolean mayInterruptIfRunning) {
        return future.cancel(mayInterruptIfRunning);
    }

    @Override
    public boolean isCancelled() {
        return future.isCancelled();
    }

    @Override
    public void addListener(Runnable listener, Executor executor) {
        future.addListener(listener, executor);
    }

    @Override
    public boolean isDone() {
        return future.isDone();
    }

    @Override
    public V get() throws InterruptedException, ExecutionException {
        return future.get();
    }

    @Override
    public V get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException {
        return future.get(timeout, unit);
    }

    @Override
    public String toString() {
        return observable.toString();
    }

    @Override
    public double getProgress() {
        return observable.getProgress();
    }

    @Override
    public String getStatus() {
        return observable.getStatus();
    }

}