001    /* ======================================================
002     * Orson : a free chart beans library based on JFreeChart
003     * ======================================================
004     *
005     * (C) Copyright 2007, by Object Refinery Limited.
006     *
007     * Project Info:  not-yet-released
008     *
009     * This library is free software; you can redistribute it and/or modify it 
010     * under the terms of the GNU Lesser General Public License as published by 
011     * the Free Software Foundation; either version 2.1 of the License, or 
012     * (at your option) any later version.
013     *
014     * This library is distributed in the hope that it will be useful, but 
015     * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 
016     * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public 
017     * License for more details.
018     *
019     * You should have received a copy of the GNU Lesser General Public
020     * License along with this library; if not, write to the Free Software
021     * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, 
022     * USA.  
023     *
024     * [Java is a trademark or registered trademark of Sun Microsystems, Inc. 
025     * in the United States and other countries.]
026     */
027    
028    package org.jfree.beans.editors;
029    
030    import javax.swing.table.AbstractTableModel;
031    import javax.swing.table.TableModel;
032    
033    import org.jfree.data.general.DefaultPieDataset;
034    
035    /**
036     * A TableModel based on a DefaultPieDataset.  Using this to experiment with
037     * editing.
038     */
039    public class DefaultPieDatasetTableModel extends AbstractTableModel 
040            implements TableModel {
041    
042        private DefaultPieDataset dataset;
043        
044        private int insertionRow = -1;
045        
046        /** 
047         * If this is true, the model has a column zero containing a boolean flag
048         * indicating whether or not this is the current row for editing.
049         */
050        private boolean hasEditingColumn;
051        
052        /**
053         * Creates a new instance.
054         * 
055         * @param dataset  the underlying dataset.
056         */
057        public DefaultPieDatasetTableModel(DefaultPieDataset dataset) {
058            if (dataset == null) {
059                throw new IllegalArgumentException("Null 'dataset' argument.");
060            }
061            this.dataset = dataset;   
062        }
063    
064        public int getColumnCount() {
065            int result = 2;
066            if (this.hasEditingColumn) {
067                result++;
068            }
069            return result;
070        }
071    
072        /**
073         * Returns the number of rows in the table, which is equal to the number
074         * of items in the dataset, plus an editing row if it is being used.
075         * 
076         * @return The row count.
077         */
078        public int getRowCount() {
079            int result = this.dataset.getItemCount();
080            if (this.insertionRow >= 0) {
081                result++;
082            }
083            return result;
084        }
085    
086        /**
087         * Returns the item at the specified row and column.  We return a value 
088         * from the underlying dataset.
089         * 
090         * @param rowIndex  the row index.
091         * @param columnIndex  the column index.
092         * 
093         * @return The value.
094         */
095        public Object getValueAt(int rowIndex, int columnIndex) {
096            if (columnIndex == 0) {
097                return this.dataset.getKey(rowIndex);
098            }
099            else if (columnIndex == 1) {
100                return this.dataset.getValue(rowIndex);
101            }
102            else if (columnIndex == 2) {
103    //            if (this.hasEditingColumn) {
104    //                return this.dataset.getValue(rowIndex;)
105    //            }
106            }
107                return null;
108            
109        }
110        
111        public boolean isCellEditable(int rowIndex, int columnIndex) {
112            return true;
113        }
114        
115        public void setValueAt(Object value, int rowIndex, int columnIndex) {
116            if (columnIndex == 0) {
117                Comparable key;
118                if (!(value instanceof Comparable)) {
119                    key = value.toString();
120                }
121                else {
122                    key = (Comparable) value;
123                }
124                Comparable oldKey = this.dataset.getKey(rowIndex);
125                Number n = this.dataset.getValue(oldKey);
126                this.dataset.remove(oldKey);
127                this.dataset.setValue(key, n);
128                fireTableCellUpdated(rowIndex, columnIndex);
129            }
130    //        else if (columnIndex == 1) {
131    //            Comparable key = this.dataset.getKey(rowIndex);
132    //            Number n = null;
133    //            if (value instanceof Number) {
134    //                n = (Number) value;
135    //            }
136    //            this.dataset.setValue(key, n);
137    //            fireTableCellUpdated(rowIndex, columnIndex);
138    //        }
139        }
140        
141        public String getColumnName(int columnIndex) {
142            if (columnIndex == 0) {
143                return "Key";
144            }
145            else if (columnIndex == 1) {
146                return "Value";
147            }
148            else {
149                return null;
150            }
151        }
152    }