Class: AbstractWidget

AbstractWidget

The base class for the hierarchy of the provided widgets. It is an abstract class representing a view on a set of tabular data, which is supposed to be some sort of HTML visualization widget. Each row in the tabular model is associated with a key.
The class offers some management methods to modify/poll the model behind the view but also implements the SubscriptionListener interface to be automatically fed by listening on a Subscription.
When listening for Subscription events the widget will choose what to use as key for its model based on the Subscription mode of the first Subscription it was added to as a listener:
  • If the Subscription mode is MERGE or RAW, the widget will use the item as key: each subscribed item will generate a row in the model. The key name will be the item name when available, otherwise the 1-based item position within the Subscription.
  • If the Subscription mode is COMMAND, the widget will use the value of the "key" field as key: each row in the COMMAND subscription will generate a row in the model. More precisely, the key value will be expressed as "<item> <key>" where <item> is the item name when available, otherwise the 1-based item position within the Subscription.
    Note that this behavior is naturally extended to two-level subscriptions.
  • If the Subscription mode is DISTINCT, the widget will use a progressive number as key: each update will generate a row in the model.
For each update received, all the included fields will be integrated into the row related to the update key. The field name will be the one specified on the related Subscription, when available; otherwise, it will be the 1-based field position within the related Subscription.
Note that if the Subscription contains the same item name or field name multiple times, their updates will not be distinguished in the model and the last value processed by the library for that name will be assigned to the model. You should ensure that item name or field name collisions cannot occur if the colliding names are used to represent different entities; for instance, this holds for collisions between first-level and second-level fields in a two-level Subscription. Collisions are also possible if the widget is added as a listener to other Subscription instances. In this case, also note that the new updates will be processed and integrated in the model in the way already determined for the first Subscription associated; so, you should ensure that the various Subscriptions yield compatible updates.
For each SubscriptionListener#onClearSnapshot event received from any of the Subscription the widget is listening to, all the rows internally associated to the cleared item are removed. In case of collisions between different items feeding the same row the row will be considered pertaining to the first item that fed it.

Note that methods from the SubscriptionListener should not be called by custom code.
Note that before any change to the internal model can be made, and thus before an instance of this class can be used as listener for a Subscription, the AbstractWidget#parseHtml method has to be called to prepare the view.
The class is not meant as a base class for the creation of custom widgets. The class constructor and its prototype should never be used directly.

new AbstractWidget()

This is an abstract class; no instances of this class should be created.
See:

Extends

Method Summary

clean
Removes all the rows from the model and reflects the change on the view.
getValue
Returns the value from the model for the specified key/field pair.
parseHtml
Abstract method.
removeRow
Removes a row from the internal model and reflects the change on the view.
setAutoCleanBehavior
Utility method that can be used to control part of the behavior of the widget in case it is used as a listener for one or more Subscription instances.
updateRow
Updates a row in the internal model and reflects the change on the view.

Inherited Methods

Method Detail

clean()

Removes all the rows from the model and reflects the change on the view.

Lifecycle: once the AbstractWidget#parseHtml method has been called, this method can be used at any time.

Throws:
if parseHtml has not been executed yet.
Type
IllegalStateException

getValue(key, field) → {String}

Returns the value from the model for the specified key/field pair. If the row for the specified key does not exist or if the specified field is not available in the row then null is returned.

Lifecycle: This method can be called at any time.

Parameters:
Name Type Description
key String The key associated with the row to be read.
field String The field to be read from the row.
Returns:
The current value for the specified field of the specified row, possibly null. If the value for the specified field has never been assigned in the model, the method also returns null.
Type
String

parseHtml()

Abstract method. See subclasses descriptions for details.

removeRow(key)

Removes a row from the internal model and reflects the change on the view. If no row associated with the given key is found nothing is done.

Lifecycle: once the AbstractWidget#parseHtml method has been called, this method can be used at any time.

Parameters:
Name Type Description
key String The key associated with the row to be removed.
Throws:
if parseHtml has not been executed yet.
Type
IllegalStateException

setAutoCleanBehavior(onFirstSubscribe, onLastUnsubscribe)

Utility method that can be used to control part of the behavior of the widget in case it is used as a listener for one or more Subscription instances.
Specifying the two flags it is possible to decide to clean the model and view based on the status (subscribed or not) of the Subscriptions this instance is listening to.

Lifecycle: This method can be called at any time.

Parameters:
Name Type Description
onFirstSubscribe boolean If true a AbstractWidget#clean call will be automatically performed if in the list of Subscriptions this instance is listening to there is no Subscription in the subscribed status and an onSubscription is fired by one of such Subscriptions.
As a special case, if in the list of Subscriptions this instance is listening to there is no Subscription in the subscribed status and this instance starts listening to a new Subscription that is already in the subscribed status, then it will be considered as if an onSubscription event was fired and thus a clean() call will be performed.
onLastUnsubscribe boolean If true a AbstractWidget#clean call will be automatically performed if in the list of Subscriptions this instance is listening to there is only one Subscription in the subscribed status and the onUnsubscription for such Subscription is fired.
As a special case, if in the list of Subscriptions this instance is listening to there is only one Subscription in the subscribed status and this instance stops listening to such Subscription then it will be considered as if the onUnsubscription event for that Subscription was fired and thus a clean() call will be performed.
See:

updateRow(key, newValues)

Updates a row in the internal model and reflects the change on the view. If no row associated with the given key is found then a new row is created.
Example usage:
myWidget.updateRow("key1", {field1:"val1",field2:"val2"});

Lifecycle: once the AbstractWidget#parseHtml method has been called, this method can be used at any time. If called while an updateRow on the same internal model is still executing (e.g. if called while handling an onVisualUpdate callback), then the new update:

  • if pertaining to a different key and/or if called on a Chart instance, will be postponed until the first updateRow execution terminates;
  • if pertaining to the same key and if called on a StaticGrid / DynaGrid instance, will be merged with the current one.

Parameters:
Name Type Description
key String The key associated with the row to be updated/added.
newValues Object A JavaScript object containing name/value pairs to fill the row in the mode.
Note that the internal model does not have a fixed number of fields; each update can add new fields to the model by simply specifying them. Also, an update having fewer fields than the current model will have its missing fields considered as unchanged.
Throws:
if parseHtml has not been executed yet.
Type
IllegalStateException