- Create sc folder
mkdir ./sc
- Create `sc.yaml' with the following content
module: ""
language: "java"
importPathSeparator: "."
enableFileCapitalization: true
forceUnitSetupRegeneration: true
ctlDir: "src/controller"
templates:
- dir: "sc/templates"
imports:
- repoOwner: "SoenkeD"
repoName: "sc-java-templates"
repoPath: "sc/templates/"
localPath: "sc/templates/"
- Create controller folder
mkdir -p ./src/controller/myctl
- Create PlantUML file
./src/controller/myctl/myctl.plantuml
(must have the same name as the controller) with the following content
@startuml Demo
[*] --> DemoState: [ CheckAlwaysTrue ]
[*] -[bold]-> [*]: / Print(The guard needs to be implemented)
DemoState: do / AddMsg(Hello)
DemoState: do / AddMsg(World)
DemoState: do / AddMsg(!)
DemoState --> BurnState: [ CheckAlwaysTrue ] / Print(Go to BurnState)
DemoState -[bold]-> [*]
BurnState: do / Print(Got messages)
BurnState: do / PrintMsgs
BurnState -[bold]-> [*]
- (optional) Create a Makefile with the following content
sc=~/go/bin/sc
.PHONY: sc
sc:
$(sc) gen --root $(PWD) --name myctl
.PHONY: import
import:
$(sc) import --root $(PWD)
.PHONY: export
export:
$(sc) export --root $(PWD)
.PHONY: compile
compile:
javac -d bin src/*.java
.PHONY: run
run:
java -cp ./bin src/Main
.PHONY: exec
exec: compile run
- Create
src/Main.java
with the following content
package src;
import src.controller.myctl.Initctl;
import src.controller.myctl.controller.*;
public class Main {
public static void main(String[] args) {
Ctl ctl = Initctl.initCtl();
Reconciler reconciler = new Reconciler(
ctl,
new ReconcilerInput()
);
try {
reconciler.reconcile();
} catch (CtlErr e) {
System.err.println(e);
}
}
}
- Import the base templates
make import
- Generate the state machine by running
make sc
- Implement at least the Print action in
src/controller/myctl/actions/Print.java
- Execute your first running state machine with
make exec