1
2
3
4
5
6 package pt.digitalis.dif.dem.managers.impl;
7
8 import java.util.HashMap;
9 import java.util.Map;
10
11 import pt.digitalis.dif.dem.Entity;
12 import pt.digitalis.dif.dem.interfaces.IApplication;
13 import pt.digitalis.dif.dem.interfaces.IProvider;
14 import pt.digitalis.dif.dem.interfaces.IService;
15 import pt.digitalis.dif.dem.interfaces.IStage;
16 import pt.digitalis.dif.dem.managers.IParameterManager;
17 import pt.digitalis.dif.dem.objects.parameters.IParameter;
18 import pt.digitalis.dif.dem.objects.parameters.ParameterList;
19 import pt.digitalis.dif.ioc.DIFIoCRegistry;
20 import pt.digitalis.dif.utils.logging.DIFLogger;
21
22
23
24
25
26
27
28
29 public class ParameterManagerImpl implements IParameterManager {
30
31
32 private Map<String, ParameterList> applicationParameters = new HashMap<String, ParameterList>();
33
34
35 private Map<String, ParameterList> providerParameters = new HashMap<String, ParameterList>();
36
37
38 private Map<String, ParameterList> serviceParameters = new HashMap<String, ParameterList>();
39
40
41 private Map<String, ParameterList> stageParameters = new HashMap<String, ParameterList>();
42
43
44 private Map<String, String> supportedParameterTypes = null;
45
46
47 private void buildSupportedParameterTypesMap()
48 {
49 @SuppressWarnings("rawtypes")
50 Map<String, IParameter> impls = DIFIoCRegistry.getRegistry().getImplementationsMap(IParameter.class);
51
52 supportedParameterTypes = new HashMap<String, String>();
53
54 for (String id: impls.keySet())
55 {
56 IParameter<?> parameter = impls.get(id);
57
58 for (Object className: parameter.getSupportedClasses())
59 {
60 supportedParameterTypes.put(className.toString(), id);
61 }
62 }
63 }
64
65
66
67
68
69 public IParameter<?> getParameter(Entity entityType, String entityID, String parameterID)
70 {
71
72 ParameterList list = getParameters(entityType, entityID);
73
74 if (list == null)
75 return null;
76 else
77 return list.getParameter(parameterID);
78 }
79
80
81
82
83 public IParameter<?> getParameterInstanceForType(String typeClassName)
84 {
85
86 if (isParameterTypeSupported(typeClassName))
87 return DIFIoCRegistry.getRegistry().getImplementation(IParameter.class,
88 supportedParameterTypes.get(typeClassName));
89 else
90 {
91 DIFLogger.getLogger().error("Bad usage: Parameter type \"" + typeClassName + "\" not supported: ");
92
93 return null;
94 }
95 }
96
97
98
99
100 public ParameterList getParameters(Entity entityType, String entityID)
101 {
102 if (entityType.equals(Entity.PROVIDER))
103 return providerParameters.get(entityID);
104 else if (entityType.equals(Entity.APPLICATION))
105 return applicationParameters.get(entityID);
106 else if (entityType.equals(Entity.SERVICE))
107 return serviceParameters.get(entityID);
108 else if (entityType.equals(Entity.STAGE))
109 return stageParameters.get(entityID);
110 else
111 return null;
112 }
113
114
115
116
117 public ParameterList getParameters(IApplication application)
118 {
119 ParameterList list = applicationParameters.get(application.getID());
120
121 if (list == null)
122 {
123 list = new ParameterList();
124 applicationParameters.put(application.getID(), list);
125 }
126
127 return list;
128 }
129
130
131
132
133 public ParameterList getParameters(IProvider provider)
134 {
135 ParameterList list = providerParameters.get(provider.getID());
136
137 if (list == null)
138 {
139 list = new ParameterList();
140 providerParameters.put(provider.getID(), list);
141 }
142
143 return list;
144 }
145
146
147
148
149 public ParameterList getParameters(IService service)
150 {
151 ParameterList list = serviceParameters.get(service.getID());
152
153 if (list == null)
154 {
155 list = new ParameterList();
156 serviceParameters.put(service.getID(), list);
157 }
158
159 return list;
160 }
161
162
163
164
165 public ParameterList getParameters(IStage stage)
166 {
167 ParameterList list = stageParameters.get(stage.getID());
168
169 if (list == null)
170 {
171 list = new ParameterList();
172 stageParameters.put(stage.getID(), list);
173 }
174
175 return list;
176 }
177
178
179
180
181 public boolean isParameterTypeSupported(String typeClassName)
182 {
183
184 if (supportedParameterTypes == null)
185 buildSupportedParameterTypesMap();
186
187 return supportedParameterTypes.containsKey(typeClassName);
188 }
189
190
191
192
193
194
195
196 private void registerApplicationParameter(IParameter<?> parameter)
197 {
198
199 if (!applicationParameters.containsKey(parameter.getParentID()))
200 {
201 ParameterList parameters = new ParameterList();
202 parameters.addParameter(parameter);
203 applicationParameters.put(parameter.getParentID(), parameters);
204 }
205 else
206 {
207 applicationParameters.get(parameter.getParentID()).addParameter(parameter);
208 }
209 }
210
211
212
213
214 public void registerParameter(IParameter<?> parameter)
215 {
216
217 if (parameter.getParentType() == Entity.PROVIDER)
218 {
219 registerProviderParameter(parameter);
220 }
221 else if (parameter.getParentType() == Entity.APPLICATION)
222 {
223 registerApplicationParameter(parameter);
224 }
225 else if (parameter.getParentType() == Entity.SERVICE)
226 {
227 registerServiceParameter(parameter);
228 }
229 else if (parameter.getParentType() == Entity.STAGE)
230 {
231 registerStageParameter(parameter);
232 }
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263 }
264
265
266
267
268
269
270
271 private void registerProviderParameter(IParameter<?> parameter)
272 {
273
274 if (!providerParameters.containsKey(parameter.getParentID()))
275 {
276 ParameterList parameters = new ParameterList();
277 parameters.addParameter(parameter);
278 providerParameters.put(parameter.getParentID(), parameters);
279 }
280 else
281 {
282 providerParameters.get(parameter.getParentID()).addParameter(parameter);
283 }
284 }
285
286
287
288
289
290
291
292 private void registerServiceParameter(IParameter<?> parameter)
293 {
294
295 if (!serviceParameters.containsKey(parameter.getParentID()))
296 {
297 ParameterList parameters = new ParameterList();
298 parameters.addParameter(parameter);
299 serviceParameters.put(parameter.getParentID(), parameters);
300 }
301 else
302 {
303 serviceParameters.get(parameter.getParentID()).addParameter(parameter);
304 }
305 }
306
307
308
309
310
311
312
313 private void registerStageParameter(IParameter<?> parameter)
314 {
315
316 if (!stageParameters.containsKey(parameter.getParentID()))
317 {
318 ParameterList parameters = new ParameterList();
319 parameters.addParameter(parameter);
320 stageParameters.put(parameter.getParentID(), parameters);
321 }
322 else
323 {
324 stageParameters.get(parameter.getParentID()).addParameter(parameter);
325 }
326 }
327 }