in tools/maven-plugin/src/main/java/org/apache/batchee/tools/maven/doc/DiagramGenerator.java [141:207]
private void visitBatch(final JSLJob job, final Diagram diagram) {
final Map<String, Node> nodes = new HashMap<String, Node>();
String first = null;
try {
first = new JobNavigator(job).getFirstExecutionElement(null).getId();
} catch (final Exception e) {
// no-op
}
// create nodes
final List<ExecutionElement> executionElements = job.getExecutionElements();
final Collection<ExecutionElement> allElements = new HashSet<ExecutionElement>();
initNodes(diagram, nodes, allElements, executionElements);
// create edges
for (final ExecutionElement element : allElements) {
final String id = element.getId();
final Node source = nodes.get(id);
if (id.equals(first)) {
source.root();
}
if (Step.class.isInstance(element)) {
final String next = Step.class.cast(element).getNextFromAttribute();
if (next != null) {
final Node target = addNodeIfMissing(diagram, nodes, next, Node.Type.STEP);
diagram.addEdge(new Edge("next"), source, target);
}
}
for (final TransitionElement transitionElement : element.getTransitionElements()) {
if (Stop.class.isInstance(transitionElement)) {
final Stop stop = Stop.class.cast(transitionElement);
final String restart = stop.getRestart();
if (restart != null) {
final Node target = addNodeIfMissing(diagram, nodes, restart, Node.Type.STEP);
diagram.addEdge(new Edge("stop(" + stop.getOn() + ")"), source, target);
}
final String exitStatus = stop.getRestart();
if (exitStatus != null) {
final Node target = addNodeIfMissing(diagram, nodes, exitStatus, Node.Type.SINK);
diagram.addEdge(new Edge("stop(" + stop.getOn() + ")"), source, target);
}
} else if (Fail.class.isInstance(transitionElement)) {
final Fail fail = Fail.class.cast(transitionElement);
final String exitStatus = fail.getExitStatus();
final Node target = addNodeIfMissing(diagram, nodes, exitStatus, Node.Type.SINK);
diagram.addEdge(new Edge("fail(" + fail.getOn() + ")"), source, target);
} else if (End.class.isInstance(transitionElement)) {
final End end = End.class.cast(transitionElement);
final String exitStatus = end.getExitStatus();
final Node target = addNodeIfMissing(diagram, nodes, exitStatus, Node.Type.SINK);
diagram.addEdge(new Edge("end(" + end.getOn() + ")"), source, target);
} else if (Next.class.isInstance(transitionElement)) {
final Next end = Next.class.cast(transitionElement);
final String to = end.getTo();
final Node target = addNodeIfMissing(diagram, nodes, to, Node.Type.STEP);
diagram.addEdge(new Edge("next(" + end.getOn() + ")"), source, target);
} else {
warn("Unknown next element: " + transitionElement);
}
}
}
}