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