whitespace fixups
[jSite2.git] / src / net / pterodactylus / util / data / Node.java
index 560fc34..3615b36 100644 (file)
@@ -1,36 +1,37 @@
 
 package net.pterodactylus.util.data;
 
+import java.util.Comparator;
 import java.util.Iterator;
 
 /**
  * A node that can be stored in a {@link Tree}. A node has exactly one parent
  * (which is <code>null</code> if the node is the {@link Tree#getRootNode()}
  * of the tree) and an arbitrary amount of child nodes.
- * 
+ *
  * @author David ‘Bombe’ Roden &lt;bombe@freenetproject.org&gt;
  * @param <E>
  *            The type of the element to store
  */
-public interface Node<E> extends Iterable<Node<E>> {
+public interface Node<E extends Comparable<E>> extends Iterable<Node<E>>, Comparable<Node<E>> {
 
        /**
         * Returns the parent node of the node.
-        * 
+        *
         * @return The parent node
         */
        public Node<E> getParent();
 
        /**
         * Returns the element that is stored in the node.
-        * 
+        *
         * @return The node’s element
         */
        public E getElement();
 
        /**
         * Adds an element as a child to this node and returns the created node.
-        * 
+        *
         * @param child
         *            The child node’s element
         * @return The created child node
@@ -39,14 +40,14 @@ public interface Node<E> extends Iterable<Node<E>> {
 
        /**
         * Returns the number of children this node has.
-        * 
+        *
         * @return The number of children
         */
        public int size();
 
        /**
         * Returns the child at the given index.
-        * 
+        *
         * @param index
         *            The index of the child
         * @return The child at the given index
@@ -55,7 +56,7 @@ public interface Node<E> extends Iterable<Node<E>> {
 
        /**
         * Returns the direct child node that contains the given element.
-        * 
+        *
         * @param element
         *            The element
         * @return The direct child node containing the given element, or
@@ -66,7 +67,7 @@ public interface Node<E> extends Iterable<Node<E>> {
 
        /**
         * Returns whether the given node is a direct child of this node.
-        * 
+        *
         * @param childNode
         *            The child node
         * @return <code>true</code> if the given node is a direct child of this
@@ -77,7 +78,7 @@ public interface Node<E> extends Iterable<Node<E>> {
        /**
         * Returns whether this node contains a child node containing the given
         * element.
-        * 
+        *
         * @param element
         *            The element
         * @return <code>true</code> if this node contains a direct child node
@@ -87,7 +88,7 @@ public interface Node<E> extends Iterable<Node<E>> {
 
        /**
         * Returns the index of the given child node.
-        * 
+        *
         * @param childNode
         *            The child node
         * @return The index of the child node, or <code>-1</code> if the child
@@ -97,7 +98,7 @@ public interface Node<E> extends Iterable<Node<E>> {
 
        /**
         * Returns the index of the child node containing the given element.
-        * 
+        *
         * @param element
         *            The element
         * @return The index of the child node, or <code>-1</code> if the child
@@ -108,7 +109,7 @@ public interface Node<E> extends Iterable<Node<E>> {
        /**
         * Remove the given child node from this node. If the given node is not a
         * child of this node, nothing happens.
-        * 
+        *
         * @param childNode
         *            The child node to remove
         */
@@ -117,7 +118,7 @@ public interface Node<E> extends Iterable<Node<E>> {
        /**
         * Removes the child node that contains the given element. The element in
         * the node is checked using {@link Object#equals(Object)}.
-        * 
+        *
         * @param child
         *            The child element to remove
         */
@@ -125,7 +126,7 @@ public interface Node<E> extends Iterable<Node<E>> {
 
        /**
         * Removes the child at the given index.
-        * 
+        *
         * @param childIndex
         *            The index of the child to remove
         */
@@ -144,7 +145,7 @@ public interface Node<E> extends Iterable<Node<E>> {
        /**
         * Searches this node’s children recursively for a node that contains the
         * given element.
-        * 
+        *
         * @param element
         *            The element to search
         * @return The node that contains the given element, or <code>null</code>
@@ -152,4 +153,17 @@ public interface Node<E> extends Iterable<Node<E>> {
         */
        public Node<E> findChild(E element);
 
+       /**
+        * Sorts all children according to their natural order.
+        */
+       public void sortChildren();
+
+       /**
+        * Sorts all children with the given comparator.
+        *
+        * @param comparator
+        *            The comparator used to sort the children
+        */
+       public void sortChildren(Comparator<Node<E>> comparator);
+
 }
\ No newline at end of file