package org.drugis.common.threading;
import org.drugis.common.threading.event.ListenerManager;
public abstract class WaitingTask implements Task {
protected ListenerManager d_mgr = new ListenerManager(this);
protected boolean d_started = false;
protected boolean d_finished = false;
/**
* Whether the task should currently be waiting.
*/
public abstract boolean isWaiting();
/**
* To be executed when the task starts waiting. Should not perform intensive computation.
*/
public void onStartWaiting() {
d_started = true;
d_mgr.fireTaskStarted();
}
/**
* To be executed when the task is done waiting. Should not perform intensive computation.
*/
public void onEndWaiting() {
d_started = false;
d_finished = true;
d_mgr.fireTaskFinished();
}
public boolean isStarted() {
return d_started;
}
public boolean isFinished() {
return d_finished;
}
public boolean isFailed() {
return false;
}
public Throwable getFailureCause() {
return null;
}
public boolean isAborted() {
return false;
}
public void addTaskListener(TaskListener l) {
d_mgr.addTaskListener(l);
}
public void removeTaskListener(TaskListener l) {
d_mgr.removeTaskListener(l);
}
}