package au.com.vaadinutils.util; import com.vaadin.ui.UI; public abstract class ProgressBarTask<T> { private ProgressTaskListener<T> listener; final UI ui; public ProgressBarTask(ProgressTaskListener<T> listener) { this.listener = listener; ui = UI.getCurrent(); } public void run() { runUI(ui); } /** * Changed the overload to make it explicit that you need to use the passed * UI as calls to UI.getCurrent() will fail on a background thread such as * the on the the ProgressBarTask is normally called within. * * @param ui */ abstract public void runUI(UI ui); protected void taskComplete(final int sent) { ui.accessSynchronously(new Runnable() { @Override public void run() { listener.taskComplete(sent); } }); } public void taskProgress(final int count, final int max, final T status) { ui.accessSynchronously(new Runnable() { @Override public void run() { listener.taskProgress(count, max, status); } } ); } public void taskItemError(final T status) { ui.accessSynchronously(new Runnable() { @Override public void run() { listener.taskItemError(status); } } ); } public void taskException(final Exception e) { ui.accessSynchronously(new Runnable() { @Override public void run() { listener.taskException(e); } } ); } }