001    package data.swing;
002    
003    import data.*;
004    
005    import javax.swing.table.*;
006    
007    /**
008     * A {@link util.swing.TableEntryDescriptor} that can be used to model MoneyBags with a
009     * {@link CountingStockTableModel}.
010     *
011     * <p>Essentially this is a {@link DefaultCountingStockItemTED} that renders its value column using a
012     * Currency to format the values.</p>
013     *
014     * @author Steffen Zschaler
015     * @version 2.0 23/08/1999
016     * @since v2.0
017     */
018    public class DefaultMoneyBagItemTED extends DefaultCountingStockItemTED {
019    
020        /**
021             * ID for serialization.
022             */
023            private static final long serialVersionUID = 5111628598155861152L;
024    
025            /**
026         * The Currency used for formatting.
027         *
028         * @serial
029         */
030        private Currency m_cCurrency;
031    
032        /**
033         * The cell renderer that renders the value column.
034         */
035        private transient TableCellRenderer m_tcrValueRenderer;
036    
037        /**
038         * Internal helper function that gets (and if necessary creates) the cell renderer for the value column.
039         *
040         * @override Never
041         */
042        protected TableCellRenderer getValueRenderer() {
043            if (m_tcrValueRenderer == null) {
044                m_tcrValueRenderer = new CurrencyRenderer(m_cCurrency);
045            }
046    
047            return m_tcrValueRenderer;
048        }
049    
050        /**
051         * Create a new DefaultMoneyBagItemTED.
052         *
053         * @param c the Currency used for formatting. Must be the same as the Currency of the MoneyBag modelled by
054         * the associated {@link CountingStockTableModel}.
055         */
056        public DefaultMoneyBagItemTED(Currency c) {
057            super();
058    
059            m_cCurrency = c;
060        }
061    
062        /**
063         * @return <code>{@link NumberValue}.class</code> for the second column, otherwise the superclass' return
064         * values.
065         * @override Sometimes
066         */
067        public Class<?> getColumnClass(int nIdx) {
068            if (nIdx == 1) {
069                return NumberValue.class;
070            } else {
071                return super.getColumnClass(nIdx);
072            }
073        }
074    
075        /**
076         * @return <code>null</code> for the first, {@link #getValueRenderer} for the second column.
077         * @override Sometimes
078         */
079        public TableCellRenderer getCellRenderer(int nIdx) {
080            if (nIdx == 1) {
081                return getValueRenderer();
082            } else {
083                return super.getCellRenderer(nIdx);
084            }
085        }
086    }