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    
015    package org.apache.tapestry.contrib.tree.simple;
016    
017    import java.io.Serializable;
018    import java.util.Iterator;
019    
020    import javax.swing.tree.TreePath;
021    
022    import org.apache.tapestry.contrib.tree.model.ITreeDataModel;
023    import org.apache.tapestry.contrib.tree.model.ITreeNode;
024    
025    /**
026     * @author ceco
027     */
028    public class SimpleTreeDataModel implements ITreeDataModel, Serializable
029    {
030    
031        private static final long serialVersionUID = 9215832847660213349L;
032    
033        protected ITreeNode m_objRootNode;
034    
035        /**
036         * Constructor for SimpleTreeDataModel.
037         */
038        public SimpleTreeDataModel(ITreeNode objRootNode)
039        {
040            super();
041            m_objRootNode = objRootNode;
042        }
043    
044        /**
045         * @see org.apache.tapestry.contrib.tree.model.ITreeDataModel#getRoot()
046         */
047        public Object getRoot()
048        {
049            return m_objRootNode;
050        }
051    
052        /**
053         * @see org.apache.tapestry.contrib.tree.model.ITreeDataModel#getChildCount(Object)
054         */
055        public int getChildCount(Object objParent)
056        {
057            ITreeNode objParentNode = (ITreeNode) objParent;
058    
059            return objParentNode.getChildCount();
060        }
061    
062        /**
063         * @see org.apache.tapestry.contrib.tree.model.ITreeDataModel#getChildren(Object)
064         */
065        public Iterator getChildren(Object objParent)
066        {
067            ITreeNode objParentNode = (ITreeNode) objParent;
068            return objParentNode.getChildren().iterator();
069        }
070    
071        /**
072         * @see org.apache.tapestry.contrib.tree.model.ITreeDataModel#getObject(Object)
073         */
074        public Object getObject(Object objUniqueKey)
075        {
076            if (objUniqueKey != null)
077            {
078                TreePath objPath = (TreePath) objUniqueKey;
079                return objPath.getLastPathComponent();
080            }
081            return null;
082        }
083    
084        /**
085         * @see org.apache.tapestry.contrib.tree.model.ITreeDataModel#getUniqueKey(Object,
086         *      Object)
087         */
088        public Object getUniqueKey(Object objTarget, Object objParentUniqueKey)
089        {
090            TreePath objPath = (TreePath) objParentUniqueKey;
091            Object objTargetUID = null;
092            if (objPath != null)
093            {
094                objTargetUID = objPath.pathByAddingChild(objTarget);
095            }
096            else
097            {
098                objTargetUID = new TreePath(objTarget);
099            }
100            return objTargetUID;
101        }
102    
103        /**
104         * @see org.apache.tapestry.contrib.tree.model.ITreeDataModel#isAncestorOf(Object,
105         *      Object)
106         */
107        public boolean isAncestorOf(Object objTargetUniqueKey,
108                Object objParentUniqueKey)
109        {
110            TreePath objParentPath = (TreePath) objParentUniqueKey;
111            TreePath objTargetPath = (TreePath) objTargetUniqueKey;
112            boolean bResult = objParentPath.isDescendant(objTargetPath);
113            return bResult;
114        }
115    
116        /**
117         * @see org.apache.tapestry.contrib.tree.model.ITreeDataModel#getParentUniqueKey
118         */
119        public Object getParentUniqueKey(Object objChildUniqueKey)
120        {
121            TreePath objChildPath = (TreePath) objChildUniqueKey;
122            TreePath objParentPath = objChildPath.getParentPath();
123            if (objParentPath == null) return null;
124            return objParentPath.getLastPathComponent();
125        }
126    
127    }