001    package ui.model;
002    
003    import util.*;
004    import ui.renderer.*;
005    
006    import java.util.*;
007    import javax.swing.*;
008    import javax.swing.table.*;
009    
010    /** A kind of TableModel which display the quasar spectra from an
011     * emission line list
012     */
013    public class EmissionLineTableModel extends AbstractTableModel {
014    
015        List lines;
016        String[] columnNames = {"wavelength", "name", "z(em)", "spectra", "emission lines"};
017        public static final int WAVELENGTH = 0;
018        public static final int NAME = 1;
019        public static final int Z = 2;
020        public static final int SPECTRA = 3;
021        public static final int EMISSION_LINES = 4;
022    
023        /** Initialize the TableModel with Line data
024         */
025        public EmissionLineTableModel(List someLines) {
026            super();
027            lines = someLines;
028        }
029    
030        public int getRowCount() {
031            return lines.size();
032        }
033    
034        public int getColumnCount() {
035              return columnNames.length;
036        }
037    
038        public Class getColumnClass(int columnIndex) {
039            if (columnIndex == SPECTRA)
040                return Star.class;
041            else
042                return super.getColumnClass(columnIndex);
043        }
044    
045        // TODO: create graphical representation of quasar emission lines
046    
047        public Object getValueAt(int row, int column) {
048            Line line = (Line) lines.get(row);
049            Quasar quasar = (Quasar) line.getSource();
050            switch (column) {
051                case WAVELENGTH: return new Double(line.getWavelength());
052                case NAME:       return quasar.name;
053                case Z:          return quasar.zem;  // TODO: return new Double(quasar.getZem()) for sorting
054                case SPECTRA:    return (Star) quasar;
055                case EMISSION_LINES:  return quasar.getEmissionLines();
056                default: return null;
057          }
058        }
059    
060        public String getColumnName(int column) {
061            return columnNames[column];
062        }
063    
064        // For testing the table model
065        public static void main(String[] args) {
066            JFrame frame = new JFrame("Quasar Emission Lines");
067            java.awt.Container contentPane = frame.getContentPane();
068            List emissionLines = null;
069            try {
070                emissionLines = EmissionLines.getEmissionLines();
071            } catch (Exception e) {
072                System.out.println("Can't read emission lines from file : " + e);
073                System.exit(0);
074            }
075            TableModel model = new EmissionLineTableModel(emissionLines);
076            JTable table = new JTable(model);
077            table.setDefaultRenderer(Star.class, new StarRenderer());
078            contentPane.add(new JScrollPane(table));
079    
080            frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
081            frame.pack();
082            frame.setVisible(true);
083        }
084    }