001 package org.kuali.maven.plugins.graph.tree;
002
003 import java.lang.reflect.Array;
004 import java.util.ArrayList;
005 import java.util.Enumeration;
006 import java.util.List;
007
008 import javax.swing.tree.DefaultMutableTreeNode;
009 import javax.swing.tree.MutableTreeNode;
010 import javax.swing.tree.TreeNode;
011
012 public class Node<T> extends DefaultMutableTreeNode {
013
014 private static final long serialVersionUID = -4552044477560333925L;
015
016 public Node() {
017 this(null);
018 }
019
020 public Node(T userObject) {
021 this(userObject, true);
022 }
023
024 public Node(T userObject, boolean allowsChildren) {
025 super(userObject, allowsChildren);
026 }
027
028 @Override
029 public Node<T>[] getPath() {
030 TreeNode[] treeNodes = super.getPath();
031 @SuppressWarnings("unchecked")
032 Node<T>[] typedNodes = (Node<T>[]) Array.newInstance(this.getClass(), treeNodes.length);
033 for (int i = 0; i < typedNodes.length; i++) {
034 @SuppressWarnings("unchecked")
035 Node<T> pathNode = (Node<T>) treeNodes[i];
036 typedNodes[i] = pathNode;
037 }
038 return typedNodes;
039 }
040
041 @SuppressWarnings("unchecked")
042 @Override
043 public Node<T> getRoot() {
044 return (Node<T>) super.getRoot();
045 }
046
047 @SuppressWarnings("unchecked")
048 @Override
049 public Enumeration<Node<T>> children() {
050 return super.children();
051 }
052
053 @SuppressWarnings("unchecked")
054 public List<Node<T>> getBreadthFirstList() {
055 return getList(breadthFirstEnumeration());
056 }
057
058 @SuppressWarnings("unchecked")
059 public List<Node<T>> getDepthFirstList() {
060 return getList(depthFirstEnumeration());
061 }
062
063 protected <E> List<E> getList(Enumeration<E> e) {
064 List<E> list = new ArrayList<E>();
065 while (e.hasMoreElements()) {
066 list.add(e.nextElement());
067 }
068 return list;
069 }
070
071 public List<Node<T>> getChildren() {
072 return getList(children());
073 }
074
075 @SuppressWarnings("unchecked")
076 public T getObject() {
077 return (T) super.getUserObject();
078 }
079
080 public void setObject(T object) {
081 super.setUserObject(object);
082 }
083
084 /**
085 * @deprecated Use getObject() instead
086 */
087 @SuppressWarnings("unchecked")
088 @Override
089 @Deprecated
090 public T getUserObject() {
091 return (T) super.getUserObject();
092 }
093
094 /**
095 * @deprecated Use setObject(T) instead
096 */
097 @SuppressWarnings("unchecked")
098 @Override
099 @Deprecated
100 public void setUserObject(Object userObject) {
101 T object = (T) userObject;
102 super.setUserObject(object);
103 }
104
105 public void add(Node<T> newChild) {
106 super.add(newChild);
107 }
108
109 /**
110 * @deprecated Use add(TypedNode<T> newChild) instead
111 */
112 @SuppressWarnings("unchecked")
113 @Override
114 @Deprecated
115 public void add(MutableTreeNode newChild) {
116 Node<T> typedChild = (Node<T>) newChild;
117 add(typedChild);
118 }
119
120 @SuppressWarnings("unchecked")
121 @Override
122 public Node<T> getParent() {
123 return (Node<T>) super.getParent();
124 }
125
126 }