public NodeSet<T> getNodeHierarchyParents(T child, boolean direct, DefaultNodeSet<T> ns) { if(child.equals(topEntity)) { return ns; } Collection<T> parents = getParentsInternal(child, null); for (Iterator<T> parIt = parents.iterator(); parIt.hasNext();) { T par = parIt.next(); Node<T> cycleNode = cycles.get(par); if (cycleNode != null) { ns.addNode(cycleNode); parIt.remove(); } else { ns.addEntity(par); } if (!direct) { getNodeHierarchyParents(par, direct, ns); } } return ns; }
public NodeSet<T> getNodeHierarchyChildren(T parent, boolean direct, DefaultNodeSet<T> ns) { if(parent.equals(bottomEntity)) { return ns; } Collection<T> children = getChildrenInternal(parent); for (Iterator<T> childIt = children.iterator(); childIt.hasNext();) { T child = childIt.next(); Node<T> cycleNode = cycles.get(child); if (cycleNode != null) { if (!cycleNode.contains(parent)) { ns.addNode(cycleNode); } childIt.remove(); } else { ns.addEntity(child); } if (!direct) { getNodeHierarchyChildren(child, direct, ns); } } return ns; }