in jbatch/src/main/java/org/apache/batchee/container/navigator/AbstractNavigator.java [75:125]
public Transition getNextTransition(ExecutionElement currentElem, List<ExecutionElement> peerExecutionElements, ExecutionStatus currentStatus)
throws IllegalTransitionException {
Transition returnTransition = new Transition();
ExecutionElement nextExecutionElement = null;
List<TransitionElement> transitionElements = currentElem.getTransitionElements();
// Check the transition elements first.
if (!transitionElements.isEmpty()) {
for (final TransitionElement t : transitionElements) {
boolean isMatched = matchExitStatusAgainstOnAttribute(currentStatus.getExitStatus(), t);
if (isMatched) {
if (t instanceof Next) {
Next next = (Next) t;
nextExecutionElement = getExecutionElementFromId(peerExecutionElements, next.getTo());
returnTransition.setNextExecutionElement(nextExecutionElement);
break;
} else {
returnTransition.setTransitionElement(t);
}
return returnTransition;
}
}
}
// We've returned already if we matched a Stop, End or Fail
if (nextExecutionElement == null) {
if (currentStatus.getExtendedBatchStatus().equals(ExtendedBatchStatus.EXCEPTION_THROWN)) {
returnTransition.setNoTransitionElementMatchAfterException();
return returnTransition;
} else {
nextExecutionElement = getNextExecutionElemFromAttribute(peerExecutionElements, currentElem);
returnTransition.setNextExecutionElement(nextExecutionElement);
}
}
if (nextExecutionElement != null) {
if (alreadyExecutedElements.containsKey(nextExecutionElement.getId())) {
throw new IllegalTransitionException("Execution loop detected !!! Trying to re-execute execution element: " + nextExecutionElement.getId());
}
// We allow repeating a decision
if (!(nextExecutionElement instanceof Decision)) {
alreadyExecutedElements.put(nextExecutionElement.getId(), nextExecutionElement);
}
} else {
returnTransition.setFinishedTransitioning();
}
return returnTransition;
}