/** * Inserts another node right before this node. * <p/> * The new node is added as a successor of all predecessors of this node and this node is set as the successor of the new * node. * * @param newNode The node that should be inserted. */ public void insertBefore(SequentialNode newNode) { newNode.setSuccessor(this); Set<Node> predecessors = new HashSet<Node>(getPredecessors()); for (Node predecessor : predecessors) { predecessor.replaceSuccessor(this, newNode); } predecessors.clear(); // previous predecessors are no predecessors anymore addPredecessor(newNode); } }
/** * Makes a deep copy of this node using the same predecessors and successor as the original. Depending on the * subtype, more properties are copied according to the {@link #copyElements()} method. * * @return a copy of this node with same predecessors and successors */ public SequentialNode copy() { SequentialNode copy = copyElements(); copy.setSuccessor(successor); for (Node p : getPredecessors()) { copy.addPredecessor(p); } return copy; } }