ptolemy.cg.lib
Class ModularCompiledSDFTypedCompositeActor

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.kernel.CompositeEntity
                      extended by ptolemy.actor.CompositeActor
                          extended by ptolemy.actor.TypedCompositeActor
                              extended by ptolemy.actor.LazyTypedCompositeActor
                                  extended by ptolemy.cg.lib.ModularCompiledSDFTypedCompositeActor
All Implemented Interfaces:
java.io.Serializable, java.lang.Cloneable, Actor, Executable, FiringsRecordable, Initializable, TypedActor, Changeable, Configurable, Debuggable, DebugListener, Derivable, Instantiable, LazyComposite, ModelErrorHandler, MoMLExportable, Moveable, Nameable

public class ModularCompiledSDFTypedCompositeActor
extends LazyTypedCompositeActor

An aggregation of typed actors with lazy evaluation. The contents of this actor can be created in the usual way via visual editor by dragging in other actors and ports and connecting them. When it exports a MoML description of itself, it describes its ports and parameters in the usual way, but contained actors, relations, and their interconnections are exported within <configure> </configure> tags. When reloading the MoML description, evaluation of the MoML within the configure tags is deferred until there is an explicit request for the contents. This behavior is useful for large complicated models where the time it takes to instantiate the entire model is large. It permits opening and browsing the model without a long wait. However, the cost comes typically when running the model. The instantiation time will be added to the time it takes to preinitialize the model.

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

... MoML elements giving library contents ...

?>
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.

Since:
Ptolemy II 8.1
Version:
$Id: ModularCompiledSDFTypedCompositeActor.java 56138 2009-11-11 17:32:55Z cxh $
Author:
Bert Rodiers, Dai Bui
See Also:
Serialized Form
Accepted Rating:
Red (rodiers)
Proposed Rating:
Red (rodiers)

Nested Class Summary
 
Nested classes/interfaces inherited from class ptolemy.actor.LazyTypedCompositeActor
LazyTypedCompositeActor.ContainedObjectsIterator
 
Field Summary
private  boolean _addedSubscribersFromProfile
           
private  ModularSDFCodeGenerator _codeGenerator
           
private  int _creatingPubSub
           
private  java.lang.reflect.Method _fireMethod
           
private  boolean _generatingCode
           
private  boolean _isOpaque
           
private  java.lang.Object _objectWrapper
           
private  Profile _profile
           
private  long _receiversVersion
           
private  java.util.Map<java.lang.String,IOPort> _subscriberPorts
           
private  java.util.Map<java.lang.String,IORelation> _subscriberRelations
           
private static boolean _USE_PROFILE
           
 Parameter recompileHierarchy
          A boolean parameter to enforce recompilation of this ModularCodeGenTypedCompositeActor and all contained ModularCodeGenTypedCompositeActors.
 Parameter recompileThisLevel
          A boolean parameter to enforce recompilation of this ModularCodeGenTypedCompositeActor.
 
Fields inherited from class ptolemy.actor.LazyTypedCompositeActor
_configureDone, _populating
 
Fields inherited from class ptolemy.actor.CompositeActor
_actorFiringListeners, _causalityInterface, _initializables, _notifyingActorFiring, _publishedPorts, _publisherRelations, _stopRequested
 
Fields inherited from class ptolemy.kernel.CompositeEntity
_levelCrossingLinks
 
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
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.
 
Method Summary
protected  void _addEntity(ComponentEntity entity)
          Add an entity or class definition to this container.
protected  void _addRelation(ComponentRelation relation)
          Add a relation to this container.
private  void _createCodeGenerator()
           
private  void _generateCode()
           
private  Profile _getProfile()
           
private  void _init()
           
private  boolean _isPublishedPort(IOPort port)
           
private  boolean _isSubscribedPort(IOPort port)
           
private  boolean _modelChanged()
           
private  java.lang.String _pubSubChannelName(IOPort port, boolean publisher, boolean subscriber)
           
protected  void _removeEntity(ComponentEntity entity)
          Remove the specified entity.
protected  void _removeRelation(ComponentRelation relation)
          Remove the specified relation.
private  void _setRecompileFlag()
           
private  void _transferOutputs(IOPort port, java.lang.Object outputTokens)
           
 void attributeChanged(Attribute attribute)
          React to a change in an attribute.
static java.lang.String classToActorName(java.lang.String className)
          Generate actor name from its class name
 void connectionsChanged(Port port)
          Invalidate the schedule and type resolution and create new receivers if the specified port is an opaque output port.
 Profile.Port convertProfilePort(IOPort port)
          Convert this Ptolemy port to a port that will be saved in the profile.
 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()
           
 void initialize()
          Create receivers and invoke the preinitialize() method of the local director.
 boolean isOpaque()
          Always return true (opaque)
 void linkToPublishedPort(java.lang.String name, IOPort subscriberPort)
          Link the subscriberPort with a already registered "published port" coming from a publisher.
 ComponentRelation newRelation(java.lang.String name)
          Create a new relation with the specified name, add it to the relation list, and return it.
 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.
 
Methods inherited from class ptolemy.actor.LazyTypedCompositeActor
_exportMoMLContents, allCompositeEntityList, 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
 
Methods inherited from class ptolemy.actor.TypedCompositeActor
_addPort, _checkTypesFromTo, _typeConstraintsFromTo, newPort, resolveTypes, typeConstraintList, typeConstraints
 
Methods inherited from class ptolemy.actor.CompositeActor
_actorFiring, _actorFiring, _finishedAddEntity, _getPublishedPort, _setDirector, addActorFiringListener, addInitializable, addPiggyback, createSchedule, getCausalityInterface, getDirector, getExecutiveDirector, getManager, inferringWidths, inferWidths, inputPortList, isFireFunctional, isStrict, iterate, linkToPublishedPort, needsWidthInference, newInsideReceiver, newReceiver, notifyConnectivityChange, outputPortList, postfire, prefire, recordFiring, removeActorFiringListener, removeInitializable, removePiggyback, requestChange, setContainer, setDirector, setManager, stop, terminate, unlinkToPublishedPort
 
Methods inherited from class ptolemy.kernel.CompositeEntity
_adjustDeferrals, _deepOpaqueEntityList, _description, _recordDecoratedAttributes, _validateSettables, allAtomicEntityList, allowLevelCrossingConnect, connect, connect, containedObjectsIterator, deepGetEntities, exportLinks, getAttribute, getEntities, getPort, getRelations, isAtomic, numEntities, numRelations, removeAllEntities, removeAllRelations, statistics
 
Methods inherited from class ptolemy.kernel.ComponentEntity
_checkContainer, _getContainedObject, _propagateExistence, getContainer, instantiate, moveDown, moveToFirst, moveToIndex, moveToLast, moveUp, propagateExistence, setName
 
Methods inherited from class ptolemy.kernel.Entity
_removePort, connectedPortList, connectedPorts, getPorts, linkedRelationList, linkedRelations, removeAllPorts
 
Methods inherited from class ptolemy.kernel.InstantiableNamedObj
_setParent, 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, _removeAttribute, _splitName, _stripNumericSuffix, addChangeListener, addDebugListener, attributeList, attributeList, attributeTypeChanged, clone, 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, propagateValue, propagateValues, removeChangeListener, removeDebugListener, 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
getCausalityInterface, getDirector, getExecutiveDirector, getManager, inputPortList, newReceiver, outputPortList
 
Methods inherited from interface ptolemy.actor.Executable
isFireFunctional, isStrict, iterate, postfire, prefire, stop, terminate
 
Methods inherited from interface ptolemy.actor.Initializable
addInitializable, removeInitializable
 
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

recompileHierarchy

public Parameter recompileHierarchy
A boolean parameter to enforce recompilation of this ModularCodeGenTypedCompositeActor and all contained ModularCodeGenTypedCompositeActors.


recompileThisLevel

public Parameter recompileThisLevel
A boolean parameter to enforce recompilation of this ModularCodeGenTypedCompositeActor.


_addedSubscribersFromProfile

private boolean _addedSubscribersFromProfile

_generatingCode

private boolean _generatingCode

_codeGenerator

private ModularSDFCodeGenerator _codeGenerator

_fireMethod

private transient java.lang.reflect.Method _fireMethod

_objectWrapper

private java.lang.Object _objectWrapper

_isOpaque

private boolean _isOpaque

_receiversVersion

private long _receiversVersion

_creatingPubSub

private int _creatingPubSub

_profile

private Profile _profile

_subscriberPorts

private java.util.Map<java.lang.String,IOPort> _subscriberPorts

_subscriberRelations

private java.util.Map<java.lang.String,IORelation> _subscriberRelations

_USE_PROFILE

private static boolean _USE_PROFILE
Constructor Detail

ModularCompiledSDFTypedCompositeActor

public ModularCompiledSDFTypedCompositeActor()
Construct a library in the default workspace with no container and an empty string as its name. Add the library to the workspace directory. Increment the version number of the workspace.


ModularCompiledSDFTypedCompositeActor

public ModularCompiledSDFTypedCompositeActor(Workspace workspace)
Construct a library in the specified workspace with no container and an empty string as a name. You can then change the name with setName(). If the workspace argument is null, then use the default workspace. Add the actor to the workspace directory. Increment the version number of the workspace.

Parameters:
workspace - The workspace that will list the actor.

ModularCompiledSDFTypedCompositeActor

public ModularCompiledSDFTypedCompositeActor(CompositeEntity container,
                                             java.lang.String name)
                                      throws NameDuplicationException,
                                             IllegalActionException
Construct a library with the given container and name.

Parameters:
container - The container.
name - The name of this library.
Throws:
IllegalActionException - If the entity cannot be contained by the proposed container.
NameDuplicationException - If the container already has an actor with this name.
Method Detail

convertProfilePort

public Profile.Port convertProfilePort(IOPort port)
                                throws IllegalActionException
Convert this Ptolemy port to a port that will be saved in the profile.

Parameters:
port - The Ptolemy port.
Throws:
IllegalActionException - When the width can't be retrieved.

attributeChanged

public void attributeChanged(Attribute attribute)
                      throws IllegalActionException
React to a change in an attribute. This method is called by a contained attribute when its value changes. This overrides the base class so that if the attribute is an instance of TypeAttribute, then it sets the type of the port.

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

classToActorName

public static java.lang.String classToActorName(java.lang.String className)
Generate actor name from its class name

Parameters:
className - The class name of the actor
Returns:
a String that declares the actor name

connectionsChanged

public void connectionsChanged(Port port)
Invalidate the schedule and type resolution and create new receivers if the specified port is an opaque output port. Also, notify the containers of any ports deeply connected on the inside by calling their connectionsChanged() methods, since their width may have changed.

Overrides:
connectionsChanged in class CompositeActor
Parameters:
port - The port that has connection changes.

createReceivers

public void createReceivers()
                     throws IllegalActionException
Create receivers for each port. If the port is an input port, then receivers are created for outside connections. If it is an output port, then receivers are created for inside connections. This method replaces any pre-existing receivers, so any data they contain will be lost.

Specified by:
createReceivers in interface Actor
Overrides:
createReceivers in class CompositeActor
Throws:
IllegalActionException - If any port throws it.
See Also:
AtomicActor.createReceivers(), CompositeActor.createReceivers()

portList

public java.util.List portList()
Get the ports belonging to this entity. The order is the order in which they became contained by this entity. This method is read-synchronized on the workspace.

Overrides:
portList in class Entity
Returns:
An unmodifiable list of Port objects.

fire

public void fire()
          throws IllegalActionException
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. The transfer is accomplished by calling the transferInputs() method of the local director (the exact behavior of which depends on the domain). If the actor is not opaque, throw an exception. This method is read-synchronized on the workspace, so the fire() method of the director need not be (assuming it is only called from here). After the fire() method of the director returns, send any output data created by calling the local director's transferOutputs method.

Specified by:
fire in interface Executable
Overrides:
fire in class CompositeActor
Throws:
IllegalActionException - If there is no director, or if the director's fire() method throws it, or if the actor is not opaque.

initialize

public void initialize()
                throws IllegalActionException
Create receivers and invoke the preinitialize() method of the local director. If this actor is not opaque, throw an exception. This method also resets the protected variable _stopRequested to false, so if a derived class overrides this method, then it should also do that. This method is read-synchronized on the workspace, so the preinitialize() method of the director need not be, assuming it is only called from here.

Specified by:
initialize in interface Initializable
Overrides:
initialize in class CompositeActor
Throws:
IllegalActionException - If there is no director, or if the director's preinitialize() method throws it, or if this actor is not opaque.

isOpaque

public boolean isOpaque()
Always return true (opaque)

Overrides:
isOpaque in class CompositeActor
Returns:
True if the entity is opaque.
See Also:
CompositeEntity

linkToPublishedPort

public void linkToPublishedPort(java.lang.String name,
                                IOPort subscriberPort)
                         throws IllegalActionException,
                                NameDuplicationException
Link the subscriberPort with a already registered "published port" coming from a publisher. The name is the name being used in the matching process to match publisher and subscriber. A subscriber interested in the output of this publisher uses the name. This registration process of publisher typically happens before the model is preinitialized, for example when opening the model. The subscribers will look for publishers during the preinitialization phase.

Overrides:
linkToPublishedPort in class CompositeActor
Parameters:
name - The name is being used in the matching process to match publisher and subscriber.
subscriberPort - The subscribed port.
Throws:
NameDuplicationException - If there are name conflicts as a result of the added relations or ports.
IllegalActionException - If the published port cannot be found.

newRelation

public ComponentRelation newRelation(java.lang.String name)
                              throws NameDuplicationException
Create a new relation with the specified name, add it to the relation list, and return it. Derived classes can override this to create domain-specific subclasses of ComponentRelation. This method is write-synchronized on the workspace and increments its version number. This overrides the base class to force evaluation of any deferred MoML. This is necessary so that name collisions are detected deterministically and so that order of relations does not change depending on whether evaluation has occurred.

Overrides:
newRelation in class LazyTypedCompositeActor
Parameters:
name - The name of the new relation.
Returns:
The new relation.
Throws:
IllegalActionException - If name argument is null.
NameDuplicationException - If name collides with a name already in the container.

preinitialize

public void preinitialize()
                   throws IllegalActionException
Create receivers and invoke the preinitialize() method of the local director. If this actor is not opaque, throw an exception. This method also resets the protected variable _stopRequested to false, so if a derived class overrides this method, then it should also do that. This method is read-synchronized on the workspace, so the preinitialize() method of the director need not be, assuming it is only called from here.

Specified by:
preinitialize in interface Initializable
Overrides:
preinitialize in class CompositeActor
Throws:
IllegalActionException - If there is no director, or if the director's preinitialize() method throws it, or if this actor is not opaque.

registerPublisherPort

public void registerPublisherPort(java.lang.String name,
                                  IOPort port)
                           throws NameDuplicationException,
                                  IllegalActionException
Register a "published port" coming from a publisher. The name is the name being used in the matching process to match publisher and subscriber. A subscriber interested in the output of this publisher uses the same name. This registration process of publisher typically happens before the model is preinitialized, for example when opening the model. The subscribers will look for publishers during the preinitialization phase.

Overrides:
registerPublisherPort in class CompositeActor
Parameters:
name - The name is being used in the matching process to match publisher and subscriber.
port - The published port.
Throws:
NameDuplicationException - If the published port is already registered.
IllegalActionException - If the published port can't be added.

stopFire

public void stopFire()
Request that execution of the current iteration complete. do nothing in this case

Specified by:
stopFire in interface Executable
Overrides:
stopFire in class CompositeActor

unlinkToPublishedPort

public void unlinkToPublishedPort(java.lang.String name,
                                  IOPort subscriberPort)
                           throws IllegalActionException
Unlink the subscriberPort with a already registered "published port" coming from a publisher. The name is the name being used in the matching process to match publisher and subscriber. A subscriber interested in the output of this publisher uses the name. This registration process of publisher typically happens before the model is preinitialized, for example when opening the model. The subscribers will look for publishers during the preinitialization phase.

Overrides:
unlinkToPublishedPort in class CompositeActor
Parameters:
name - The name is being used in the matching process to match publisher and subscriber.
subscriberPort - The subscribed port.
Throws:
NameDuplicationException - If there are name conflicts as a result of the added relations or ports.
IllegalActionException - If the published port cannot be found.

unregisterPublisherPort

public void unregisterPublisherPort(java.lang.String name,
                                    IOPort publisherPort)
Unregister a "published port" coming from a publisher. The name is the name being used in the matching process to match publisher and subscriber. A subscriber interested in the output of this publisher uses the same name. This registration process of publisher typically happens before the model is preinitialized, for example when opening the model. The subscribers will look for publishers during the preinitialization phase.

Overrides:
unregisterPublisherPort in class CompositeActor
Parameters:
name - The name is being used in the matching process to match publisher and subscriber. This will be the port that should be removed
publisherPort - The publisher port.

wrapup

public void wrapup()
            throws IllegalActionException
Invoke the wrapup() method of all the actors contained in the director's container. In this base class wrapup() is called on the associated actors in the order of their creation. If the container is not an instance of CompositeActor, then this method does nothing.

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.

Specified by:
wrapup in interface Initializable
Overrides:
wrapup in class CompositeActor
Throws:
IllegalActionException - If the wrapup() method of one of the associated actors throws it.

getProfile

public Profile getProfile()

_addEntity

protected void _addEntity(ComponentEntity entity)
                   throws IllegalActionException,
                          NameDuplicationException
Add an entity or class definition to this container. This method should not be used directly. Call the setContainer() method of the entity instead. This method does not set the container of the entity to point to this composite entity. It assumes that the entity is in the same workspace as this container, but does not check. The caller should check. Derived classes may override this method to constrain the the entity to a subclass of ComponentEntity. This method is not synchronized on the workspace, so the caller should be. This overrides the base class to first populate the actor, if necessary, by calling populate(). This ensures that the entity being added now appears in order after the ones previously specified and lazily instantiated.

Overrides:
_addEntity in class LazyTypedCompositeActor
Parameters:
entity - Entity to contain.
Throws:
IllegalActionException - If the entity has no name, or the action would result in a recursive containment structure.
NameDuplicationException - If the name collides with a name already in the entity.

_addRelation

protected void _addRelation(ComponentRelation relation)
                     throws IllegalActionException,
                            NameDuplicationException
Add a relation to this container. This method should not be used directly. Call the setContainer() method of the relation instead. This method does not set the container of the relation to refer to this container. This method is not synchronized on the workspace, so the caller should be. This overrides the base class to first populate the actor, if necessary, by calling populate(). This ensures that the relation being added now appears in order after the ones previously specified and lazily instantiated.

Overrides:
_addRelation in class LazyTypedCompositeActor
Parameters:
relation - Relation to contain.
Throws:
IllegalActionException - If the relation has no name.
NameDuplicationException - If the name collides with a name already on the contained relations list.

_removeEntity

protected void _removeEntity(ComponentEntity entity)
Remove the specified entity. This method should not be used directly. Call the setContainer() method of the entity instead with a null argument. The entity is assumed to be contained by this composite (otherwise, nothing happens). This does not alter the entity in any way. This method is not synchronized on the workspace, so the caller should be. This overrides the base class to first populate the actor, if necessary, by calling populate(). This ensures that the entity being removed now actually exists.

Overrides:
_removeEntity in class LazyTypedCompositeActor
Parameters:
entity - The entity to remove.

_removeRelation

protected void _removeRelation(ComponentRelation relation)
Remove the specified relation. This method should not be used directly. Call the setContainer() method of the relation instead with a null argument. The relation is assumed to be contained by this composite (otherwise, nothing happens). This does not alter the relation in any way. This method is not synchronized on the workspace, so the caller should be. This overrides the base class to first populate the actor, if necessary, by calling populate(). This ensures that the relation being removed now actually exists.

Overrides:
_removeRelation in class LazyTypedCompositeActor
Parameters:
relation - The relation to remove.

_createCodeGenerator

private void _createCodeGenerator()
                           throws IllegalActionException,
                                  NameDuplicationException
Throws:
IllegalActionException
NameDuplicationException

_init

private void _init()

_isSubscribedPort

private boolean _isSubscribedPort(IOPort port)

_isPublishedPort

private boolean _isPublishedPort(IOPort port)

_generateCode

private void _generateCode()
                    throws KernelException
Throws:
KernelException

_getProfile

private Profile _getProfile()

_modelChanged

private boolean _modelChanged()
                       throws IllegalActionException
Throws:
IllegalActionException

_pubSubChannelName

private java.lang.String _pubSubChannelName(IOPort port,
                                            boolean publisher,
                                            boolean subscriber)

_setRecompileFlag

private void _setRecompileFlag()
                        throws IllegalActionException
Throws:
IllegalActionException

_transferOutputs

private void _transferOutputs(IOPort port,
                              java.lang.Object outputTokens)
                       throws IllegalActionException
Throws:
IllegalActionException