Coverage Report - org.kuali.student.common.ui.client.widgets.pagetable.PagingScrollTableBuilder
 
Classes in this File Line Coverage Branch Coverage Complexity
PagingScrollTableBuilder
0%
0/34
0%
0/6
1.5
 
 1  
 /**
 2  
  * Copyright 2010 The Kuali Foundation Licensed under the
 3  
  * Educational Community License, Version 2.0 (the "License"); you may
 4  
  * not use this file except in compliance with the License. You may
 5  
  * obtain a copy of the License at
 6  
  *
 7  
  * http://www.osedu.org/licenses/ECL-2.0
 8  
  *
 9  
  * Unless required by applicable law or agreed to in writing,
 10  
  * software distributed under the License is distributed on an "AS IS"
 11  
  * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
 12  
  * or implied. See the License for the specific language governing
 13  
  * permissions and limitations under the License.
 14  
  */
 15  
 
 16  
 package org.kuali.student.common.ui.client.widgets.pagetable;
 17  
 import java.util.ArrayList;
 18  
 import java.util.List;
 19  
 
 20  
 import org.kuali.student.core.dto.Idable;
 21  
 
 22  
 import com.google.gwt.gen2.table.client.AbstractColumnDefinition;
 23  
 import com.google.gwt.gen2.table.client.DefaultTableDefinition;
 24  
 import com.google.gwt.gen2.table.client.PagingScrollTable;
 25  
 import com.google.gwt.gen2.table.client.SelectionGrid.SelectionPolicy;
 26  
 import com.google.gwt.user.client.ui.HTML;
 27  
 /**
 28  
  * Constructing a PagingScrollTable from GWT's Incubator is complicated. This class uses the Builder
 29  
  * Pattern to simplify it. All public methods, except build() return a reference to the builder
 30  
  * so methods can be chained; these methods can be called in any order.
 31  
  * Calling build() at the end of the chain returns the constructed PagingScrollTable
 32  
  * {@code
 33  
  *   pagingScrollTable = new PagingScrollTableBuilder<Person>().tablePixelSize(220, 200).cacheTable(10, 10).
 34  
  *     columnDefinitions(createColumnDefinitions()).build(new PersonDTOs().getPersons());
 35  
  * }
 36  
  * Parameterized type is the Data Transfer Object type which contains a row's data
 37  
  *
 38  
  * Column Definitions map a table column to a dto's field and set column header
 39  
 
 40  
  *
 41  
  * PagingOptions are the paging widget. It is created after the builder creates the table and
 42  
  * may be positioned anywhere.
 43  
  * @see com.google.gwt.gen2.table.client.PagingOptions
 44  
  *
 45  
  * RowSelectionHandler is added after the builder creates the table.
 46  
  * @see com.google.gwt.gen2.table.event.client.RowSelectionHandler
 47  
  * @see com.google.gwt.gen2.table.event.client.FixedWidthGrid
 48  
  * @see org.kuali.student.common.ui.client.widgets.pagetable.TableSelectionToLabelHandler
 49  
  * @author Kuali Student Team (gstruthers@berkeley.edu)
 50  
  *
 51  
  */
 52  
 public class PagingScrollTableBuilder<RowType extends Idable> {
 53  
     private PagingScrollTable<RowType> pagingScrollTable;
 54  0
     private int tablePixelWidth = 0;
 55  0
     private int tablePixelHeight = 0;
 56  0
     private boolean isPagable = false;
 57  0
     private int numPageRows = 0;
 58  0
     private int numPages = 0;
 59  0
     private SelectionPolicy selectionPolicy = SelectionPolicy.MULTI_ROW;
 60  
     private List<AbstractColumnDefinition<RowType, ?>> columnDefs;
 61  0
     private List<Integer> columnPixelWidths = new ArrayList<Integer>();
 62  
 
 63  
 
 64  
     /**
 65  
      * This constructs the builder
 66  
      *
 67  
      */
 68  
     public PagingScrollTableBuilder() {
 69  0
         super();
 70  0
     }
 71  
 
 72  
 
 73  
     /**
 74  
      * This method defines the table's display size in pixels
 75  
      * Required
 76  
      *
 77  
      * @param tablePixelWidth
 78  
      * @param tablePixelHeight
 79  
      * @return builder
 80  
      */
 81  
     public PagingScrollTableBuilder<RowType> tablePixelSize(int tablePixelWidth,int tablePixelHeight) {
 82  0
         this.tablePixelWidth = tablePixelWidth;
 83  0
         this.tablePixelHeight = tablePixelHeight;
 84  0
         return this;
 85  
     }
 86  
 
 87  
     /**
 88  
      * This method defines the table's cache
 89  
      * Optional, use for paging table only. If not called, table displays all rows.
 90  
      *
 91  
      * @param numPageRows to display on a page
 92  
      * @param numPages in the table
 93  
      * @return builder
 94  
      */
 95  
     public PagingScrollTableBuilder<RowType> cacheTable(int numPageRows,int numPages) {
 96  0
         this.numPageRows = numPageRows;
 97  0
         this.numPages = numPages;
 98  0
         this.isPagable = true;
 99  0
         return this;
 100  
     }
 101  
 
 102  
     /**
 103  
      * This method adds the table's column definitions
 104  
      * Required
 105  
      *
 106  
      * @see com.google.gwt.gen2.table.client.AbstractColumnDefinition
 107  
      * Set a column definitions preferredWidth in pixels, and the builder will use that to
 108  
      * set the column width in the table. This works around setPreferredWidth not setting it itself.
 109  
      * ColumnDefinitions may be reused in other PagingScrollTables for the same dto. They are
 110  
      * passed to the builder as a
 111  
      * {@code List<AbstractColumnDefinition<RowType, ?>>}
 112  
      * Where rowType is the dto and '?' is the column type. The column definition's index in the list
 113  
      * is its column index in the table.
 114  
      *
 115  
      * @param columnDefs table display column index equals columnDefs index
 116  
      * @return builder
 117  
      */
 118  
     public PagingScrollTableBuilder<RowType> columnDefinitions(List<AbstractColumnDefinition<RowType, ?>> columnDefs) {
 119  0
         this.columnDefs = columnDefs;
 120  0
         return this;
 121  
     }
 122  
     
 123  
     /**
 124  
      * This method sets row selection policy. Get this setting from the search definition when it is available.
 125  
      * Default is MULTI_ROW
 126  
      * Optional
 127  
      * @since M5
 128  
      * @param selectionPolicy
 129  
      * @return builder
 130  
      */
 131  
     public PagingScrollTableBuilder<RowType> setSelectionPolicy(SelectionPolicy selectionPolicy){
 132  0
         this.selectionPolicy = selectionPolicy;
 133  0
         return this;
 134  
     }
 135  
     /**
 136  
      * This method builds the table model. Call at the end of the builder method chain.
 137  
      * Required
 138  
      *
 139  
      *
 140  
      * @return the built pagingScrollTable
 141  
      */
 142  
     @SuppressWarnings("unchecked")//columnDef cast
 143  
     public PagingScrollTable<RowType> build(GenericTableModel tableModel) {
 144  0
         DefaultTableDefinition<RowType> tableDefinition = new DefaultTableDefinition<RowType>();
 145  0
         if(columnDefs!=null){
 146  0
                 for (AbstractColumnDefinition columnDef: columnDefs) {
 147  0
                     columnPixelWidths.add(columnDef.getPreferredColumnWidth());
 148  0
                     tableDefinition.addColumnDefinition(columnDef);
 149  
                 }
 150  
         }
 151  
 
 152  0
         if(isPagable){
 153  0
             pagingScrollTable = new PagingScrollTable<RowType>(tableModel.createCachedTableModel(numPageRows,numPages),tableDefinition);
 154  0
             pagingScrollTable.setPageSize(numPageRows);
 155  
 
 156  
         }else {
 157  0
             pagingScrollTable = new PagingScrollTable<RowType>(tableModel,tableDefinition);
 158  0
             pagingScrollTable.setPageSize(tableModel.getRowCount());
 159  
         }
 160  0
         pagingScrollTable.setPixelSize(tablePixelWidth,tablePixelHeight);//FIXME workaround for incubator bug   [KSCOR-225] This table to be replaced in M6
 161  0
         pagingScrollTable.setEmptyTableWidget(new HTML("There is no data to display"));
 162  
 
 163  0
         pagingScrollTable.getDataTable().setSelectionPolicy(selectionPolicy);
 164  
 
 165  0
         return this.pagingScrollTable;
 166  
     }
 167  
 
 168  
 }