Package ptolemy.actor.lib
Class RecordAssembler
- java.lang.Object
-
- ptolemy.kernel.util.NamedObj
-
- ptolemy.kernel.InstantiableNamedObj
-
- ptolemy.kernel.Entity<T>
-
- ptolemy.kernel.ComponentEntity<T>
-
- ptolemy.actor.AtomicActor<TypedIOPort>
-
- ptolemy.actor.TypedAtomicActor
-
- ptolemy.actor.lib.RecordAssembler
-
- All Implemented Interfaces:
java.lang.Cloneable
,Actor
,Executable
,FiringsRecordable
,Initializable
,TypedActor
,Changeable
,Debuggable
,DebugListener
,Derivable
,Instantiable
,ModelErrorHandler
,MoMLExportable
,Moveable
,Nameable
- Direct Known Subclasses:
OrderedRecordAssembler
public class RecordAssembler extends TypedAtomicActor
On each firing, read one token from each connected input port and assemble them into a RecordToken. Disconnected input ports are ignored. The labels for the RecordToken much match the names of the input ports. This is achieved using two type constraints:- output ≥ {x = typeOf(inputPortX), y = typeOf(inputPortY), ..} , which requires the types of the input ports to be compatible with the corresponding types in the output record.
- each input ≥ the type of the corresponding field inside the output record, which together with the first constraint forces the input types to be exactly equal to the types of the corresponding fields in the output record. This constraint is intended to back- propagate type information upstream, not to assure type compatibility. Therefore, this constraint is only set up for input ports that do not already have a type declared.
To use this class, instantiate it, and then add input ports (instances of TypedIOPort). This actor is polymorphic. The type constraint is that the type of each record field is no less than the type of the corresponding input port.
Note that if the display name of a port is set, display name is used in the type constraints instead of name. This is useful in case fields to add to the record contain a period, because periods are not allowed in port names.
- Since:
- Ptolemy II 1.0
- Version:
- $Id$
- Author:
- Yuhong Xiong, Marten Lohstroh
- See Also:
RecordDisassembler
- Pt.AcceptedRating:
- Yellow (cxh)
- Pt.ProposedRating:
- Yellow (yuhong)
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class ptolemy.kernel.Entity
Entity.ContainedObjectsIterator
-
-
Field Summary
Fields Modifier and Type Field Description protected java.util.Map<java.lang.String,TypedIOPort>
_portMap
Keeps track of which name or alias is associated with which port.TypedIOPort
output
The output port.-
Fields inherited from class ptolemy.actor.TypedAtomicActor
_typesValid
-
Fields inherited from class ptolemy.actor.AtomicActor
_actorFiringListeners, _initializables, _notifyingActorFiring, _stopRequested
-
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
-
Fields inherited from interface ptolemy.actor.Executable
COMPLETED, NOT_READY, STOP_ITERATING
-
-
Constructor Summary
Constructors Constructor Description RecordAssembler(CompositeEntity container, java.lang.String name)
Construct a RecordAssembler with the given container and name.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected java.util.Set<Inequality>
_customTypeConstraints()
Set up and return two type constraints.protected java.util.Set<Inequality>
_defaultTypeConstraints()
Do not establish the usual default type constraints.protected void
_mapPorts()
Map port names or aliases to port objects.protected java.util.Map<java.lang.String,TypedIOPort>
_newPortMap()
Return a new _portMap, which is a map between port names and strings.java.lang.Object
clone(Workspace workspace)
Clone the actor into the specified workspace.void
fire()
Read one token from each input port, assemble them into a RecordToken, and send the RecordToken to the output.void
notifyOfNameChange(NamedObj object)
React to a name change of contained ports.boolean
prefire()
Return true if all connected input ports have tokens, false if some connected input ports do not have a token.-
Methods inherited from class ptolemy.actor.TypedAtomicActor
_containedTypeConstraints, _fireAt, _fireAt, attributeTypeChanged, clone, isBackwardTypeInferenceEnabled, newPort, typeConstraintList, typeConstraints
-
Methods inherited from class ptolemy.actor.AtomicActor
_actorFiring, _actorFiring, _declareDelayDependency, addActorFiringListener, addInitializable, connectionsChanged, createReceivers, declareDelayDependency, getCausalityInterface, getDirector, getExecutiveDirector, getManager, initialize, inputPortList, isFireFunctional, isStrict, iterate, newReceiver, outputPortList, postfire, preinitialize, pruneDependencies, recordFiring, removeActorFiringListener, removeDependency, removeInitializable, setContainer, 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
_addPort, _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, _containedDecorators, _copyChangeRequestList, _debug, _debug, _debug, _debug, _debug, _executeChangeRequests, _getIndentPrefix, _isMoMLSuppressed, _markContentsDerived, _notifyHierarchyListenersAfterChange, _notifyHierarchyListenersBeforeChange, _propagateValue, _removeAttribute, _splitName, _stripNumericSuffix, addChangeListener, addDebugListener, addHierarchyListener, attributeChanged, attributeDeleted, attributeList, attributeList, decorators, 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, removeAttribute, removeChangeListener, removeDebugListener, removeHierarchyListener, 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.kernel.util.Derivable
getDerivedLevel, getDerivedList, propagateValue
-
Methods inherited from interface ptolemy.actor.Executable
isFireFunctional, isStrict, iterate, postfire, stop, stopFire, terminate
-
Methods inherited from interface ptolemy.actor.Initializable
addInitializable, initialize, preinitialize, removeInitializable, wrapup
-
Methods inherited from interface ptolemy.kernel.util.Nameable
description, getContainer, getDisplayName, getFullName, getName, getName, setName
-
-
-
-
Field Detail
-
output
public TypedIOPort output
The output port.
-
_portMap
protected java.util.Map<java.lang.String,TypedIOPort> _portMap
Keeps track of which name or alias is associated with which port.
-
-
Constructor Detail
-
RecordAssembler
public RecordAssembler(CompositeEntity container, java.lang.String name) throws NameDuplicationException, IllegalActionException
Construct a RecordAssembler with the given container and name.- Parameters:
container
- The container.name
- The name of this actor.- Throws:
IllegalActionException
- If this actor cannot be contained by the proposed container.NameDuplicationException
- If the container already has an actor with this name.
-
-
Method Detail
-
clone
public java.lang.Object clone(Workspace workspace) throws java.lang.CloneNotSupportedException
Clone the actor into the specified workspace.- Overrides:
clone
in classTypedAtomicActor
- 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 one token from each input port, assemble them into a RecordToken, and send the RecordToken to the output.- Specified by:
fire
in interfaceExecutable
- Overrides:
fire
in classAtomicActor<TypedIOPort>
- Throws:
IllegalActionException
- If there is no director.
-
notifyOfNameChange
public void notifyOfNameChange(NamedObj object)
React to a name change of contained ports. Update the internal mapping from names and aliases to port objects, and invalidate the resolved types.- Overrides:
notifyOfNameChange
in classNamedObj
- Parameters:
object
- The object that changed.
-
prefire
public boolean prefire() throws IllegalActionException
Return true if all connected input ports have tokens, false if some connected input ports do not have a token.- Specified by:
prefire
in interfaceExecutable
- Overrides:
prefire
in classAtomicActor<TypedIOPort>
- Returns:
- True if all connected input ports have tokens and the parent method returns true.
- Throws:
IllegalActionException
- If the hasToken() call to the input port throws it.- See Also:
IOPort.hasToken(int)
-
_customTypeConstraints
protected java.util.Set<Inequality> _customTypeConstraints()
Set up and return two type constraints.- output ≥ {x = typeOf(inputPortX), y = typeOf(inputPortY), ..} , which requires the types of the input ports to be compatible with the corresponding types in the output record.
- each input ≥ the type of the corresponding field inside the output record, which together with the first constraint forces the input types to be exactly equal to the types of the corresponding fields in the output record. This constraint is intended to back- propagate type information upstream, not to assure type compatibility. Therefore, this constraint is only set up for input ports that do not already have a type declared.
- Overrides:
_customTypeConstraints
in classTypedAtomicActor
- Returns:
- A set of type constraints
- See Also:
ConstructAssociativeType
,ExtractFieldType
-
_defaultTypeConstraints
protected java.util.Set<Inequality> _defaultTypeConstraints()
Do not establish the usual default type constraints.- Overrides:
_defaultTypeConstraints
in classTypedAtomicActor
- Returns:
- null
-
_newPortMap
protected java.util.Map<java.lang.String,TypedIOPort> _newPortMap()
Return a new _portMap, which is a map between port names and strings. Derived classes like OrderedRecordAssembler would return a map with a different ordering.- Returns:
- a Map from port names to TypedIOPorts.
-
_mapPorts
protected void _mapPorts()
Map port names or aliases to port objects. If the mapping has changed, then invalidate the resolved types, which forces new type constraints with appropriate field names to be generated.
-
-