ptolemy.actor.lib
Class Publisher
java.lang.Object
ptolemy.kernel.util.NamedObj
ptolemy.kernel.InstantiableNamedObj
ptolemy.kernel.Entity
ptolemy.kernel.ComponentEntity
ptolemy.actor.AtomicActor
ptolemy.actor.TypedAtomicActor
ptolemy.actor.lib.Publisher
- All Implemented Interfaces:
- java.io.Serializable, java.lang.Cloneable, Actor, Executable, FiringsRecordable, Initializable, TypedActor, Changeable, Debuggable, DebugListener, Derivable, Instantiable, ModelErrorHandler, MoMLExportable, Moveable, Nameable
- Direct Known Subclasses:
- PublisherNonStrictTest
public class Publisher
- extends TypedAtomicActor
This actor publishes input tokens on a named channel. The tokens are
"tunneled" to any instance of Subscriber that names the same channel
and that is under the control of the same director. That is, it can
be at a different level of the hierarchy, or in an entirely different
composite actor, as long as the relevant composite actors are
transparent (have no director).
It is an error to have two instances of Publisher using the same
channel under the control of the same director. When you create a
new Publisher, by default, it has no channel name. You have to
specify a channel name to use it.
This actor actually has a hidden output port that is connected
to all subscribers via hidden "liberal links" (links that are
allowed to cross levels of the hierarchy). Consequently,
any data dependencies that the director might assume on a regular
"wired" connection will also be assumed across Publisher-Subscriber
pairs. Similarly, type constraints will propagate across
Publisher-Subscriber pairs. That is, the type of the Subscriber
output will match the type of the Publisher input.
- Since:
- Ptolemy II 5.2
- Version:
- $Id: Publisher.java 57046 2010-01-27 23:35:53Z cxh $
- Author:
- Edward A. Lee, Raymond A. Cardillo, Bert Rodiers
- See Also:
- Serialized Form
- Accepted Rating:
- Proposed Rating:
Fields inherited from class ptolemy.kernel.util.NamedObj |
_changeListeners, _changeLock, _changeRequests, _debugging, _debugListeners, _elementName, _isPersistent, _verbose, _workspace, ATTRIBUTES, CLASSNAME, COMPLETE, CONTENTS, DEEP, FULLNAME, LINKS |
Constructor Summary |
Publisher(CompositeEntity container,
java.lang.String name)
Construct a publisher with the specified container and name. |
Method Summary |
void |
attributeChanged(Attribute attribute)
If the attribute is the channel, increment the workspace version
to force cached receiver lists to be updated, and invalidate
the schedule and resolved types of the director, if there is one. |
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 and send it to the subscribers,
if any. |
void |
preinitialize()
Override the base class to ensure that links to subscribers
have been updated. |
void |
setContainer(CompositeEntity container)
If the new container is null, delete the named channel. |
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.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 |
channel
public StringParameter channel
- The name of the channel. Subscribers that reference this same
channel will receive any transmissions to this port.
This is a string that defaults to empty, indicating that
no channel is specified. A channel must be set before
the actor executes or an exception will occur.
input
public TypedIOPort input
- The input port. This base class imposes no type constraints except
that the type of the input cannot be greater than the type of the
output.
output
public TypedIOPort output
- The output port. By default, the type of this output is constrained
to be at least that of the input. This port is hidden by default
and the actor handles creating connections to it.
_channel
protected java.lang.String _channel
- Cached channel name.
Publisher
public Publisher(CompositeEntity container,
java.lang.String name)
throws IllegalActionException,
NameDuplicationException
- Construct a publisher 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.
attributeChanged
public void attributeChanged(Attribute attribute)
throws IllegalActionException
- If the attribute is the channel, increment the workspace version
to force cached receiver lists to be updated, and invalidate
the schedule and resolved types of the director, if there is one.
- Overrides:
attributeChanged
in class NamedObj
- 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. This calls the
base class and then set the filename public member.
- Overrides:
clone
in class AtomicActor
- 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 and send it to the subscribers,
if any.
- Specified by:
fire
in interface Executable
- Overrides:
fire
in class AtomicActor
- Throws:
IllegalActionException
- If there is no director.
preinitialize
public void preinitialize()
throws IllegalActionException
- Override the base class to ensure that links to subscribers
have been updated.
- Specified by:
preinitialize
in interface Initializable
- Overrides:
preinitialize
in class AtomicActor
- Throws:
IllegalActionException
- If there is already a publisher
publishing on the same channel, or if the channel name has not
been specified.
setContainer
public void setContainer(CompositeEntity container)
throws IllegalActionException,
NameDuplicationException
- If the new container is null, delete the named channel.
- Overrides:
setContainer
in class AtomicActor
- 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()