litesoft
@ 939
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 |
/* * Copyright 2008 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package com.google.gwt.gen2.table.client; import java.util.*; import com.google.gwt.gen2.table.client.TableModelHelper.*; /** * A {@link ClientTableModel} that uses a 2D {@link List} of Objects as its * source of data. */ public class ListTableModel extends MutableTableModel<List<Object>> { /** * An {@link Iterator} over the requested rows. */ private class RowIterator implements Iterator<List<Object>> { private int curRow; private int lastRow; public RowIterator( Request request ) { curRow = request.getStartRow() - 1; lastRow = Math.min( rowValues.size() - 1, curRow + request.getNumRows() ); } public boolean hasNext() { return curRow < lastRow; } public List<Object> next() { if ( !hasNext() ) { throw new NoSuchElementException(); } curRow++; return rowValues.get( new Integer( curRow ) ); } public void remove() { throw new UnsupportedOperationException(); } } /** * The values associated with each cell. */ private List<List<Object>> rowValues; /** * Construct a new {@link ListTableModel}. * * @param rows the data that this model feeds from */ public ListTableModel( List<List<Object>> rows ) { this.rowValues = rows; setRowCount( rows.size() ); } @Override public void requestRows( Request request, Callback<List<Object>> callback ) { final RowIterator it = new RowIterator( request ); Response<List<Object>> response = new Response<List<Object>>() { @Override public Iterator<List<Object>> getRowValues() { return it; } }; callback.onRowsReady( request, response ); } @Override protected boolean onRowInserted( int beforeRow ) { if ( beforeRow < rowValues.size() ) { rowValues.add( beforeRow, null ); } return true; } @Override protected boolean onRowRemoved( int row ) { if ( row < rowValues.size() ) { rowValues.remove( row ); } return true; } @Override protected boolean onSetRowValue( int row, List<Object> rowValue ) { // Expand to fit row for ( int i = rowValues.size(); i <= row; i++ ) { rowValues.add( null ); } // Set the new row value rowValues.set( row, rowValue ); return true; } /** * Get the value at a given cell. This is used for testing. * * @param rowIndex the index of the row * @param cellIndex the index of the cell * * @return the cell value, or null if it does not exist */ Object getCellValue( int rowIndex, int cellIndex ) { // Row does not exist if ( rowIndex >= rowValues.size() ) { return null; } // Get the cell value from the row List<Object> rowList = rowValues.get( rowIndex ); if ( rowList != null && rowList.size() > cellIndex ) { return rowList.get( cellIndex ); } return null; } } |