@Override
  protected Collection<Node> getOutputs(final Node node) {
    List<Arc> arcs = graph.getOutputArcs(node);

    List<Node> outputs = new ArrayList<Node>(arcs.size());

    for (Arc arc : arcs) {
      outputs.add(arc.getEndNode());
    }

    return outputs;
  }
  @Override
  protected Collection<Node> getInputs(final Node node) {
    List<Arc> arcs = graph.getInputArcs(node);

    List<Node> inputs = new ArrayList<Node>(arcs.size());

    for (Arc arc : arcs) {
      inputs.add(arc.getStartNode());
    }

    return inputs;
  }
 @Override
 protected boolean hasNoInputs(final Node node) {
   return graph.getInputArcs(node).isEmpty();
 }
 @Override
 protected Collection<Node> getStartNodes() {
   return graph.getStartNodes();
 }