@Override public void run(CoreSession session, DocumentRouteElement element) { List<DocumentRouteElement> children = getChildrenElement(session, element); if (!element.isRunning()) { element.setRunning(session); } if (children.isEmpty()) { element.setDone(session); return; } // run all the child unless there is a wait state for (DocumentRouteElement child : children) { if (!child.isDone()) { child.run(session); if (!child.isDone()) { return; } } } // all child ran, we're done element.setDone(session); } }