public class ModularCompiledSDFTypedCompositeActor extends ModularCodeGenLazyTypedCompositeActor
The lazy contents of this composite are specified via the configure() method, which is called by the MoML parser and passed MoML code. The MoML is evaluated lazily; i.e. it is not actually evaluated until there is a request for its contents, via a call to getEntity(), numEntities(), entityList(), relationList(), or any related method. You can also force evaluation of the MoML by calling populate(). Accessing the attributes or ports of this composite does not trigger a populate() call, so a visual editor can interact with the actor from the outside in the usual way, enabling connections to its ports, editing of its parameters, and rendering of its custom icon, if any.
The configure method can be passed a URL or MoML text or both. If it is given MoML text, that text will normally be wrapped in a processing instruction, as follows:
<?moml <group> ... MoML elements giving library contents ... </group> ?>The processing instruction, which is enclosed in "<?" and "?>" prevents premature evaluation of the MoML. The processing instruction has a target, "moml", which specifies that it contains MoML code. The keyword "moml" in the processing instruction must be exactly as above, or the entire processing instruction will be ignored. The populate() method strips off the processing instruction and evaluates the MoML elements. The group element allows the library contents to be given as a set of elements (the MoML parser requires that there always be a single top-level element, which in this case will be the group element).
One subtlety in using this class arises because of a problem typical of lazy evaluation. A number of exceptions may be thrown because of errors in the MoML code when the MoML code is evaluated. However, since that code is evaluated lazily, it is evaluated in a context where these exceptions are not expected. There is no completely clean solution to this problem; our solution is to translate all exceptions to runtime exceptions in the populate() method. This method, therefore, violates the condition for using runtime exceptions in that the condition that causes these exceptions to be thrown is not a testable precondition.
A second subtlety involves cloning. When this class is cloned, if the configure MoML text has not yet been evaluated, then the clone is created with the same (unevaluated) MoML text, rather than being populated with the contents specified by that text. If the object is cloned after being populated, the clone will also be populated. Cloning is used in actor-oriented classes to create subclasses or instances of a class. When a LazyTypedCompositeActor contained by a subclass or an instance is populated, it delegates to the instance in the class definition. When that instance is populated, all of the derived instances in subclasses and instances of the class will also be populated as a side effect.
A third subtlety is that parameters of this actor cannot refer to contained entities or relations, nor to attributes contained by those. This is a rather esoteric use of expressions, so this limitation may not be onerous. You probably didn't know you could do that anyway. An attempt to make such references will simply result in the expression failing to evaluate.
Red (rodiers) |
Red (rodiers) |
LazyTypedCompositeActor.ContainedObjectsIterator
_addedSubscribersFromProfile, _creatingPubSub, _fireMethod, _generatingCode, _objectWrapper, _profile, _subscriberPorts, recompileHierarchy, recompileThisLevel
_configureDone, _populating
_actorFiringListeners, _causalityInterface, _derivedPiggybacks, _initializables, _notifyingActorFiring, _piggybacks, _publishedPorts, _publisherRelations, _stopRequested, _subscribedPorts
_levelCrossingLinks
_changeListeners, _changeLock, _changeRequests, _debugging, _debugListeners, _deferChangeRequests, _elementName, _isPersistent, _verbose, _workspace, ATTRIBUTES, CLASSNAME, COMPLETE, CONTENTS, DEEP, FULLNAME, LINKS
COMPLETED, NOT_READY, STOP_ITERATING
Constructor and Description |
---|
ModularCompiledSDFTypedCompositeActor()
Construct a library in the default workspace with no
container and an empty string as its name.
|
ModularCompiledSDFTypedCompositeActor(CompositeEntity container,
java.lang.String name)
Construct a library with the given container and name.
|
ModularCompiledSDFTypedCompositeActor(Workspace workspace)
Construct a library in the specified workspace with
no container and an empty string as a name.
|
Modifier and Type | Method and Description |
---|---|
protected boolean |
_isPublishedPort(IOPort port)
Return true if the port is a is connected to a publisher.
|
protected java.lang.String |
_pubSubChannelName(IOPort port,
boolean publisher,
boolean subscriber)
Return the name of a Publisher or Subscriber channel name.
|
void |
attributeChanged(Attribute attribute)
React to a change in an attribute.
|
void |
createReceivers()
Create receivers for each port.
|
void |
fire()
If this actor is opaque, transfer any data from the input ports
of this composite to the ports connected on the inside, and then
invoke the fire() method of its local director.
|
Profile |
getProfile()
Return the profile for the composite actor.
|
void |
initialize()
Create receivers and invoke the
preinitialize() method of the local director.
|
IOPort |
linkToPublishedPort(java.lang.String name,
IOPort subscriberPort)
Link the subscriberPort with a already registered "published port" coming
from a publisher.
|
java.util.List |
portList()
Get the ports belonging to this entity.
|
void |
preinitialize()
Create receivers and invoke the
preinitialize() method of the local director.
|
void |
registerPublisherPort(java.lang.String name,
IOPort port)
Register a "published port" coming from a publisher.
|
void |
stopFire()
Request that execution of the current iteration complete.
|
void |
unlinkToPublishedPort(java.lang.String name,
IOPort subscriberPort)
Unlink the subscriberPort with a already registered "published port" coming
from a publisher.
|
void |
unregisterPublisherPort(java.lang.String name,
IOPort publisherPort)
Unregister a "published port" coming
from a publisher.
|
void |
wrapup()
Invoke the wrapup() method of all the actors contained in the
director's container.
|
_addEntity, _addRelation, _fire, _isSubscribedPort, _removeEntity, _removeRelation, _setRecompileFlag, _transferOutputs, classToActorName, convertProfilePort, newRelation
_exportMoMLContents, classDefinitionList, clone, configure, deepContains, deepEntityList, deepOpaqueEntityList, deepRelationSet, entityList, entityList, exportMoML, getConfigureSource, getConfigureText, getEntity, getRelation, lazyAllAtomicEntityList, lazyAllCompositeEntityList, lazyClassDefinitionList, lazyContainedObjectsIterator, lazyDeepEntityList, lazyEntityList, lazyRelationList, numberOfEntities, numberOfRelations, populate, relationList, setClassDefinition, uniqueName
_addPort, _checkTypesFromTo, _destinationTypeConstraints, attributeTypeChanged, isBackwardTypeInferenceEnabled, newPort, resolveTypes, typeConstraintList, typeConstraints
_actorFiring, _actorFiring, _finishedAddEntity, _setDirector, _transferPortParameterInputs, addActorFiringListener, addInitializable, addPiggyback, connectionsChanged, createSchedule, getCausalityInterface, getDirector, getExecutiveDirector, getManager, getPublishedPort, getPublishedPortChannel, getPublishedPorts, getSubscribedPortChannel, inferringWidths, inferWidths, inputPortList, isFireFunctional, isOpaque, isPublishedPort, isStrict, iterate, linkToPublishedPort, linkToPublishedPort, linkToPublishedPort, needsWidthInference, newInsideReceiver, newReceiver, notifyConnectivityChange, outputPortList, postfire, prefire, recordFiring, registerPublisherPort, removeActorFiringListener, removeInitializable, removePiggyback, requestChange, setContainer, setDirector, setManager, stop, terminate, unlinkToPublishedPort, unlinkToPublishedPort, unlinkToPublishedPort, unregisterPublisherPort
_adjustDeferrals, _containedDecorators, _deepOpaqueEntityList, _description, _validateSettables, allAtomicEntityList, allowLevelCrossingConnect, connect, connect, containedObjectsIterator, deepCompositeEntityList, deepGetEntities, deepNamedObjList, exportLinks, getAttribute, getEntities, getPort, getRelations, isAtomic, lazyAllCompositeTransparentAndOpaqueEntityList, numEntities, numRelations, removeAllEntities, removeAllRelations, statistics
_checkContainer, _getContainedObject, _propagateExistence, getContainer, instantiate, moveDown, moveToFirst, moveToIndex, moveToLast, moveUp, propagateExistence, setName
_removePort, connectedPortList, connectedPorts, getPorts, linkedRelationList, linkedRelations, removeAllPorts
_setParent, getChildren, getElementName, getParent, getPrototypeList, isClassDefinition, isWithinClassDefinition
_addAttribute, _adjustOverride, _attachText, _cloneFixAttributeFields, _copyChangeRequestList, _debug, _debug, _debug, _debug, _debug, _executeChangeRequests, _getIndentPrefix, _isMoMLSuppressed, _markContentsDerived, _notifyHierarchyListenersAfterChange, _notifyHierarchyListenersBeforeChange, _propagateValue, _removeAttribute, _splitName, _stripNumericSuffix, addChangeListener, addDebugListener, addHierarchyListener, attributeDeleted, attributeList, attributeList, clone, decorators, 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, message, notifyOfNameChange, propagateValue, propagateValues, removeAttribute, removeChangeListener, removeDebugListener, removeHierarchyListener, setClassName, setDeferringChangeRequests, setDerivedLevel, setDisplayName, setModelErrorHandler, setPersistent, setSource, sortContainedObjects, toplevel, toString, validateSettables, workspace
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
getCausalityInterface, getDirector, getExecutiveDirector, getManager, inputPortList, newReceiver, outputPortList
isFireFunctional, isStrict, iterate, postfire, prefire, stop, terminate
addInitializable, removeInitializable
description, getContainer, getDisplayName, getFullName, getName, getName, setName
getDerivedLevel, getDerivedList, propagateValue
public ModularCompiledSDFTypedCompositeActor() throws IllegalActionException, NameDuplicationException
IllegalActionException
- If the entity cannot be contained
by the proposed container.NameDuplicationException
- If the container already has an
actor with this name.public ModularCompiledSDFTypedCompositeActor(Workspace workspace) throws IllegalActionException, NameDuplicationException
workspace
- The workspace that will list the actor.IllegalActionException
- If the entity cannot be contained
by the proposed container.NameDuplicationException
- If the container already has an
actor with this name.public ModularCompiledSDFTypedCompositeActor(CompositeEntity container, java.lang.String name) throws NameDuplicationException, IllegalActionException
container
- The container.name
- The name of this library.IllegalActionException
- If the entity cannot be contained
by the proposed container.NameDuplicationException
- If the container already has an
actor with this name.public void attributeChanged(Attribute attribute) throws IllegalActionException
attributeChanged
in class TypedCompositeActor
attribute
- The attribute that changed.IllegalActionException
- If the change is not acceptable
to this container.public void createReceivers() throws IllegalActionException
createReceivers
in interface Actor
createReceivers
in class CompositeActor
IllegalActionException
- If any port throws it.AtomicActor.createReceivers()
,
CompositeActor.createReceivers()
public java.util.List portList()
public void fire() throws IllegalActionException
fire
in interface Executable
fire
in class CompositeActor
IllegalActionException
- If there is no director, or if
the director's fire() method throws it, or if the actor is not
opaque.public void initialize() throws IllegalActionException
initialize
in interface Initializable
initialize
in class CompositeActor
IllegalActionException
- If there is no director, or if
the director's preinitialize() method throws it, or if this actor
is not opaque.public IOPort linkToPublishedPort(java.lang.String name, IOPort subscriberPort) throws IllegalActionException, NameDuplicationException
linkToPublishedPort
in class CompositeActor
name
- The name is being used in the matching process
to match publisher and subscriber.subscriberPort
- The subscribed port.NameDuplicationException
- If there are name conflicts
as a result of the added relations or ports.IllegalActionException
- If the published port cannot be found.public void preinitialize() throws IllegalActionException
preinitialize
in interface Initializable
preinitialize
in class CompositeActor
IllegalActionException
- If there is no director, or if
the director's preinitialize() method throws it, or if this actor
is not opaque.public void registerPublisherPort(java.lang.String name, IOPort port) throws NameDuplicationException, IllegalActionException
registerPublisherPort
in class CompositeActor
name
- The name is being used in the matching process
to match publisher and subscriber.port
- The published port.NameDuplicationException
- If the published port
is already registered.IllegalActionException
- If the published port can't
be added.public void stopFire()
stopFire
in interface Executable
stopFire
in class CompositeActor
public void unlinkToPublishedPort(java.lang.String name, IOPort subscriberPort) throws IllegalActionException
unlinkToPublishedPort
in class CompositeActor
name
- The name is being used in the matching process
to match publisher and subscriber.subscriberPort
- The subscribed port.IllegalActionException
- If the published port cannot be found.public void unregisterPublisherPort(java.lang.String name, IOPort publisherPort) throws IllegalActionException, NameDuplicationException
unregisterPublisherPort
in class CompositeActor
name
- The name is being used in the matching process
to match publisher and subscriber. This will be the port
that should be removedpublisherPort
- The publisher port.IllegalActionException
- If thrown by the parent method.NameDuplicationException
- If thrown by the parent method.public void wrapup() throws IllegalActionException
This method should be invoked once per execution. None of the other action methods should be invoked after it in the execution. This method is not synchronized on the workspace, so the caller should be.
wrapup
in interface Initializable
wrapup
in class CompositeActor
IllegalActionException
- If the wrapup() method of
one of the associated actors throws it.public Profile getProfile()
protected boolean _isPublishedPort(IOPort port)
_isPublishedPort
in class ModularCodeGenLazyTypedCompositeActor
port
- The port to look up.protected java.lang.String _pubSubChannelName(IOPort port, boolean publisher, boolean subscriber)
_pubSubChannelName
in class ModularCodeGenLazyTypedCompositeActor
port
- The port.publisher
- True if the corresponding Publisher should
be returned.subscriber
- True if the corresponding Subscriber should
be returned.