/**
 * Distributable under LGPL license.
 * See terms of license at gnu.org.
 *
 * Copyright (C)
 * <a href="http://www.inab.org">Spanish National Institute of Bioinformatics (INB)</a>
 * <a href="http://www.bsc.es">Barcelona Supercomputing Center (BSC)</a>
 * <a href="http://inb.bsc.es">Computational Node 6</a>
 */

package org.inb.biomoby.central.gui.renderer;

import java.awt.Color;
import javax.swing.JTable;
import javax.swing.table.TableModel;
import org.inb.biomoby.shared.registry.ObjectType;

/**
 * @author Dmitry Repchevsky
 */

public class PropertyNameTableCellRenderer extends PropertyTableCellRenderer
{
    public PropertyNameTableCellRenderer() {}

    @Override
    public AbstractTableCellRenderer getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
    {
        AbstractTableCellRenderer renderer = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);

        Color background = renderer.getBackground();
        Color errorColor = new Color(0xFF, background.getGreen() * 3 / 4, background.getBlue() * 3 / 4); // FFCCCC for white

        if (value != null && value instanceof ObjectType)
        {
            final String articleName = ((ObjectType)value).getArticleName();

            renderer.setText(articleName);

            if (articleName == null || articleName.isEmpty())
            {
                renderer.setText("");
                renderer.setBackground(errorColor);
            }
            else
            {
                renderer.setText(articleName);

                TableModel model = table.getModel();

                for (int i = 0, n = model.getRowCount(); i < n; i++)
                {
                    ObjectType objectType = (ObjectType)model.getValueAt(i, column);
                    if (i != row && articleName.equals(objectType.getArticleName()))
                    {
                        renderer.setBackground(errorColor);
                        break;
                    }
                }
            }
        }
        else
        {
            renderer.setText("");
            renderer.setBackground(errorColor);
        }

        return renderer;
    }
}
