package GUI.TableModels;
import java.util.Vector;
import model.InRent;
import model.VideoUnit;
import model.events.EventManager;
import model.events.InRentCreatedEvent;
import model.events.InRentDeletedEvent;
import model.events.InRentDeletedUnitEvent;
import model.events.InRentEditedStateEvent;
import model.events.VideothekEvent;
import model.events.VideothekEventListener;
/**
* CustomerTableModel.java
*
* @author Christopher Bertels (chbertel@uos.de)
* @date 18.09.2008
*/
public class InRentTableModel extends NotEditableTableModel implements
VideothekEventListener {
private static final long serialVersionUID = 7354689970611412976L;
/**
* Konstruktor
* @param rowData Vektor mit Daten
* @param columnNames Vector mit Spaltennamen
*/
public InRentTableModel(Vector rowData, Vector<String> columnNames) {
super(rowData, columnNames);
registerAsEventListener();
}
/**
* Konstruktor
* @param columnNames Vector mit Spaltennamen
* @param rowCount #Zeilen
*/
public InRentTableModel(Vector<String> columnNames, int rowCount) {
super(columnNames, rowCount);
registerAsEventListener();
}
/**
* meldet sich für verschiedene Events
*/
private void registerAsEventListener() {
EventManager.registerEventListener(InRentCreatedEvent.class, this);
EventManager.registerEventListener(InRentEditedStateEvent.class, this);
EventManager.registerEventListener(InRentDeletedUnitEvent.class, this);
EventManager.registerEventListener(InRentDeletedEvent.class, this);
}
/*
* (non-Javadoc)
*
* @see GUI.TableModels.NotEditableTableModel#handleEvent(model.events.VideothekEvent)
*/
@Override
public void handleEvent(VideothekEvent event) {
if (event instanceof InRentCreatedEvent) {
insertRow(((InRentCreatedEvent) event).getInRent());
}
else if (event instanceof InRentEditedStateEvent) {
InRent inRent = ((InRentEditedStateEvent) event).getInRent();
editState(inRent);
}
else if (event instanceof InRentDeletedUnitEvent) {
VideoUnit videoUnit = ((InRentDeletedUnitEvent) event)
.getDeletedVideoUnit();
deleteRow(videoUnit);
}
else if (event instanceof InRentDeletedEvent) {
InRent inRent = ((InRentDeletedEvent) event).getInRent();
deleteRow(inRent);
}
}
/**
* fügt einen InRent in die Tabelle ein
* @param inRent
*/
public void insertRow(InRent inRent) {
Vector rowData;
for (VideoUnit videoUnit : inRent.getVideoUnits()) {
rowData = new Vector();
rowData.add(videoUnit.getID());
rowData.add(inRent.getCustomer().getID());
rowData.add(inRent.getID());
rowData.add(videoUnit.getVideo().getTitle());
rowData.add(inRent.getReturnDate());
rowData.add(inRent.isWarned() ? "Ja" : "Nein");
super.getDataVector().add(rowData);
}
fireTableDataChanged();
}
/**
* aktualisiert Status des übergebenen InRents
* @param inRent InRent
*/
public void editState(InRent inRent) {
Vector dataVector = getDataVector();
for (int rowIndex = 0; rowIndex < dataVector.size(); rowIndex++) {
Vector inRentVector = (Vector) dataVector.elementAt(rowIndex);
if (inRentVector.elementAt(2).equals(inRent.getID())) {
setValueAt((inRent.isWarned() ? "Ja" : "Nein"), rowIndex, 5);
fireTableDataChanged();
}
}
}
/**
* löscht Zeilen mit übergebenen InRent
* @param inRent InRent
*/
public void deleteRow(InRent inRent) {
Vector<Vector> data = getDataVector();
for (int index = 0; index < data.size(); index++) {
Vector row = data.get(index);
if ((Integer)row.get(2) == inRent.getID()) {
data.remove(index);
}
}
}
/**
* löscht Zeilen mit übergebenen VideoUnit
* @param videoUnit VideoUnit
*/
public void deleteRow(VideoUnit videoUnit) {
Vector dataVector = getDataVector();
for (int rowIndex = 0; rowIndex < dataVector.size(); rowIndex++) {
Vector rentValue = (Vector) dataVector.elementAt(rowIndex);
if (rentValue.elementAt(0).equals(videoUnit.getID())) {
removeRow(rowIndex);
fireTableDataChanged();
}
}
}
}