package sk.stuba.fiit.perconik.eclipse.swt.widgets; import java.util.concurrent.Callable; import javax.annotation.Nullable; import com.google.common.base.Supplier; public abstract class DisplayTask<V> implements Callable<V> { protected DisplayTask() {} public static final <V> DisplayTask<V> of(final Callable<V> callable) { return new DisplayTask<V>() { @Override public V call() throws Exception { return callable.call(); } }; } public static final <V> DisplayTask<V> of(final Runnable runnable) { return of(runnable, null); } public static final <V> DisplayTask<V> of(final Runnable runnable, @Nullable final V result) { return new DisplayTask<V>() { @Override public V call() { runnable.run(); return result; } }; } public static final <V> DisplayTask<V> of(final Supplier<V> supplier) { return new DisplayTask<V>() { @Override public V call() { return supplier.get(); } }; } public final V get(final DisplayExecutor executor) { return executor.submit(this).get(); } }