ptolemy.actor.lib
Class ClassWrapper
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.ClassWrapper
- All Implemented Interfaces:
- java.io.Serializable, java.lang.Cloneable, Actor, Executable, FiringsRecordable, Initializable, TypedActor, Changeable, Debuggable, DebugListener, Derivable, Instantiable, ModelErrorHandler, MoMLExportable, Moveable, Nameable
public class ClassWrapper
- extends TypedAtomicActor
This actor wraps (an instance of) a Java class specified by the
className parameter. The actor has no ports when created.
If an input port is added to the actor, the name of the port is
interpreted as the name of a method of the Java class. When the
actor is fired and a token is received from this input port, the
value of the token is treated as the argument(s) for invoking
the method. If the method has a return value and the actor has
an output port named methodNameResult, the return value
is wrapped in a token that is sent to the output port.
For example, suppose the specified class has a method named foo
and the actor has an input port of the same name. If method foo
takes no argument, the token received from port foo is
treated as the trigger for invoking the method, and its content
is ignored. If method foo takes arguments, the input token
should be a record token whose field values are used as the
arguments. The field labels of the record token should be "arg1",
"arg2", etc. For example, if method foo takes two double arguments,
the record token "{arg1 = 0.0, arg2 = 1.0}" can be the input.
A special case is when method foo takes one argument, the token
containing the argument value can be input directly, and does not
need to be put into a record token.
FIXME: Need to set type constraints appropriately.
Need (and how) to handle overloaded methods.
- Since:
- Ptolemy II 2.0
- Version:
- $Id: ClassWrapper.java 57040 2010-01-27 20:52:32Z cxh $
- Author:
- Xiaojun Liu
- 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 |
ClassWrapper(CompositeEntity container,
java.lang.String name)
Construct an actor with the given container and name. |
Method Summary |
private void |
_invoke(IOPort port,
Token argv)
|
void |
fire()
Read at most one token from each input port. |
void |
preinitialize()
Get the Class object of the specified class. |
Methods inherited from class ptolemy.actor.AtomicActor |
_actorFiring, _actorFiring, addActorFiringListener, addInitializable, clone, connectionsChanged, createReceivers, declareDelayDependency, getCausalityInterface, getDirector, getExecutiveDirector, getManager, initialize, inputPortList, isFireFunctional, isStrict, iterate, newReceiver, outputPortList, postfire, prefire, 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 |
_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, attributeChanged, 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 |
className
public StringAttribute className
- The name of the Java class.
_methodTable
private java.util.Hashtable _methodTable
_instance
private java.lang.Object _instance
_class
private java.lang.Class _class
ClassWrapper
public ClassWrapper(CompositeEntity container,
java.lang.String name)
throws NameDuplicationException,
IllegalActionException
- Construct an actor with the given container and name.
In addition to invoking the base class constructor, create
the className parameter.
- Parameters:
container
- The container of this actor.name
- The name of this actor.
- Throws:
IllegalActionException
- If the actor cannot be contained
by the proposed container.
NameDuplicationException
- If the container already has an
actor with the specified name.
fire
public void fire()
throws IllegalActionException
- Read at most one token from each input port. If an input port
has a token, the content of the token is used as argument(s)
for invoking (on the wrapped instance or class) the method of
the same name as the port. If the method has a return value,
the value is wrapped in a token, and is sent to the output port
named methodNameResult.
- Specified by:
fire
in interface Executable
- Overrides:
fire
in class AtomicActor
- Throws:
IllegalActionException
- If the method invocation fails.
preinitialize
public void preinitialize()
throws IllegalActionException
- Get the Class object of the specified class. Gather method
invocation information corresponding to each input port. If
at least one method corresponding to a port is not static,
create an instance of the specified class.
- Specified by:
preinitialize
in interface Initializable
- Overrides:
preinitialize
in class AtomicActor
- Throws:
IllegalActionException
- If the specified class cannot
be loaded, or there is no method of the same name as an input
port, or an instance of the class cannot be created.
_invoke
private void _invoke(IOPort port,
Token argv)
throws IllegalActionException
- Throws:
IllegalActionException