001/*
002 * Copyright (c) 2005 Jens Schou, Staffan Gustafsson, Bjorn Lanneskog, 
003 * Einar Pehrson and Sebastian Kekkonen
004 *
005 * This file is part of
006 * CleanSheets Extension for Test Cases
007 *
008 * CleanSheets Extension for Test Cases is free software; you can
009 * redistribute it and/or modify it under the terms of the GNU General Public
010 * License as published by the Free Software Foundation; either version 2 of
011 * the License, or (at your option) any later version.
012 *
013 * CleanSheets Extension for Test Cases is distributed in the hope that
014 * it will be useful, but WITHOUT ANY WARRANTY; without even the implied
015 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
016 * See the GNU General Public License for more details.
017 *
018 * You should have received a copy of the GNU General Public License
019 * along with CleanSheets Extension for Test Cases; if not, write to the
020 * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
021 * Boston, MA  02111-1307  USA
022 */
023package csheets.ext.test.ui;
024
025import java.awt.Color;
026import java.awt.Component;
027
028import javax.swing.JTable;
029import javax.swing.table.DefaultTableCellRenderer;
030
031import csheets.core.Value;
032import csheets.ext.assertion.AssertableCell;
033import csheets.ext.assertion.Assertion;
034import csheets.ext.assertion.AssertionExtension;
035import csheets.ext.test.TestCaseParam;
036import csheets.ext.test.TestableCell;
037
038/**
039 * A table cell renderer for test case parameters.
040 * @author Malin Johansson
041 * @author Sofia Nilsson
042 * @author Einar Pehrson
043 * @author Bjorn Lanneskog
044 */
045@SuppressWarnings("serial")
046public class TestCaseParamRenderer extends DefaultTableCellRenderer {
047
048        /**
049         * Creates a new test case parameter renderer.
050         */
051        public TestCaseParamRenderer() {}
052
053        public Component getTableCellRendererComponent(JTable table, Object value,
054                        boolean isSelected, boolean hasFocus, int row, int column) {
055                
056                if (value instanceof TestCaseParam) {
057                        // Get param, and cell at column 0 in this row
058                        TestCaseParam param = (TestCaseParam)value;
059                        TestableCell cell = (TestableCell)table.getValueAt(row, 0);
060        
061                        if (param != null && param.getValue().getType() == Value.Type.NUMERIC) {
062                                AssertableCell assertableCell
063                                        = (AssertableCell)cell.getExtension(AssertionExtension.NAME);
064                                if (assertableCell != null) {
065                                        // Assert value against cells assertion
066                                        Assertion.Result result = assertableCell.assertAny(param.getValue());
067                                        // check if user entered
068                                        if(param.isUserEntered()) {
069                                                // set red if testcaseparam breaks against assertion
070                                                if (result == Assertion.Result.NAN || result == Assertion.Result.FAILED) {
071                                                        setForeground(Color.RED);
072                                                        setToolTipText("Entered test case param violates assertion");
073                                                }
074                                                // set black if testcaseparam is within assertion
075                                                else {
076                                                        setForeground(Color.BLACK);
077                                                        setToolTipText(null);
078                                                }
079                                        }
080                                        // check if derived or system generated
081                                        else if(param.isDerived() || param.isSystemGenerated()) {
082                                                // set light red if testcaseparam breaks against assertion
083                                                if (result == Assertion.Result.NAN || result == Assertion.Result.FAILED) {
084                                                        setForeground(new java.awt.Color(246, 126, 126));
085                                                        setToolTipText("Derived test case param violates assertion");
086                                                }
087                                                // set light gray if testcaseparam is within assertion
088                                                else {
089                                                        setForeground(java.awt.Color.LIGHT_GRAY);
090                                                        setToolTipText(null);
091                                                }
092                                        }
093                                }
094                        }
095                }
096                        
097                // Render component
098                return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
099        }
100}