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    
015    package org.apache.tapestry.contrib.table.model.simple;
016    
017    import java.io.Serializable;
018    import java.util.ArrayList;
019    import java.util.Arrays;
020    import java.util.Collection;
021    import java.util.Iterator;
022    import java.util.List;
023    
024    import org.apache.tapestry.contrib.table.model.CTableDataModelEvent;
025    import org.apache.tapestry.contrib.table.model.common.AbstractTableDataModel;
026    import 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     */
034    public 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    }