package javacodebook.gui.tablerenderer;

import javax.swing.table.AbstractTableModel;

/**
 * @author benjamin_rusch
 *
 * Diese Klasse NameTableModel liefert die Inhalte für die JTable.
 */

public class NameTableModel extends AbstractTableModel {

	/** 
	 * Werte der Tabelle, sind hier hart codiert, könnten natürlich 
	 * dynamisch eingebunden werden. Die Werte sind nicht mehr nur vom Typ String,
	 * sondern auch vom Typ Boolean. Der DefaultRenderer wandelt Objekte vom Typ 
	 * Boolean automatisch in eine Checkbox Darstellung um. 
	 */
	private Object dataValues[][] =
		{
			{ "Andi Arbeit", "Soest", "Terlindenweg",Boolean.TRUE },
			{ "Manuel Einstellbar", "Karlsruhe", "Kaiserallee",Boolean.FALSE },
			{ "Sigrid Sörwis", "Berlin", "Winsstrasse",Boolean.FALSE },
			{ "Miss Mutig", "Stockholm", "Kungshamra",Boolean.FALSE }
		};
	
	/** 
	 * Überschriften der Tabelle, sind hier auch hart codiert.
	 */
	private String columnNames[] = { "Name", "Stadt", "Strasse", "Anwesend" };
	

	/**
	 * Die JTable braucht zur Darstellung Informationen über die Spaltenanzahl
	 */
	public int getRowCount() {
		return dataValues.length;
	}

	/**
	 * Die JTable braucht zur Darstellung Informationen über die Zeilennanzahl
	 */
	public int getColumnCount() {
		return columnNames.length;
	}

	/**
	 * Zur Darstellung der Überschriften benötigt die JTable die Namen.
	 */
	public String getColumnName(int column){
		return (String)columnNames[column];
	}
	
	public Class getColumnClass(int column){
		return dataValues[0][column].getClass();
	}
	
	/**
	 * Damit die Checkboxes auch editierbar werden, liefert isCellEditable()
	 * bei der 3. Spalte immer "true" zurück.
	 */
	public boolean isCellEditable( int row, int column) {
		if(column==3)
			return true;
		else
			return false;
	}

	/**
 	 * Die JTable braucht zur Darstellung die Daten an jeder Position
 	 */
	public Object getValueAt(int rowIndex, int columnIndex) {
		return dataValues[rowIndex][columnIndex];
	}
	
	/**
 	 * Wird nur benötigt, wenn die JTable editierbar ist, und dass ist 
 	 * sie ja in der vierten Spalte.
	 */
	public void setValueAt(Object value ,int rowIndex, int columnIndex) {
		dataValues[rowIndex][columnIndex]=value;
		fireTableCellUpdated(rowIndex,columnIndex);
	}

}
