001    /*
002     * Copyright 2002-2004 the original author or authors.
003     * 
004     * Licensed under the Apache License, Version 2.0 (the "License"); you may not
005     * use this file except in compliance with the License. You may obtain a copy of
006     * the License at
007     * 
008     * http://www.apache.org/licenses/LICENSE-2.0
009     * 
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
012     * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
013     * License for the specific language governing permissions and limitations under
014     * the License.
015     */
016    package org.springframework.richclient.table;
017    
018    import java.util.List;
019    
020    import javax.swing.table.TableModel;
021    
022    /**
023     * A table model whose contents can change.
024     * 
025     * @author Keith Donald
026     */
027    public interface MutableTableModel extends TableModel {
028        
029        /**
030         * Adds the given row to the end of the list of existing rows in the table model. All 
031         * registered table model listeners will be notified of the additional row.
032         * 
033         * @param row The row to be added. Must not be null.
034         * 
035         * @throws IllegalArgumentException if {@code row} is null.
036         */
037        public void addRow(Object row);
038    
039        /**
040         * Adds the given rows to the end of the list of existing rows in the table model. All 
041         * registered table model listeners will be notified of the additional rows.
042         *
043         * @param rows The rows to be added. May be empty but must not be null.
044         * 
045         * @throws IllegalArgumentException if {@code rows} is null.
046         */
047        public void addRows(List rows);
048    
049        /**
050         * Removes from the table model the row at the given position in the list of rows. All 
051         * registered table model listeners will be notified of the removal of the row. 
052         *
053         * @param index The zero-based position of the row to be removed.
054         * 
055         * @throws IndexOutOfBoundsException if {@code index} is not within the bounds of the 
056         * model's collection of rows.
057         */
058        public void remove(int index);
059    
060        /**
061         * Removes all of the rows from {@code firstIndex} to {@code lastIndex} inclusive. All 
062         * registered table model listeners will be notified of the removal of the rows.
063         *
064         * @param firstIndex The zero-based position of the first row to be removed.
065         * @param lastIndex The zero-based position of the last row to be removed.
066         * 
067         * @throws IllegalArgumentException if {@code lastIndex} is less than {@code firstIndex}.
068         * @throws IndexOutOfBoundsException if either argument is outside the bounds of the 
069         * number of rows in the model.
070         */
071        public void remove(int firstIndex, int lastIndex);
072    
073        /**
074         * Removes the rows at each of the given positions. All registered table model listeners 
075         * will be notified of the removal of the rows.
076         *
077         * @param indexes The array of zero-based indexes of the rows to be removed. May be empty
078         * but must not be null.
079         * 
080         * @throws IllegalArgumentException if {@code indexes} is null.
081         * @throws IndexOutOfBoundsException if any of the elements in the array are not within the
082         * bounds of the model's collection of rows.
083         */
084        public void remove(int[] indexes);
085    
086        /**
087         * Removes all rows from the table model. All registered table model listeners will be 
088         * notified of the removal of the rows.
089         */
090        public void clear();
091        
092    }