001 /* 002 @license.text@ 003 */ 004 package biz.hammurapi.util; 005 006 import java.util.Collections; 007 import java.util.HashMap; 008 import java.util.LinkedList; 009 import java.util.List; 010 import java.util.Map; 011 012 /** 013 * Simple class to build tree structures 014 * @author Pavel Vlasov 015 * @version $Revision: 1.4 $ 016 */ 017 public class TreeNode extends VisitableBase implements Attributable { 018 private TreeNode parent; 019 020 public TreeNode() { 021 super(); 022 } 023 024 /* (non-Javadoc) 025 * @see biz.hammurapi.util.Visitable#accept(biz.hammurapi.util.Visitor) 026 */ 027 protected void acceptChildren(Visitor visitor) { 028 childrenVisitable.accept(visitor); 029 } 030 031 private Map attributes=new HashMap(); 032 033 public void setAttribute(Object key, Object value) { 034 if (value==null) { 035 attributes.remove(key); 036 } else { 037 attributes.put(key, value); 038 } 039 } 040 041 public Object getAttribute(Object key) { 042 return attributes.get(key); 043 } 044 045 private List children=new LinkedList(); 046 private Visitable childrenVisitable=new CollectionVisitable(children, false); 047 048 public List getChildren() { 049 return Collections.unmodifiableList(children); 050 } 051 052 public void addChild(Object child) { 053 children.add(child); 054 if (child instanceof TreeNode) { 055 ((TreeNode) child).parent=this; 056 } 057 } 058 059 public boolean hasAttribute(String name) { 060 return attributes.containsKey(name); 061 } 062 /** 063 * @return Returns the parent. 064 */ 065 public TreeNode getParent() { 066 return parent; 067 } 068 069 public Object removeAttribute(Object key) { 070 return attributes.remove(key); 071 } 072 073 }