/*******************************************************************************
 * PathVisio, a tool for data visualization and analysis using biological pathways
 * Copyright 2006-2019 BiGCaT Bioinformatics
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License.  You may obtain a copy
 * of the License at
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
 * License for the specific language governing permissions and limitations under
 * the License.
 ******************************************************************************/
/**
 *
 */
package org.pathvisio.gexplugin;


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

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

import org.pathvisio.gexplugin.ImportInformation.ColumnType;

/**
 * Table model used in the column page of the Gex Import Wizard.
 * It displays a sample of the data to be imported, with the cells colored depending on
 * their type. e.g. an identifier is Green, a system code is Red and a header is yellow.
 */
class ColumnTableModel extends AbstractTableModel
{
	static private class HighlightedCellRenderer extends DefaultTableCellRenderer
	{
		ImportInformation info;

		public HighlightedCellRenderer(ImportInformation info)
	    {
	    	super();
	    	this.info = info;
	        setOpaque(true); //MUST do this for background to show up.
	    }

	    @Override
	    public Component getTableCellRendererComponent(JTable table, Object value,
                boolean isSelected, boolean hasFocus, int row, int column)
	    {
	    	setBackground(getTypeColor(row, column));
	    	return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
		}

	    @Override
	    public void setValue (Object value)
	    {
			setText (value.toString());
	    }

	    private static final Color LIGHT_RED = new Color (255, 192, 192);
	    private static final Color LIGHT_GREEN = new Color (192, 255, 192);
	    private static final Color LIGHT_YELLOW = new Color (255, 255, 192);
	    private static final Color LIGHT_MAGENTA = new Color (192, 255, 255);

		private Color getTypeColor (int row, int col)
		{
			Color result = Color.LIGHT_GRAY; // nothing
			if (info.isHeaderRow(row))
			{
				result = LIGHT_YELLOW;
			}
			else if (info.isDataRow(row))
			{
				ColumnType type = info.getColumnType(col);
				switch (type)
				{
				case COL_ID: result = LIGHT_GREEN; break;
				case COL_NUMBER: result = Color.WHITE; break;
				case COL_STRING: result = LIGHT_MAGENTA; break;
				case COL_SYSCODE: result = LIGHT_RED; break;
				}
			}
			return result;
		}
	}


	private ImportInformation info;

	ColumnTableModel (ImportInformation info)
	{
		this.info = info;
	}

	public void refresh()
	{
		fireTableStructureChanged();
	}

	public TableCellRenderer getTableCellRenderer()
	{
		return new HighlightedCellRenderer(info);
	}

	public int getColumnCount()
	{
		return info.getSampleMaxNumCols();
	}

	public int getRowCount()
	{
		return info.getSampleNumRows();
	}

	public Object getValueAt(int row, int col)
	{
		return info.getSampleData(row, col);
	}

	public java.awt.Component getTableCellRendererComponent(
			javax.swing.JTable arg0, Object arg1, boolean arg2, boolean arg3,
			int arg4, int arg5) {
		// TODO Auto-generated method stub
		return null;
	}
}
