public class InteractiveShell extends TypedAtomicActor implements Placeable, ShellInterpreter, UsesInvokeAndWait
This actor creates a command shell on the screen, sending commands that are typed by the user to its output port, and reporting values received at its input by displaying them. Each time it fires, it reads the input, displays it, then displays a command prompt (which by default is ">>"), and waits for a command to be typed. The command is terminated by an enter or return character, which then results in the command being produced on the output. In a typical use of this actor, it will be preceded by a SampleDelay actor which will provide an initial welcome message or instructions. The output will then be routed to some subsystem for processing, and the result will be fed back to the input.
If the user types "quit" or "exit" (without the quotation marks) on the prompt, then this actor's postfire() method will return false. Depending on the domain, this can result in the model execution stopping (in SDF, for example) or in subsequent firings of this actor being skipped (in DE, for example).
Note that because of complexities in Swing, if you resize the display window, then, unlike the plotters, the new size will not be persistent. That is, if you save the model and then re-open it, the new size is forgotten. The position, however, is persistent.
Modifier and Type | Class and Description |
---|---|
class |
InteractiveShell.ShellFrame
The frame that is created by an instance of ShellTableau.
|
class |
InteractiveShell.ShellTableau
Version of ExpressionShellTableau that records the size of
the display when it is closed.
|
Entity.ContainedObjectsIterator
Modifier and Type | Field and Description |
---|---|
TypedIOPort |
input
The input port.
|
TypedIOPort |
output
The output port.
|
PortParameter |
prompt
The prompt.
|
ShellTextArea |
shell
The shell window object.
|
_typesValid
_actorFiringListeners, _initializables, _notifyingActorFiring, _stopRequested
_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 |
---|
InteractiveShell(CompositeEntity container,
java.lang.String name)
Construct an actor with the given container and name.
|
Modifier and Type | Method and Description |
---|---|
protected java.util.Set<Inequality> |
_customTypeConstraints()
Set the input port greater than or equal to
BaseType.GENERAL in case backward type inference is
enabled and the input port has no type declared. |
protected void |
_exportMoMLContents(java.io.Writer output,
int depth)
Write a MoML description of the contents of this object.
|
java.lang.Object |
clone(Workspace workspace)
Clone the actor into the specified workspace.
|
java.lang.String |
evaluateCommand(java.lang.String command)
Evaluate the specified command.
|
void |
fire()
Read and display the input, then
wait for user input and produce the user data on the output.
|
java.lang.String |
getOutput()
Get the output string to be sent.
|
void |
initialize()
If the shell has not already been created, create it.
|
boolean |
isCommandComplete(java.lang.String command)
Return true if the specified command is complete (ready
to be interpreted).
|
void |
place(java.awt.Container container)
Specify the container into which this shell should be placed.
|
boolean |
postfire()
Override the base class to return false if the user has typed
"quit" or "exit".
|
void |
setContainer(CompositeEntity container)
Override the base class to remove the shell from its graphical
container if the argument is null.
|
void |
setDisplayName(java.lang.String name)
Set a name to present to the user.
|
void |
setName(java.lang.String name)
Set or change the name.
|
void |
setOutput(java.lang.String value)
Specify an output string to be sent.
|
void |
stop()
Override the base class to call notifyAll() to get out of
any waiting.
|
void |
wrapup()
Override the base class to make the shell uneditable.
|
_containedTypeConstraints, _defaultTypeConstraints, _fireAt, _fireAt, attributeTypeChanged, clone, isBackwardTypeInferenceEnabled, newPort, typeConstraintList, typeConstraints
_actorFiring, _actorFiring, _declareDelayDependency, addActorFiringListener, addInitializable, connectionsChanged, createReceivers, declareDelayDependency, getCausalityInterface, getDirector, getExecutiveDirector, getManager, inputPortList, isFireFunctional, isStrict, iterate, newReceiver, outputPortList, prefire, preinitialize, pruneDependencies, recordFiring, removeActorFiringListener, removeDependency, removeInitializable, stopFire, terminate
_adjustDeferrals, _checkContainer, _getContainedObject, _propagateExistence, getContainer, instantiate, isAtomic, isOpaque, moveDown, moveToFirst, moveToIndex, moveToLast, moveUp, propagateExistence
_addPort, _description, _removePort, _validateSettables, connectedPortList, connectedPorts, containedObjectsIterator, getAttribute, getPort, getPorts, linkedRelationList, linkedRelations, portList, removeAllPorts, setClassDefinition, uniqueName
_setParent, exportMoML, getChildren, getElementName, getParent, getPrototypeList, isClassDefinition, isWithinClassDefinition
_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, notifyOfNameChange, propagateValue, propagateValues, removeAttribute, removeChangeListener, removeDebugListener, removeHierarchyListener, requestChange, setClassName, setDeferringChangeRequests, setDerivedLevel, setModelErrorHandler, setPersistent, setSource, sortContainedObjects, toplevel, toString, validateSettables, workspace
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
createReceivers, getCausalityInterface, getDirector, getExecutiveDirector, getManager, inputPortList, newReceiver, outputPortList
isFireFunctional, isStrict, iterate, prefire, stopFire, terminate
addInitializable, preinitialize, removeInitializable
description, getContainer, getDisplayName, getFullName, getName, getName
getDerivedLevel, getDerivedList, propagateValue
public TypedIOPort input
public TypedIOPort output
public PortParameter prompt
foo
) and then set the value of the
prompt parameter to $foo
.public ShellTextArea shell
public InteractiveShell(CompositeEntity container, java.lang.String name) throws IllegalActionException, NameDuplicationException
container
- The container.name
- The name of this actor.IllegalActionException
- If the actor cannot be contained
by the proposed container.NameDuplicationException
- If the container already has an
actor with this name.public java.lang.Object clone(Workspace workspace) throws java.lang.CloneNotSupportedException
clone
in class TypedAtomicActor
workspace
- The workspace for the new object.java.lang.CloneNotSupportedException
- If a derived class has an
attribute that cannot be cloned.NamedObj.exportMoML(Writer, int, String)
,
NamedObj.setDeferringChangeRequests(boolean)
public java.lang.String evaluateCommand(java.lang.String command) throws java.lang.Exception
evaluateCommand
in interface ShellInterpreter
command
- The command.java.lang.Exception
- If something goes wrong processing the command.ShellTextArea.returnResult(String)
public void fire() throws IllegalActionException
fire
in interface Executable
fire
in class AtomicActor<TypedIOPort>
IllegalActionException
- If producing the output
causes an exception.public java.lang.String getOutput()
setOutput(String)
public void initialize() throws IllegalActionException
initialize
in interface Initializable
initialize
in class AtomicActor<TypedIOPort>
IllegalActionException
- If the parent class throws it.public boolean isCommandComplete(java.lang.String command)
isCommandComplete
in interface ShellInterpreter
command
- The command.public void place(java.awt.Container container)
public boolean postfire() throws IllegalActionException
postfire
in interface Executable
postfire
in class AtomicActor<TypedIOPort>
IllegalActionException
- If the superclass throws it.public void setContainer(CompositeEntity container) throws IllegalActionException, NameDuplicationException
setContainer
in class AtomicActor<TypedIOPort>
container
- The proposed container.IllegalActionException
- If the base class throws it.NameDuplicationException
- If the base class throws it.ComponentEntity.getContainer()
public void setDisplayName(java.lang.String name)
If the Plot window has been rendered, then the title of the Plot window will be updated to the value of the name parameter.
setDisplayName
in class NamedObj
name
- A name to present to the user.NamedObj.getDisplayName()
public void setName(java.lang.String name) throws IllegalActionException, NameDuplicationException
If the Plot window has been rendered, then the title of the Plot window will be updated to the value of the name parameter.
setName
in interface Nameable
setName
in class ComponentEntity<TypedIOPort>
name
- The new name.IllegalActionException
- If the name contains a period
or if the object is a derived object and the name argument does
not match the current name.NameDuplicationException
- Not thrown in this base class.
May be thrown by derived classes if the container already contains
an object with this name.NamedObj.getName()
,
NamedObj.getName(NamedObj)
public void setOutput(java.lang.String value)
value
- An output string to be sent.getOutput()
public void stop()
stop
in interface Executable
stop
in class AtomicActor<TypedIOPort>
public void wrapup() throws IllegalActionException
wrapup
in interface Initializable
wrapup
in class AtomicActor<TypedIOPort>
IllegalActionException
- If the parent class throws it.protected java.util.Set<Inequality> _customTypeConstraints()
BaseType.GENERAL
in case backward type inference is
enabled and the input port has no type declared._customTypeConstraints
in class TypedAtomicActor
protected void _exportMoMLContents(java.io.Writer output, int depth) throws java.io.IOException
_exportMoMLContents
in class Entity<TypedIOPort>
output
- The output stream to write to.depth
- The depth in the hierarchy, to determine indenting.java.io.IOException
- If an I/O error occurs.NamedObj.exportMoML(Writer, int)