package javacodebook.gui.tablemodel;

import javax.swing.table.AbstractTableModel;
import java.util.*;

/**
 * @author benjamin_rusch
 *
 * Diese Klasse NameTableModel liefert die Inhalte für die JTable.
 * Durch die Trennung von Inhalt und Darstellung kann zum einen 
 * dieser Inhalt sehr einfach auch anderen Komponenten dienen, zum 
 * anderen erreicht man durch die Modularisierung eine elegante Trennung,
 * die gerade bei dynamischen Inhalten ein übersichtlicheres 
 * Design mit sich bringt.
 */


public class NameTableModel extends AbstractTableModel {


	/** 
	 * Werte der Tabelle, werden intern in einer ArrayList abgelegt.
	 */
	private ArrayList dataValues = new ArrayList();
	
	/** 
	 * Überschriften der Tabelle, sind hier auch hart codiert.
	 */
	private String columnNames[] = { "Name", "Stadt", "Strasse" };
	
	
	/**
	* Der interne Datenspeicher wird bereits mit einigen Einträgen gefüllt.
	*/
	public NameTableModel() {
		addTriple("Andi Arbeit", "Soest", "Terlindenweg");
		addTriple("Manuel Einstellbar", "Karlsruhe", "Kaiserallee");
		addTriple("Sigrid Sörwis", "Berlin", "Winsstrasse");
		addTriple("Miss Mutig", "Stockholm", "Kungshamra");
	}

	/**
	 * Die JTable braucht zur Darstellung Information über die Spaltenanzahl.
	 */
	public int getRowCount() {
		return dataValues.size();
	}

	/**
	 * Die JTable braucht zur Darstellung Information ü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];
	}

	/**
 	 * Die JTable braucht zur Darstellung die Daten an jeder Position
 	 */
	public Object getValueAt(int rowIndex, int columnIndex) {
		return ((String[])dataValues.get(rowIndex))[columnIndex];
	}
	
	/**
	* Neue Einträge in den internen Datenspeicher, und somit in die Tabelle 
	* können über diese Methode gemacht werden.
	*/
	public void addTriple(String name, String city, String street){
		String[] triple={name,city,street};
		dataValues.add(triple);
		fireTableDataChanged();
	}
}