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: 180   Methods: 12
NCLOC: 110   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
SimpleTableModel.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.table.model.simple;
 16   
 
 17   
 import java.util.Arrays;
 18   
 import java.util.Comparator;
 19   
 import java.util.Iterator;
 20   
 
 21   
 import org.apache.tapestry.contrib.table.model.CTableDataModelEvent;
 22   
 import org.apache.tapestry.contrib.table.model.ITableColumn;
 23   
 import org.apache.tapestry.contrib.table.model.ITableColumnModel;
 24   
 import org.apache.tapestry.contrib.table.model.ITableDataModel;
 25   
 import org.apache.tapestry.contrib.table.model.ITableDataModelListener;
 26   
 import org.apache.tapestry.contrib.table.model.ITableSortingState;
 27   
 import org.apache.tapestry.contrib.table.model.common.AbstractTableModel;
 28   
 import org.apache.tapestry.contrib.table.model.common.ArrayIterator;
 29   
 import org.apache.tapestry.contrib.table.model.common.ReverseComparator;
 30   
 
 31   
 /**
 32   
  * A simple generic table model implementation.
 33   
  *
 34   
  * @author mindbridge
 35   
  */
 36   
 public class SimpleTableModel extends AbstractTableModel implements ITableDataModelListener
 37   
 {
 38   
     private ITableDataModel m_objDataModel = null;
 39   
     private Object[] m_arrRows = null;
 40   
     private ITableColumnModel m_objColumnModel = null;
 41   
 
 42   
     private SimpleTableSortingState m_objLastSortingState;
 43   
 
 44  0
     public SimpleTableModel(Object[] arrData, ITableColumn[] arrColumns)
 45   
     {
 46  0
         this(new SimpleListTableDataModel(arrData), new SimpleTableColumnModel(arrColumns));
 47   
     }
 48   
 
 49  0
     public SimpleTableModel(Object[] arrData, ITableColumnModel objColumnModel)
 50   
     {
 51  0
         this(new SimpleListTableDataModel(arrData), objColumnModel);
 52   
     }
 53   
 
 54  0
     public SimpleTableModel(ITableDataModel objDataModel, ITableColumnModel objColumnModel)
 55   
     {
 56  0
         this(objDataModel, objColumnModel, new SimpleTableState());
 57   
     }
 58   
 
 59  0
     public SimpleTableModel(ITableDataModel objDataModel, ITableColumnModel objColumnModel, SimpleTableState objState)
 60   
     {
 61  0
         super(objState);
 62   
         
 63  0
         m_arrRows = null;
 64  0
         m_objColumnModel = objColumnModel;
 65  0
         m_objLastSortingState = new SimpleTableSortingState();
 66   
 
 67  0
         setDataModel(objDataModel);
 68   
     }
 69   
 
 70  0
     public ITableColumnModel getColumnModel()
 71   
     {
 72  0
         return m_objColumnModel;
 73   
     }
 74   
 
 75  0
     public Iterator getCurrentPageRows()
 76   
     {
 77  0
         sortRows();
 78   
 
 79  0
         int nPageSize = getPagingState().getPageSize();
 80  0
         if (nPageSize <= 0)
 81  0
             return new ArrayIterator(m_arrRows);
 82   
 
 83  0
         int nCurrentPage = getPagingState().getCurrentPage();
 84  0
         int nFrom = nCurrentPage * nPageSize;
 85  0
         int nTo = (nCurrentPage + 1) * nPageSize;
 86   
 
 87  0
         return new ArrayIterator(m_arrRows, nFrom, nTo);
 88   
     }
 89   
 
 90  0
     public int getRowCount()
 91   
     {
 92  0
         updateRows();
 93  0
         return m_arrRows.length;
 94   
     }
 95   
 
 96  0
     private void updateRows()
 97   
     {
 98   
         // If it is not null, then there is no need to extract the data
 99  0
         if (m_arrRows != null)
 100  0
             return;
 101   
 
 102   
         // Extract the data from the model
 103  0
         m_objLastSortingState = new SimpleTableSortingState();
 104   
 
 105  0
         int nRowCount = m_objDataModel.getRowCount();
 106  0
         Object[] arrRows = new Object[nRowCount];
 107   
 
 108  0
         int i = 0;
 109  0
         for (Iterator it = m_objDataModel.getRows(); it.hasNext();)
 110  0
             arrRows[i++] = it.next();
 111   
 
 112  0
         m_arrRows = arrRows;
 113   
     }
 114   
 
 115  0
     protected void sortRows()
 116   
     {
 117  0
         updateRows();
 118   
 
 119  0
         ITableSortingState objSortingState = getSortingState();
 120   
 
 121   
         // see if there is sorting required
 122  0
         String strSortColumn = objSortingState.getSortColumn();
 123  0
         if (strSortColumn == null)
 124  0
             return;
 125   
 
 126  0
         boolean bSortOrder = objSortingState.getSortOrder();
 127   
 
 128   
         // See if the table is already sorted this way. If so, return.
 129  0
         if (strSortColumn.equals(m_objLastSortingState.getSortColumn())
 130   
             && m_objLastSortingState.getSortOrder() == bSortOrder)
 131  0
             return;
 132   
 
 133  0
         ITableColumn objColumn = getColumnModel().getColumn(strSortColumn);
 134  0
         if (objColumn == null || !objColumn.getSortable())
 135  0
             return;
 136   
 
 137  0
         Comparator objCmp = objColumn.getComparator();
 138  0
         if (objCmp == null)
 139  0
             return;
 140   
 
 141   
         // Okay, we have everything in place. Sort the rows.
 142  0
         if (bSortOrder == ITableSortingState.SORT_DESCENDING)
 143  0
             objCmp = new ReverseComparator(objCmp);
 144   
 
 145  0
         Arrays.sort(m_arrRows, objCmp);
 146   
 
 147  0
         m_objLastSortingState.setSortColumn(strSortColumn, bSortOrder);
 148   
     }
 149   
 
 150  0
     public void tableDataChanged(CTableDataModelEvent objEvent)
 151   
     {
 152  0
         m_arrRows = null;
 153   
     }
 154   
 
 155   
     /**
 156   
      * Returns the dataModel.
 157   
      * @return ITableDataModel
 158   
      */
 159  0
     public ITableDataModel getDataModel()
 160   
     {
 161  0
         return m_objDataModel;
 162   
     }
 163   
 
 164   
     /**
 165   
      * Sets the dataModel.
 166   
      * @param dataModel The dataModel to set
 167   
      */
 168  0
     public void setDataModel(ITableDataModel dataModel)
 169   
     {
 170  0
         if (m_objDataModel != null)
 171  0
             m_objDataModel.removeTableDataModelListener(this);
 172   
             
 173  0
         m_objDataModel = dataModel;
 174  0
         m_objDataModel.addTableDataModelListener(this);
 175   
         
 176  0
         m_arrRows = null;
 177   
     }
 178   
 
 179   
 }
 180