package GUI.TableModels;
import java.util.Vector;
import javax.swing.table.DefaultTableModel;
import model.events.CustomerCreatedEvent;
import model.events.CustomerDeletedEvent;
import model.events.CustomerEditedEvent;
import model.events.EventManager;
import model.events.VideothekEvent;
import model.Customer;
import model.events.VideothekEventListener;
/**
* CustomerTableModel.java
* @author Christopher Bertels (chbertel@uos.de)
* @date 18.09.2008
*/
public class CustomerTableModel extends NotEditableTableModel implements VideothekEventListener {
private static final long serialVersionUID = 7354689970611412976L;
/**
* Konstruktor
* @param rowData Vector mit Daten
* @param columnNames Vector mit Spaltennamen
*/
public CustomerTableModel(Vector rowData, Vector<String> columnNames) {
super(rowData, columnNames);
registerAsEventListener();
}
/**
* Konstruktor
* @param columnNames Vector mit Spaltennamen
* @param rowCount #Zeilen
*/
public CustomerTableModel(Vector<String> columnNames, int rowCount) {
super(columnNames, rowCount);
registerAsEventListener();
}
/**
* meldet sich für bestimmte Events bei dem EventManager
*/
private void registerAsEventListener() {
EventManager.registerEventListener(CustomerCreatedEvent.class, this);
EventManager.registerEventListener(CustomerEditedEvent.class, this);
EventManager.registerEventListener(CustomerDeletedEvent.class, this);
}
/* (non-Javadoc)
* @see GUI.TableModels.NotEditableTableModel#handleEvent(model.events.VideothekEvent)
*/
@Override
public void handleEvent(VideothekEvent event) {
if (event instanceof CustomerCreatedEvent) {
insertRow(((CustomerCreatedEvent) event).getCustomer());
fireTableDataChanged();
} else if (event instanceof CustomerEditedEvent) {
Customer customer = ((CustomerEditedEvent) event).getCustomer();
int dataIndex = findByCustID(customer.getID());
if(dataIndex != -1) {
((Vector)getDataVector().get(dataIndex)).setElementAt(customer.getFirstAddressRow() + ", " + customer.getLastAddressRow(), 5);
fireTableDataChanged();
}
} else if (event instanceof CustomerDeletedEvent) {
Customer customer = ((CustomerDeletedEvent) event).getCustomer();
int dataindex = findByCustID(customer.getID());
if(dataindex != -1) {
getDataVector().remove(dataindex);
fireTableDataChanged();
}
}
}
/**
* Zeile mit Kunden einfügen
* @param newCustomer
*/
public void insertRow(Customer newCustomer) {
Vector rowData = new Vector();
rowData.add(newCustomer.getID());
rowData.add(newCustomer.getTitle());
rowData.add(newCustomer.getFirstName());
rowData.add(newCustomer.getLastName());
rowData.add(newCustomer.getBirthDate());
rowData.add(newCustomer.getFirstAddressRow() + ", " + newCustomer.getLastAddressRow());
rowData.add(newCustomer.getIdentificationNr());
super.getDataVector().add(rowData);
fireTableDataChanged();
}
/**
* liefert Zeilenindex für entsprechenden Kunden mit der übergebenen Nr fals gefunden, sonst -1
* @param custID KundenNr
* @return Zeilenindex
*/
public int findByCustID(Integer custID) {
int foundIndex = -1;
Vector<Vector> data = getDataVector();
for (int index = 0; index < data.size(); index++) {
Vector foundVector = data.get(index);
if (foundVector.get(0).equals(custID)) {
foundIndex = index;
index = data.size();
}
}
return foundIndex;
}
}