001// Copyright 2004, 2005 The Apache Software Foundation
002//
003// Licensed under the Apache License, Version 2.0 (the "License");
004// you may not use this file except in compliance with the License.
005// You may obtain a copy of the License at
006//
007//     http://www.apache.org/licenses/LICENSE-2.0
008//
009// Unless required by applicable law or agreed to in writing, software
010// distributed under the License is distributed on an "AS IS" BASIS,
011// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
012// See the License for the specific language governing permissions and
013// limitations under the License.
014
015package org.apache.tapestry.contrib.table.model.simple;
016
017import java.io.Serializable;
018import java.util.ArrayList;
019import java.util.Arrays;
020import java.util.Collection;
021import java.util.Iterator;
022import java.util.List;
023
024import org.apache.tapestry.contrib.table.model.CTableDataModelEvent;
025import org.apache.tapestry.contrib.table.model.common.AbstractTableDataModel;
026import org.apache.tapestry.contrib.table.model.common.ArrayIterator;
027
028/**
029 * A minimal list implementation of the 
030 * {@link org.apache.tapestry.contrib.table.model.ITableDataModel} interface
031 * 
032 * @author mindbridge
033 */
034public class SimpleListTableDataModel extends AbstractTableDataModel implements Serializable
035{
036        private static final long serialVersionUID = 1L;
037        
038    private List m_arrRows;
039
040    public SimpleListTableDataModel(Object[] arrRows)
041    {
042        this(Arrays.asList(arrRows));
043    }
044
045    public SimpleListTableDataModel(List arrRows)
046    {
047        m_arrRows = arrRows;
048    }
049
050    public SimpleListTableDataModel(Collection arrRows)
051    {
052        m_arrRows = new ArrayList(arrRows);
053    }
054
055    public SimpleListTableDataModel(Iterator objRows)
056    {
057        m_arrRows = new ArrayList();
058        addAll(m_arrRows, objRows);
059    }
060
061    private void addAll(List arrRows, Iterator objRows)
062    {
063        while (objRows.hasNext())
064            arrRows.add(objRows.next());
065    }
066
067    /**
068     * @see org.apache.tapestry.contrib.table.model.ITableDataModel#getRowCount()
069     */
070    public int getRowCount()
071    {
072        return m_arrRows.size();
073    }
074
075    /**
076     * Returns the row element at the given position
077     * @param nRow the index of the element to return
078     */
079    public Object getRow(int nRow)
080    {
081        if (nRow < 0 || nRow >= m_arrRows.size())
082        {
083            // error message
084            return null;
085        }
086        return m_arrRows.get(nRow);
087    }
088
089    /**
090     * Returns an Iterator with the elements from the given range
091     * @param nFrom the start of the range (inclusive)
092     * @param nTo the stop of the range (exclusive)
093     */
094    public Iterator getRows(int nFrom, int nTo)
095    {
096        return new ArrayIterator(m_arrRows.toArray(), nFrom, nTo);
097    }
098
099    /**
100     * @see org.apache.tapestry.contrib.table.model.ITableDataModel#getRows()
101     */
102    public Iterator getRows()
103    {
104        return m_arrRows.iterator();
105    }
106
107    /**
108     * Method addRow.
109     * Adds a row object to the model at its end
110     * @param objRow the row object to add
111     */
112    public void addRow(Object objRow)
113    {
114        m_arrRows.add(objRow);
115
116        CTableDataModelEvent objEvent = new CTableDataModelEvent();
117        fireTableDataModelEvent(objEvent);
118    }
119
120    public void addRows(Collection arrRows)
121    {
122        m_arrRows.addAll(arrRows);
123
124        CTableDataModelEvent objEvent = new CTableDataModelEvent();
125        fireTableDataModelEvent(objEvent);
126    }
127
128    /**
129     * Method removeRow.
130     * Removes a row object from the model
131     * @param objRow the row object to remove
132     */
133    public void removeRow(Object objRow)
134    {
135        m_arrRows.remove(objRow);
136
137        CTableDataModelEvent objEvent = new CTableDataModelEvent();
138        fireTableDataModelEvent(objEvent);
139    }
140
141    public void removeRows(Collection arrRows)
142    {
143        m_arrRows.removeAll(arrRows);
144
145        CTableDataModelEvent objEvent = new CTableDataModelEvent();
146        fireTableDataModelEvent(objEvent);
147    }
148
149}