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
028package org.jfree.beans.editors;
029
030import javax.swing.table.AbstractTableModel;
031import javax.swing.table.TableModel;
032
033import org.jfree.data.general.DefaultPieDataset;
034
035/**
036 * A TableModel based on a DefaultPieDataset.  Using this to experiment with
037 * editing.
038 */
039public 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}