package org.oddjob.state;
import org.oddjob.Structural;
/**
* Encapsulate the allowed states for a {@link Structural}.
*
* @author Rob Gordon
*/
public enum ParentState implements State {
/**
* The job is ready to be executing. The Oddjob Framework
* will only execute a job which is in this state.
*/
READY() {
@Override
public boolean isReady() {
return true;
}
@Override
public boolean isExecuting() {
return false;
}
@Override
public boolean isStoppable() {
return false;
}
@Override
public boolean isComplete() {
return false;
}
@Override
public boolean isIncomplete() {
return false;
}
@Override
public boolean isException() {
return false;
}
@Override
public boolean isDestroyed() {
return false;
}
},
/**
* Indicates the job is executing, which normally means it's
* in the process of executing it's children.
*/
EXECUTING() {
@Override
public boolean isReady() {
return false;
}
@Override
public boolean isExecuting() {
return true;
}
@Override
public boolean isStoppable() {
return true;
}
@Override
public boolean isComplete() {
return false;
}
@Override
public boolean isIncomplete() {
return false;
}
@Override
public boolean isException() {
return false;
}
@Override
public boolean isDestroyed() {
return false;
}
},
/**
* Indicates that child jobs are active. This will be the case when
* the execution thread has passed on but a child job is
* still active or executing.
*/
ACTIVE() {
@Override
public boolean isReady() {
return false;
}
@Override
public boolean isExecuting() {
return false;
}
@Override
public boolean isStoppable() {
return true;
}
@Override
public boolean isComplete() {
return false;
}
@Override
public boolean isIncomplete() {
return false;
}
@Override
public boolean isException() {
return false;
}
@Override
public boolean isDestroyed() {
return false;
}
},
/**
* Indicates that child jobs are stoppable but done. This will be the
* case for service for {@link ServiceState}s. This state differs from
* {@link #ACTIVE} in that it will cause the next sibling to execute
* in a {@link CascadeJob}.
*/
STARTED() {
@Override
public boolean isReady() {
return false;
}
@Override
public boolean isExecuting() {
return false;
}
@Override
public boolean isStoppable() {
return true;
}
@Override
public boolean isComplete() {
return true;
}
@Override
public boolean isIncomplete() {
return false;
}
@Override
public boolean isException() {
return false;
}
@Override
public boolean isDestroyed() {
return false;
}
},
/**
* Indicates the job is not complete. This will typically be the case
* when one or more child jobs are INCOMPLETE, but this depends on
* the nature of the Structural job and the {@link StateOperator} it
* uses.
*/
INCOMPLETE() {
@Override
public boolean isReady() {
return false;
}
@Override
public boolean isExecuting() {
return false;
}
@Override
public boolean isStoppable() {
return false;
}
@Override
public boolean isComplete() {
return false;
}
@Override
public boolean isIncomplete() {
return true;
}
@Override
public boolean isException() {
return false;
}
@Override
public boolean isDestroyed() {
return false;
}
},
/**
* Indicates job has completed. The will typically be the case when
* all child jobs have completed, but this depends on
* the nature of the Structural job and the {@link StateOperator} it
* uses.
*/
COMPLETE() {
@Override
public boolean isReady() {
return false;
}
@Override
public boolean isExecuting() {
return false;
}
@Override
public boolean isStoppable() {
return false;
}
@Override
public boolean isComplete() {
return true;
}
@Override
public boolean isIncomplete() {
return false;
}
@Override
public boolean isException() {
return false;
}
@Override
public boolean isDestroyed() {
return false;
}
},
/**
* Indicates an exception has occurred. This will typically be the case
* when one of a jobs child jobs is in an EXCEPTION state, but
* this depends on
* the nature of the Structural job and the {@link StateOperator} it
* uses.
*/
EXCEPTION() {
@Override
public boolean isReady() {
return false;
}
@Override
public boolean isExecuting() {
return false;
}
@Override
public boolean isStoppable() {
return false;
}
@Override
public boolean isComplete() {
return false;
}
@Override
public boolean isIncomplete() {
return false;
}
@Override
public boolean isException() {
return true;
}
@Override
public boolean isDestroyed() {
return false;
}
},
/**
* The job has been destroyed. It can no longer be used.
*/
DESTROYED() {
@Override
public boolean isReady() {
return false;
}
@Override
public boolean isExecuting() {
return false;
}
@Override
public boolean isStoppable() {
return false;
}
@Override
public boolean isComplete() {
return false;
}
@Override
public boolean isIncomplete() {
return false;
}
@Override
public boolean isException() {
return false;
}
@Override
public boolean isDestroyed() {
return true;
}
},
;
}