1
2
3
4
5
6 package pt.digitalis.dif.dem.managers.impl;
7
8 import java.util.HashMap;
9 import java.util.HashSet;
10 import java.util.Map;
11 import java.util.Set;
12
13 import pt.digitalis.dif.dem.Entity;
14 import pt.digitalis.dif.dem.interfaces.IApplication;
15 import pt.digitalis.dif.dem.interfaces.IEntity;
16 import pt.digitalis.dif.dem.interfaces.IProvider;
17 import pt.digitalis.dif.dem.interfaces.IService;
18 import pt.digitalis.dif.dem.interfaces.IStage;
19 import pt.digitalis.dif.dem.managers.IMessageManager;
20 import pt.digitalis.dif.dem.objects.messages.MessageList;
21 import pt.digitalis.dif.dem.objects.messages.MessageTranslations;
22 import pt.digitalis.dif.startup.DIFStartupConfiguration;
23
24
25
26
27
28
29
30
31 abstract public class AbstractMessageManager implements IMessageManager {
32
33
34 final static protected String DEFAULT_MESSAGE_FILE_EXTENSION = ".messages";
35
36
37 static private Map<String, MessageList> messageRepository = new HashMap<String, MessageList>();
38
39
40 final static protected String MESSAGES_FOLDER = "messages/";
41
42
43 final static protected String NUMBER_SIGN = "#";
44
45
46 static private Set<String> supportedLanguages = new HashSet<String>();
47
48
49
50
51 public void addSupportedLanguage(String language)
52 {
53 supportedLanguages.add(language);
54 }
55
56
57
58
59
60
61
62
63 protected String getEntityID(IEntity entity)
64 {
65 String entityID = null;
66
67 Class<?>[] interfaces = entity.getClass().getInterfaces();
68
69 if (interfaces.length > 0)
70 {
71
72 for (Class<?> entityInterface: interfaces)
73 {
74 if (entityInterface.getCanonicalName().equals(IProvider.class.getCanonicalName()))
75 entityID = Entity.getID(Entity.PROVIDER, entity.getID());
76 else if (entityInterface.getCanonicalName().equals(IApplication.class.getCanonicalName()))
77 entityID = Entity.getID(Entity.APPLICATION, entity.getID());
78 else if (entityInterface.getCanonicalName().equals(IService.class.getCanonicalName()))
79 entityID = Entity.getID(Entity.SERVICE, entity.getID());
80 else if (entityInterface.getCanonicalName().equals(IStage.class.getCanonicalName()))
81 entityID = Entity.getID(Entity.STAGE, entity.getID());
82 }
83 }
84
85 return entityID;
86 }
87
88
89
90
91
92
93
94
95
96
97 public MessageList getMessageList(Entity type, IEntity entity)
98 {
99
100 String entityID = Entity.getID(type, entity.getID());
101 MessageList messages = null;
102
103
104 if (!DIFStartupConfiguration.getDeveloperMode())
105 messages = messageRepository.get(entityID);
106
107 if (messages == null)
108 {
109
110 messages = collectEntityMessagesFromRepository(type, entity);
111 messageRepository.put(entityID, messages);
112 }
113
114 return messages;
115 }
116
117
118
119
120 public MessageList getMessageList(IApplication application)
121 {
122
123 MessageList messages = new MessageList();
124
125
126 messages.addMessageList(getMessageList(application.getProvider()));
127
128
129 messages.addMessageList(getMessageList(Entity.APPLICATION, application));
130
131 return messages;
132 }
133
134
135
136
137 public MessageList getMessageList(IProvider provider)
138 {
139
140 return getMessageList(Entity.PROVIDER, provider);
141 }
142
143
144
145
146 public MessageList getMessageList(IService service)
147 {
148
149 MessageList messages = new MessageList();
150
151
152 messages.addMessageList(getMessageList(service.getApplication()));
153
154
155 messages.addMessageList(getMessageList(Entity.SERVICE, service));
156
157 return messages;
158 }
159
160
161
162
163 public MessageList getMessageList(IStage stage)
164 {
165
166 MessageList messages = new MessageList();
167
168
169 messages.addMessageList(getMessageList(stage.getService()));
170
171
172 messages.addMessageList(getMessageList(Entity.STAGE, stage));
173
174 return messages;
175 }
176
177
178
179
180
181 public Map<String, String> getMessages(IApplication application, String language)
182 {
183
184 return getMessageList(application).getMessages(language);
185 }
186
187
188
189
190 public Map<String, String> getMessages(IProvider provider, String language)
191 {
192
193 return getMessageList(provider).getMessages(language);
194 }
195
196
197
198
199 public Map<String, String> getMessages(IService service, String language)
200 {
201
202 return getMessageList(service).getMessages(language);
203 }
204
205
206
207
208 public Map<String, String> getMessages(IStage stage, String language)
209 {
210
211 return getMessageList(stage).getMessages(language);
212 }
213
214
215
216
217 public Set<String> getSupportedLanguages()
218 {
219 return supportedLanguages;
220 }
221
222
223
224
225 public void invalidateMessages()
226 {
227 messageRepository = new HashMap<String, MessageList>();
228 }
229
230
231
232
233 public boolean isLanguageSupported(String language)
234 {
235
236 return supportedLanguages.contains(language);
237 }
238
239
240
241
242
243 public void updateMessage(Class<?> clazz, String messageID, MessageTranslations message)
244 {
245
246 if (messageRepository.containsKey(clazz.getSimpleName())
247 && messageRepository.get(clazz.getSimpleName()).containsMessageWithID(messageID))
248 messageRepository.get(clazz.getSimpleName()).addMessage(messageID, message);
249 }
250
251
252
253
254
255 public void updateMessage(IEntity entity, String messageID, MessageTranslations message)
256 {
257 String entityID = getEntityID(entity);
258
259 if (messageRepository.containsKey(entityID) && messageRepository.get(entityID).containsMessageWithID(messageID))
260 messageRepository.get(entityID).addMessage(messageID, message);
261 }
262 }