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 }