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

templates.stategen.stg Maven / Gradle / Ivy

The newest version!
has_interface(stateMachine, package) ::= <<
package $package$;

/**
 * A stateful object with $stateMachine.name$
 */
// Generated by io.fixprotocol.orchestra.states.StateGenerator
public interface Has$stateMachine.name$ {
  $stateMachine.name$ get$stateMachine.name$();
}
>>

transition_interface(stateMachine, package) ::= <<
package $package$;

/**
 * State transitions of an object with $stateMachine.name$
 */
// Generated by io.fixprotocol.orchestra.states.StateGenerator
public interface $stateMachine.name$Transition {
  /**
   * @return Returns a guard expression for a transition
   */
  String getGuard();
  
  /**
   * @return Returns the state of an object before a transition
   */
  $stateMachine.name$ getSource();

  /**
   * @return Returns the state of an object after a transition
   */
  $stateMachine.name$ getTarget();
}
>>

state_enum(stateMachine, package) ::= <<
package $package$;

/**
 * Enumerated states of $stateMachine.name$
 */
// Generated by io.fixprotocol.orchestra.states.StateGenerator
public enum $stateMachine.name$ {
  /** initial state */
  $state(stateMachine.initial, package)$
  $stateMachine.state:{state|$state(state, package)$}$;
  
  $initial(stateMachine, stateMachine.initial, package)$
}
>>

state(state, package) ::= <<
	$state.name$,
	
>>

initial(stateMachine, state, package) ::= <<
  public static $stateMachine.name$ getInitialState() {
    return $stateMachine.name$.$state.name$;
  }
>>

stateMachinePart1(stateMachine, package) ::= <<
package $package$;

import java.util.function.BiConsumer;
import io.fixprotocol.orchestra.dsl.antlr.Evaluator;
import io.fixprotocol.orchestra.dsl.antlr.ScoreException;
import io.fixprotocol.orchestra.model.FixValue;
import io.fixprotocol.orchestra.states.StateMachineException;

/**
 * A state machine for state $stateMachine.name$
 *
 * $documentation(object=stateMachine)$
 * @param  A stateful class with $stateMachine.name$
 */
// Generated by io.fixprotocol.orchestra.states.StateGenerator
public class $stateMachine.name$StateMachine {

  /**
   * Attempt a state transition
   * 

* The caller is responsible for setting symbols for the Score expression evaluator to evaluate. *

* * @param event name of transition to attempt * @param stateOf object for which state is tracked * @param onEntry listener for entry to a new state * @param onExit listener for exit from old state, if a state change occurred. * @param evaluator expression evaluator * @return the state after transition event. May be same as current state. * @throws StateMachineException if the transition is invalid for current state * @throws ScoreException expression evaluation error */ public $stateMachine.name$ tryTransition(String event, T stateOf, BiConsumer<$stateMachine.name$, T> onEntry, BiConsumer<$stateMachine.name$, T> onExit, Evaluator evaluator) throws StateMachineException, ScoreException { $stateMachine.name$Transition transition = null; $stateMachine.name$ currentState = stateOf.get$stateMachine.name$(); try { switch (currentState) { >> stateMachinePart2(stateMachine, package) ::= << default: throw new StateMachineException( String.format("Invalid transition %s from state %s", event, currentState.name())); } } catch (IllegalArgumentException e) { throw new StateMachineException("Invalid event", e); } boolean guarded = false; String guard = transition.getGuard(); if (guard != null && !guard.isEmpty()) { FixValue fixValue = evaluator.evaluate(guard); guarded = fixValue.getValue() != Boolean.TRUE; } if (!guarded) { $stateMachine.name$ newState = transition.getTarget(); if (onExit != null && newState != currentState) { onExit.accept(currentState, stateOf); } if (onEntry != null && newState != currentState) { onEntry.accept(newState, stateOf); } return newState; } return currentState; } } >> state_case(stateMachine, state, package) ::= << case $state.name$: transition = $stateMachine.name$$state.name$Transition.valueOf(event); break; >> transition_enum(stateMachine, state, package) ::= << package $package$; /** * Transitions from state $stateMachine.name$.$state.name$ */ // Generated by io.fixprotocol.orchestra.states.StateGenerator public enum $stateMachine.name$$state.name$Transition implements $stateMachine.name$Transition { $state.transition:{transition|$transition(stateMachine, transition, package)$}$; private final String guard; private final $stateMachine.name$ target; $stateMachine.name$$state.name$Transition($stateMachine.name$$transition.target.name$ target, String guard) { this.target = target; this.guard = guard; } public String getGuard() { return guard; } public $stateMachine.name$ getSource() { return $stateMachine.name$.$state.name$; } public $stateMachine.name$ getTarget() { return target; } } >> transition(stateMachine, transition, package) ::= << $transition.name$($stateMachine.name$.$transition.target$, "$transition.when$"), >> documentation(object) ::= << $object.annotation.DocumentationOrAppinfo:{doc|$if(doc.purpose)$$doc.purpose$: $endif$$doc.content$
}$ >>




© 2015 - 2025 Weber Informatics LLC | Privacy Policy