
com.codeheadsystems.smr.yml.Definition Maven / Gradle / Ivy
package com.codeheadsystems.smr.yml;
import com.codeheadsystems.smr.Event;
import com.codeheadsystems.smr.State;
import com.codeheadsystems.smr.StateMachineDefinition;
import com.fasterxml.jackson.annotation.JsonIgnore;
import java.util.HashMap;
import java.util.Map;
public class Definition {
private String initialState;
private Map> transitions;
public static Definition disassemble(final StateMachineDefinition stateMachineDefinition) {
Definition definition = new Definition();
definition.setInitialState(stateMachineDefinition.initialState().name());
definition.setTransitions(new HashMap<>());
stateMachineDefinition.getTransitions().forEach((state, eventMap) -> {
HashMap eventMapString = new HashMap<>();
eventMap.forEach((event, nextState) -> eventMapString.put(event.name(), nextState.name()));
definition.getTransitions().put(state.name(), eventMapString);
});
return definition;
}
@JsonIgnore
public StateMachineDefinition assemble() {
StateMachineDefinition.Builder builder = StateMachineDefinition.builder();
// add states
transitions.forEach((state, eventMap) -> {
builder.addState(state);
eventMap.forEach((event, nextState) -> {
builder.addState(nextState);
});
});
// add transitions
transitions.forEach((state, eventMap) -> {
eventMap.forEach((event, nextState) -> {
builder.addTransition(State.of(state), Event.of(event), State.of(nextState));
});
});
return builder.setInitialState(State.of(initialState)).build();
}
public String getInitialState() {
return initialState;
}
public void setInitialState(final String initialState) {
this.initialState = initialState;
}
public Map> getTransitions() {
return transitions;
}
public void setTransitions(final Map> transitions) {
this.transitions = transitions;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy