Export
Page contents
The library supports export into PlantUML and Mermaid diagram drawing systems. They both use PlantUML text format. Mermaid supports fewer features then PlantUML itself. Please note that both of them have their own limitations and corner cases.
Transitions that use lambdas like transitionConditionally()
and transitionOn()
or choiceState()
etc., are not exported by default. You can enable their export with unsafeCallConditionalLambdas
flag of exportToPlantUml()
/exportToMermaid()
functions. With unsafeCallConditionalLambdas
flag set, user defined lambdas that are passed to the library to calculate next state would be called during export process. This will give more complete (still not full) export output, but may cause runtime errors depending on what the lambda actually do. As it may touch application data that is not valid when export is running, also event
argument will be faked by unsafe cast, so touching it will cause ClassCastException
That is why unsafeCallConditionalLambdas
flag should be considered as debug/development tool only.
PlantUML
Use exportToPlantUml()
/exportToPlantUmlBlocking()
extension function to export state machine to PlantUML state diagram. showEventLabels
flag allows to include Event
types into the output.
val machine = createStateMachine(scope) { /* ... */ }
println(machine.exportToPlantUml())
Copy/paste resulting output to Plant UML online editor
See PlantUML nested states export sample
Mermaid
Mermaid
uses almost the same text format as PlantUML
for compatibility reasons.
Use exportToMermaid()
/exportToToMermaidBlocking()
extension function to export state machine to Mermaid state diagram. showEventLabels
flag allows to include Event
types into the output.
val machine = createStateMachine(scope) { /* ... */ }
println(machine.exportToMermaid())
Intellij IDEA
users may use official Mermaid plugin to view diagrams directly in IDE for file types:.mmd
and.mermaid
.- or copy/paste resulting output to Mermaid live editor
See Mermaid nested states export sample
Controlling export output
To beautify and enrich export output, you can use UmlMetaInfo
for both IState
and Transition
. It can be built with buildUmlMetaInfo()
function:
state("State1") {
metaInfo = buildUmlMetaInfo {
umlLabel = "State 1 long label"
umlStateDescriptions = listOf("Description 1", "Description 2")
umlNotes = listOf("Note 1", "Note 2")
}
}