package main.java.utils.cartesianindex; import java.util.Iterator; import java.util.List; public class CartesianNode implements CartesianIndex { private static final long serialVersionUID = 3021723666996102390L; private List<CartesianIndex> childNodes; public CartesianNode(final List<CartesianIndex> childNodes) { this.childNodes = childNodes; } @Override public boolean isLeafValue() { return false; } @Override public Long getValue() { throw new UnsupportedOperationException("This is a Cartesian node, not value in here."); } @Override public void setValue(final long value) { throw new UnsupportedOperationException("This is a Cartesian node, not value in here."); } @Override public List<CartesianIndex> getNodes() { return childNodes; } @Override public void setNewNodes(final List<CartesianIndex> newNodes) { childNodes = newNodes; } @Override public int hashCode() { int byMult = 1; int hashCode = 0; for (final CartesianIndex node : childNodes) { hashCode += node.hashCode() * byMult; byMult *= 10; } return hashCode; } @Override public boolean equals(final Object node) { if (node instanceof CartesianNode) { boolean allEquals = true; final Iterator<CartesianIndex> itOther = ((CartesianNode)node).getNodes().iterator(); final Iterator<CartesianIndex> itCurrent = childNodes.iterator(); while (itCurrent.hasNext() && itOther.hasNext()) { allEquals &= itCurrent.next().equals(itOther.next()); } return allEquals && !itOther.hasNext() && !itCurrent.hasNext(); } return false; } @Override public String toString() { return String.valueOf(hashCode()); } }