001    package videoautomat;
002    import javax.swing.table.TableCellRenderer;
003    
004    import util.swing.AbstractTableEntryDescriptor;
005    import data.NumberValue;
006    import data.QuoteValue;
007    import data.swing.CountingStockTableModel;
008    import data.swing.CurrencyRenderer;
009    
010    /**
011     * This class implements a TableEntryDescriptor used to display the {@link VideoShop#getVideoStock()} 
012     */
013    public class TEDVideoStock extends AbstractTableEntryDescriptor {
014    
015            /**
016             * @return the number of columns each record will consist of.
017             * 
018             * @see util.swing.TableEntryDescriptor#getColumnCount()
019             */
020            public int getColumnCount() {
021                    return 3;
022            }
023    
024            /**
025             * @return the text to be printed in the header of the given column.
026             * @param nIdx
027             *                  the index of the column for which to return the header. Indices run from 0 to
028             *                  {@link TEDVideoStock#getColumnCount()}- 1.
029             * @see util.swing.TableEntryDescriptor#getColumnName(int)
030             */
031            public String getColumnName(int nIdx) {
032                    String[] cNames = { "Name", "Price", "Count" };
033                    return cNames[nIdx];
034            }
035    
036            /**
037             * @return the class of objects that make up the values of cells of the given column. This will be used to
038             *              determine the cell renderer and editor unless you specify otherwise through
039             *              util.swing.AbstractTableEntryDescriptor#getCellEditor(int) and
040             *              util.swing.AbstractTableEntryDescriptor#getCellRenderer(int).
041             * @param nIdx
042             *                  the index of the column for which to return the header. Indices run from 0 to
043             *                  {@link TEDVideoStock#getColumnCount()}- 1.
044             * @see util.swing.TableEntryDescriptor#getColumnClass(int)
045             */
046            public Class getColumnClass(int nIdx) {
047                    Class[] cClasses = { String.class, NumberValue.class, Integer.class };
048                    return cClasses[nIdx];
049            }
050    
051            /**
052             * @return the value to be printed in the given column for the given record. The actual class must be a subclass of
053             *              what was returned by {@link TEDVideoStock#getColumnClass(int)}or that class itself.
054             * @param nIdx
055             *                  the index of the column for which to return the header. Indices run from 0 to
056             *                  {@link TEDVideoStock#getColumnCount()}- 1.
057             * @see util.swing.TableEntryDescriptor#getValueAt(java.lang.Object, int)
058             */
059            public Object getValueAt(Object oRecord, int nIdx) {
060                    CountingStockTableModel.Record r = (CountingStockTableModel.Record) oRecord;
061                    switch (nIdx) {
062                            case 0 :
063                                    return r.getDescriptor().getName();
064                            case 1 :
065                                    return ((QuoteValue) r.getDescriptor().getValue()).getOffer();
066                            case 2 :
067                                    return new Integer(r.getCount());
068                    }
069                    return null;
070            }
071    
072            /**
073             * @return the cell renderer to be used for cells in the given column.
074             * @param nIdx
075             *                  the index of the column for which to return the header. Indices run from 0 to
076             *                  {@link TEDVideoStock#getColumnCount()}- 1.
077             * @see util.swing.TableEntryDescriptor#getCellRenderer(int)
078             */
079            public TableCellRenderer getCellRenderer(int nIdx) {
080                    switch (nIdx) {
081                            case 1 :
082                                    return new CurrencyRenderer(VideoShop.getCurrency());
083                    }
084                    return super.getCellRenderer(nIdx);
085            }
086    }