Coverage Report - org.apache.tapestry.contrib.tree.components.TreeDataView
 
Classes in this File Line Coverage Branch Coverage Complexity
TreeDataView
0%
0/64
0%
0/24
1.909
 
 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.event.PageDetachListener;
 21  
 import org.apache.tapestry.contrib.tree.model.ITreeDataModel;
 22  
 import org.apache.tapestry.contrib.tree.model.ITreeModel;
 23  
 import org.apache.tapestry.contrib.tree.model.ITreeRowSource;
 24  
 import org.apache.tapestry.contrib.tree.model.TreeRowObject;
 25  
 
 26  
 import java.util.Iterator;
 27  
 import org.apache.tapestry.event.PageEvent;
 28  
 
 29  
 
 30  
 /**
 31  
  * @author tsveltin ?
 32  
  */
 33  
 public abstract class TreeDataView extends BaseComponent implements
 34  
         ITreeRowSource, PageDetachListener {
 35  0
     private TreeRowObject m_objTreeRowObject = null;
 36  
 
 37  0
     private int m_nTreeDeep = -1;
 38  
     
 39  
     public abstract TreeView getTreeView();
 40  
 
 41  
     public TreeDataView()
 42  
     {
 43  0
         super();
 44  0
         initialize();
 45  0
     }
 46  
 
 47  
     public void initialize()
 48  
     {
 49  0
         m_objTreeRowObject = null;
 50  0
         m_nTreeDeep = -1;
 51  0
     }
 52  
 
 53  
     public void pageDetached(PageEvent event) {
 54  0
         initialize();
 55  0
     }
 56  
 
 57  
     public void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
 58  
     {
 59  
         // render data
 60  0
         Object objExistedTreeModelSource = cycle.getAttribute(ITreeRowSource.TREE_ROW_SOURCE_ATTRIBUTE);
 61  0
         cycle.setAttribute(ITreeRowSource.TREE_ROW_SOURCE_ATTRIBUTE, this);
 62  
 
 63  0
         TreeView objView = getTreeView();
 64  0
         ITreeModel objTreeModel = objView.getTreeModel();
 65  0
         ITreeDataModel objTreeDataModel = objTreeModel.getTreeDataModel();
 66  
 
 67  0
         Object objRoot = objTreeDataModel.getRoot();
 68  0
         Object objRootUID = objTreeDataModel.getUniqueKey(objRoot, null);
 69  
         
 70  0
         if (getShowRootNode()) {
 71  
 
 72  0
             walkTree(objRoot, objRootUID, 0, objTreeModel, writer, cycle,
 73  
                      TreeRowObject.FIRST_LAST_ROW, new int[0], true);
 74  
         } else {
 75  
 
 76  0
             boolean bFirst = true;
 77  
 
 78  0
             int nChildenCount = objTreeModel.getTreeDataModel().getChildCount(objRoot);
 79  0
             int nRowPossiotionType = nChildenCount == 1 ? TreeRowObject.FIRST_LAST_ROW : TreeRowObject.FIRST_ROW;
 80  
 
 81  0
             for (Iterator iter = objTreeModel.getTreeDataModel().getChildren(objRoot); iter.hasNext();)
 82  
             {
 83  0
                 Object objChild = iter.next();
 84  0
                 Object objChildUID = objTreeModel.getTreeDataModel().getUniqueKey(objChild, objRoot);
 85  
 
 86  0
                 boolean bChildLast = !iter.hasNext();
 87  0
                 if (!bFirst) {
 88  
 
 89  0
                     if (bChildLast)
 90  0
                         nRowPossiotionType = TreeRowObject.LAST_ROW;
 91  
                     else
 92  0
                         nRowPossiotionType = TreeRowObject.MIDDLE_ROW;
 93  
                 }
 94  
 
 95  0
                 walkTree(objChild, objChildUID, 0, objTreeModel, writer, cycle,
 96  
                          nRowPossiotionType, new int[0], bChildLast);
 97  
 
 98  0
                 bFirst = false;
 99  0
             }
 100  
         }
 101  
 
 102  0
         cycle.setAttribute(ITreeRowSource.TREE_ROW_SOURCE_ATTRIBUTE, objExistedTreeModelSource);
 103  0
     }
 104  
 
 105  
     public void walkTree(Object objParent, Object objParentUID, int nDepth,
 106  
                          ITreeModel objTreeModel, IMarkupWriter writer, IRequestCycle cycle,
 107  
                          int nRowPossiotionType, int[] arrConnectImages, boolean bLast)
 108  
     {
 109  0
         int rowPositionType = nRowPossiotionType;
 110  0
         m_nTreeDeep = nDepth;
 111  0
         int nNumberOfChildren = objTreeModel.getTreeDataModel().getChildCount(
 112  
                 objParent);
 113  0
         boolean bLeaf = (nNumberOfChildren == 0) ? true : false;
 114  0
         m_objTreeRowObject = new TreeRowObject(objParent, objParentUID, nDepth,
 115  
                                                bLeaf, rowPositionType, arrConnectImages);
 116  
 
 117  0
         super.renderComponent(writer, cycle);
 118  
 
 119  0
         boolean bContain = objTreeModel.getTreeStateModel()
 120  
                 .isUniqueKeyExpanded(objParentUID);
 121  0
         if (bContain) {
 122  0
             int[] arrConnectImagesNew = new int[arrConnectImages.length + 1];
 123  0
             System.arraycopy(arrConnectImages, 0, arrConnectImagesNew, 0,
 124  
                              arrConnectImages.length);
 125  0
             if (bLast)
 126  0
                 arrConnectImagesNew[arrConnectImagesNew.length - 1] = TreeRowObject.EMPTY_CONN_IMG;
 127  0
             else arrConnectImagesNew[arrConnectImagesNew.length - 1] = TreeRowObject.LINE_CONN_IMG;
 128  
 
 129  0
             for (Iterator iter = objTreeModel.getTreeDataModel().getChildren(
 130  0
                     objParent); iter.hasNext();) {
 131  0
                 Object objChild = iter.next();
 132  0
                 Object objChildUID = objTreeModel.getTreeDataModel()
 133  
                         .getUniqueKey(objChild, objParentUID);
 134  0
                 boolean bChildLast = !iter.hasNext();
 135  0
                 if (bChildLast)
 136  0
                     rowPositionType = TreeRowObject.LAST_ROW;
 137  0
                 else rowPositionType = TreeRowObject.MIDDLE_ROW;
 138  0
                 walkTree(objChild, objChildUID, nDepth + 1, objTreeModel,
 139  
                          writer, cycle, rowPositionType, arrConnectImagesNew,
 140  
                          bChildLast);
 141  0
             }
 142  
         }
 143  0
     }
 144  
 
 145  
     public int getTreeDeep()
 146  
     {
 147  0
         return m_nTreeDeep;
 148  
     }
 149  
 
 150  
     /**
 151  
      * @see org.apache.tapestry.contrib.tree.model.ITreeRowSource#getTreeRow()
 152  
      */
 153  
     public TreeRowObject getTreeRow()
 154  
     {
 155  0
         return getTreeRowObject();
 156  
     }
 157  
 
 158  
     public TreeRowObject getTreeRowObject()
 159  
     {
 160  0
         return m_objTreeRowObject;
 161  
     }
 162  
 
 163  
     public void setTreeRowObject(TreeRowObject object)
 164  
     {
 165  0
         m_objTreeRowObject = object;
 166  0
     }
 167  
 
 168  
     public abstract boolean getShowRootNode();
 169  
 
 170  
 }