All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.codeheadsystems.smr.yml.Definition Maven / Gradle / Ivy

package com.codeheadsystems.smr.yml;

import com.codeheadsystems.smr.ImmutableEvent;
import com.codeheadsystems.smr.ImmutableState;
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(ImmutableState.of(state), ImmutableEvent.of(event), ImmutableState.of(nextState));
      });
    });
    return builder.setInitialState(ImmutableState.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