1 package com.oransc.rappmanager.models.statemachine;
3 import com.oransc.rappmanager.models.Rapp;
4 import com.oransc.rappmanager.models.RappEvent;
5 import com.oransc.rappmanager.models.RappState;
6 import java.util.HashMap;
9 import lombok.RequiredArgsConstructor;
10 import org.slf4j.Logger;
11 import org.slf4j.LoggerFactory;
12 import org.springframework.statemachine.StateMachine;
13 import org.springframework.statemachine.config.StateMachineFactory;
14 import org.springframework.stereotype.Service;
17 @RequiredArgsConstructor
18 public class RappStateMachine {
20 Logger logger = LoggerFactory.getLogger(RappStateMachine.class);
22 private final StateMachineFactory<RappState, RappEvent> stateMachineFactory;
23 private Map<UUID, StateMachine<RappState, RappEvent>> stateMachineMap = new HashMap<>();
25 public void onboardRapp(UUID rappId) {
26 StateMachine<RappState, RappEvent> stateMachine = stateMachineFactory.getStateMachine(rappId);
27 stateMachineMap.put(rappId, stateMachine);
31 public void sendRappEvent(Rapp rapp, RappEvent rappEvent) {
32 logger.info("Sending rapp event {} for {}", rappEvent.name(), rapp.getRappId());
33 logger.info("State machine map is {}", stateMachineMap);
34 stateMachineMap.get(rapp.getRappId()).sendEvent(rappEvent);
37 public RappState getRappState(UUID rappId) {
38 return stateMachineMap.get(rappId).getState().getId();
41 public void deleteRapp(Rapp rapp) {
42 stateMachineMap.get(rapp.getRappId()).stop();