private void visitBatch()

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);
                }
            }
        }
    }