package me.bvn13.fsm; import java.util.function.Supplier; public class FsmBuilder { private final T fsm; FsmBuilder(Supplier supplier) { fsm = supplier.get(); } public StateBuilder from(String state) { return new StateBuilder<>(this, state, true, false); } public StateBuilder state(String state) { return new StateBuilder<>(this, state, false, false); } public StateBuilder finish(String state) { return new StateBuilder<>(this, state, false, true); } public ConditionBuilder withTransition() { return new ConditionBuilder<>(this); } public T create() { fsm.init(); return fsm; } public T startingAt(String name) { fsm.setCurrentState(name); return fsm; } T getFsm() { return fsm; } @SuppressWarnings("unchecked") void addState(State state, boolean isInitial) { if (isInitial) { fsm.initState(state); } else { fsm.addState(state); } } @SuppressWarnings("unchecked") void addTransition(String from, String to, Condition condition) { fsm.addTransition(from, to, condition); } }