001 // Copyright 2011 The Apache Software Foundation
002 //
003 // Licensed under the Apache License, Version 2.0 (the "License");
004 // you may not use this file except in compliance with the License.
005 // You may obtain a copy of the License at
006 //
007 // http://www.apache.org/licenses/LICENSE-2.0
008 //
009 // Unless required by applicable law or agreed to in writing, software
010 // distributed under the License is distributed on an "AS IS" BASIS,
011 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
012 // See the License for the specific language governing permissions and
013 // limitations under the License.
014
015 package org.apache.tapestry5.tree;
016
017 import java.util.List;
018
019 /**
020 * A node within a {@link TreeModel}. In a {@link DefaultTreeModel}, most of the node's information
021 * comes via the {@link TreeModelAdapter}.
022 *
023 * @param <T>
024 * type of node
025 * @since 5.3
026 */
027 public interface TreeNode<T>
028 {
029 /**
030 * Returns a string Id for the node that uniquely identifies it.
031 *
032 * @return unique string identifying the node
033 * @see TreeModel#getById(String)
034 */
035 String getId();
036
037 /** Returns the value represented by this node. */
038 T getValue();
039
040 /**
041 * If true, then this node is a leaf node, which never has children (i.e., a file). If false, the node
042 * may have children (i.e., a folder).
043 *
044 * @return true for leaf nodes, false for folder nodes
045 * @see TreeModelAdapter#isLeaf(Object)
046 */
047 boolean isLeaf();
048
049 /**
050 * Returns true if this non-leaf node has child nodes. This will not be invoked for leaf nodes.
051 *
052 * @see TreeModelAdapter#hasChildren(Object)
053 */
054 boolean getHasChildren();
055
056 /**
057 * Returns the actual children of this non-leaf node, as additional nodes.
058 *
059 * @see TreeModelAdapter#getChildren(Object)
060 */
061 List<TreeNode<T>> getChildren();
062
063 // TODO: Some way to influence the rendered output (i.e., to display different icons based on
064 // file type).
065
066 /**
067 * Returns a textual label for the node. Not all UIs will make use of the label, but default UIs will.
068 *
069 * @see TreeModelAdapter#getLabel(Object)
070 */
071 public String getLabel();
072 }