Coverage Report - org.apache.tapestry.contrib.tree.components.table.TreeTableDataView
 
Classes in this File Line Coverage Branch Coverage Complexity
TreeTableDataView
0%
0/97
0%
0/30
1.65
 
 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.table;
 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.table.model.ITableColumn;
 21  
 import org.apache.tapestry.contrib.table.model.ITableModel;
 22  
 import org.apache.tapestry.contrib.table.model.ITableSessionStateManager;
 23  
 import org.apache.tapestry.contrib.table.model.simple.SimpleListTableDataModel;
 24  
 import org.apache.tapestry.contrib.table.model.simple.SimpleTableColumnModel;
 25  
 import org.apache.tapestry.contrib.table.model.simple.SimpleTableModel;
 26  
 import org.apache.tapestry.contrib.table.model.simple.SimpleTableSessionStateManager;
 27  
 import org.apache.tapestry.contrib.tree.model.*;
 28  
 import org.apache.tapestry.event.PageDetachListener;
 29  
 import org.apache.tapestry.event.PageEvent;
 30  
 
 31  
 import java.util.ArrayList;
 32  
 import java.util.Iterator;
 33  
 import java.util.List;
 34  
 
 35  
 /**
 36  
  */
 37  
 public abstract class TreeTableDataView extends BaseComponent implements
 38  
         ITreeRowSource, PageDetachListener
 39  
 {
 40  
 
 41  0
     private int m_nTreeDeep = -1;
 42  
 
 43  0
     private TreeRowObject m_objTreeRowObject = null;
 44  
 
 45  0
     private ArrayList m_arrAllExpandedNodes = null;
 46  
 
 47  
     public TreeTableDataView()
 48  
     {
 49  0
         super();
 50  0
         initialize();
 51  0
     }
 52  
 
 53  
     public void initialize()
 54  
     {
 55  0
         m_nTreeDeep = -1;
 56  
         // m_objTableModel = null;
 57  0
         m_objTreeRowObject = null;
 58  0
         m_arrAllExpandedNodes = null;
 59  0
     }
 60  
 
 61  
     /**
 62  
      * @see org.apache.tapestry.event.PageDetachListener#pageDetached(org.apache.tapestry.event.PageEvent)
 63  
      */
 64  
     public void pageDetached(PageEvent event)
 65  
     {
 66  0
         initialize();
 67  0
     }
 68  
 
 69  
     public abstract ITreeModelSource getTreeViewParameter();
 70  
 
 71  
     public ITreeModelSource getTreeModelSource()
 72  
     {
 73  0
         ITreeModelSource objSource = (ITreeModelSource) getPage()
 74  
                 .getRequestCycle().getAttribute(
 75  
                         ITreeModelSource.TREE_MODEL_SOURCE_ATTRIBUTE);
 76  
 
 77  0
         return objSource == null ? getTreeViewParameter() : objSource;
 78  
     }
 79  
 
 80  
     public List generateNodeList()
 81  
     {
 82  0
         if (m_arrAllExpandedNodes == null)
 83  
         {
 84  0
             ArrayList arrAllExpandedNodes = new ArrayList();
 85  
 
 86  
             // render data
 87  0
             ITreeModelSource objTreeModelSource = getTreeModelSource();
 88  0
             ITreeModel objTreeModel = objTreeModelSource.getTreeModel();
 89  0
             ITreeDataModel objTreeDataModel = objTreeModel.getTreeDataModel();
 90  
 
 91  0
             Object objRoot = objTreeDataModel.getRoot();
 92  0
             Object objRootUID = objTreeDataModel.getUniqueKey(objRoot, null);
 93  
             
 94  0
             if (getShowRootNode())
 95  
             {
 96  0
                 walkTree(arrAllExpandedNodes, objRoot, objRootUID, 0,
 97  
                         objTreeModel, TreeRowObject.FIRST_LAST_ROW, new int[0],
 98  
                         true);
 99  
             }
 100  
             else
 101  
             {
 102  0
                 int nChildenCount = objTreeModel.getTreeDataModel()
 103  
                         .getChildCount(objRoot);
 104  0
                 int nRowPossiotionType = nChildenCount == 1 ? TreeRowObject.FIRST_LAST_ROW
 105  
                         : TreeRowObject.FIRST_ROW;
 106  0
                 boolean bFirst = true;
 107  0
                 for(Iterator iter = objTreeModel.getTreeDataModel()
 108  0
                         .getChildren(objRoot); iter.hasNext();)
 109  
                 {
 110  0
                     Object objChild = iter.next();
 111  0
                     Object objChildUID = objTreeModel.getTreeDataModel()
 112  
                             .getUniqueKey(objChild, objRoot);
 113  0
                     boolean bChildLast = !iter.hasNext();
 114  0
                     if (!bFirst)
 115  
                     {
 116  0
                         if (bChildLast)
 117  0
                             nRowPossiotionType = TreeRowObject.LAST_ROW;
 118  0
                         else nRowPossiotionType = TreeRowObject.MIDDLE_ROW;
 119  
                     }
 120  0
                     walkTree(arrAllExpandedNodes, objChild, objChildUID, 0,
 121  
                             objTreeModel, nRowPossiotionType, new int[0],
 122  
                             bChildLast);
 123  0
                     bFirst = false;
 124  0
                 }
 125  
             }
 126  
 
 127  0
             m_arrAllExpandedNodes = arrAllExpandedNodes;
 128  
         }
 129  
 
 130  0
         return m_arrAllExpandedNodes;
 131  
     }
 132  
 
 133  
     public void walkTree(ArrayList arrAllExpandedNodes, Object objParent,
 134  
             Object objParentUID, int nDepth, ITreeModel objTreeModel,
 135  
             int nRowPossiotionType, int[] arrConnectImages, boolean bLast)
 136  
     {
 137  0
         int rowPositionType = nRowPossiotionType;
 138  0
         m_nTreeDeep = nDepth;
 139  0
         int nNumberOfChildren = objTreeModel.getTreeDataModel().getChildCount(
 140  
                 objParent);
 141  0
         boolean bLeaf = (nNumberOfChildren == 0) ? true : false;
 142  0
         TreeRowObject objTreeRowObject = new TreeRowObject(objParent,
 143  
                 objParentUID, nDepth, bLeaf, rowPositionType,
 144  
                 arrConnectImages);
 145  0
         arrAllExpandedNodes.add(objTreeRowObject);
 146  
 
 147  0
         boolean bContain = objTreeModel.getTreeStateModel()
 148  
                 .isUniqueKeyExpanded(objParentUID);
 149  0
         if (bContain)
 150  
         {
 151  0
             int[] arrConnectImagesNew = new int[arrConnectImages.length + 1];
 152  0
             System.arraycopy(arrConnectImages, 0, arrConnectImagesNew, 0,
 153  
                     arrConnectImages.length);
 154  0
             if (bLast)
 155  0
                 arrConnectImagesNew[arrConnectImagesNew.length - 1] = TreeRowObject.EMPTY_CONN_IMG;
 156  0
             else arrConnectImagesNew[arrConnectImagesNew.length - 1] = TreeRowObject.LINE_CONN_IMG;
 157  0
             Iterator colChildren = objTreeModel.getTreeDataModel().getChildren(
 158  
                     objParent);
 159  0
             for(Iterator iter = colChildren; iter.hasNext();)
 160  
             {
 161  0
                 Object objChild = iter.next();
 162  0
                 Object objChildUID = objTreeModel.getTreeDataModel()
 163  
                         .getUniqueKey(objChild, objParentUID);
 164  0
                 boolean bChildLast = !iter.hasNext();
 165  0
                 if (bChildLast)
 166  0
                     rowPositionType = TreeRowObject.LAST_ROW;
 167  0
                 else rowPositionType = TreeRowObject.MIDDLE_ROW;
 168  0
                 walkTree(arrAllExpandedNodes, objChild, objChildUID,
 169  
                         nDepth + 1, objTreeModel, rowPositionType,
 170  
                         arrConnectImagesNew, bChildLast);
 171  0
             }
 172  
         }
 173  0
     }
 174  
 
 175  
     /**
 176  
      * Returns the treeDeep.
 177  
      * 
 178  
      * @return int
 179  
      */
 180  
     public int getTreeDeep()
 181  
     {
 182  0
         return m_nTreeDeep;
 183  
     }
 184  
 
 185  
     /*
 186  
      * public ITableModel getTableModel() { if(m_objTableModel == null){
 187  
      * m_objTableModel = createTableModel(); } return m_objTableModel; }
 188  
      */
 189  
     public ITableModel getTableModel()
 190  
     {
 191  0
         return createTableModel();
 192  
     }
 193  
 
 194  
     private ITableModel createTableModel()
 195  
     {
 196  0
         List arrAllNodes = generateNodeList();
 197  0
         Object[] arrAllExpandedNodes = new Object[arrAllNodes.size()];
 198  0
         arrAllNodes.toArray(arrAllExpandedNodes);
 199  
 
 200  0
         SimpleTableModel objTableModel = new SimpleTableModel(
 201  
                 arrAllExpandedNodes, getTableColunms());
 202  0
         objTableModel.getPagingState().setPageSize(getEntriesPerTablePage());
 203  
 
 204  0
         return objTableModel;
 205  
     }
 206  
 
 207  
     public ITableColumn[] getTableColunms()
 208  
     {
 209  0
         ArrayList arrColumnsList = new ArrayList();
 210  0
         arrColumnsList.add(new TreeTableColumn("Name", false, null));
 211  
 
 212  0
         List arrTableColunms = getTableColumnsParameter();
 213  0
         if (arrTableColunms != null) arrColumnsList.addAll(arrTableColunms);
 214  
 
 215  0
         ITableColumn[] arrColumns = new ITableColumn[arrColumnsList.size()];
 216  0
         arrColumnsList.toArray(arrColumns);
 217  
 
 218  0
         return arrColumns;
 219  
     }
 220  
 
 221  
     public abstract List getTableColumnsParameter();
 222  
 
 223  
     public abstract int getEntriesPerTablePage();
 224  
 
 225  
     /**
 226  
      * @see org.apache.tapestry.contrib.tree.model.ITreeRowSource#getTreeRow()
 227  
      */
 228  
     public TreeRowObject getTreeRow()
 229  
     {
 230  0
         return getTreeRowObject();
 231  
     }
 232  
 
 233  
     public ITableSessionStateManager getTableSessionStateManager()
 234  
     {
 235  0
         SimpleListTableDataModel objDataModel = new SimpleListTableDataModel(
 236  
                 generateNodeList());
 237  0
         SimpleTableColumnModel objColumnModel = new SimpleTableColumnModel(
 238  
                 getTableColunms());
 239  0
         SimpleTableSessionStateManager objStateManager = new SimpleTableSessionStateManager(
 240  
                 objDataModel, objColumnModel);
 241  0
         return objStateManager;
 242  
         // return NullTableSessionStateManager.NULL_STATE_MANAGER;
 243  
     }
 244  
 
 245  
     /**
 246  
      * @see org.apache.tapestry.BaseComponent#renderComponent(org.apache.tapestry.IMarkupWriter,
 247  
      *      org.apache.tapestry.IRequestCycle)
 248  
      */
 249  
     protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
 250  
     {
 251  0
         Object objExistedTreeModelSource = cycle
 252  
                 .getAttribute(ITreeRowSource.TREE_ROW_SOURCE_ATTRIBUTE);
 253  0
         cycle.setAttribute(ITreeRowSource.TREE_ROW_SOURCE_ATTRIBUTE, this);
 254  
 
 255  0
         super.renderComponent(writer, cycle);
 256  
 
 257  0
         cycle.setAttribute(ITreeRowSource.TREE_ROW_SOURCE_ATTRIBUTE,
 258  
                 objExistedTreeModelSource);
 259  0
     }
 260  
 
 261  
     /**
 262  
      * @see org.apache.tapestry.AbstractComponent#renderBody(org.apache.tapestry.IMarkupWriter,
 263  
      *      org.apache.tapestry.IRequestCycle)
 264  
      */
 265  
     public void renderBody(IMarkupWriter writer, IRequestCycle cycle)
 266  
     {
 267  0
         Object objExistedTreeModelSource = cycle
 268  
                 .getAttribute(ITreeRowSource.TREE_ROW_SOURCE_ATTRIBUTE);
 269  0
         cycle.setAttribute(ITreeRowSource.TREE_ROW_SOURCE_ATTRIBUTE, this);
 270  
 
 271  0
         super.renderBody(writer, cycle);
 272  
 
 273  0
         cycle.setAttribute(ITreeRowSource.TREE_ROW_SOURCE_ATTRIBUTE,
 274  
                 objExistedTreeModelSource);
 275  0
     }
 276  
 
 277  
     public TreeRowObject getTreeRowObject()
 278  
     {
 279  0
         return m_objTreeRowObject;
 280  
     }
 281  
 
 282  
     public void setTreeRowObject(TreeRowObject object)
 283  
     {
 284  0
         m_objTreeRowObject = object;
 285  0
     }
 286  
 
 287  
     public abstract boolean getShowRootNode();
 288  
 }