cmu.survey.data
Class DataTableModel

java.lang.Object
  extended by javax.swing.table.AbstractTableModel
      extended by cmu.survey.data.DataTableModel
All Implemented Interfaces:
java.io.Serializable, javax.swing.table.TableModel
Direct Known Subclasses:
DataTableModelSQL

public abstract class DataTableModel
extends javax.swing.table.AbstractTableModel

Accesses database data in a generic fashion. Can be used for a GUI (JTable, e.g. TablePanel), or for simply accessing the database from code. You can access any generic database table and do most operations without writing any SQL, thus keeping your implementation non-specific to any particular SQL language or database. The extra layer adds some functionality, and makes databases more swappable if you need to. Many methods are implemented here and have abstract "___Protected" methods, in order to support different features.

See Also:
TableStorage, Serialized Form

Nested Class Summary
static interface DataTableModel.DataTableModelGUIListener
           
 class DataTableModel.Results
           
 
Field Summary
static java.lang.Class[] COLUMN_TYPES
          These are the types of columns that are supported in Java types.
static java.lang.String[] COLUMN_TYPES_READABLE
           
protected  int holdFiredTableChangeEvents
           
static java.lang.String INTEGER_TYPE_READABLE
           
protected  int levelOfEventsHeld
           
protected  DataTableModel thisDataTableModel
           
 
Fields inherited from class javax.swing.table.AbstractTableModel
listenerList
 
Constructor Summary
DataTableModel(DataTableModelSingularInfo tableInfo)
           
 
Method Summary
abstract  boolean addFilter(Filter<?> filter)
           
 void addGUIListener(DataTableModel.DataTableModelGUIListener listener)
           
 void addOneLock(java.lang.String description)
          Start holding the firing of events -- add one more thing that's holding this.
abstract  boolean addOrderBy(OrderBy orderBy)
          Adds OrderBy to the list at the highest-priority slot (0 in the Vector returned by getOrderBys()).
 void addTableModelListener(javax.swing.event.TableModelListener l)
           
 void addUndoableEditListener(javax.swing.event.UndoableEditListener listener)
          Registers the given observer to begin receiving notifications when undoable edits are made to the document.
abstract  boolean changeColumnClass(java.lang.String columnName, java.lang.Class newColumnClass, boolean allowsNull, java.lang.String defaultValue)
           
 boolean changeColumnClass(java.lang.String columnName, java.lang.Class newColumnClass, java.lang.String defaultValue)
           
abstract  void close()
           
 boolean deleteAllRows()
          Deletes all current rows (considering the Filter list!).
 void deleteColumn(int columnIndex)
           
abstract  void deleteColumn(java.lang.String columnName)
           
abstract  void deleteColumns(int[] columnIndexes)
           
abstract  boolean deleteDataBits(java.lang.String uniqueIDColumnName, java.lang.Integer uniqueID)
           
 boolean deleteRow(int row)
           
protected abstract  boolean deleteRowProtected(int row)
          Implement this to delete a row.
 boolean deleteRows(int[] rows)
           
 void finalize()
           
 void fireTableCellUpdated(int r, int r2)
           
 void fireTableDataChanged()
           
 void fireTableRowsDeleted(int r, int r2)
           
 void fireTableRowsInserted(int r, int r2)
           
 void fireTableRowsUpdated(int r, int r2)
           
 void fireTableStructureChanged()
           
protected  void fireUndoableEdit(javax.swing.undo.UndoableEdit edit)
           
 java.lang.Class<?> getColumnClass(java.lang.String columnName)
           
 java.lang.Integer getColumnIndex(java.lang.String columnName)
          TODO refactor to make this throw FailedRequest.BadColumnNameException and make everything handle it.
 java.lang.Integer[] getColumnIndexes(java.lang.String[] columnNames)
           
 java.lang.String getColumnName(int col)
           
abstract  java.lang.String[] getColumnNames()
           
static java.lang.String getColumnTypeReadable(java.lang.Class columnType)
           
 java.lang.Integer getCount(java.lang.String columnName, java.lang.Object value)
          Get the number of times a specific value shows up in a column.
abstract  java.lang.Integer getCount(java.lang.String columnName, java.lang.String filterEquals, java.lang.Object value)
           
abstract  VectorDataSet<Filter<?>> getFilters()
           
abstract  ForwardOnlyData getForwardOnlyData()
           
abstract  java.lang.String getInvalidColumnNameMessage(java.lang.String columnName)
          If this column name is not allowed, returns a brief message saying what's invalid about the name.
abstract  java.lang.Object getMax(java.lang.String columnName)
          Get the maximum value of a column.
abstract  java.util.List<OrderBy> getOrderBys()
           
abstract  java.lang.Integer getPrimaryKey()
           
 DataTableModelSingularInfo getSingularInfo()
           
protected  TableFormat getTableFormat()
           
 java.lang.String getTableName()
           
abstract  TableStorage getTableStorage()
           
 boolean hasPrimaryKey()
           
abstract  boolean isColumnNullable(int col)
           
abstract  boolean isEditable()
           
 boolean isLocked()
          Whether there is currently a lock on this table -- i.e.
protected  boolean isMakingUndoableEdits()
           
abstract  boolean isValidColumnName(java.lang.String columnName)
          Check whether a column name is allowed or not.
 boolean newColumn(java.lang.String columnName, java.lang.Class type)
          Creates a new column at the end of the table
 boolean newColumn(java.lang.String columnName, java.lang.Class type, java.lang.String afterColumnName, boolean createAsFirstColumn, boolean isPrimaryKey)
           
abstract  boolean newColumn(java.lang.String columnName, java.lang.Class type, java.lang.String afterColumnName, boolean createAsFirstColumn, boolean isPrimaryKey, boolean allowsNull, java.lang.Object defaultValue)
           
 boolean newColumnAfter(java.lang.String columnName, java.lang.Class type, int columnIDtoPutThisAfter)
           
 boolean newColumnAfter(java.lang.String columnName, java.lang.Class type, java.lang.String afterColumnName)
           
 boolean newColumnAfter(java.lang.String columnName, java.lang.Class type, java.lang.String afterColumnName, boolean isPrimaryKey)
           
 boolean newColumnBefore(java.lang.String columnName, java.lang.Class type, int columnIDtoPutThisBefore)
           
abstract  boolean newRow()
           
abstract  boolean newRow(java.util.List<? extends java.lang.Object> rowValues)
           
abstract  boolean newRow(java.util.List<java.lang.String> columnNames, java.util.List<? extends java.lang.Object> rowValues)
           
 boolean newRow(java.lang.String[] columnNames, java.lang.Object[] values)
           
abstract  DataTableModel.Results newRows(java.util.List<? extends java.util.List<? extends java.lang.Object>> rowOfRows)
          See Results class for description of what the boolean's mean.
abstract  void refresh()
          Refreshes its data -- reloads any data from any info from the database that it can reload, and should call fireTableStructureChanged() or another appropriate fire to update GUIs.
abstract  void removeAllFilters()
           
abstract  void removeAllOrderBys()
           
abstract  boolean removeFilter(Filter<?> filter)
           
 boolean removeGUIListener(DataTableModel.DataTableModelGUIListener listener)
           
 void removeOneLock()
          Remove one hold from firing events.
abstract  boolean removeOrderBy(OrderBy orderBy)
           
 void removeTableModelListener(javax.swing.event.TableModelListener l)
           
 void removeUndoableEditListener(javax.swing.event.UndoableEditListener listener)
          Unregisters the given observer from the notification list so it will no longer receive updates.
 boolean renameColumn(int oldColumn, java.lang.String newColumnName)
           
abstract  boolean renameColumn(java.lang.String oldColumnName, java.lang.String newColumnName)
           
 boolean reorderColumn(int oldColumnIndex, int newIndex)
           
abstract  boolean reorderColumn(java.lang.String columnName, int newIndex)
           
abstract  void resetPrimaryKeyColumnIndex()
          If the primary key is an integer column, and an auto-incrementing column, it resets the column's next new integer to the lowest possible (if the table is empty, starts at 1) -- if it is not an integer and not an auto-incrementing column, it will NOT reset the column's index.
abstract  java.lang.Integer saveDataBits(java.util.List<? extends DataBit> dataBits, java.lang.String uniqueIDColumnName, java.lang.Integer uniqueID, boolean isNew)
          Takes a set of data bits.
abstract  boolean saveDataBits(java.util.List<? extends DataBit> dataBits, java.lang.String uniqueIDColumnName, java.lang.String uniqueID, boolean isNew)
          Save
abstract  void setFilters(VectorDataSet<Filter<?>> filters)
           
 void setValueAt(java.lang.Object newValue, int row, int column)
          Set the value at a cell.
 void setValueAtGetErrors(java.lang.Object newValue, int row, int column)
           
protected abstract  boolean setValueAtProtected(java.lang.Object value, int row, int column)
          Implement this to set values.
 void setValuesAt(java.util.List<? extends java.lang.Object> values, java.util.List<java.awt.Point> points)
           
 void setValuesAt(java.lang.Object[] values, java.awt.Point[] points)
          Set many cells to different values at once.
abstract  void tableWasRenamedTo(java.lang.String oldTableName, java.lang.String newTableName)
          Notification that a used table name was renamed (and that you should refresh queries, names, etc).
 
Methods inherited from class javax.swing.table.AbstractTableModel
findColumn, fireTableChanged, getColumnClass, getListeners, getTableModelListeners, isCellEditable
 
Methods inherited from class java.lang.Object
clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface javax.swing.table.TableModel
getColumnCount, getRowCount, getValueAt
 

Field Detail

COLUMN_TYPES

public static final java.lang.Class[] COLUMN_TYPES
These are the types of columns that are supported in Java types. The types are listed in order of least-specific to most-specific (somewhat). I.e. Any numbers can both be an Integer, a Double, or a String. But if the column has only "1","2","3", it's more desirable for it to be an Integer than a Double or String. This ordering is used for imports and parsing.

See Also:
for the user-readable formatting.

INTEGER_TYPE_READABLE

public static final java.lang.String INTEGER_TYPE_READABLE
See Also:
Constant Field Values

COLUMN_TYPES_READABLE

public static final java.lang.String[] COLUMN_TYPES_READABLE

thisDataTableModel

protected DataTableModel thisDataTableModel

holdFiredTableChangeEvents

protected int holdFiredTableChangeEvents

levelOfEventsHeld

protected int levelOfEventsHeld
Constructor Detail

DataTableModel

public DataTableModel(DataTableModelSingularInfo tableInfo)
Method Detail

isEditable

public abstract boolean isEditable()

getPrimaryKey

public abstract java.lang.Integer getPrimaryKey()

hasPrimaryKey

public boolean hasPrimaryKey()

getColumnIndex

public java.lang.Integer getColumnIndex(java.lang.String columnName)
TODO refactor to make this throw FailedRequest.BadColumnNameException and make everything handle it.

Parameters:
columnName -
Returns:

getColumnIndexes

public java.lang.Integer[] getColumnIndexes(java.lang.String[] columnNames)

getColumnNames

public abstract java.lang.String[] getColumnNames()

getColumnName

public java.lang.String getColumnName(int col)
Specified by:
getColumnName in interface javax.swing.table.TableModel
Overrides:
getColumnName in class javax.swing.table.AbstractTableModel

isColumnNullable

public abstract boolean isColumnNullable(int col)

getColumnTypeReadable

public static final java.lang.String getColumnTypeReadable(java.lang.Class columnType)

getColumnClass

public java.lang.Class<?> getColumnClass(java.lang.String columnName)
                                  throws FailedRequest
Throws:
FailedRequest

getTableName

public java.lang.String getTableName()

getTableFormat

protected TableFormat getTableFormat()

getSingularInfo

public DataTableModelSingularInfo getSingularInfo()

getTableStorage

public abstract TableStorage getTableStorage()

refresh

public abstract void refresh()
Refreshes its data -- reloads any data from any info from the database that it can reload, and should call fireTableStructureChanged() or another appropriate fire to update GUIs.


addFilter

public abstract boolean addFilter(Filter<?> filter)
Parameters:
filter -
Returns:
true if the filter was added, false if the filter's column name was invalid and the filter was not added.

removeAllFilters

public abstract void removeAllFilters()

removeFilter

public abstract boolean removeFilter(Filter<?> filter)

getFilters

public abstract VectorDataSet<Filter<?>> getFilters()

setFilters

public abstract void setFilters(VectorDataSet<Filter<?>> filters)

addOrderBy

public abstract boolean addOrderBy(OrderBy orderBy)
Adds OrderBy to the list at the highest-priority slot (0 in the Vector returned by getOrderBys()).

Parameters:
orderBy - a direction to order the columns
Returns:

removeOrderBy

public abstract boolean removeOrderBy(OrderBy orderBy)

removeAllOrderBys

public abstract void removeAllOrderBys()

getOrderBys

public abstract java.util.List<OrderBy> getOrderBys()
Returns:
Vector of OrderBy in order from highest priority to lowest priority

renameColumn

public boolean renameColumn(int oldColumn,
                            java.lang.String newColumnName)

changeColumnClass

public boolean changeColumnClass(java.lang.String columnName,
                                 java.lang.Class newColumnClass,
                                 java.lang.String defaultValue)

changeColumnClass

public abstract boolean changeColumnClass(java.lang.String columnName,
                                          java.lang.Class newColumnClass,
                                          boolean allowsNull,
                                          java.lang.String defaultValue)

renameColumn

public abstract boolean renameColumn(java.lang.String oldColumnName,
                                     java.lang.String newColumnName)

isValidColumnName

public abstract boolean isValidColumnName(java.lang.String columnName)
Check whether a column name is allowed or not.

Parameters:
columnName -
Returns:

getInvalidColumnNameMessage

public abstract java.lang.String getInvalidColumnNameMessage(java.lang.String columnName)
If this column name is not allowed, returns a brief message saying what's invalid about the name. If this column name is allowed, returns null.

Parameters:
columnName -
Returns:

newColumn

public boolean newColumn(java.lang.String columnName,
                         java.lang.Class type)
Creates a new column at the end of the table


newColumnBefore

public boolean newColumnBefore(java.lang.String columnName,
                               java.lang.Class type,
                               int columnIDtoPutThisBefore)

newColumnAfter

public boolean newColumnAfter(java.lang.String columnName,
                              java.lang.Class type,
                              int columnIDtoPutThisAfter)

newColumnAfter

public boolean newColumnAfter(java.lang.String columnName,
                              java.lang.Class type,
                              java.lang.String afterColumnName)

newColumnAfter

public boolean newColumnAfter(java.lang.String columnName,
                              java.lang.Class type,
                              java.lang.String afterColumnName,
                              boolean isPrimaryKey)

newColumn

public boolean newColumn(java.lang.String columnName,
                         java.lang.Class type,
                         java.lang.String afterColumnName,
                         boolean createAsFirstColumn,
                         boolean isPrimaryKey)

newColumn

public abstract boolean newColumn(java.lang.String columnName,
                                  java.lang.Class type,
                                  java.lang.String afterColumnName,
                                  boolean createAsFirstColumn,
                                  boolean isPrimaryKey,
                                  boolean allowsNull,
                                  java.lang.Object defaultValue)

reorderColumn

public boolean reorderColumn(int oldColumnIndex,
                             int newIndex)

reorderColumn

public abstract boolean reorderColumn(java.lang.String columnName,
                                      int newIndex)

deleteColumn

public abstract void deleteColumn(java.lang.String columnName)
                           throws FailedRequest
Throws:
FailedRequest

deleteColumn

public void deleteColumn(int columnIndex)
                  throws FailedRequest
Throws:
FailedRequest

deleteColumns

public abstract void deleteColumns(int[] columnIndexes)
                            throws FailedRequest
Throws:
FailedRequest

newRow

public abstract boolean newRow()

newRow

public boolean newRow(java.lang.String[] columnNames,
                      java.lang.Object[] values)

newRow

public abstract boolean newRow(java.util.List<? extends java.lang.Object> rowValues)
Parameters:
rowValues - The values, in order by the column order. Each value must be of the correct class for the type of the column (i.e. An int must be class Integer).

newRows

public abstract DataTableModel.Results newRows(java.util.List<? extends java.util.List<? extends java.lang.Object>> rowOfRows)
See Results class for description of what the boolean's mean.

Parameters:
rowOfRows -
Returns:

newRow

public abstract boolean newRow(java.util.List<java.lang.String> columnNames,
                               java.util.List<? extends java.lang.Object> rowValues)
Parameters:
columnNames - The names of the columns that values should be inserted into.
rowValues - The values for this row for each column. Each value must be of the correct class for the type of the column (i.e. An int must be class Integer).
Returns:

deleteRows

public boolean deleteRows(int[] rows)
Parameters:
rows - -- MUST be in order from lowest rowID to highest rowID, but does not need to be consecutive. Order from lowest to highest is required because as you delete each row, the rowIDs of any higher rows change. (The method then deletes the rows in reverse order, from highest row to lowest row).
Returns:
whether it succeeded

deleteRow

public boolean deleteRow(int row)

deleteAllRows

public boolean deleteAllRows()
Deletes all current rows (considering the Filter list!). This is a stub. You can certainly be more efficient if you use the underlying data structure to do this better. (i.e. SQL has a specific call for this).

Returns:

deleteRowProtected

protected abstract boolean deleteRowProtected(int row)
Implement this to delete a row. You should not generate undoable events, and you should not fire the row changed events -- this will be done for you automatically.

Parameters:
row -
Returns:
whether or not it worked successfully (return false if there were errors, which it assumes were reported to the user in the form of bugs)

setValuesAt

public void setValuesAt(java.lang.Object[] values,
                        java.awt.Point[] points)
                 throws FailedRequest
Set many cells to different values at once. Use this instead of setValueAt when it's an aggregate operation, in order to generate only one undo. (useful for pasting, cutting, deleting, etc.)

Parameters:
values -
points -
Throws:
FailedRequest

setValuesAt

public void setValuesAt(java.util.List<? extends java.lang.Object> values,
                        java.util.List<java.awt.Point> points)
                 throws FailedRequest
Throws:
FailedRequest

setValueAt

public void setValueAt(java.lang.Object newValue,
                       int row,
                       int column)
Set the value at a cell. Will fire undoable edits. It is recommended that code call setValueGetErrors instead whenever possible, so that you can get the errors that happen in this call, instead of having them buried. However, for compatibility with the TableModel interface, this method is provided and does not throw an error when it fails. (Depending upon future implementations and testing, this may be changed to throw a runtime exception so that the code using this fails, but this could be unpredictable for how it will affect that code).

Specified by:
setValueAt in interface javax.swing.table.TableModel
Overrides:
setValueAt in class javax.swing.table.AbstractTableModel

setValueAtGetErrors

public void setValueAtGetErrors(java.lang.Object newValue,
                                int row,
                                int column)
                         throws FailedRequest
Throws:
FailedRequest

setValueAtProtected

protected abstract boolean setValueAtProtected(java.lang.Object value,
                                               int row,
                                               int column)
                                        throws FailedRequest
Implement this to set values. You should not generate undoable events, and you should not fire the row changed events -- this will be done for you automatically.

Returns:
whether or not it worked successfully (return false if there were errors, which it assumes were reported to the user in the form of bugs)
Throws:
FailedRequest

addUndoableEditListener

public void addUndoableEditListener(javax.swing.event.UndoableEditListener listener)
Registers the given observer to begin receiving notifications when undoable edits are made to the document.

Parameters:
listener - the observer to register
See Also:
UndoableEditEvent

removeUndoableEditListener

public void removeUndoableEditListener(javax.swing.event.UndoableEditListener listener)
Unregisters the given observer from the notification list so it will no longer receive updates.

Parameters:
listener - the observer to register
See Also:
UndoableEditEvent

isMakingUndoableEdits

protected boolean isMakingUndoableEdits()

fireUndoableEdit

protected void fireUndoableEdit(javax.swing.undo.UndoableEdit edit)

tableWasRenamedTo

public abstract void tableWasRenamedTo(java.lang.String oldTableName,
                                       java.lang.String newTableName)
Notification that a used table name was renamed (and that you should refresh queries, names, etc). We'd prefer this to not be public -- to do so, we'd have to make this DataTableModelStub.


saveDataBits

public abstract java.lang.Integer saveDataBits(java.util.List<? extends DataBit> dataBits,
                                               java.lang.String uniqueIDColumnName,
                                               java.lang.Integer uniqueID,
                                               boolean isNew)
Takes a set of data bits. If uniqueID!=null, creates the row with uniqueIDColumnName=uniqueID -- if uniqueID is null, it auto-increments that column, creates a new uniqueID, and returns it.

Parameters:
dataBits -
uniqueIDColumnName -
uniqueID -
isNew - whether or not this is a new record that has not been previously saved -- whether or not the row exists already.
Returns:
null if it failed, the new uniqueID if it succeeds.

saveDataBits

public abstract boolean saveDataBits(java.util.List<? extends DataBit> dataBits,
                                     java.lang.String uniqueIDColumnName,
                                     java.lang.String uniqueID,
                                     boolean isNew)
Save

Parameters:
dataBits -
uniqueIDColumnName -
uniqueID - The unique ID to save as -- cannot be null, since it can't be automatically assigned.
isNew -
Returns:

deleteDataBits

public abstract boolean deleteDataBits(java.lang.String uniqueIDColumnName,
                                       java.lang.Integer uniqueID)

getForwardOnlyData

public abstract ForwardOnlyData getForwardOnlyData()

getMax

public abstract java.lang.Object getMax(java.lang.String columnName)
                                 throws FailedRequest
Get the maximum value of a column.

Parameters:
columnName -
Returns:
Throws:
FailedRequest

getCount

public java.lang.Integer getCount(java.lang.String columnName,
                                  java.lang.Object value)
                           throws FailedRequest
Get the number of times a specific value shows up in a column.

Parameters:
columnName -
value -
Returns:
Throws:
FailedRequest

getCount

public abstract java.lang.Integer getCount(java.lang.String columnName,
                                           java.lang.String filterEquals,
                                           java.lang.Object value)
                                    throws FailedRequest
Throws:
FailedRequest

resetPrimaryKeyColumnIndex

public abstract void resetPrimaryKeyColumnIndex()
                                         throws FailedRequest
If the primary key is an integer column, and an auto-incrementing column, it resets the column's next new integer to the lowest possible (if the table is empty, starts at 1) -- if it is not an integer and not an auto-incrementing column, it will NOT reset the column's index. This is good for resetting the index after clearing out all of your data, for example.

Throws:
FailedRequest

addGUIListener

public void addGUIListener(DataTableModel.DataTableModelGUIListener listener)

removeGUIListener

public boolean removeGUIListener(DataTableModel.DataTableModelGUIListener listener)

isLocked

public boolean isLocked()
Whether there is currently a lock on this table -- i.e. UI events should not be sent, the GUI should not be updated, and new processes that are long should not start yet -- they should wait for this to complete before starting a new long operation which will read or modify the data.

Returns:

removeOneLock

public void removeOneLock()
Remove one hold from firing events. If the number of holds goes down to zero, it will fire one similar event to those that were held, to let the table know that something's changed.


addOneLock

public void addOneLock(java.lang.String description)
Start holding the firing of events -- add one more thing that's holding this. This means that GUIs will not be updated of data changed or columns added, which is a hack around a pile of "bugs" in JTable that fail when many rapid updates happen from another gui. (i.e. JTable throws lots of exceptions because it fails in the middle of repainting because it does repaints and stuff immediately, I think). If you add one, you MUST remove it, at all costs! Else the GUI will fail unpredictably and badly. TODO WARNING: this is a hack. The correct implementation would have listeners for each GUI, and the GUIs would lock the interface when this happens.

Parameters:
holdFiredTableChangeEvents -

addTableModelListener

public void addTableModelListener(javax.swing.event.TableModelListener l)
Specified by:
addTableModelListener in interface javax.swing.table.TableModel
Overrides:
addTableModelListener in class javax.swing.table.AbstractTableModel

removeTableModelListener

public void removeTableModelListener(javax.swing.event.TableModelListener l)
Specified by:
removeTableModelListener in interface javax.swing.table.TableModel
Overrides:
removeTableModelListener in class javax.swing.table.AbstractTableModel

fireTableDataChanged

public void fireTableDataChanged()
Overrides:
fireTableDataChanged in class javax.swing.table.AbstractTableModel

fireTableStructureChanged

public void fireTableStructureChanged()
Overrides:
fireTableStructureChanged in class javax.swing.table.AbstractTableModel

fireTableRowsInserted

public void fireTableRowsInserted(int r,
                                  int r2)
Overrides:
fireTableRowsInserted in class javax.swing.table.AbstractTableModel

fireTableRowsUpdated

public void fireTableRowsUpdated(int r,
                                 int r2)
Overrides:
fireTableRowsUpdated in class javax.swing.table.AbstractTableModel

fireTableRowsDeleted

public void fireTableRowsDeleted(int r,
                                 int r2)
Overrides:
fireTableRowsDeleted in class javax.swing.table.AbstractTableModel

fireTableCellUpdated

public void fireTableCellUpdated(int r,
                                 int r2)
Overrides:
fireTableCellUpdated in class javax.swing.table.AbstractTableModel

close

public abstract void close()

finalize

public void finalize()
Overrides:
finalize in class java.lang.Object