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.codehaus.plexus.component.annotations.Component;
26 import org.nuiton.eugene.ModelHelper;
27 import org.nuiton.eugene.models.Model;
28 import org.nuiton.eugene.models.state.StateModel;
29 import org.nuiton.eugene.models.state.StateModelStateChart;
30
31 import java.util.ArrayList;
32 import java.util.Collection;
33 import java.util.HashMap;
34 import java.util.LinkedHashSet;
35 import java.util.List;
36 import java.util.Map;
37 import java.util.Set;
38
39
40
41
42
43
44 @Component(role = Model.class, hint = "statemodel")
45 public class StateModelImpl implements StateModel {
46
47
48
49
50 protected List<StateModelStateChart> listStateCharts;
51
52
53
54
55 protected String name;
56
57
58
59
60 protected String version;
61
62
63
64
65 protected Map<String, String> modelTagValues;
66
67
68
69
70
71 private Map<String, Object> extensions = new HashMap<>();
72
73
74
75
76 public StateModelImpl() {
77 listStateCharts = new ArrayList<>();
78 modelTagValues = new HashMap<>();
79 }
80
81 @Override
82 public String getModelType() {
83 return ModelHelper.ModelType.STATE.getAlias();
84 }
85
86 @Override
87 public String getName() {
88 return name;
89 }
90
91 @Override
92 public Set<String> getStereotypes() {
93 Set<String> result = new LinkedHashSet<>();
94 for (Map.Entry<String, String> entry : modelTagValues.entrySet()) {
95 if ("true".equals(entry.getValue())) {
96 result.add(entry.getKey());
97 }
98 }
99 return result;
100 }
101
102 @Override
103 public boolean hasStereotype(String stereotypeName) {
104 return modelTagValues.containsKey(stereotypeName);
105 }
106
107 @Override
108 public void addStereotype(String stereotype) {
109 modelTagValues.put(stereotype, "true");
110 }
111
112 @Override
113 public void removeStereotype(String stereotype) {
114 modelTagValues.remove(stereotype);
115 }
116
117
118
119
120
121
122 public void setName(String name) {
123 this.name = name;
124 }
125
126
127
128
129
130
131 public void addStateChart(StateModelStateChart chart) {
132
133
134
135 ((StateModelStateChartImpl) chart)
136 .correctTransitionNameToInstance(null);
137
138 listStateCharts.add(chart);
139 }
140
141 @Override
142 public List<StateModelStateChart> getStateCharts() {
143 return listStateCharts;
144 }
145
146
147
148
149
150
151 public void addAllStateCharts(Collection<StateModelStateChart> charts) {
152 listStateCharts.addAll(charts);
153 }
154
155 @Override
156 public Map<String, String> getTagValues() {
157 return modelTagValues;
158 }
159
160 @Override
161 public void addTagValue(String key, String value) {
162 modelTagValues.put(key, value);
163 }
164
165 @Override
166 public String getTagValue(String key) {
167 return key == null ? null : modelTagValues.get(key);
168 }
169
170 @Override
171 public boolean hasTagValue(String tagValue) {
172 return modelTagValues.containsKey(tagValue);
173 }
174
175 @Override
176 public void removeTagValue(String tagvalue) {
177 modelTagValues.remove(tagvalue);
178 }
179
180
181
182
183
184
185 public void setVersion(String version) {
186 this.version = version;
187 }
188
189 @Override
190 public String getVersion() {
191 return version;
192 }
193
194
195
196
197
198
199
200
201
202
203
204 @Override
205 @SuppressWarnings("unchecked")
206 public <O> O getExtension(String reference, Class<O> extensionClass) throws RuntimeException {
207 if (reference == null) {
208 throw new NullPointerException("reference parameter can not be null in method ObjectModelImpl#getExtension");
209 }
210 if (extensionClass == null) {
211 throw new NullPointerException("extensionClass parameter can not be null in method ObjectModelImpl#getExtension.");
212 }
213 Object object = extensions.get(reference);
214 O result;
215 if (object != null && !extensionClass.isAssignableFrom(object.getClass())) {
216 throw new ClassCastException("Invalid cast for " + extensionClass.getName());
217 }
218 if (object == null) {
219 try {
220 result = extensionClass.newInstance();
221 } catch (Exception eee) {
222 throw new RuntimeException("Unable to create new extension '" + extensionClass.getName() +
223 "' for '" + reference + "'", eee);
224 }
225 extensions.put(reference, result);
226 } else {
227 result = (O) object;
228 }
229 return result;
230 }
231
232 }