content: package aima.gui.swing.framework.util;
  
  import java.util.ArrayList;
  
  import javax.swing.table.AbstractTableModel;
  
  /**
   * This class extends the {@link AbstractTableModel} for a one dimensional {@link ArrayList} of strings.
   * 
   * @author Arno von Borries
   * @author Jan Phillip Kretzschmar
   * @author Andreas Walscheid
   * 
   */
  public final class ListTableModel extends AbstractTableModel {
  	
  	private static final long serialVersionUID = 1L;
  
  	private final String columnName;
  	
  	private ArrayList<String> data = new ArrayList<String>();
  	
  	/**
  	 * @param columnName the name of the column in the table.
  	 */
  	public ListTableModel(String columnName) {
  		this.columnName = columnName;
  	}
  	
  	@Override
  	public int getColumnCount() { 
  		return 1;
  	}
  	
  	@Override
  	public int getRowCount() {
  		return data.size();
  	}
  	
  	@Override
  	public String getValueAt(int row, int col) {
  		return data.get(row);
  	}
  	
  	@Override
  	public String getColumnName(int column) {
  		return columnName;
  		
  	}
  	
  	/**
  	 * Adds a string to the table.
  	 * @param string the string to be added.
  	 */
  	public void add(String string) {
  		data.add(string);
  		this.fireTableRowsInserted(data.size()-1, data.size()-1);
  	}
  	
  	/**
  	 * Removes a value from the table at the given index.
  	 * @param index the index of the element to be removed.
  	 */
  	public void removeValueAt(int index) {
  		data.remove(index);
  	}
  	
  	/**
  	 * Adds a value to the table at a given index.
  	 * @param index the index where the element is to be put in.
  	 * @param element the element to add to the table.
  	 */
  	public void setValueAt(int index, String element) {
  		data.set(index, element);
  	}
  	
  	/**
  	 * Clears the table completely.
  	 */
  	public void clear() {
  		final int lastRow = data.size() - 1;
  		data.clear();
  		if (lastRow >= 0) this.fireTableRowsDeleted(0,lastRow);
  	}
  }
  