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.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;

/**
 * The type Definition.
 */
public class Definition {

  private String initialState;
  private Map> transitions;

  /**
   * Disassemble definition.
   *
   * @param stateMachineDefinition the state machine definition
   * @return the definition
   */
  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;
  }

  /**
   * Assemble state machine definition.
   *
   * @return the state machine 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();
  }

  /**
   * Gets initial state.
   *
   * @return the initial state
   */
  public String getInitialState() {
    return initialState;
  }

  /**
   * Sets initial state.
   *
   * @param initialState the initial state
   */
  public void setInitialState(final String initialState) {
    this.initialState = initialState;
  }

  /**
   * Gets transitions.
   *
   * @return the transitions
   */
  public Map> getTransitions() {
    return transitions;
  }

  /**
   * Sets transitions.
   *
   * @param transitions the transitions
   */
  public void setTransitions(final Map> transitions) {
    this.transitions = transitions;
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy