com.hdcookbook.grin
Class SEShowCommand

java.lang.Object
  extended by com.hdcookbook.grin.commands.Command
      extended by com.hdcookbook.grin.SEShowCommand
All Implemented Interfaces:
SENode

public class SEShowCommand
extends Command
implements SENode

Represents an individual command that is defined in-line in a show file. An SEShowCommand participates in generating the Xlet subclass of Command for a show. It also runs something reasonable in SE emulation mode.

Author:
Bill Foote (http://jovial.com)
See Also:
SEShowCommands

Field Summary
 
Fields inherited from class com.hdcookbook.grin.commands.Command
show
 
Method Summary
 void accept(SEShowVisitor visitor)
          Calls the visit method corresponding to this node type.
 java.lang.String addSubCommand(Command cmd)
          Adds a sub-command to this command object.
 void changeFeatureReference(Feature from, Feature to)
          Change a feature reference from one feature to a new one.
 void execute()
          Execute the command.
 void execute(Show caller)
          Execute the command.
 int getCommandNumber()
           
 java.lang.String getGrinviewMethodBody()
          Returns Grinview method body for this command.
 java.lang.String getJavaSource(boolean xlet)
           
 java.lang.String getOriginalSource()
          Returns the original source as specified in Show script file.
 java.lang.String getRuntimeClassName()
          Returns the class that should be constructed at Show runtime to represent this SENode.
 Command[] getSubCommands()
           
 java.lang.String getXletMethodBody()
          Returns Xlet method body for this command.
 void postProcess(ShowBuilder builder)
          Do any needed post-processing in this show.
 void setGrinviewMethodBody(java.lang.String methodBody)
          Sets the java source of the body of the method for the GrinView version.
 void setOriginalSource(java.lang.String originalSource)
          Sets the original source as specified in Show file.
 void setXletMethodBody(java.lang.String methodBody)
          Sets the java source of the body of the method for the JavaSE version.
 java.lang.String toString()
          Return a user-friendly string for this command for debugging purposes.
 void writeInstanceData(GrinDataOutputStream out)
          Record this node information to the binary file format.
 
Methods inherited from class com.hdcookbook.grin.commands.Command
cloneIfNeeded, deferNextCommands
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Method Detail

addSubCommand

public java.lang.String addSubCommand(Command cmd)
Adds a sub-command to this command object. To execute it, run the java expression "runSubCommand(number);"

Parameters:
cmd - The command to add
Returns:
The java source code to invoke this command in the xlet or in griview.

getCommandNumber

public int getCommandNumber()

getSubCommands

public Command[] getSubCommands()

setGrinviewMethodBody

public void setGrinviewMethodBody(java.lang.String methodBody)
                           throws java.io.IOException
Sets the java source of the body of the method for the GrinView version.

Parameters:
methodBody -
Throws:
java.io.IOException

getGrinviewMethodBody

public java.lang.String getGrinviewMethodBody()
Returns Grinview method body for this command.


setXletMethodBody

public void setXletMethodBody(java.lang.String methodBody)
                       throws java.io.IOException
Sets the java source of the body of the method for the JavaSE version. The special string JAVA_COMMAND_BODY must occur somewhere in the string. This will be replaced by the automatically-generated methods.

Parameters:
methodBody -
Throws:
java.io.IOException

getXletMethodBody

public java.lang.String getXletMethodBody()
Returns Xlet method body for this command.


getJavaSource

public java.lang.String getJavaSource(boolean xlet)

getOriginalSource

public java.lang.String getOriginalSource()
Returns the original source as specified in Show script file.


setOriginalSource

public void setOriginalSource(java.lang.String originalSource)
Sets the original source as specified in Show file.


execute

public void execute(Show caller)
Execute the command. This causes the command to take whatever action it was created to do. By default, this calls execute().

Overrides:
execute in class Command
Parameters:
caller - The show that is executing this command. This might not be the same as the show this command was created under.

execute

public void execute()
Execute the command. This causes the command to take whatever action it was created to do.

Specified by:
execute in class Command

writeInstanceData

public void writeInstanceData(GrinDataOutputStream out)
                       throws java.io.IOException
Description copied from interface: SENode
Record this node information to the binary file format. An implementation of this method is recommended to call out.writeSuperClassData(this) as the first line of the method to write out data defined in the base class of this Node type.

Specified by:
writeInstanceData in interface SENode
Parameters:
out - The stream to write out.
Throws:
java.io.IOException - if error occurs.
See Also:
GrinDataOutputStream.writeSuperClassData(Feature), GrinDataOutputStream.writeSuperClassData(RCHandler), GrinDataOutputStream.writeSuperClassData(Segment), GrinDataOutputStream.writeSuperClassData(Command)

getRuntimeClassName

public java.lang.String getRuntimeClassName()
Description copied from interface: SENode
Returns the class that should be constructed at Show runtime to represent this SENode.

Specified by:
getRuntimeClassName in interface SENode
Returns:
String A fully qualified classname of a Node at xlet runtime.

accept

public void accept(SEShowVisitor visitor)
Description copied from interface: SENode
Calls the visit method corresponding to this node type.

If you are defining a user-defined feature, there are some restrictions that you'll want to follow. If your extension is a feature that has children, then you should make it a subclass of one of the built-in feature types, Assembly, Modifer or Group. That's because the GRIN compiler defines visitors that need to visit every node in the tree, but these built-in visitors don't know about your extension types. By making your extension type a subclass of one of the standard ones, and by making your accept() method call either visitAssembly(), visitGroup() or visitUserDefinedModifier(), as appropriate, you'll ensure that all the children get visited.

Specified by:
accept in interface SENode
Parameters:
visitor - SEShowVisitor object.
See Also:
SEShowVisitor

postProcess

public void postProcess(ShowBuilder builder)
                 throws java.io.IOException
Do any needed post-processing in this show. The grin compiler works as follows:

During the post-process phase, a node can add new features to the show, by calling ShowBuilder.addSyntheticFeature(), and it can insert a new feature as the parent of a given feature, by calling ShowBuilder.injectParent(). It can also add segments and handlers by calling the appropriate builder methods.

When a parent is injected, the ShowBuilder calls postProcess() on all nodes automatically, including nodes that are created during the execution of postProcess() in another node.

Specified by:
postProcess in interface SENode
Parameters:
builder - The builder that holds state for the show
Throws:
java.io.IOException - if an error is encountered
See Also:
ShowBuilder.addSyntheticFeature(Feature), ShowBuilder.injectParent(Feature, Feature)

changeFeatureReference

public void changeFeatureReference(Feature from,
                                   Feature to)
                            throws java.io.IOException
Change a feature reference from one feature to a new one. If your node has a reference to the feature from, it should be changed to refer to to. This is called for every node in an SEShow when SENode.injectParent is used.

The ShowBuilder calls changeFeatureReference() on all nodes automatically, including nodes that are created during the execution of postProcess().

Specified by:
changeFeatureReference in interface SENode
Throws:
java.io.IOException - If the operation can't be completed
See Also:
SENode.changeFeatureReference(Feature, Feature)

toString

public java.lang.String toString()
Return a user-friendly string for this command for debugging purposes.

Overrides:
toString in class Command