public void forward(ActionNode node) { // find the max double m = Double.NEGATIVE_INFINITY; for (BasicEdge edge : node.getBackConnections()) { double d = ((ActionNode) edge.getFrom()).getEarliestStartTime() + ((ActionNode) edge.getFrom()).getDuration(); m = Math.max(d, m); } node.setEarliestStartTime(m); // handle other nodes for (BasicEdge edge : node.getConnections()) { forward((ActionNode) edge.getTo()); } }