Subversion Repository Public Repository

litesoft

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;
    }
}

Commits for litesoft/trunk/Java/GWT/Client/src/com/google/gwt/gen2/table/client/ListTableModel.java

Diff revisions: vs.
Revision Author Commited Message
939 Diff Diff GeorgeS picture GeorgeS Mon 02 Jun, 2014 21:30:31 +0000

Extracting commonfoundation

475 Diff Diff GeorgeS picture GeorgeS Sat 03 Sep, 2011 13:54:51 +0000
282 GeorgeS picture GeorgeS Fri 17 Jun, 2011 13:54:39 +0000