Project: SPREAD
package gui;
 
import java.util.Vector; 
 
import javax.swing.table.AbstractTableModel; 
 
@SuppressWarnings("serial"
public class InteractiveTableModel extends AbstractTableModel { 
 
 public static final int LOCATION_INDEX = 0
 public static final int LONGITUDE_INDEX = 1
 public static final int LATITUDE_INDEX = 2
 public static final int HIDDEN_INDEX = 3
 
 private String[] columnNames; 
 private Vector<TableRecord> dataVector; 
 
 public InteractiveTableModel(String[] columnNames) { 
  this.columnNames = columnNames; 
  dataVector = new Vector<TableRecord>(); 
 
 
 public String getColumnName(int column) { 
  return columnNames[column]; 
 
 
 public String[] getColumn(int index) { 
 
  String[] column = new String[dataVector.size()]; 
 
  for (int i = 0; i < dataVector.size(); i++) { 
   column[i] = String.valueOf(getValueAt(i, index)); 
  
 
  return column; 
 
 
 public boolean isCellEditable(int row, int column) { 
  if (column == HIDDEN_INDEX) 
   return false
  else 
   return true
 
 
 public Class<?> getColumnClass(int column) { 
  switch (column) { 
  case LOCATION_INDEX: 
  case LONGITUDE_INDEX: 
  case LATITUDE_INDEX: 
   return String.class
  default
   return Object.class
  
 
 
 public Object getValueAt(int row, int column) { 
  TableRecord record = (TableRecord) dataVector.get(row); 
  switch (column) { 
  case LOCATION_INDEX: 
   return record.getLocation(); 
  case LONGITUDE_INDEX: 
   return record.getLongitude(); 
  case LATITUDE_INDEX: 
   return record.getLatitude(); 
  default
   return new Object(); 
  
 
 
 public void setValueAt(Object value, int row, int column) { 
  TableRecord record = (TableRecord) dataVector.get(row); 
  switch (column) { 
  case LOCATION_INDEX: 
   record.setLocation((String) value); 
   break
  case LONGITUDE_INDEX: 
   record.setLongitude((String) value); 
   break
  case LATITUDE_INDEX: 
   record.setLatitude((String) value); 
   break
  default
   System.out.println("invalid index"); 
  
  fireTableCellUpdated(row, column); 
 
 
 public void printTable() { 
  for (int i = 0; i < this.getRowCount(); i++) { 
   for (int j = 0; j < this.getColumnCount() - 1; j++) { 
    System.out.print(this.getValueAt(i, j) + "\t"); 
   
   System.out.println(); 
  
 
 
 public int getRowCount() { 
  return dataVector.size(); 
 
 
 public int getColumnCount() { 
  return columnNames.length; 
 
 
 // This appends a row 
 public void addRow(TableRecord row) { 
  dataVector.add(row); 
  this.fireTableDataChanged(); 
 
 
 // This inserts a row at specified index 
 public void insertRow(int index, TableRecord row) { 
  dataVector.add(index, row); 
  this.fireTableDataChanged(); 
 
 
 public void deleteRow(int row) { 
  dataVector.remove(row); 
  this.fireTableDataChanged(); 
 
 
 public void cleanTable() { 
  // dataVector.clear(); 
  for (int i = 0; i < dataVector.size(); i++) { 
   deleteRow(i); 
  
 
 
 public boolean hasEmptyRow() { 
 
  if (dataVector.size() == 0
   return false
  TableRecord tableRecord = (TableRecord) dataVector.get(dataVector 
    .size() - 1); 
  if (tableRecord.getLocation().trim().equals(""
    && tableRecord.getLongitude().trim().equals(""
    && tableRecord.getLatitude().trim().equals("")) { 
   return true
  else 
   return false
 
 
 public void addEmptyRow() { 
  dataVector.add(new TableRecord()); 
  fireTableRowsInserted(dataVector.size() - 1, dataVector.size() - 1); 
 
 
}