This work is licensed under Apache License 2.0
Getting started
Plugin Id: org.infosmid.plugins.kfsm-viz Version: 2.0.0
Gradle Groovy DSL
plugins {
id 'org.infosmid.plugins.kfsm-viz' version '2.0.0'
}
Configuration
Gradle Groovy DSL
kfsmViz {
fsm('PacketReaderFSM') {
input = file('src/main/kotlin/PacketReader.kt') // (1)
isGeneratePlantUml = true // (2)
isGeneratePlantUmlSimple = null // (3)
isGenerateAsciidoc = true // (4)
output = 'packet-reader' // (5)
outputFolder = file('generated') // (6)
plantUmlName = "packet-reader-state-diagram.plantuml" // (7)
asciidocName = 'packet-reader-state-table.adoc' // (8)
}
}
-
input: File: Required, fully qualified filename of relevant source file -
isGeneratePlantUml: Boolean: Required default is false -
isGeneratePlantUmlSimple: Boolean: Optional default is null -
isGenerateAsciidoc: Boolean: Required default is false -
output: String: Optional filename base. The default is the classname -
outputFolder: File: Optional directory for output file. Default is$buildDir/generated -
plantUmlName: String: Optional filename for plantuml output. Default is$output.plantuml -
asciidocName: String: Optional name of Asciidoc output file. Default is$output.adoc
Example for multiple FSM definitions
kfsmViz {
fsm('PacketReaderFSM') {
input = file('src/main/kotlin/PacketReader.kt')
output = 'packet-reader'
outputFolder = file('generated')
isGeneratePlantUml = true
isGenerateAsciidoc = true
}
fsm('TurnstileFSM') {
input = file('src/main/kotlin/Turnstile.kt')
output = 'turnstile'
outputFolder = file('generated')
isGeneratePlantUml = true
isGenerateAsciidoc = true
}
fsm('TimerSecureTurnstileFSM') {
input = file('TimeoutSecureTurnstile.kt')
output = 'secure-turnstile'
outputFolder = file('generated')
isGeneratePlantUml = true
isGenerateAsciidoc = true
}
}
Task
./gradle :generateFsmViz
Expected output
TurnstileFSM
Turnstile State Diagram
TurnstileFSM State Chart
TurnstileFSM State Map
| Start | Event[Guard] | Target | Action |
|---|---|---|---|
UNLOCKED |
|||
LOCKED |
COIN |
UNLOCKED |
|
UNLOCKED |
COIN |
UNLOCKED |
|
UNLOCKED |
PASS |
LOCKED |
|
PacketReaderFSM
PacketReader State Diagram
PacketReaderFSM State Chart
PacketReaderFSM State Map
| Start | Event[Guard] | Target | Action |
|---|---|---|---|
START |
CTRL |
RCVPCKT |
|
RCVPCKT |
CTRL |
RCVDATA |
|
RCVPCKT |
BYTE |
RCVCHK |
|
RCVDATA |
BYTE |
RCVDATA |
|
RCVDATA |
CTRL |
RCVPCKT |
|
RCVDATA |
ESC |
RCVESC |
|
RCVESC |
ESC |
RCVDATA |
|
RCVESC |
CTRL |
RCVDATA |
|
RCVCHK |
BYTE |
RCVCHK |
|
RCVCHK |
ESC |
RCVCHKESC |
|
RCVCHK |
CTRL |
CHKSUM |
|
CHKSUM |
<<automatic>> |
[*] |
|
CHKSUM |
<<automatic>> |
[*] |
|
RCVCHKESC |
ESC |
RCVCHK |
|
RCVCHKESC |
CTRL |
RCVCHK |
|
TimeoutSecureTurnstileFSM
TimeoutSecureTurnstile State Diagram
TimerSecureTurnstileFSM State Chart
TimerSecureTurnstileFSM State Map
| Start | Event[Guard] | Target | Action |
|---|---|---|---|
UNLOCKED |
|||
OVERRIDE |
<<timeout = {timeout}>> |
LOCKED |
|
OVERRIDE |
CARD |
LOCKED |
|
OVERRIDE |
CARD |
UNLOCKED |
|
OVERRIDE |
CARD |
UNLOCKED |
|
LOCKED |
CARD |
OVERRIDE |
|
LOCKED |
CARD |
UNLOCKED |
|
LOCKED |
CARD |
LOCKED |
|
UNLOCKED |
<<timeout = {timeout}>> |
LOCKED |
|
UNLOCKED |
CARD |
LOCKED |
|
UNLOCKED |
PASS |
LOCKED |
|