Class StationListTableModel

java.lang.Object
org.ka2ddo.yaac.gui.StationListTableModel
All Implemented Interfaces:
ActionListener, PropertyChangeListener, Runnable, EventListener, TableModel, UnitEnumChangeListener, TrackerListener, FilterChangeListener, ColumnSizingTableModel, FastComparableTableModel, ExtraColumnProviderChangeListener

This provides a sortable, filterable situational status display, as a backing TableModel for a JTable view.
Author:
Andrew Pavlin, KA2DDO
  • Constructor Details

    • StationListTableModel

      public StationListTableModel(ResourceBundle msgBundle, boolean isOneShot)
      Create a StationListViewer TableModel, obtaining column labels from the specified ResourceBundle.
      Parameters:
      msgBundle - ResourceBundle providing localized column titles
      isOneShot - boolean true if model does not refresh itself (useful for mini-webserver)
  • Method Details

    • getRowCount

      public int getRowCount()
      Returns the number of rows in the model.
      Specified by:
      getRowCount in interface TableModel
      Returns:
      the number of rows in the model
      See Also:
    • getColumnCount

      public int getColumnCount()
      Returns the number of columns in the model.
      Specified by:
      getColumnCount in interface TableModel
      Returns:
      the number of columns in the model
      See Also:
    • getSortedRow

      public StationState getSortedRow(int rowIndex)
      Return the object state record for the specified index into the sorted list of objects that is backing the table model.
      Parameters:
      rowIndex - zero-based row index
      Returns:
      StationState record describing the Object or Item
    • getValueAt

      public Object getValueAt(int rowIndex, int columnIndex)
      Returns the value for the cell at columnIndex and rowIndex.
      Specified by:
      getValueAt in interface TableModel
      Parameters:
      rowIndex - the row whose value is to be queried
      columnIndex - the column whose value is to be queried
      Returns:
      the value Object at the specified cell
    • compareRows

      public int compareRows(int rowIndex1, int rowIndex2, int columnIndex)
      Compare the selected column of the two rows.
      Specified by:
      compareRows in interface FastComparableTableModel
      Parameters:
      rowIndex1 - zero-based model row index of first row to compare
      rowIndex2 - zero-based model row index of second row to compare
      columnIndex - zero-based model column index of column to compare
      Returns:
      +1 if the 1st row's column is after the 2nd row's column, -1 if before, or 0 if equal precedence
    • getColumnClass

      public Class<?> getColumnClass(int columnIndex)
      Returns the data Class for the specified column.
      Specified by:
      getColumnClass in interface TableModel
      Parameters:
      columnIndex - the column being queried
      Returns:
      the Class object for the column's data
    • isCellEditable

      public boolean isCellEditable(int rowIndex, int columnIndex)
      Returns true if the cell at rowIndex and columnIndex is editable. Otherwise, setValueAt on the cell will not change the value of that cell.
      Specified by:
      isCellEditable in interface TableModel
      Parameters:
      rowIndex - the row whose value to be queried
      columnIndex - the column whose value to be queried
      Returns:
      true if the cell is editable
      See Also:
    • getColumnName

      public String getColumnName(int column)
      Returns the localized name for the column.
      Specified by:
      getColumnName in interface TableModel
      Parameters:
      column - the column being queried
      Returns:
      a string containing the name of column
    • setValueAt

      public void setValueAt(Object aValue, int rowIndex, int columnIndex)
      Allow changing the editable columns of the table. Note that only column 11 (alias) and column 12 (alternate symbol) is editable.
      Specified by:
      setValueAt in interface TableModel
      Parameters:
      aValue - value to assign to cell
      rowIndex - row of cell
      columnIndex - column of cell
    • getColumnWidth

      public int getColumnWidth(int columnIndex)
      Specifies the default initial width of a column from this model. Should only be queried at table creation time.
      Specified by:
      getColumnWidth in interface ColumnSizingTableModel
      Parameters:
      columnIndex - int index of the model's column whose width should be obtained
      Returns:
      the width, in the same units used by the TableColumn class's setWidth() method, or -1 to indicate the width should not be forced
    • isSizeToFit

      public boolean isSizeToFit(int columnIndex)
      Specifies whether setWidthToFit() should be enabled on this column
      Specified by:
      isSizeToFit in interface ColumnSizingTableModel
      Parameters:
      columnIndex - int index of the model's column whose width should be obtained
      Returns:
      boolean true if sizeWidthToFit() should be called on this column
    • getListViewMode

      public ListViewMode getListViewMode()
      Get the current mode for viewing the list of stations and objects.
      Returns:
      current ListViewMode
    • setListViewMode

      public void setListViewMode(ListViewMode listViewMode)
      Set the current view mode.
      Parameters:
      listViewMode - ListViewMode to use for future display of stations/objects
    • getStationCount

      public int getStationCount()
      Get the current number of stations known to YAAC, regardless of the view mode.
      Returns:
      count of station records in tracker
    • getObjectCount

      public int getObjectCount()
      Get the current number of objects known to YAAC, regardless of the view mode.
      Returns:
      count of object records in tracker
    • addTableModelListener

      public void addTableModelListener(TableModelListener l)
      Adds a listener to the list that's notified each time a change to the data model occurs.
      Specified by:
      addTableModelListener in interface TableModel
      Parameters:
      l - the TableModelListener
    • actionPerformed

      public void actionPerformed(ActionEvent e)
      Do not call. Here to support the timer that refreshes the Age column.
      Specified by:
      actionPerformed in interface ActionListener
    • removeTableModelListener

      public void removeTableModelListener(TableModelListener l)
      Removes a listener from the list that's notified each time a change to the data model occurs.
      Specified by:
      removeTableModelListener in interface TableModel
      Parameters:
      l - the TableModelListener
    • isApplyFilter

      public boolean isApplyFilter()
      Report whether the currently defined filters should restrict the contents of the station/object list.
      Returns:
      boolean true if filters will be applied
    • setApplyFilter

      public void setApplyFilter(boolean applyFilter)
      Specify whether filters should be applied when generating the list of stations and objects.
      Parameters:
      applyFilter - boolean true if filters should be used
    • messageAdded

      public void messageAdded(StationState ss, int index, AX25Message msg)
      Called when a AX25Message is added to the history for a station in the tracker.
      Specified by:
      messageAdded in interface TrackerListener
      Parameters:
      ss - StationState containing the station's information
      index - zero-based index of the message added to the StationState object
      msg - APRS Message object being added to the tracker; note that non-APRS packets that can still be decoded (such as OpenTRAC) will also be passed here; AX25Frames that cannot be decoded will pass null here
    • messageDeleted

      public void messageDeleted(StationState ss, int index, AX25Message msg)
      Called when a AX25Message is deleted from the history for a station in the tracker.
      Specified by:
      messageDeleted in interface TrackerListener
      Parameters:
      ss - StationState containing the station's information; the initial Message will already be removed from the StationState object
      index - zero-based index of the message removed from the StationState object
      msg - APRS Message object being removed from the tracker; note that non-APRS packets that can still be decoded (such as OpenTRAC) will also be passed here; AX25Frames that cannot be decoded will pass null here
    • stationAdded

      public void stationAdded(StationState ss, int index)
      Called when a new station is initially added to the tracker.
      Specified by:
      stationAdded in interface TrackerListener
      Parameters:
      ss - StationState containing the station's information; the initial AX25Message will not yet be stored within the StationState object
      index - zero-based integer sequence number for this station in the StationTracker
    • stationUpdated

      public void stationUpdated(StationState ss)
      Called when an existing station is updated with new information in the tracker.
      Specified by:
      stationUpdated in interface TrackerListener
      Parameters:
      ss - StationState containing the station's information
    • stationDeleted

      public void stationDeleted(StationState ss, int index)
      Called when an existing station is deleted from the tracker.
      Specified by:
      stationDeleted in interface TrackerListener
      Parameters:
      ss - StationState containing the station's information
      index - zero-based integer sequence number for this station in the StationTracker
    • run

      public void run()
      DO NOT CALL. AWT dispatch thread handler to bring station changes into table model.
      Specified by:
      run in interface Runnable
    • filterSettingsChanged

      public void filterSettingsChanged(Filter changedFilter, boolean changedByUser)
      Called when the specified Filter's matching criteria have been changed.
      Specified by:
      filterSettingsChanged in interface FilterChangeListener
      Parameters:
      changedFilter - Filter that has changed
      changedByUser - boolean true if change was manually made by user, false if change was made automatically by dynamic filter logic
    • propertyChange

      public void propertyChange(PropertyChangeEvent evt)
      This method gets called when a bound property is changed.
      Specified by:
      propertyChange in interface PropertyChangeListener
      Parameters:
      evt - A PropertyChangeEvent object describing the event source and the property that has changed.
    • unitEnumChanged

      public void unitEnumChanged(Enum<? extends UnitEnum> oldEnumValue, Enum<? extends UnitEnum> newEnumValue)
      Reports that a unit enum was changed.
      Specified by:
      unitEnumChanged in interface UnitEnumChangeListener
      Parameters:
      oldEnumValue - old enumeration unit of the type
      newEnumValue - new enumeration unit of the same enum type
    • getExtraColumnProvidersCopy

      public static ArrayList<ExtraColumnProvider> getExtraColumnProvidersCopy()
      Get a copy of the list of registered ExtraColumnProviders. Intended for use by other TableModels that intend to support extra data columns.
      Returns:
      ArrayList of ExtraColumnProviders
    • addExtraColumnProvider

      public static void addExtraColumnProvider(ExtraColumnProvider p)
      Register an ExtraColumnProvider to supplement the columns in instances of this TableModel.
      Parameters:
      p - ExtraColumnProvider to register
    • removeExtraColumnProvider

      public static void removeExtraColumnProvider(ExtraColumnProvider p)
      Remove an ExtraColumnProvider from supplementing the columns in instances of this TableModel.
      Parameters:
      p - ExtraColumnProvider to unregister
    • columnListChanged

      public void columnListChanged(ExtraColumnProvider provider, GuiContentType guiContentType)
      This method is called by an ExtraColumnProvider when its set of columns changes. Note this does not mean the values of individual rows for the column, but when the presence/absence, data type, or column name of any column provided by this provider is modified. Typically, this event would cause a table model data structure change on tables using these columns.
      Specified by:
      columnListChanged in interface ExtraColumnProviderChangeListener
      Parameters:
      provider - the ExtraColumnProvider reporting the change
      guiContentType - the GuiContentType of the set of modified extra columns
    • cellValueChanged

      public void cellValueChanged(ExtraColumnProvider provider, GuiContentType guiContentType, int extraColumnIndex, SupportsExtraData rowData)
      This method is cslled by an ExtraColumnProvider when the value in a cell of an extra column changes (corresponding to a TableModelEvent.UPDATE on the displaying table's model). Allows ExtraColumnProvider instances to have dynamically changing values.
      Specified by:
      cellValueChanged in interface ExtraColumnProviderChangeListener
      Parameters:
      provider - the ExtraColumnProvider reporting the change
      guiContentType - the GuiContentType of the set of extra columns
      extraColumnIndex - zero-based index of extra column from this provider that changed
      rowData - SupportsExtraData object for the modified row, or null for all rows