Add installation script
[nonrtric/plt/rappmanager.git] / rapp-manager-models / src / main / java / com / oransc / rappmanager / models / statemachine / RappStateMachine.java
1 package com.oransc.rappmanager.models.statemachine;
2
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;
7 import java.util.Map;
8 import java.util.UUID;
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;
15
16 @Service
17 @RequiredArgsConstructor
18 public class RappStateMachine {
19
20     Logger logger = LoggerFactory.getLogger(RappStateMachine.class);
21
22     private final StateMachineFactory<RappState, RappEvent> stateMachineFactory;
23     private Map<UUID, StateMachine<RappState, RappEvent>> stateMachineMap = new HashMap<>();
24
25     public void onboardRapp(UUID rappId) {
26         StateMachine<RappState, RappEvent> stateMachine = stateMachineFactory.getStateMachine(rappId);
27         stateMachineMap.put(rappId, stateMachine);
28         stateMachine.start();
29     }
30
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);
35     }
36
37     public RappState getRappState(UUID rappId) {
38         return stateMachineMap.get(rappId).getState().getId();
39     }
40
41     public void deleteRapp(Rapp rapp) {
42         stateMachineMap.get(rapp.getRappId()).stop();
43     }
44 }