/*******************************************************************************
 * Copyright (c) 2017 Pegasystems Inc. All rights reserved.
 *
 * Contributors:
 *     Manu Varghese
 *******************************************************************************/

package com.pega.gcs.tracerviewer;

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

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

import com.pega.gcs.fringecommon.guiutilities.MyColor;
import com.pega.gcs.tracerviewer.model.TraceEvent;

public class TraceTreeTableCellRenderer extends DefaultTableCellRenderer {

    private static final long serialVersionUID = -5768343434033636406L;

    /*
     * (non-Javadoc)
     * 
     * @see
     * javax.swing.table.DefaultTableCellRenderer#getTableCellRendererComponent
     * (javax.swing.JTable, java.lang.Object, boolean, boolean, int, int)
     */
    @Override
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {

        TraceEventTreeNode traceEventTreeNode = null;
        TraceEvent te = null;

        if (value instanceof TraceEventTreeNode) {
            traceEventTreeNode = (TraceEventTreeNode) value;
            te = (TraceEvent) traceEventTreeNode.getUserObject();
        }

        if (te != null) {

            String text = traceEventTreeNode.getNodeValue(column);

            super.getTableCellRendererComponent(table, text, isSelected, hasFocus, row, column);

            if (!table.isRowSelected(row)) {

                boolean searchFound = traceEventTreeNode.isSearchFound();
                boolean leafSearchFound = te.isSearchFound();

                if (leafSearchFound) {
                    setBackground(MyColor.LIGHT_YELLOW);
                } else if (searchFound) {
                    setBackground(MyColor.LIGHTEST_YELLOW);
                } else {
                    setBackground(te.getColumnBackground(column));
                }
            }

            setBorder(new EmptyBorder(1, 3, 1, 1));

            setToolTipText(text);

        } else {
            setBackground(Color.WHITE);
            super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
        }

        return this;
    }

}