Coverage Report - org.apache.tapestry.contrib.tree.components.TreeDataView
 
Classes in this File Line Coverage Branch Coverage Complexity
TreeDataView
0% 
0% 
1.8
 
 1  
 // Copyright 2004, 2005 The Apache Software Foundation
 2  
 //
 3  
 // Licensed under the Apache License, Version 2.0 (the "License");
 4  
 // you may not use this file except in compliance with the License.
 5  
 // You may obtain a copy of the License at
 6  
 //
 7  
 //     http://www.apache.org/licenses/LICENSE-2.0
 8  
 //
 9  
 // Unless required by applicable law or agreed to in writing, software
 10  
 // distributed under the License is distributed on an "AS IS" BASIS,
 11  
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 12  
 // See the License for the specific language governing permissions and
 13  
 // limitations under the License.
 14  
 
 15  
 package org.apache.tapestry.contrib.tree.components;
 16  
 
 17  
 import org.apache.tapestry.BaseComponent;
 18  
 import org.apache.tapestry.IMarkupWriter;
 19  
 import org.apache.tapestry.IRequestCycle;
 20  
 import org.apache.tapestry.contrib.tree.model.ITreeDataModel;
 21  
 import org.apache.tapestry.contrib.tree.model.ITreeModel;
 22  
 import org.apache.tapestry.contrib.tree.model.ITreeRowSource;
 23  
 import org.apache.tapestry.contrib.tree.model.TreeRowObject;
 24  
 
 25  
 import java.util.Iterator;
 26  
 
 27  
 /**
 28  
  * @author tsveltin ?
 29  
  */
 30  
 public abstract class TreeDataView extends BaseComponent implements
 31  
         ITreeRowSource {
 32  0
     private TreeRowObject m_objTreeRowObject = null;
 33  
 
 34  0
     private int m_nTreeDeep = -1;
 35  
 
 36  
     public TreeDataView()
 37  
     {
 38  0
         super();
 39  0
         initialize();
 40  0
     }
 41  
 
 42  
     public void initialize()
 43  
     {
 44  0
         m_objTreeRowObject = null;
 45  0
         m_nTreeDeep = -1;
 46  0
     }
 47  
 
 48  
     public abstract TreeView getTreeView();
 49  
 
 50  
     public void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
 51  
     {
 52  
         // render data
 53  0
         Object objExistedTreeModelSource = cycle.getAttribute(ITreeRowSource.TREE_ROW_SOURCE_ATTRIBUTE);
 54  0
         cycle.setAttribute(ITreeRowSource.TREE_ROW_SOURCE_ATTRIBUTE, this);
 55  
 
 56  0
         TreeView objView = getTreeView();
 57  0
         ITreeModel objTreeModel = objView.getTreeModel();
 58  0
         ITreeDataModel objTreeDataModel = objTreeModel.getTreeDataModel();
 59  
 
 60  0
         Object objRoot = objTreeDataModel.getRoot();
 61  0
         Object objRootUID = objTreeDataModel.getUniqueKey(objRoot, null);
 62  
         
 63  0
         if (getShowRootNode()) {
 64  
 
 65  0
             walkTree(objRoot, objRootUID, 0, objTreeModel, writer, cycle,
 66  
                      TreeRowObject.FIRST_LAST_ROW, new int[0], true);
 67  
         } else {
 68  
 
 69  0
             boolean bFirst = true;
 70  
 
 71  0
             int nChildenCount = objTreeModel.getTreeDataModel().getChildCount(objRoot);
 72  0
             int nRowPossiotionType = nChildenCount == 1 ? TreeRowObject.FIRST_LAST_ROW : TreeRowObject.FIRST_ROW;
 73  
 
 74  0
             for (Iterator iter = objTreeModel.getTreeDataModel().getChildren(objRoot); iter.hasNext();)
 75  
             {
 76  0
                 Object objChild = iter.next();
 77  0
                 Object objChildUID = objTreeModel.getTreeDataModel().getUniqueKey(objChild, objRoot);
 78  
 
 79  0
                 boolean bChildLast = !iter.hasNext();
 80  0
                 if (!bFirst) {
 81  
 
 82  0
                     if (bChildLast)
 83  0
                         nRowPossiotionType = TreeRowObject.LAST_ROW;
 84  
                     else
 85  0
                         nRowPossiotionType = TreeRowObject.MIDDLE_ROW;
 86  
                 }
 87  
 
 88  0
                 walkTree(objChild, objChildUID, 0, objTreeModel, writer, cycle,
 89  
                          nRowPossiotionType, new int[0], bChildLast);
 90  
 
 91  0
                 bFirst = false;
 92  0
             }
 93  
         }
 94  
 
 95  0
         cycle.setAttribute(ITreeRowSource.TREE_ROW_SOURCE_ATTRIBUTE, objExistedTreeModelSource);
 96  0
     }
 97  
 
 98  
     public void walkTree(Object objParent, Object objParentUID, int nDepth,
 99  
                          ITreeModel objTreeModel, IMarkupWriter writer, IRequestCycle cycle,
 100  
                          int nRowPossiotionType, int[] arrConnectImages, boolean bLast)
 101  
     {
 102  0
         int rowPositionType = nRowPossiotionType;
 103  0
         m_nTreeDeep = nDepth;
 104  0
         int nNumberOfChildren = objTreeModel.getTreeDataModel().getChildCount(
 105  
                 objParent);
 106  0
         boolean bLeaf = (nNumberOfChildren == 0) ? true : false;
 107  0
         m_objTreeRowObject = new TreeRowObject(objParent, objParentUID, nDepth,
 108  
                                                bLeaf, rowPositionType, arrConnectImages);
 109  
 
 110  0
         super.renderComponent(writer, cycle);
 111  
 
 112  0
         boolean bContain = objTreeModel.getTreeStateModel()
 113  
                 .isUniqueKeyExpanded(objParentUID);
 114  0
         if (bContain) {
 115  0
             int[] arrConnectImagesNew = new int[arrConnectImages.length + 1];
 116  0
             System.arraycopy(arrConnectImages, 0, arrConnectImagesNew, 0,
 117  
                              arrConnectImages.length);
 118  0
             if (bLast)
 119  0
                 arrConnectImagesNew[arrConnectImagesNew.length - 1] = TreeRowObject.EMPTY_CONN_IMG;
 120  0
             else arrConnectImagesNew[arrConnectImagesNew.length - 1] = TreeRowObject.LINE_CONN_IMG;
 121  
 
 122  0
             for (Iterator iter = objTreeModel.getTreeDataModel().getChildren(
 123  0
                     objParent); iter.hasNext();) {
 124  0
                 Object objChild = iter.next();
 125  0
                 Object objChildUID = objTreeModel.getTreeDataModel()
 126  
                         .getUniqueKey(objChild, objParentUID);
 127  0
                 boolean bChildLast = !iter.hasNext();
 128  0
                 if (bChildLast)
 129  0
                     rowPositionType = TreeRowObject.LAST_ROW;
 130  0
                 else rowPositionType = TreeRowObject.MIDDLE_ROW;
 131  0
                 walkTree(objChild, objChildUID, nDepth + 1, objTreeModel,
 132  
                          writer, cycle, rowPositionType, arrConnectImagesNew,
 133  
                          bChildLast);
 134  0
             }
 135  
         }
 136  0
     }
 137  
 
 138  
     public int getTreeDeep()
 139  
     {
 140  0
         return m_nTreeDeep;
 141  
     }
 142  
 
 143  
     /**
 144  
      * @see org.apache.tapestry.contrib.tree.model.ITreeRowSource#getTreeRow()
 145  
      */
 146  
     public TreeRowObject getTreeRow()
 147  
     {
 148  0
         return getTreeRowObject();
 149  
     }
 150  
 
 151  
     public TreeRowObject getTreeRowObject()
 152  
     {
 153  0
         return m_objTreeRowObject;
 154  
     }
 155  
 
 156  
     public void setTreeRowObject(TreeRowObject object)
 157  
     {
 158  0
         m_objTreeRowObject = object;
 159  0
     }
 160  
 
 161  
     public abstract boolean getShowRootNode();
 162  
 
 163  
 }