package net.pterodactylus.util.data;
import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
* @param <E>
* The type of the element to store
*/
-class NodeImpl<E> implements Node<E> {
+class NodeImpl<E extends Comparable<E>> implements Node<E> {
/** The parent node of this node. */
private final Node<E> parentNode;
/**
* {@inheritDoc}
*/
+ public Node<E> getChild(E element) {
+ for (Node<E> childNode: children) {
+ if (childNode.getElement().equals(element)) {
+ return childNode;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public boolean hasChild(Node<E> childNode) {
+ return children.contains(childNode);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public boolean hasChild(E element) {
+ for (Node<E> childNode: children) {
+ if (childNode.getElement().equals(element)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public int getIndexOfChild(Node<E> childNode) {
+ int childIndex = 0;
+ for (Node<E> node: children) {
+ if (node.equals(childNode)) {
+ return childIndex;
+ }
+ childIndex++;
+ }
+ return -1;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public int getIndexOfChild(E element) {
+ int childIndex = 0;
+ for (Node<E> node: children) {
+ if (node.getElement().equals(element)) {
+ return childIndex;
+ }
+ childIndex++;
+ }
+ return -1;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
public void removeChild(Node<E> childNode) {
children.remove(childNode);
}
/**
* {@inheritDoc}
*/
+ public void removeAllChildren() {
+ children.clear();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
public Iterator<Node<E>> iterator() {
return children.iterator();
}
+ /**
+ * {@inheritDoc}
+ */
+ public Node<E> findChild(E element) {
+ for (Node<E> childNode: children) {
+ Node<E> wantedNode = childNode.findChild(element);
+ if (wantedNode != null) {
+ return wantedNode;
+ }
+ }
+ if (this.element.equals(element)) {
+ return this;
+ }
+ return null;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void sortChildren() {
+ Collections.sort(children);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void sortChildren(Comparator<Node<E>> comparator) {
+ Collections.sort(children, comparator);
+ }
+
+ //
+ // INTERFACE Comparable
+ //
+
+ /**
+ * {@inheritDoc}
+ */
+ public int compareTo(Node<E> otherNode) {
+ return element.compareTo(otherNode.getElement());
+ }
+
}
\ No newline at end of file