de.jsystems.framework.table
Class BusinessTableModel

java.lang.Object
  extended byde.jsystems.framework.common.BusinessModel
      extended byde.jsystems.framework.table.BusinessTableModel
All Implemented Interfaces:
IBusinessModelSave, IBusinessTableModel, TableModel

public class BusinessTableModel
extends BusinessModel
implements IBusinessTableModel

Model fuer die BusinessTable. In diesem Model werden die Daten fuer die Tabelle als TableItem-Objekte verwaltet. Die Standardschnittstelle fuer Tabellenmodelle (TableModel) wird von dieser Implementierung unterstuetzt. Damit kann das Model auch an einer ganz normalen JTable benutzt werden. Zusaetzlich wird auch die Schnittstelle BusinessModel unterstuetzt, womit die Klasse auch die Erzeugung der verwalteten Items uebernehmen kann.

Version:
1.0
Copyright by Jens Homm 2001 - 2003
Author:
Jens Homm JSYSTEMS

Field Summary
protected  EventListenerList listenerList
          Liste für registrierte Listener
 
Fields inherited from class de.jsystems.framework.common.BusinessModel
DIALOG_ABBRUCH, DIALOG_OK, file, filename, itemclass, itemList, OPEN_DIALOG, pathname, SAVE_DIALOG, saver
 
Constructor Summary
BusinessTableModel(TableItem item)
          Initialisiert das Model und legt das zu verwaltende Item fest.
 
Method Summary
 void addItem(Item item)
          Diese Operation wird hier im Model nicht unterstuetzt.
 void addRow()
          Fügt dem Model eine neue Zeile hinzu.
 void addRow(String itemId)
          Fuegt dem Model eine neue Zeile hinzu.
 void addRow(String itemId, String name)
          Fuegt dem Model eine neue Zeile hinzu.
 void addRow(TableItem item)
          Fügt dem Model das uebergebene Item als neue Zeile hinzu.
 void addTableModelListener(TableModelListener listener)
          Fügt einen Listener der Liste aller Listener hinzu die bei einer Änderung am Model benachrichtigt werden sollen.
 Item createNewItem()
          Erzeugt ein neues Item von der Art, wie sie in diesem Model verwaltet werden.
 int findColumn(String columnName)
          Sucht eine Spalte anhand des Namens und gibt den Index zurück, an dem sie sich befindet.
 void fireTableCellUpdated(int row, int column)
          Benachrichtigt alle registrierten Listener das sich der Wert der Zelle [row, column] ge�ndert hat.
 void fireTableChanged(TableModelEvent event)
          Benachrichtig alle registrierten Listener über das auftreten des übergebenen Events.
 void fireTableDataChanged()
          Benachrichtig alle registrierten Listener das sich alle Wert der Tabelle geändert haben.
 void fireTableRowsDeleted(int firstRow, int lastRow)
          Benachrichtig alle registrierten Listener das im Bereich [firstRow, lastRow] Zeilen gelöscht wurden.
 void fireTableRowsInserted(int firstRow, int lastRow)
          Benachrichtig alle registrierten Listener das im Bereich [firstRow, lastRow] neue Zeilen hinzugefügt wurden.
 void fireTableRowsUpdated(int firstRow, int lastRow)
          Benachrichtig alle registrierten Listener das im Bereich [firstRow, lastRow] Zeilen geändert wurden.
 void fireTableStructureChanged()
          Benachrichtig alle registrierten Listener das sich die Struktur der Tabelle geändert hat.
 Class getColumnClass(int columnIndex)
          Gibt den Typ der Daten fuer die Spalte am uebergebenen Index zurueck.
 int getColumnCount()
          Gibt die Anzahl Spalten im Model zurück.
 String getColumnName(int column)
          Gibt den Namen einer Spalte zur�ück.
 EventListener[] getListeners(Class listenerTyp)
          Gibt ein Array mit allen Listenern des spezifizierten Typs zurück die bei diesem Model registriert sind.
 int getRowCount()
          Gibt die Anzahl Zeilen im Model zurück.
protected  String getTechnicalColumnName(int column)
          Gibt den technischen Namen der uebergebenen Spalte zurueck.
 Object getValueAt(int row, int column)
          Gibt den Wert der spezifizierten Zelle zurück.
 boolean isCellEditable(int row, int column)
          Legt fest, ob eine Zelle Editierbar ist.
 void load()
          Laedt den Inhalt fuer das Model.
 void removeRow(int row)
          Löscht die Zeile am spezifizierten Indx aus der Tabelle.
 void removeTableModelListener(TableModelListener listener)
          Entfernt einen registrierten Listener aus der Liste der zu benachrichtigenden Listener.
 void save()
          Speichert den Inhalt des Models in einer bestehenden Datei oder in einer Datenbank.
 void setValueAt(Object value, int row, int column)
          Setzt den Wert für eine Zelle.
 void updateItem(Item item)
          Diese Operation wird hier im Model nicht unterstuetzt.
 
Methods inherited from class de.jsystems.framework.common.BusinessModel
createNewItem, createNewItem, getItem, getItemComboBox, getItemCount, getItemListBox, getSaveItem, getSaveItemCount, loadItem, preLoad, removeAllItems, removeItem, save_as, setSaver, showFileDialogBox
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

listenerList

protected EventListenerList listenerList
Liste für registrierte Listener

Constructor Detail

BusinessTableModel

public BusinessTableModel(TableItem item)
Initialisiert das Model und legt das zu verwaltende Item fest. Das hier übergebene Item wird nur dazu benutzt, um sicherzustellen, das ein Objekt vom Typ TableItem übergeben wurde. Im Item brauchen keine Werte enthalten sein, da dieses Item nicht zur Datenhaltung verwendet wird. Es wird auch im Model nicht gespeichert. Es gibt also keinerlei Zugriffsmöglichkeit auf das Item. Das Item wird in einigen Methoden benutzt, um z.B. den Namen einer Spalte zu ermitteln oder den Klassentyp einer Spalte. Falls das Item unsichtbare Attribute enthaelt, so werden sie in der Tabelle beruecksichtigt.

Parameters:
item - Ein Item von der Art wie sie in diesem Model verwaltet werden.
Method Detail

createNewItem

public Item createNewItem()
                   throws ItemInstantiateException
Erzeugt ein neues Item von der Art, wie sie in diesem Model verwaltet werden. Das neu erzeugte Item ist noch nicht im Model enthalten. Wenn das neue Item dem Model hinzugefuegt werden soll, muss die Methode addRow(TableItem) aufgerufen werden. Hier wird dann die Tabelle benachrichtigt, dass sich das Model geaendert hat.

Overrides:
createNewItem in class BusinessModel
Returns:
Ein neu erzeugtes Item vom Typ TableItem.
Throws:
ItemInstantiateException - wenn beim erzeugen des Items ein Fehler aufgetreten ist.

addRow

public void addRow()
            throws ItemInstantiateException
Fügt dem Model eine neue Zeile hinzu. Die Werte in der neuen Zeile sind alle noch null. Die registrierten Listener werden benachrichtigt.

Throws:
ItemInstantiateException - wenn beim erzeugen des Items ein Fehler aufgetreten ist.

addRow

public void addRow(String itemId)
            throws ItemInstantiateException
Fuegt dem Model eine neue Zeile hinzu. Die Werte in der Zeile sind alle noch NULL. Der Aufrufer muss selbst dafuer sorgen, das die uebergebene ID fuer das Item eindeutig ist, da es sonst zu Problemen bei der Verwaltung der Items im Model kommen kann.

Parameters:
itemId - Eine eindeutige Id fuer das Item.
Throws:
ItemInstantiateException - wenn beim erzeugen des Items ein Fehler aufgetreten ist.

addRow

public void addRow(String itemId,
                   String name)
            throws ItemInstantiateException
Fuegt dem Model eine neue Zeile hinzu. Die Werte in der Zeile sind alle noch NULL. Der Aufrufer muss selbst dafuer sorgen, das die uebergebene ID fuer das Item eindeutig ist, da es sonst zu Problemen bei der Verwaltung der Items im Model kommen kann. Zusaetzlich wird hier der Name fuer das Item gleich mit festgelegt.

Parameters:
itemId - Eine eindeutige Id fuer das Item.
name - Der Name fuer das Item.
Throws:
ItemInstantiateException - wenn beim erzeugen des Items ein Fehler aufgetreten ist.

addRow

public void addRow(TableItem item)
Fügt dem Model das uebergebene Item als neue Zeile hinzu. Die registrierten Listener werden benachrichtigt. Das hier uebergebene Item muss vom gleichen Typ wie die in diesem Model verwalteten Items sein. Falls das nicht der Fall ist wird eine IllegalArgumentException ausgeloest.

Parameters:
item - Das dem Model hinzuzufuegende Item.

removeRow

public void removeRow(int row)
Löscht die Zeile am spezifizierten Indx aus der Tabelle. Die Tabelle wird benachrichtigt, das sich die Tabelle geanedert hat. Falls es diesen Index nicht gibt wird eine ArrayIndexOutOfBoundsException ausgelöst.

Parameters:
row - Der Index der zu loeschenden Zeile.

save

public void save()
          throws Exception
Speichert den Inhalt des Models in einer bestehenden Datei oder in einer Datenbank. Die konkrete Art der Speicherung ist abhängig vom anhängenden Saver-Objekt.

Overrides:
save in class BusinessModel
Throws:
Exception - wenn beim Speichern ein Fehler auftritt.
See Also:
Saver, BusinessModel.setSaver(Saver)

load

public void load()
          throws Exception
Laedt den Inhalt fuer das Model. Die konkrete Art des Ladens ist abhängig vom anhängenden Saver-Objekt.

Overrides:
load in class BusinessModel
Throws:
Exception - wenn ein Fehler beim Speichern Auftritt.
See Also:
Saver, BusinessModel.setSaver(Saver)

getColumnName

public String getColumnName(int column)
Gibt den Namen einer Spalte zur�ück. Der Name richtet sich nach dem übergebenem Item. Falls sich am übergebenem Index keine Spalte befindet(column < 0 || column > column.size()) wird ein leerer String zurückgegeben. Zurueckgegeben wird immer der Display-Name aus dem Item, nicht der technische Name.

Specified by:
getColumnName in interface TableModel
Parameters:
column - Der Index der Spalte dessen Name ausgelesen werden soll.
Returns:
Der Name der Spalte am uebergebenen Index.
See Also:
TableItem.getDisplayColumnName(int)

getTechnicalColumnName

protected String getTechnicalColumnName(int column)
Gibt den technischen Namen der uebergebenen Spalte zurueck. Dabei handelt es sich um den Namen des entsprechenden Attributes.

Parameters:
column - Der Index der Spalte dessen Name ausgelesen werden soll.
Returns:
Der technische Name der Spalte.
See Also:
TableItem.getTechnicalColumnName(int)

findColumn

public int findColumn(String columnName)
Sucht eine Spalte anhand des Namens und gibt den Index zurück, an dem sie sich befindet. Falls die Spalte nicht gefunden wird, wird -1 zurückgegeben.

Parameters:
columnName - Der Name der Spalte deren Index gesucht wird.
Returns:
Der Index der Spalte oder -1, wenn es unter diesemNamen keine Spalte gibt.
See Also:
TableItem.findColumn(String)

getColumnClass

public Class getColumnClass(int columnIndex)
Gibt den Typ der Daten fuer die Spalte am uebergebenen Index zurueck.

Specified by:
getColumnClass in interface TableModel
Parameters:
columnIndex - Der Index der Spalte deren Spaltentyp zurueckgegeben werden soll.
Returns:
Der Typ der Daten in der Spalte.
See Also:
TableItem.getColumnClass(int)

isCellEditable

public boolean isCellEditable(int row,
                              int column)
Legt fest, ob eine Zelle Editierbar ist. Da im Framework das Editieren einer Tabelle über einen Dialog stattfindet wird hier standardmäßig false zurückgegeben. Ob eine Zelle dann wirklich nicht editiert werden kann ist dann abhängig von den Eigenschaften des entsprechendenen Attributes im TableItem.

Specified by:
isCellEditable in interface TableModel
Parameters:
row - Die Zeile in der sich die Zelle befindet.
column - Die Spalte in der sich die Zelle befindet.
Returns:
Hier immer false.
See Also:
Item.registerAttribute(String, BitSet)

setValueAt

public void setValueAt(Object value,
                       int row,
                       int column)
Setzt den Wert für eine Zelle. Wenn hierbei ein Fehler auftritt wird eine TableValueException ausgeloest.

Specified by:
setValueAt in interface TableModel
Parameters:
value - Der neue Wert für die Zelle
row - Die Zeile in der sich die Zelle befindet.
column - Die Spalte in der sich die Zelle befindet.

getValueAt

public Object getValueAt(int row,
                         int column)
Gibt den Wert der spezifizierten Zelle zurück. Wenn hierbei ein Fehler auftritt wird eine TableValueException ausgeloest.

Specified by:
getValueAt in interface TableModel
Parameters:
row - Die Zeile der spezifizierten Zelle.
column - Die Spalte der spezifizierten Zelle.
Returns:
Der Wert in der Zelle.

getRowCount

public int getRowCount()
Gibt die Anzahl Zeilen im Model zurück. Die Anzahl Zeilen entspricht hier der Anzahl gespeicherter Items im Model.

Specified by:
getRowCount in interface TableModel
Returns:
Die Anzahl Zeilen im Model.

getColumnCount

public int getColumnCount()
Gibt die Anzahl Spalten im Model zurück. Diese Anzahl entspricht der Anzahl Attribute im Item.

Specified by:
getColumnCount in interface TableModel
Returns:
Die Anzahl Spalten im Model.

addTableModelListener

public void addTableModelListener(TableModelListener listener)
Fügt einen Listener der Liste aller Listener hinzu die bei einer Änderung am Model benachrichtigt werden sollen.

Specified by:
addTableModelListener in interface TableModel
Parameters:
listener - Ein TableModelListener der ueber Aenderungen am Model informiert werden moechte.

removeTableModelListener

public void removeTableModelListener(TableModelListener listener)
Entfernt einen registrierten Listener aus der Liste der zu benachrichtigenden Listener.

Specified by:
removeTableModelListener in interface TableModel
Parameters:
listener - Der aus der Liste der TableModelListener zu entfernende TableModelListener

fireTableDataChanged

public void fireTableDataChanged()
Benachrichtig alle registrierten Listener das sich alle Wert der Tabelle geändert haben. Auch die Anzahl an Zeilen kann sich geändert haben und die JTable wird sich komplett neu zeichnen. Die Struktur der Tabelle(Reihenfolge der Spalten) bleibt dabei erhalten.

See Also:
TableModelEvent, EventListenerList

fireTableStructureChanged

public void fireTableStructureChanged()
Benachrichtig alle registrierten Listener das sich die Struktur der Tabelle geändert hat. Die Anzahl Spalten in der Tabelle und die Namen und Typen der neuen Spalten können verschieden sein gegenüber dem vorherigen Zustand. Wenn die JTable dieses Event erhält und das Flag JTable.autoCreateColumnsFromModel ist gesetzt, werden alle Spalten aus der Tabelle entfernt und neu aus dem Model geholt. Das geschieht in der Reihenfolge in der die Spalten im Model vorhanden sind. Das ist das gleiche Verhalten als würde die Methode JTable.setModel(javax.swing.table.TableModel) an der JTable aufgerufen.

See Also:
TableModelEvent, EventListenerList

fireTableRowsInserted

public void fireTableRowsInserted(int firstRow,
                                  int lastRow)
Benachrichtig alle registrierten Listener das im Bereich [firstRow, lastRow] neue Zeilen hinzugefügt wurden. Der angegebene Bereich ist inklusiv.

Parameters:
firstRow - Index der ersten hinzugefügten Zeile.
lastRow - Index der letzten hinzugefügten Zeile.
See Also:
TableModelEvent, EventListenerList

fireTableRowsUpdated

public void fireTableRowsUpdated(int firstRow,
                                 int lastRow)
Benachrichtig alle registrierten Listener das im Bereich [firstRow, lastRow] Zeilen geändert wurden. Der angegebene Bereich ist inklusiv.

Parameters:
firstRow - Index der ersten geänderten Zeile.
lastRow - Index der letzten geänderten Zeile.
See Also:
TableModelEvent, EventListenerList

fireTableRowsDeleted

public void fireTableRowsDeleted(int firstRow,
                                 int lastRow)
Benachrichtig alle registrierten Listener das im Bereich [firstRow, lastRow] Zeilen gelöscht wurden. Der angegebene Bereich ist inklusiv.

Parameters:
firstRow - Index der ersten gelöschten Zeile.
lastRow - Index der letzten gelöschten Zeile.
See Also:
TableModelEvent, EventListenerList

fireTableCellUpdated

public void fireTableCellUpdated(int row,
                                 int column)
Benachrichtigt alle registrierten Listener das sich der Wert der Zelle [row, column] ge�ndert hat.

Parameters:
row - Die Zeile in der sich die geänderte Zelle befindet.
column - Die Spalte in der sich die geänderte Zelle befindet.
See Also:
TableModelEvent, EventListenerList

fireTableChanged

public void fireTableChanged(TableModelEvent event)
Benachrichtig alle registrierten Listener über das auftreten des übergebenen Events.

Parameters:
event - Das ausgelöste Event das abgeschickt werden soll.
See Also:
addTableModelListener(TableModelListener), TableModelEvent, EventListenerList

getListeners

public EventListener[] getListeners(Class listenerTyp)
Gibt ein Array mit allen Listenern des spezifizierten Typs zurück die bei diesem Model registriert sind.

Parameters:
listenerTyp - Der Typ des Listeners
Returns:
Alle registrierten Listener vom Typ listenerTyp

addItem

public void addItem(Item item)
Diese Operation wird hier im Model nicht unterstuetzt. Neue Zeilen muessen ueber die Methoden
  • addRow()
  • addRow(String)
  • addRow(String, String)
  • addRow(TableItem)
    hinzugefuegt werden. Bei Aufruf dieser Methode wird eine UnsupportedOperationException ausgeloest.

    Overrides:
    addItem in class BusinessModel
    Parameters:
    item - Das dem Model hinzuzufuegende Item.

  • updateItem

    public void updateItem(Item item)
    Diese Operation wird hier im Model nicht unterstuetzt. Um Daten in der Tabelle zu aendern wird das betreffende Item ueber die Methode BusinessModel.getItem(int) ausgelesen und dann die gewuenschten Attribute geaendert. Bei Aufruf dieser Methode wird eine UnsupportedOperationException ausgeloest.

    Overrides:
    updateItem in class BusinessModel
    Parameters:
    item - Das Item, das im Model geaendert werden soll.
    See Also:
    Item.getItemID()