001// Copyright 2004, 2005 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
015package org.apache.tapestry.contrib.tree.simple;
016
017import java.util.Collection;
018import java.util.HashSet;
019import java.util.Iterator;
020import java.util.Set;
021
022import org.apache.tapestry.contrib.tree.model.IMutableTreeNode;
023import org.apache.tapestry.contrib.tree.model.ITreeNode;
024
025/**
026 * @author ceco
027 */
028public class TreeNode implements IMutableTreeNode
029{
030        private static final long serialVersionUID = 677919478017303186L;
031        
032        protected Set m_setChildren;
033        protected IMutableTreeNode m_objParentNode;
034        
035        /**
036         * Constructor for TreeNode.
037         */
038        public TreeNode() {
039                this(null);
040        }
041        public TreeNode(IMutableTreeNode parentNode) {
042                super();
043                m_objParentNode = parentNode;
044                m_setChildren = new HashSet();
045        }
046
047
048        public int getChildCount() {
049                return m_setChildren.size();
050        }
051
052        public ITreeNode getParent() {
053                return m_objParentNode;
054        }
055
056        public boolean getAllowsChildren() {
057                return true;
058        }
059
060        public boolean isLeaf() {
061                return m_setChildren.size() == 0 ? true:false;
062        }
063
064        public Collection children() {
065                return m_setChildren;
066        }
067
068
069        public void insert(IMutableTreeNode child) {
070                child.setParent(this);
071                m_setChildren.add(child);
072        }
073
074        public void remove(IMutableTreeNode node) {
075                m_setChildren.remove(node);
076        }
077
078        public void removeFromParent() {
079                m_objParentNode.remove(this);
080                m_objParentNode = null;
081        }
082
083        public void setParent(IMutableTreeNode newParent) {
084                m_objParentNode = newParent;
085        }
086
087        public void insert(Collection colChildren){
088                for (Iterator iter = colChildren.iterator(); iter.hasNext();) {
089                        IMutableTreeNode element = (IMutableTreeNode) iter.next();
090                        element.setParent(this);
091                        m_setChildren.add(element);
092                }
093        }
094
095        /**
096         * @see org.apache.tapestry.contrib.tree.model.ITreeNode#containsChild(ITreeNode)
097         */
098        public boolean containsChild(ITreeNode node) {
099                return m_setChildren.contains(node);
100        }
101
102        /**
103         * @see org.apache.tapestry.contrib.tree.model.ITreeNode#getChildren()
104         */
105        public Collection getChildren() {
106                return m_setChildren;
107        }
108
109}