package com.limegroup.gnutella.gui.statistics; import java.util.Enumeration; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.MutableTreeNode; import javax.swing.tree.TreeNode; import com.limegroup.gnutella.gui.GUIMediator; /** * This class acts as a proxy and as a "decorator" for an underlying instance * of a <tt>MutableTreeNode</tt> implementation.<p> * * This class includes the most of the functionality of a * <tt>DefaultMutableTreeNode</tt>, which it simply wraps, without the * coupling that directly subclassing <tt>DefaultMutableTreeNode</tt> * would incur. */ //2345678|012345678|012345678|012345678|012345678|012345678|012345678|012345678| public class StatisticsTreeNode implements MutableTreeNode { /** * Handle to the underlying <tt>MutableTreeNode</tt> implemenation * that calls are forwarded to. */ private final DefaultMutableTreeNode TREE_NODE = new DefaultMutableTreeNode(); /** * The key for uniquely identifying this node. */ private String _titleKey; /** * The name of this node as it is displayed to the user. */ private String _displayName; /** * <tt>StatisticsPane</tt> containing display data. */ private StatisticsPane _pane; /** * This constructor sets the values for the name of the node to display * to the user as well as the constant key to use for uniquely * identifying this node. * * @param titleKey the key for the name of the node to display to the * user and the unique identifier key for this node * * @param displayName the name of the node as it is displayed to the * user */ StatisticsTreeNode(final StatisticsPane pane, final String displayName) { _titleKey = pane.getName(); _displayName = displayName; _pane = pane; } /** * This constructor sets the values for the name of the node to display * to the user as well as the constant key to use for uniquely * identifying this node. * * @param pane the <tt>StatisticsPane</tt> instance containing the * display information for this node */ StatisticsTreeNode(final StatisticsPane pane) { _titleKey = pane.getName(); _displayName = GUIMediator.getStringResource(pane.getName()); _pane = pane; } /** * Removes <tt>newChild</tt> from its parent and makes it a child of * this node by adding it to the end of this node's child array. * * <p>Serves as a proxy for the add method of the wrapped * <tt>DefaultMutableTreeNode</tt> instance. * * @param newChild node to add as a child of this node * @exception IllegalArgumentException if <tt>newChild</tt> is null * @exception IllegalStateException if this node does not allow * children */ public void add(StatisticsTreeNode newChild) { TREE_NODE.add(newChild); } /** * Returns the child <tt>TreeNode</tt> at index * <tt>childIndex</tt>. */ public TreeNode getChildAt(int childIndex) { return TREE_NODE.getChildAt(childIndex); } /** * Returns the number of children <tt>TreeNode</tt>s the receiver * contains. */ public int getChildCount() { return TREE_NODE.getChildCount(); } /** * Returns the parent <tt>TreeNode</tt> of the receiver. */ public TreeNode getParent() { return TREE_NODE.getParent(); } /** * Returns the index of <tt>node</tt> in the receivers children. * If the receiver does not contain <tt>node</tt>, -1 will be * returned. */ public int getIndex(TreeNode node) { return TREE_NODE.getIndex(node); } /** * Returns true if the receiver allows children. */ public boolean getAllowsChildren() { return TREE_NODE.getAllowsChildren(); } /** * Returns true if the receiver is a leaf. */ public boolean isLeaf() { return TREE_NODE.isLeaf(); } /** * Returns the children of the reciever as an Enumeration. */ public Enumeration children() { return TREE_NODE.children(); } /** * Adds <tt>child</tt> to the receiver at <tt>index</tt>. * <tt>child</tt> will be messaged with <tt>setParent</tt>. */ public void insert(MutableTreeNode child, int index) { TREE_NODE.insert(child, index); } /** * Removes the child at <tt>index</tt> from the receiver. */ public void remove(int index) { TREE_NODE.remove(index); } /** * Removes <tt>node</tt> from the receiver. <tt>setParent</tt> * will be messaged on <tt>node</tt>. */ public void remove(MutableTreeNode node) { TREE_NODE.remove(node); } /** * Resets the user object of the receiver to <tt>object</tt>. */ public void setUserObject(Object object) { TREE_NODE.setUserObject(object); } /** * Removes the receiver from its parent. */ public void removeFromParent() { TREE_NODE.removeFromParent(); } /** * Sets the parent of the receiver to <tt>newParent</tt>. */ public void setParent(MutableTreeNode newParent) { TREE_NODE.setParent(newParent); } /** * Returns true if the receiver is the root node. */ public boolean isRoot() { return TREE_NODE.isRoot(); } /** * Defines the class' representation as a <tt>String</tt> object, used * in determining how it is displayed in the <tt>JTree</tt>. * * @return the <tt>String</tt> identifier for the display of this class */ public String toString() { return _displayName; } /** * Returns the <tt>String</tt> denoting both the title of the node * as well as the unique identifying <tt>String</tt> for the node. */ public String getTitleKey() { return _titleKey; } /** * Accessor for the <tt>StatisticsPane</tt> that contains display data. * * @return the <tt>StatisticsPane</tt> that contains display data */ public StatisticsPane getStatsPane() { return _pane; } }