package cz.cuni.mff.d3s.been.objectrepository.janitor;
import cz.cuni.mff.d3s.been.core.task.TaskState;
import cz.cuni.mff.d3s.been.persistence.task.PersistentTaskState;
/**
* Helper class for a terminal decision on what the outcome of a task was
*
* @author darklight
*/
class TotalTaskOutcome implements TotalOutcome<PersistentTaskState> {
private PersistentTaskState startingState;
private PersistentTaskState terminalState;
@Override
public void addStateEntry(PersistentTaskState stateEntry) {
switch (stateEntry.getTaskState()) {
case RUNNING:
startingState = stateEntry;
break;
case ABORTED:
case FINISHED:
terminalState = stateEntry;
break;
default:
// something odd
break;
}
}
@Override
public boolean isFailed() {
return (! isZombie()) && TaskState.ABORTED.equals(terminalState.getTaskState());
}
@Override
public boolean isZombie() {
return startingState != null && terminalState == null;
}
@Override
public String getEventId() {
return startingState == null ? terminalState.getTaskId() : startingState.getTaskId();
}
}