1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 package org.nuiton.eugene.models.state.xml;
24
25 import org.nuiton.eugene.models.state.StateModelComplexState;
26 import org.nuiton.eugene.models.state.StateModelSimpleState;
27 import org.nuiton.eugene.models.state.StateModelState;
28 import org.nuiton.eugene.models.state.StateModelTransition;
29
30 import java.util.Collection;
31 import java.util.HashMap;
32 import java.util.Map;
33
34
35
36
37
38
39 public class StateModelComplexeStateImpl extends StateModelStateImpl implements
40 StateModelComplexState {
41
42
43
44
45 protected Map<String, StateModelState> mapState;
46
47
48
49
50 public StateModelComplexeStateImpl() {
51 mapState = new HashMap<>();
52 }
53
54
55
56
57
58
59 public void addState(StateModelState state) {
60 mapState.put(state.getName(), state);
61 }
62
63
64
65
66 public Collection<StateModelState> getStates() {
67 return mapState.values();
68 }
69
70
71
72
73
74
75 void correctTransitionNameToInstance(StateModelComplexeStateImpl parent) {
76
77
78
79 for (StateModelState stateModelState : mapState.values()) {
80 StateModelState state = stateModelState;
81
82
83 if (state instanceof StateModelComplexeStateImpl) {
84 ((StateModelComplexeStateImpl) state)
85 .correctTransitionNameToInstance(this);
86 } else {
87 for (StateModelTransition tr : state.getTransitions()) {
88 StateModelTransitionImpl tri =
89 (StateModelTransitionImpl) tr;
90 String name = tri.getStateName();
91
92
93 if (getState(name) != null) {
94 tri.setState(getState(name));
95 } else {
96
97 if (parent != null && parent.getState(name) != null) {
98 tri.setState(parent.getState(name));
99 }
100
101 }
102 }
103 }
104 }
105 }
106
107
108
109
110
111 StateModelState getState(String stateName) {
112 return mapState.get(stateName);
113 }
114
115 @Override
116 public boolean isComplex() {
117
118 return true;
119 }
120
121 @Override
122 public StateModelState getInitialState() {
123
124 StateModelState response = null;
125
126
127
128 for (StateModelState stateModelState : mapState.values()) {
129 StateModelState state = stateModelState;
130
131
132 if (!state.isComplex()) {
133 StateModelSimpleState simpleState =
134 (StateModelSimpleState) state;
135
136 if (simpleState.isInitial()) {
137
138
139 response = simpleState.getTransitions().get(0)
140 .getDestinationState();
141 }
142 }
143 }
144
145 return response;
146 }
147
148 }