Class ConstantPublisherPort
- java.lang.Object
-
- All Implemented Interfaces:
java.lang.Cloneable
,Initializable
,HasTypeConstraints
,Typeable
,Changeable
,Debuggable
,DebugListener
,Derivable
,HierarchyListener
,ModelErrorHandler
,MoMLExportable
,Moveable
,Nameable
public class ConstantPublisherPort extends PublisherPort
This is a specialized output port that publishes constant data sent on the specified named channel. The tokens are "tunneled" to any instance ofSubscriberPort
that names the same channel. IfPubSubPort.global
is false (the default), then this publisher will only send to instances of SubscriberPort that are 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). IfPubSubPort.global
is true, then the subscriber may be anywhere in the model, as long as its global parameter is also true.Note that this port should be used just like a
PublisherPort
. If you put it in an opaque composite actor, then it requires a token on the inside in order to produce its output. It will replace each token with the constant value. Similarly, if it is put into a transparent composite actor, then tokens must be sent through it. Those tokens will be replaced with the constant value. If it is put into an atomic actor, then the actor should call one of its broadcast or send methods, providing a token that will be replaced with the constant token. This pattern ensures that data dependencies work with this port just as with any other port.It is an error to have two instances of PublisherPort or ConstantPublisherPort using the same channel under the control of the same director. When you create a new PublisherPort or ConstantPublisherPort, by default, it has no channel name. You have to specify a channel name to use it.
How it works: When the channel name is specified, typically during model construction, this actor causes a relation to be created in the least opaque composite actor above it in the hierarchy and links to that relation. In addition, if
PubSubPort.global
is set to true, it causes a port to be created in that composite, and also links that port to the relation on the inside. The relation is recorded by the opaque composite. When a SubscriberPort is preinitialized that refers to the same channel, that SubscriberPort finds the relation (by finding the least opaque composite actor above it) and links to the relation. Some of these links are "liberal links" in that they cross levels of the hierarchy.Since publishers are linked to subscribers, 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 10.0
- Version:
- $Id$
- Author:
- Edward A. Lee
- Pt.AcceptedRating:
- Red (eal)
- Pt.ProposedRating:
- Yellow (eal)
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class ptolemy.actor.TypedIOPort
TypedIOPort.RunTimeTypeCheckException
-
Nested classes/interfaces inherited from class ptolemy.kernel.util.NamedObj
NamedObj.ContainedObjectsIterator
-
-
Field Summary
Fields Modifier and Type Field Description Parameter
constantValue
The constant value to publish.Parameter
numberOfTokens
The number of constant tokens to publish.-
Fields inherited from class ptolemy.actor.PublisherPort
propagateNameChanges
-
Fields inherited from class ptolemy.actor.PubSubPort
_channel, _global, channel, global, initialTokens
-
Fields inherited from class ptolemy.actor.TypedIOPort
_resolvedType, TYPE
-
Fields inherited from class ptolemy.actor.IOPort
_constantLimit, _constantToken, _constantTokensSent, _hasPortEventListeners, _portEventListeners, CONFIGURATION, defaultValue, RECEIVERS, REMOTERECEIVERS
-
Fields inherited from class ptolemy.kernel.Port
_insideLinks, _relationsList
-
Fields inherited from class ptolemy.kernel.util.NamedObj
_changeListeners, _changeLock, _changeRequests, _debugging, _debugListeners, _deferChangeRequests, _elementName, _isPersistent, _verbose, _workspace, ATTRIBUTES, CLASSNAME, COMPLETE, CONTENTS, DEEP, FULLNAME, LINKS
-
-
Constructor Summary
Constructors Constructor Description ConstantPublisherPort(ComponentEntity container, java.lang.String name)
Construct a constant publisher port with the specified name and container.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
broadcast(Token token)
Override the base class to replace the specified token with the value of constantValue.void
broadcast(Token[] tokenArray, int vectorLength)
Override the base class to replace the specified tokens with the value of constantValue.void
initialize()
Override the base class to initialize the token count.void
send(int channelIndex, Token token)
Override the base class to replace the specified token with the value of constantValue.void
send(int channelIndex, Token[] tokenArray, int vectorLength)
Override the base class to replace the specified tokens with the value of constantValue.-
Methods inherited from class ptolemy.actor.PublisherPort
addInitializable, attributeChanged, hierarchyChanged, hierarchyWillChange, preinitialize, setInput, setOutput, subscribers
-
Methods inherited from class ptolemy.actor.PubSubPort
clone, removeInitializable, setContainer, wrapup
-
Methods inherited from class ptolemy.actor.TypedIOPort
_checkContainer, _checkLiberalLink, _checkLink, _checkType, _checkTypedIOPortContainer, _description, addTypeListener, convert, getAutomaticTypeConversion, getType, getTypeTerm, isTypeAcceptable, removeTypeListener, sendInside, setAutomaticTypeConversion, setTypeAtLeast, setTypeAtLeast, setTypeAtMost, setTypeEquals, setTypeSameAs, typeConstraintList, typeConstraints
-
Methods inherited from class ptolemy.actor.IOPort
_checkLiberalLink, _exportMoMLContents, _getInsideWidth, _getOutsideWidth, _getReceiversLinkedToGroup, _newInsideReceiver, _newInsideReceiver, _newReceiver, _newReceiver, _notifyPortEventListeners, _removeReceivers, _setConstant, _wrapReceiver, addIOPortEventListener, broadcastClear, checkWidthConstraints, createReceivers, deepConnectedInPortList, deepConnectedInPorts, deepConnectedOutPortList, deepConnectedOutPorts, deepGetReceivers, get, get, getChannelForReceiver, getCommunicationAspects, getCurrentTime, getDefaultWidth, getInside, getInsideReceivers, getIOPortEventListeners, getModelTime, getModelTime, getReceivers, getReceivers, getReceivers, getRelationIndex, getRemoteReceivers, getRemoteReceivers, getWidth, getWidthFromConstraints, getWidthInside, hasNewToken, hasNewTokenInside, hasRoom, hasRoomInside, hasToken, hasToken, hasTokenInside, hasWidthConstraints, insertLink, insideSinkPortList, insideSourcePortList, invalidateCommunicationAspects, isInput, isInsideConnected, isKnown, isKnown, isKnownInside, isMultiport, isOutput, isOutsideConnected, liberalLink, link, numberOfSinks, numberOfSources, removeIOPortEventListener, reset, sendClear, sendClearInside, setDefaultWidth, setMultiport, setWidthEquals, setWidthEquals, sinkPortList, sourcePortList, transferInputs, transferOutputs, unlink, unlink, unlinkAll, unlinkAllInside, unlinkInside, unlinkInside
-
Methods inherited from class ptolemy.kernel.ComponentPort
_deepConnectedPortList, _deepConnectedPorts, _deepInsidePortList, _deepInsidePorts, _isInsideLinkable, deepConnectedPortList, deepConnectedPorts, deepInsidePortList, deepInsidePorts, insertInsideLink, insidePortList, insidePorts, insideRelationList, insideRelations, isDeeplyConnected, isInsideGroupLinked, isInsideLinked, isOpaque, numInsideLinks
-
Methods inherited from class ptolemy.kernel.Port
_getContainedObject, _propagateExistence, connectedPortList, connectedPorts, getContainer, isGroupLinked, isLinked, linkedRelationList, linkedRelations, moveDown, moveToFirst, moveToIndex, moveToLast, moveUp, numLinks, setName
-
Methods inherited from class ptolemy.kernel.util.NamedObj
_addAttribute, _adjustOverride, _attachText, _cloneFixAttributeFields, _containedDecorators, _copyChangeRequestList, _debug, _debug, _debug, _debug, _debug, _executeChangeRequests, _getIndentPrefix, _isMoMLSuppressed, _markContentsDerived, _notifyHierarchyListenersAfterChange, _notifyHierarchyListenersBeforeChange, _propagateValue, _removeAttribute, _splitName, _stripNumericSuffix, _validateSettables, addChangeListener, addDebugListener, addHierarchyListener, attributeDeleted, attributeList, attributeList, attributeTypeChanged, clone, containedObjectsIterator, decorators, deepContains, depthInHierarchy, description, description, event, executeChangeRequests, exportMoML, exportMoML, exportMoML, exportMoML, exportMoML, exportMoMLPlain, getAttribute, getAttribute, getAttributes, getChangeListeners, getClassName, getDecoratorAttribute, getDecoratorAttributes, getDerivedLevel, getDerivedList, getDisplayName, getElementName, getFullName, getModelErrorHandler, getName, getName, getPrototypeList, getSource, handleModelError, isDeferringChangeRequests, isOverridden, isPersistent, lazyContainedObjectsIterator, message, notifyOfNameChange, propagateExistence, propagateValue, propagateValues, removeAttribute, removeChangeListener, removeDebugListener, removeHierarchyListener, requestChange, setClassName, setDeferringChangeRequests, setDerivedLevel, setDisplayName, setModelErrorHandler, setPersistent, setSource, sortContainedObjects, toplevel, toString, uniqueName, validateSettables, workspace
-
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface ptolemy.kernel.util.Nameable
description, getContainer, getDisplayName, getFullName, getName, getName, setName
-
-
-
-
Constructor Detail
-
ConstantPublisherPort
public ConstantPublisherPort(ComponentEntity container, java.lang.String name) throws IllegalActionException, NameDuplicationException
Construct a constant publisher port with the specified name and container.- Parameters:
container
- The container actor.name
- The name of the port.- Throws:
IllegalActionException
- If the port is not of an acceptable class for the container, or if the container does not implement the Actor interface.NameDuplicationException
- If the name coincides with a port already in the container.
-
-
Method Detail
-
broadcast
public void broadcast(Token token) throws IllegalActionException, NoRoomException
Override the base class to replace the specified token with the value of constantValue.- Overrides:
broadcast
in classTypedIOPort
- Parameters:
token
- A token, which will be replaced.- Throws:
IllegalActionException
- Not thrown in this base class.NoRoomException
- If a send to one of the channels throws it.
-
broadcast
public void broadcast(Token[] tokenArray, int vectorLength) throws IllegalActionException, NoRoomException
Override the base class to replace the specified tokens with the value of constantValue.- Overrides:
broadcast
in classTypedIOPort
- Parameters:
tokenArray
- The token array to replace.vectorLength
- The number of elements of the token array to send.- Throws:
NoRoomException
- If there is no room in the receiver.IllegalActionException
- Not thrown in this base class.
-
initialize
public void initialize() throws IllegalActionException
Override the base class to initialize the token count.- Specified by:
initialize
in interfaceInitializable
- Overrides:
initialize
in classPublisherPort
- Throws:
IllegalActionException
- If initialTokens is invalid.
-
send
public void send(int channelIndex, Token token) throws IllegalActionException, NoRoomException
Override the base class to replace the specified token with the value of constantValue.- Overrides:
send
in classTypedIOPort
- Parameters:
channelIndex
- The index of the channel, from 0 to width-1token
- The token to replace, or null to send no token.- Throws:
NoRoomException
- If there is no room in the receiver.IllegalActionException
- Not thrown in this base class.
-
send
public void send(int channelIndex, Token[] tokenArray, int vectorLength) throws IllegalActionException, NoRoomException
Override the base class to replace the specified tokens with the value of constantValue.- Overrides:
send
in classTypedIOPort
- Parameters:
channelIndex
- The index of the channel, from 0 to width-1tokenArray
- The token array to replace.vectorLength
- The number of elements of of the token array to send.- Throws:
NoRoomException
- If there is no room in the receiver.IllegalActionException
- Not thrown in this base class.
-
-