Class MessageStore_<M extends Message>

java.lang.Object
eu.bandm.tools.message.MessageStore_<M>
Type Parameters:
M - the type of the messages
All Implemented Interfaces:
MessageReceiver<M>
Direct Known Subclasses:
MessageStore, MessageStoreSorted

abstract class MessageStore_<M extends Message> extends Object implements MessageReceiver<M>
Common superclass for different kinds of message storages. This class provides the basis for a graphic interfaces and bulk processing.

All messages received are added to an internal sequential storage.

There are two kinds of graphic representations, both in the context of javax.swing, namely MessageStore_<M extends Message>.TableModel and MessageStore_<M extends Message>.ListModel. The user can derive from these classes and provide its own instance by setTableModel(TableModel) and setListModel(ListModel). If not, a standard implementation will be provided by getTableModel() and getListModel(). A standard GUI implementation using the table model is SwingMessageTable.

This class can also be used for collecting, sorting and further processing: all messages currently stored can be propagated explicitly to some MessageReceiver by calling drainTo(MessageReceiver).

  • Field Details

    • messages

      protected final List<M extends Message> messages
      All stored messages. Either ordered by applying MessageStoreSorted.order or by arrival. The second item in the stored pair is the nesting level, which can be represented by GUIs.
    • tableModel

      protected MessageStore_<M extends Message>.TableModel tableModel
      The Swing table model, either user defined or default.
    • listModel

      protected MessageStore_<M extends Message>.ListModel listModel
      The Swing list model, either user defined or default.
    • indents

      @Opt protected final @Opt List<Integer> indents
      Local store of the indentation levels. Runs in parallel with the list of messages. May be read by MessageStore_<M extends Message>.TableModel. Is set to null if no indentation shall be applied,
  • Constructor Details

    • MessageStore_

      MessageStore_(@Opt @Opt List<Integer> indents)
      Only constructor. Not to be called by the user, but only by subclass constructor.
      Parameters:
      indents - an empty list to store the indentation levels. Can be null if indentation shall not be shown graphically.
  • Method Details

    • drainTo

      public void drainTo(MessageReceiver<? super M> receiver)
      Send all currently contained messages (in their stored order) to the receiver. The contents of the store is not altered.
      This method is synchronized, so that a further sending to this store cannot interfer.
      Parameters:
      receiver - to which the messages shall be sent.
    • drainAndClear

      public void drainAndClear(MessageReceiver<? super M> receiver)
      Send all currently contained messages to the receiver and clear the storage. This method is synchronized, so that a further sending to this store cannot interfer.
      Parameters:
      receiver - to which the messages shall be sent.
    • getMessages

      public List<M> getMessages()
      Returns an unmodifiable copy of the current content. The result is backed by the muessage store and wil reflect all its future changes.
      Returns:
      the list of all currently contained messages.
    • get

      public M get(int i)
      Return the message stored at the given poisition.
      Parameters:
      i - the position of the returned message, >= 0.
      Returns:
      the message stored at the given poisition.
      Throws:
      IndexOutOfBoundsException - - if the index is out of range (index < 0 || index >= getSize())
    • getSize

      public int getSize()
      Returns the number of currently contained messages.
      Returns:
      the number of currently contained messages.
    • isEmpty

      public boolean isEmpty()
      Returns whether the store is empty.
      Returns:
      whether the store is empty.
    • setTableModel

      public void setTableModel(MessageStore_<M>.TableModel tm)
      Provide a user-defined table model.
      Parameters:
      tm - the table model to be used.
      See Also:
    • setListModel

      public void setListModel(MessageStore_<M>.ListModel lm)
      Procide a user-defined list model.
      Parameters:
      lm - the list model to be used.
      See Also:
    • getTableModel

      public MessageStore_<M>.TableModel getTableModel()
      Returns the user-defined table model, if set, or a lazy constructed instance of the default.
      Returns:
      the currently used table model.
      See Also:
    • getListModel

      public MessageStore_<M>.ListModel getListModel()
      Returns the user-defined list model, if set, or a lazy constructed instance of the default.
      Returns:
      the currently used list model.
      See Also:
    • clear

      public void clear()
      Clears the internal storage, thus deletes all messages, and notifies the GUIs.
    • notifyGuiAdd

      protected void notifyGuiAdd(int i)
      An item has been inserted at a particular position.
      Parameters:
      i - the position of the insertion.
    • notifyGuiChanged_ALL

      protected void notifyGuiChanged_ALL()
      Called in case of sort order change by MessageStoreSorted.setOrder(Comparator) and clear().
    • receive

      public abstract void receive(M message)
      Adds the received message to the internal store and notifies all subscribing GUI objects.
      Specified by:
      receive in interface MessageReceiver<M extends Message>
      Parameters:
      message - the received message.