package org.oddjob.jobs.tasks;
import java.util.Date;
import org.oddjob.state.State;
import org.oddjob.state.StateChanger;
import org.oddjob.state.StateEvent;
/**
* Fire appropriate Task states.
*
* @author rob
*
*/
public class TaskStateChanger {
private final StateChanger<TaskState> stateChanger;
public TaskStateChanger(StateChanger<TaskState> stateChanger) {
this.stateChanger = stateChanger;
}
public void propergate(StateEvent event) {
State state = event.getState();
Date time = event.getTime();
if (state.isDestroyed()) {
stateChanger.setStateException(
new TaskException("Job Executing Task has been destroyed."),
time);
}
else if (state.isStoppable()) {
stateChanger.setState(TaskState.INPROGRESS,time);
}
else if (state.isIncomplete()) {
stateChanger.setState(TaskState.INCOMPLETE, time);
}
else if (state.isComplete()) {
stateChanger.setState(TaskState.COMPLETE, time);
}
else if (state.isException()) {
stateChanger.setStateException(event.getException(), time);
}
else if (state.isReady()) {
stateChanger.setState(TaskState.PENDING, time);
}
else {
throw new IllegalStateException("Unconvertable state " + state);
}
}
}