Class MessageStore<M extends Message>
- Type Parameters:
M- the type of the messages
- All Implemented Interfaces:
MessageReceiver<M>
All messages received are added to an internal sequential storage.
When the field order contains a non-null Comparator, all
incoming messages are sorted accordingly; messages which compare to
zero = equal appear chronologically.
When the field order contains null, all incoming messages
are stored chronologically. When the comparator changes to a non-null
value, all messages are re-sorted. When it changes to null, no
re-sorting happens, and all future messages are appended chronologically.
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).
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionclassStandard specialisation ofAbstractListModel.classStandard specialisation ofAbstractTableModel. -
Field Summary
FieldsModifier and TypeFieldDescription(package private) IdentityHashMap<Message, Integer> Stores the nesting level for all received messages.protected MessageStore<M>.@Opt ListModelThe Swing list model, either user defined or default.All stored messages.protected intInternal state for storing the nesting ofMessage.Kind.logStartandMessage.Kind.logEndmessages.protected @Opt Comparator<? super M> If set, defines the storage order.protected MessageStore<M>.@Opt TableModelThe Swing table model, either user defined or default. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidclear()Clears the internal storage, thus deletes all messages, and notifies the GUIs.voidResets the current nesting level to 0.voiddrainAndClear(MessageReceiver<? super M> receiver) Send all currently contained messages to the receiver and clear the storage.voiddrainTo(MessageReceiver<? super M> receiver) Send all currently contained messages (in their stored order) to the receiver.get(int i) Return the message stored at the given position.Returns the user-defined list model, if set, or a lazy constructed instance of the default list modelMessageStore<M extends Message>.ListModel.Returns a copy of the current content.@Opt Comparator<? super M> getOrder()Returns the comparator which rules the sequential order of storing.intgetSize()Returns the number of currently contained messages.Returns the user-defined table model, if set, or a lazy constructed instance of the default table modelMessageStore<M extends Message>.TableModel.booleanisEmpty()Returns whether the store is empty.protected voidnotifyGuiAdd(int i) An item has been inserted at a particular position.protected voidCalled in case of list contents change bysetOrder(Comparator)orclear().voidStore the message to the interal list and notify the GUI representations.voidProvide a user-defined list model.voidsetOrder(@Opt Comparator<? super M> comp) Set the comparator which rules the sequential order of storing.voidProvide a user-defined table model.Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface eu.bandm.tools.message.MessageReceiver
ifSubcriticalThen, ifSubcriticalThen, ifSubcriticalThenElse
-
Field Details
-
messages
-
tableModel
The Swing table model, either user defined or default. -
listModel
The Swing list model, either user defined or default. -
order
If set, defines the storage order. Otherwise it is by arrival. -
nestingLevel
protected int nestingLevelInternal state for storing the nesting ofMessage.Kind.logStartandMessage.Kind.logEndmessages. Is always >=0, also in case of inconsistent nesting of incoming messages. -
levels
IdentityHashMap<Message,Integer> levelsStores the nesting level for all received messages. The chosen implementation allows re-sorting of the messages while keeping the nesting information.
-
-
Constructor Details
-
MessageStore
public MessageStore()Only constructor.
-
-
Method Details
-
drainTo
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
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
Returns a copy of the current content. The returned list is unmodifiable, but the contained messages are identical to those in this instance. Thus they can be manipulated. which will be reflected by this instance. The returned list will reflect all future changes to this instance.- Returns:
- the list of all currently contained messages.
-
get
Return the message stored at the given position. The returned instance is identical to that contained in the message store; thus the message store will reflect any changes to it.- 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
Provide a user-defined table model. Can be set to null to prevent all further GUI updates.- Parameters:
tm- the table model to be used.- See Also:
-
setListModel
Provide a user-defined list model. Can be set to null to prevent all further GUI updates.- Parameters:
lm- the list model to be used.- See Also:
-
getTableModel
Returns the user-defined table model, if set, or a lazy constructed instance of the default table modelMessageStore<M extends Message>.TableModel.- Returns:
- the currently used table model.
- See Also:
-
getListModel
Returns the user-defined list model, if set, or a lazy constructed instance of the default list modelMessageStore<M extends Message>.ListModel.- 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 list contents change bysetOrder(Comparator)orclear(). -
setOrder
Set the comparator which rules the sequential order of storing. The current content will be re-ordered and the GUI models will be notified.- Parameters:
comp- the comparator to apply. If it is null, then no re-ordering takes place, and future messages will again be appended to the end of the store.
-
getOrder
Returns the comparator which rules the sequential order of storing.- Returns:
- the comparator which rules the sequential order of storing.
-
clearNestingLevel
public void clearNestingLevel()Resets the current nesting level to 0. -
receive
Store the message to the interal list and notify the GUI representations.- Specified by:
receivein interfaceMessageReceiver<M extends Message>- Parameters:
message- to receive.
-