package open.dolphin.helper; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.concurrent.ExecutionException; import javax.swing.SwingWorker; /** * @author Kazushi Minagawa, Digital Globe, Inc. * @param <T> * @param <Void> */ public abstract class SimpleWorker<T, Void> extends SwingWorker<T, Void> { private static final String STATE = "state"; private static final String PROGRESS = "progress"; PropertyChangeListener pcl; public SimpleWorker() { pcl = (PropertyChangeEvent pce) -> { if (STATE.equals(pce.getPropertyName())) { if (SwingWorker.StateValue.STARTED == pce.getNewValue()) { startProgress(); } else if(SwingWorker.StateValue.DONE == pce.getNewValue()) { stopProgress(); SimpleWorker.this.removePropertyChangeListener(pcl); } } else if (PROGRESS.equals(pce.getPropertyName())) { progress(((Integer)pce.getNewValue())); } }; this.addPropertyChangeListener(pcl); } protected void startProgress() { } protected void stopProgress() { } protected void progress(int value) { } protected void succeeded(T result) { } protected void cancelled() { } protected void failed(Throwable cause) { } protected void interrupted(Throwable cause) { } @Override protected void done() { if (isCancelled()){ cancelled(); return; } try { succeeded((T) get()); } catch (InterruptedException ex) { interrupted(ex); } catch (ExecutionException ex) { failed(ex); } } }