package de.fitsample.timerecording.ui;

import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;

import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;

import de.fitsample.timerecording.TimeRecording;

/**
 * A extension of the JTable that displays a TimeRecording.
 * 
 * @author Ralf
 */
public class TimeRecordingTable extends JTable {

    /**
     * A Renderer for the
     * {@link TimeRecording#getWorkingTimeForDay(int) daily net time}that renders
     * colored red if the value &gt;
     * {@link TimeRecording#getDailyNetTimeLimit() daily net time limit}.
     * 
     * @author Ralf
     */
    private class DailyNetTimeRenderer extends DefaultTableCellRenderer {

        /**
         * @see javax.swing.table.TableCellRenderer#getTableCellRendererComponent(javax.swing.JTable, java.lang.Object, boolean, boolean, int, int)
         */
        public Component getTableCellRendererComponent(JTable table,
                Object value, boolean isSelected, boolean hasFocus, int row,
                int column) {
            Component component = super.getTableCellRendererComponent(table,
                    value, isSelected, hasFocus, row, column);
            if (column == TimeRecordingTableModel.WORKING_TIME_COLUMN) {
                if ((value instanceof Double)
                        && ((Double) value).doubleValue() > 10) {
                    setForeground(Color.RED);
                }
            }
            return component;
        }
    }

    /**
     * Creates a TimeRecordingTable.
     * 
     * @param timeRecording
     *            the TimeRecording to render.
     */
    public TimeRecordingTable(TimeRecording timeRecording) {
        setModel(new TimeRecordingTableModel(timeRecording));
        getColumnModel().getColumn(TimeRecordingTableModel.WORKING_TIME_COLUMN)
                .setCellRenderer(new DailyNetTimeRenderer());
        setPreferredScrollableViewportSize(new Dimension(200, 200));
    }

}
