FSM Tool includes Ant tasks for seamlessly integrating code generation with existing build infrastructure.
Below are:
- 
instructions for declaring the Ant tasks 
- 
descriptions of Ant task parameters 
- 
examples of Ant tasks for use with FSM Tool code-generation templates. 
Declaring the Ant tasks
The FSM Tool Ant tasks are:
- 
fsmtool:make-multi-fsm-sbb— generates an SBB Java class to host one or more generated Java classes for each state-machine specification.
- 
fsmtool:generate-fsm— generates SBB Java class for the state-machine specification.
- 
fsmtool:generate-dot— generates a GraphViz compatible dot file that visualises the state machine diagram.
The FSM Tool Ants task must be declared in the Ant build.xml file using a <taskdef> tag. The FSM Tool ships with the fsmtool.jar file, which contains the Ant tasks. You need to install it in a path referenced by the <taskdef>. In the "Hello World" example, the jar file is in the ${basedir}/lib directory. To declare the tasks, add an fsmtool namespace attribute to the <project> tag, and then use the <taskdef> to pick up all task declarations from the antlib.xml file (which is contained in the fsmtool.jar).
<project name="{product-name} Example Service" default="help" basedir="." xmlns:fsmtool="antlib:com.opencloud.sce.fsmtool.ant">
...
    <target name="init" depends="management-init">
        <path id="fsmtool.classpath">
            <fileset dir="${basedir}/../libs" includes="*.jar"/>
        </path>
        <taskdef uri="antlib:com.opencloud.sce.fsmtool.ant"
                 resource="com/opencloud/sce/fsmtool/ant/antlib.xml"
                 classpathref="fsmtool.classpath"/>
        ...
    </target>
...
</project>Ant task parameters
The make-multi-fsm-sbb, generate-fsm and generate-dot tasks use the following attributes.
make-multi-fsm-sbb
| Attribute | Description | Type | 
|---|---|---|
| sbbClassName | Class name for the generated SBB class. | Required | 
| package | Package name for the output. | Required | 
| destDir | Destination directory for the generated classes; for example: ${basedir}/src/helloworld/com/opencloud/slee/services/fsmtool/helloworld | Required | 
| tracerName | The prefix used for trace messages. | Required | 
| Element | Description | Type | 
|---|---|---|
| fsmtool:fsm | FSM specification details. | One or more required | 
The fsmtool:fsm element has the following attributes:
| Attribute | Description | Type | 
|---|---|---|
| specification | Filename of the FSM specification from which to generate code; for example: ${basedir}/src/helloworld/com/opencloud/slee/services/
fsmtool/helloworld/FsmToolExampleStateMachineSbb.fsm | |
| Required | fsmClassname | Class name for the generated FSM class. | 
| Required | fsmFullClassname | Package path and class name for the generated FSM class. | 
generate-fsm
| Attribute | Description | Type | ||
|---|---|---|---|---|
| fsmSpecificationFilename | Filename of the FSM specification from which to generate code; for example: ${basedir}/src/helloworld/com/opencloud/slee/services/
fsmtool/helloworld/FsmToolExampleStateMachineSbb.fsm | Required | ||
| fsmTemplateFilename | Path and filename of the template to use for code generation; for example: templates/fsm.stg 
 | Required | ||
| package | Package name for the output. | Required | ||
| fileType | Suffix for the generated file. For fsm.stg, must be set to  | Required | ||
| class | Class name for the generated code. | Required | ||
| superClass | A Java class which will be the super class of the generated state-machine SBB. If set, a fully qualified class name is required. | Optional | ||
| outputRootDirectory | The root directory used to write the generated class file. The package subdirectory structure will be created automatically. | Required | ||
| tracerName | The prefix used for trace messages. | Required | 
generate-dot
| Attribute | Description | Type | ||
|---|---|---|---|---|
| fsmSpecificationFilename | Filename of the FSM specification from which to generate code; for example: ${basedir}/src/helloworld/com/opencloud/slee/services/
fsmtool/helloworld/FsmToolExampleStateMachineSbb.fsm | Required | ||
| fsmDotTemplateFilename | Path and filename of the template to use for the dot-file generation; for example: ${basedir}/templates/fsm.dot
 | Required | ||
| outputFile | Path and filename to write the resulting state-machine dot-diagram code to. | Required | 
Examples for code-generation templates
Below are examples of FSM Tool Ant task definitions using the fsm.stg and dot.stg templates, from the "Hello World" sample application.
fsm-for-multi-per-sbb.stg and multi-fsm-sbb.stg
Using the fsm-for-multi-per-sbb.stg and multi-fsm-sbb.stg templates to  generate the state-machine and hosting SBB Java class files:
<fsmtool:make-multi-fsm-sbb
          sbbClassName="FsmToolMultiFsmExampleStateMachineSbb"
               package="com.opencloud.slee.services.fsmtool.multifsmsbb"
               destDir="${basedir}/generated/multifsmsbb/com/opencloud/slee/services/fsmtool/multifsmsbb"
            tracerName="multifsmsbb">
     <fsmtool:fsm specification="${basedir}/src/multifsmsbb/com/opencloud/slee/services/fsmtool/multifsmsbb/MessageFSM.fsm"
                   fsmClassname="MessageFSM"
               fsmFullClassname="com.opencloud.slee.services.fsmtool.multifsmsbb.MessageFSM"/>
     <fsmtool:fsm specification="${basedir}/src/multifsmsbb/com/opencloud/slee/services/fsmtool/multifsmsbb/TimerFSM.fsm"
                   fsmClassname="TimerFSM"
               fsmFullClassname="com.opencloud.slee.services.fsmtool.multifsmsbb.TimerFSM"/>
</fsmtool:make-multi-fsm-sbb>fsm.stg
Using the fsm.stg template to  generate the state-machine SBB Java class file:
<fsmtool:generate-fsm
        fsmSpecificationFilename="${basedir}/src/helloworld/com/opencloud/slee/services/fsmtool/helloworld/FsmToolExampleStateMachineSbb.fsm"
        fsmTemplateFilename="templates/fsm.stg"
        package="com.opencloud.slee.services.fsmtool.helloworld"
        class="FsmToolExampleStateMachineSbb"
        fileType="java"
        outputRootDirectory="${basedir}/generated/helloworld"
        traceName="helloworld"/>dot.stg
Using the dot.stg template to generate a GraphViz dot-format file from the state-machine specification:
<fsmtool:generate-dot
        fsmSpecificationFilename="${basedir}/src/helloworld/com/opencloud/slee/services/fsmtool/helloworld/FsmToolExampleStateMachineSbb.fsm"
        fsmDotTemplateFilename="templates/dot.stg"
        outputFile="${basedir}/doc/javadoc/helloworld/com/opencloud/slee/services/fsmtool/helloworld/FsmToolExampleStateMachineSbb.dot"/> 
