package GUI.TableModels; import java.util.Vector; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.table.DefaultTableModel; import main.error.VideothekException; import model.PriceCategory; import model.Video; import model.data.exceptions.RecordNotFoundException; import model.events.EventManager; import model.events.VideoCreatedEvent; import model.events.VideoDeletedEvent; import model.events.VideoEditedEvent; import model.events.VideoEvent; import model.events.VideothekEvent; import model.events.VideothekEventListener; /** * CustomerTableModel.java * @author Christopher Bertels (chbertel@uos.de) * @date 18.09.2008 */ public class VideoTableModel extends NotEditableTableModel implements VideothekEventListener { private static final long serialVersionUID = 7354689970611412976L; /** * Konstruktor * @param rowData Vector mit Daten * @param columnNames Vector mit Spaltennamen */ public VideoTableModel(Vector rowData, Vector columnNames) { super(rowData, columnNames); registerAsEventListener(); } /** * Konstruktor * @param videeoColumnNames Vector mit Spaltennamen * @param rowCount #Zeilen */ public VideoTableModel(Vector<String> videeoColumnNames, int rowCount) { super(videeoColumnNames, rowCount); registerAsEventListener(); } /** * registriert sich für passende Events bei EventManager */ private void registerAsEventListener() { EventManager.registerEventListener(VideoCreatedEvent.class, this); EventManager.registerEventListener(VideoEditedEvent.class, this); EventManager.registerEventListener(VideoDeletedEvent.class, this); } /* (non-Javadoc) * @see GUI.TableModels.NotEditableTableModel#handleEvent(model.events.VideothekEvent) */ @Override public void handleEvent(VideothekEvent event) { if (event instanceof VideoCreatedEvent) { insertRow(((VideoCreatedEvent) event).getVideo()); } else if (event instanceof VideoEditedEvent) { Video video = ((VideoEditedEvent) event).getVideo(); int dataIndex = findByVideoID(video.getID()); if(dataIndex != -1) { try { ((Vector) getDataVector().get(dataIndex)).setElementAt(video.getPriceCategory(), 2); fireTableDataChanged(); } catch (RecordNotFoundException ex) { System.out.println(ex); } } } else if (event instanceof VideoDeletedEvent) { Video video = ((VideoDeletedEvent) event).getVideo(); int dataIndex = findByVideoID(video.getID()); if(dataIndex != -1) { getDataVector().remove(dataIndex); fireTableDataChanged(); } } } /** * fügt ein VideoUnit ein * @param newVideo */ public void insertRow(Video newVideo) { Vector rowData = new Vector(); try { rowData.add(newVideo.getID()); rowData.add(newVideo.getTitle()); rowData.add(newVideo.getPriceCategory().getName()); rowData.add(newVideo.getRatedAge()); rowData.add(newVideo.getReleaseYear()); super.getDataVector().add(rowData); } catch (RecordNotFoundException e) { // TODO Fehlerbehandlung bei falscher Preiskategorie e.printStackTrace(); } fireTableDataChanged(); } /** * liefert Zeilenindex zu VideoUnit * @param videoID VideoUnitID * @return Zeilenindex */ public int findByVideoID(Integer videoID) { 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(videoID)) { foundIndex = index; index = data.size(); } } return foundIndex; } }