ptolemy.actor.lib
Class SubscriptionAggregator

java.lang.Object
  extended by ptolemy.kernel.util.NamedObj
      extended by ptolemy.kernel.InstantiableNamedObj
          extended by ptolemy.kernel.Entity
              extended by ptolemy.kernel.ComponentEntity
                  extended by ptolemy.actor.AtomicActor
                      extended by ptolemy.actor.TypedAtomicActor
                          extended by ptolemy.actor.lib.Subscriber
                              extended by ptolemy.actor.lib.SubscriptionAggregator
All Implemented Interfaces:
java.io.Serializable, java.lang.Cloneable, Actor, Executable, FiringsRecordable, Initializable, TypedActor, Changeable, Debuggable, DebugListener, Derivable, Instantiable, ModelErrorHandler, MoMLExportable, Moveable, Nameable

public class SubscriptionAggregator
extends Subscriber

Aggregate data produced by multiple publishers. This is a generalization of the Subscriber (the base class) where the channel name is interpreted as a regular expression. Data produced by all publishers that publish on a channel name that matches the regular expression are aggregated using the operation given by the operation parameter.

Note that the channel parameter of the superclass is now a regular expression in this class. Thus, this class is usually slower than the superclass. One thing to watch out for is using . instead of \. and * instead of .+. For example, channel.foo.* might be faster as channel\.foo.+.

Since:
Ptolemy II 5.2
Version:
$Id: SubscriptionAggregator.java 57046 2010-01-27 23:35:53Z cxh $
Author:
Edward A. Lee, Raymond A. Cardillo, contributor: Christopher Brooks, Bert Rodiers
See Also:
Serialized Form
Accepted Rating:
Red (cxh)
Proposed Rating:
Green (cxh)

Nested Class Summary
 
Nested classes/interfaces inherited from class ptolemy.kernel.Entity
Entity.ContainedObjectsIterator
 
Field Summary
private  boolean _addOperation
          Indicator that the operation is "add" rather than "multiply".
private  java.util.regex.Pattern _channelPattern
          Regex Pattern for _channelName.
 StringParameter operation
          The operation used to aggregate the data produced by matching publishers.
 
Fields inherited from class ptolemy.actor.lib.Subscriber
_channel, channel, input, output
 
Fields inherited from class ptolemy.actor.AtomicActor
_actorFiringListeners, _initializables, _notifyingActorFiring, _stopRequested
 
Fields inherited from class ptolemy.kernel.util.NamedObj
_changeListeners, _changeLock, _changeRequests, _debugging, _debugListeners, _elementName, _isPersistent, _verbose, _workspace, ATTRIBUTES, CLASSNAME, COMPLETE, CONTENTS, DEEP, FULLNAME, LINKS
 
Fields inherited from interface ptolemy.actor.Executable
COMPLETED, NOT_READY, STOP_ITERATING
 
Constructor Summary
SubscriptionAggregator(CompositeEntity container, java.lang.String name)
          Construct a subscriber with the specified container and name.
 
Method Summary
protected  void _updateLinks()
          Update the connection to the publishers, if there are any.
 void attributeChanged(Attribute attribute)
          Override the base class to record the operation choice.
 java.lang.Object clone(Workspace workspace)
          Clone the actor into the specified workspace.
 void fire()
          Read at most one input token from each input channel, add all the tokens, and send the result to the output.
 void setContainer(CompositeEntity container)
          If the new container is null, delete the named channel.
 
Methods inherited from class ptolemy.actor.lib.Subscriber
preinitialize
 
Methods inherited from class ptolemy.actor.TypedAtomicActor
_addPort, _fireAt, _fireAt, attributeTypeChanged, clone, newPort, typeConstraintList, typeConstraints
 
Methods inherited from class ptolemy.actor.AtomicActor
_actorFiring, _actorFiring, addActorFiringListener, addInitializable, connectionsChanged, createReceivers, declareDelayDependency, getCausalityInterface, getDirector, getExecutiveDirector, getManager, initialize, inputPortList, isFireFunctional, isStrict, iterate, newReceiver, outputPortList, postfire, prefire, pruneDependencies, recordFiring, removeActorFiringListener, removeDependency, removeInitializable, stop, stopFire, terminate, wrapup
 
Methods inherited from class ptolemy.kernel.ComponentEntity
_adjustDeferrals, _checkContainer, _getContainedObject, _propagateExistence, getContainer, instantiate, isAtomic, isOpaque, moveDown, moveToFirst, moveToIndex, moveToLast, moveUp, propagateExistence, setName
 
Methods inherited from class ptolemy.kernel.Entity
_description, _exportMoMLContents, _removePort, _validateSettables, connectedPortList, connectedPorts, containedObjectsIterator, getAttribute, getPort, getPorts, linkedRelationList, linkedRelations, portList, removeAllPorts, setClassDefinition, uniqueName
 
Methods inherited from class ptolemy.kernel.InstantiableNamedObj
_setParent, exportMoML, getChildren, getElementName, getParent, getPrototypeList, isClassDefinition, isWithinClassDefinition
 
Methods inherited from class ptolemy.kernel.util.NamedObj
_addAttribute, _adjustOverride, _attachText, _cloneFixAttributeFields, _debug, _debug, _debug, _debug, _debug, _getIndentPrefix, _isMoMLSuppressed, _markContentsDerived, _propagateValue, _recordDecoratedAttributes, _removeAttribute, _splitName, _stripNumericSuffix, addChangeListener, addDebugListener, attributeList, attributeList, deepContains, depthInHierarchy, description, description, event, executeChangeRequests, exportMoML, exportMoML, exportMoML, exportMoML, exportMoMLPlain, getAttribute, getAttributes, getChangeListeners, getClassName, getDecoratorAttribute, getDecoratorAttributes, getDerivedLevel, getDerivedList, getDisplayName, getFullName, getModelErrorHandler, getName, getName, getSource, handleModelError, isDeferringChangeRequests, isOverridden, isPersistent, lazyContainedObjectsIterator, message, propagateValue, propagateValues, removeChangeListener, removeDebugListener, requestChange, setClassName, setDeferringChangeRequests, setDerivedLevel, setDisplayName, setModelErrorHandler, setPersistent, setSource, sortContainedObjects, toplevel, toString, validateSettables, workspace
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface ptolemy.actor.Actor
createReceivers, getCausalityInterface, getDirector, getExecutiveDirector, getManager, inputPortList, newReceiver, outputPortList
 
Methods inherited from interface ptolemy.actor.Executable
isFireFunctional, isStrict, iterate, postfire, prefire, stop, stopFire, terminate
 
Methods inherited from interface ptolemy.actor.Initializable
addInitializable, initialize, removeInitializable, wrapup
 
Methods inherited from interface ptolemy.kernel.util.Nameable
description, getContainer, getDisplayName, getFullName, getName, getName, setName
 
Methods inherited from interface ptolemy.kernel.util.Derivable
getDerivedLevel, getDerivedList, propagateValue
 

Field Detail

operation

public StringParameter operation
The operation used to aggregate the data produced by matching publishers. The choices are "add" and "multiply". Note that "multiply" is a poor choice if the data type has a non-commutative multiplication operation (e.g. matrix types) because the result will be nondeterministic. This is a string that defaults to "add".


_addOperation

private boolean _addOperation
Indicator that the operation is "add" rather than "multiply".


_channelPattern

private java.util.regex.Pattern _channelPattern
Regex Pattern for _channelName.

Constructor Detail

SubscriptionAggregator

public SubscriptionAggregator(CompositeEntity container,
                              java.lang.String name)
                       throws IllegalActionException,
                              NameDuplicationException
Construct a subscriber with the specified container and name.

Parameters:
container - The container actor.
name - The name of the actor.
Throws:
IllegalActionException - If the actor is not of an acceptable class for the container.
NameDuplicationException - If the name coincides with an actor already in the container.
Method Detail

attributeChanged

public void attributeChanged(Attribute attribute)
                      throws IllegalActionException
Override the base class to record the operation choice.

Overrides:
attributeChanged in class Subscriber
Parameters:
attribute - The attribute that changed.
Throws:
IllegalActionException - If the change is not acceptable to this container.

clone

public java.lang.Object clone(Workspace workspace)
                       throws java.lang.CloneNotSupportedException
Clone the actor into the specified workspace.

Overrides:
clone in class Subscriber
Parameters:
workspace - The workspace for the new object.
Returns:
A new actor.
Throws:
java.lang.CloneNotSupportedException - If a derived class contains an attribute that cannot be cloned.
See Also:
NamedObj.exportMoML(Writer, int, String), NamedObj.setDeferringChangeRequests(boolean)

fire

public void fire()
          throws IllegalActionException
Read at most one input token from each input channel, add all the tokens, and send the result to the output.

Specified by:
fire in interface Executable
Overrides:
fire in class Subscriber
Throws:
IllegalActionException - If there is no director, or if there is no input connection.

setContainer

public void setContainer(CompositeEntity container)
                  throws IllegalActionException,
                         NameDuplicationException
If the new container is null, delete the named channel.

Overrides:
setContainer in class Subscriber
Parameters:
container - The proposed container.
Throws:
IllegalActionException - If the action would result in a recursive containment structure, or if this entity and container are not in the same workspace.
NameDuplicationException - If the container already has an entity with the name of this entity.
See Also:
ComponentEntity.getContainer()

_updateLinks

protected void _updateLinks()
                     throws IllegalActionException
Update the connection to the publishers, if there are any.

Overrides:
_updateLinks in class Subscriber
Throws:
IllegalActionException - If creating the link triggers an exception.