1 | |
|
2 | |
|
3 | |
|
4 | |
|
5 | |
|
6 | |
|
7 | |
|
8 | |
|
9 | |
|
10 | |
|
11 | |
|
12 | |
|
13 | |
|
14 | |
|
15 | |
|
16 | |
package javax.faces.internal; |
17 | |
|
18 | |
import java.text.MessageFormat; |
19 | |
import java.util.ArrayList; |
20 | |
import java.util.Iterator; |
21 | |
import java.util.List; |
22 | |
import java.util.Locale; |
23 | |
|
24 | |
import javax.faces.application.FacesMessage; |
25 | |
import javax.faces.application.FacesMessage.Severity; |
26 | |
import javax.faces.component.ComponentUtil_; |
27 | |
import javax.faces.component.UIComponent; |
28 | |
import javax.faces.context.FacesContext; |
29 | |
|
30 | |
import org.seasar.framework.message.MessageResourceBundle; |
31 | |
import org.seasar.framework.util.AssertionUtil; |
32 | |
import org.seasar.teeda.core.util.HTMLEncodeUtil; |
33 | |
|
34 | |
|
35 | |
|
36 | |
|
37 | |
|
38 | |
|
39 | |
|
40 | |
public class FacesMessageUtil { |
41 | |
|
42 | |
private static final String DETAIL_SUFFIX = "_detail"; |
43 | |
|
44 | 1 | private static final FacesMessage[] EMPTY_MESSAGES = new FacesMessage[0]; |
45 | |
|
46 | 0 | private FacesMessageUtil() { |
47 | 0 | } |
48 | |
|
49 | |
public static FacesMessage[] getWarnMessages() { |
50 | 1 | FacesContext context = FacesContext.getCurrentInstance(); |
51 | 1 | FacesMessage.Severity severity = FacesMessage.SEVERITY_WARN; |
52 | 1 | return getTargetFacesMessages(context, severity); |
53 | |
} |
54 | |
|
55 | |
public static FacesMessage[] getInfoMessages() { |
56 | 1 | FacesContext context = FacesContext.getCurrentInstance(); |
57 | 1 | FacesMessage.Severity severity = FacesMessage.SEVERITY_INFO; |
58 | 1 | return getTargetFacesMessages(context, severity); |
59 | |
} |
60 | |
|
61 | |
public static FacesMessage[] getErrorMessages() { |
62 | 1 | FacesContext context = FacesContext.getCurrentInstance(); |
63 | 1 | FacesMessage.Severity severity = FacesMessage.SEVERITY_ERROR; |
64 | 1 | return getTargetFacesMessages(context, severity); |
65 | |
} |
66 | |
|
67 | |
public static FacesMessage[] getFatalMessages() { |
68 | 1 | FacesContext context = FacesContext.getCurrentInstance(); |
69 | 1 | FacesMessage.Severity severity = FacesMessage.SEVERITY_FATAL; |
70 | 1 | return getTargetFacesMessages(context, severity); |
71 | |
} |
72 | |
|
73 | |
public static FacesMessage[] getTargetFacesMessages(Severity severity) { |
74 | 0 | return getTargetFacesMessages(FacesContext.getCurrentInstance(), |
75 | |
severity); |
76 | |
} |
77 | |
|
78 | |
public static FacesMessage[] getTargetFacesMessages(FacesContext context, |
79 | |
Severity severity) { |
80 | 4 | return getTargetFacesMessages(context, |
81 | |
new FacesMessage.Severity[] { severity }); |
82 | |
} |
83 | |
|
84 | |
public static FacesMessage[] getAllMessages() { |
85 | 1 | final FacesContext context = FacesContext.getCurrentInstance(); |
86 | 1 | return getAllMessages(context); |
87 | |
} |
88 | |
|
89 | |
public static FacesMessage[] getAllMessages(FacesContext context) { |
90 | 4 | return getTargetFacesMessages(context, new FacesMessage.Severity[] { |
91 | |
FacesMessage.SEVERITY_FATAL, FacesMessage.SEVERITY_ERROR, |
92 | |
FacesMessage.SEVERITY_INFO, FacesMessage.SEVERITY_WARN }); |
93 | |
} |
94 | |
|
95 | |
public static FacesMessage[] getTargetFacesMessages(Severity[] severities) { |
96 | 0 | return getTargetFacesMessages(FacesContext.getCurrentInstance(), |
97 | |
severities); |
98 | |
} |
99 | |
|
100 | |
public static FacesMessage[] getTargetFacesMessages(FacesContext context, |
101 | |
Severity[] severities) { |
102 | 12 | AssertionUtil.assertNotNull("context", context); |
103 | 12 | if (severities == null || severities.length == 0) { |
104 | 0 | return EMPTY_MESSAGES; |
105 | |
} |
106 | 12 | Iterator it = context.getMessages(); |
107 | 12 | if (!it.hasNext()) { |
108 | 1 | return EMPTY_MESSAGES; |
109 | |
} |
110 | 11 | List list = new ArrayList(); |
111 | 38 | for (; it.hasNext();) { |
112 | 27 | FacesMessage facesMessage = (FacesMessage) it.next(); |
113 | 27 | Severity severity = facesMessage.getSeverity(); |
114 | 77 | for (int i = 0; i < severities.length; i++) { |
115 | 50 | if (!severity.equals(severities[i])) { |
116 | 36 | continue; |
117 | |
} |
118 | 14 | list.add(facesMessage); |
119 | |
} |
120 | |
} |
121 | 11 | if (list.size() == 0) { |
122 | 1 | return EMPTY_MESSAGES; |
123 | |
} |
124 | 10 | return (FacesMessage[]) list.toArray(new FacesMessage[list.size()]); |
125 | |
} |
126 | |
|
127 | |
public static void addWarnMessage(String messageId) { |
128 | 0 | final FacesContext context = FacesContext.getCurrentInstance(); |
129 | 0 | addWarnComponentMessage(context, (UIComponent) null, messageId); |
130 | 0 | } |
131 | |
|
132 | |
public static void addWarnMessage(String messageId, Object[] args) { |
133 | 0 | final FacesContext context = FacesContext.getCurrentInstance(); |
134 | 0 | addWarnComponentMessage(context, (UIComponent) null, messageId, args); |
135 | 0 | } |
136 | |
|
137 | |
public static void addWarnComponentMessage(FacesContext context, |
138 | |
UIComponent component, String messageId) { |
139 | 0 | addWarnComponentMessage(context, component, messageId, null); |
140 | 0 | } |
141 | |
|
142 | |
public static void addWarnComponentMessage(FacesContext context, |
143 | |
UIComponent component, String messageId, Object[] args) { |
144 | 0 | addTargetSeverityMessage(context, component, messageId, args, |
145 | |
FacesMessage.SEVERITY_WARN); |
146 | 0 | } |
147 | |
|
148 | |
public static void addWarnComponentMessage(FacesContext context, |
149 | |
String clientId, String messageId) { |
150 | 0 | addWarnComponentMessage(context, clientId, messageId, null); |
151 | 0 | } |
152 | |
|
153 | |
public static void addWarnComponentMessage(FacesContext context, |
154 | |
String clientId, String messageId, Object[] args) { |
155 | 0 | addTargetSeverityMessage(context, clientId, messageId, args, |
156 | |
FacesMessage.SEVERITY_WARN); |
157 | 0 | } |
158 | |
|
159 | |
public static void addInfoMessage(String messageId) { |
160 | 0 | final FacesContext context = FacesContext.getCurrentInstance(); |
161 | 0 | addInfoComponentMessage(context, (UIComponent) null, messageId); |
162 | 0 | } |
163 | |
|
164 | |
public static void addInfoMessage(String messageId, Object[] args) { |
165 | 0 | final FacesContext context = FacesContext.getCurrentInstance(); |
166 | 0 | addInfoComponentMessage(context, (UIComponent) null, messageId, args); |
167 | 0 | } |
168 | |
|
169 | |
public static void addInfoComponentMessage(FacesContext context, |
170 | |
UIComponent component, String messageId) { |
171 | 0 | addInfoComponentMessage(context, component, messageId, null); |
172 | 0 | } |
173 | |
|
174 | |
public static void addInfoComponentMessage(FacesContext context, |
175 | |
UIComponent component, String messageId, Object[] args) { |
176 | 0 | addTargetSeverityMessage(context, component, messageId, args, |
177 | |
FacesMessage.SEVERITY_INFO); |
178 | 0 | } |
179 | |
|
180 | |
public static void addInfoComponentMessage(FacesContext context, |
181 | |
String clientId, String messageId) { |
182 | 0 | addInfoComponentMessage(context, clientId, messageId, null); |
183 | 0 | } |
184 | |
|
185 | |
public static void addInfoComponentMessage(FacesContext context, |
186 | |
String clientId, String messageId, Object[] args) { |
187 | 0 | addTargetSeverityMessage(context, clientId, messageId, args, |
188 | |
FacesMessage.SEVERITY_INFO); |
189 | 0 | } |
190 | |
|
191 | |
public static void addErrorMessage(String messageId) { |
192 | 0 | final FacesContext context = FacesContext.getCurrentInstance(); |
193 | 0 | addErrorComponentMessage(context, (UIComponent) null, messageId); |
194 | 0 | } |
195 | |
|
196 | |
public static void addErrorMessage(String messageId, Object[] args) { |
197 | 0 | final FacesContext context = FacesContext.getCurrentInstance(); |
198 | 0 | addErrorComponentMessage(context, (UIComponent) null, messageId, args); |
199 | 0 | } |
200 | |
|
201 | |
public static void addErrorComponentMessage(FacesContext context, |
202 | |
UIComponent component, String messageId) { |
203 | 3 | addErrorComponentMessage(context, component, messageId, null); |
204 | 3 | } |
205 | |
|
206 | |
public static void addErrorComponentMessage(FacesContext context, |
207 | |
UIComponent component, String messageId, Object[] args) { |
208 | 24 | addTargetSeverityMessage(context, component, messageId, args, |
209 | |
FacesMessage.SEVERITY_ERROR); |
210 | 24 | } |
211 | |
|
212 | |
public static void addErrorComponentMessage(FacesContext context, |
213 | |
String clientId, String messageId) { |
214 | 0 | addErrorComponentMessage(context, clientId, messageId, null); |
215 | 0 | } |
216 | |
|
217 | |
public static void addErrorComponentMessage(FacesContext context, |
218 | |
String clientId, String messageId, Object[] args) { |
219 | 0 | addTargetSeverityMessage(context, clientId, messageId, args, |
220 | |
FacesMessage.SEVERITY_ERROR); |
221 | 0 | } |
222 | |
|
223 | |
public static void addFatalMessage(String messageId) { |
224 | 0 | final FacesContext context = FacesContext.getCurrentInstance(); |
225 | 0 | addFatalComponentMessage(context, (UIComponent) null, messageId); |
226 | 0 | } |
227 | |
|
228 | |
public static void addFatalMessage(String messageId, Object[] args) { |
229 | 0 | final FacesContext context = FacesContext.getCurrentInstance(); |
230 | 0 | addFatalComponentMessage(context, (UIComponent) null, messageId, args); |
231 | 0 | } |
232 | |
|
233 | |
public static void addFatalComponentMessage(FacesContext context, |
234 | |
UIComponent component, String messageId) { |
235 | 0 | addFatalComponentMessage(context, component, messageId, null); |
236 | 0 | } |
237 | |
|
238 | |
public static void addFatalComponentMessage(FacesContext context, |
239 | |
UIComponent component, String messageId, Object[] args) { |
240 | 0 | addTargetSeverityMessage(context, component, messageId, args, |
241 | |
FacesMessage.SEVERITY_FATAL); |
242 | 0 | } |
243 | |
|
244 | |
public static void addFatalComponentMessage(FacesContext context, |
245 | |
String clientId, String messageId) { |
246 | 0 | addFatalComponentMessage(context, clientId, messageId, null); |
247 | 0 | } |
248 | |
|
249 | |
public static void addFatalComponentMessage(FacesContext context, |
250 | |
String clientId, String messageId, Object[] args) { |
251 | 0 | addTargetSeverityMessage(context, clientId, messageId, args, |
252 | |
FacesMessage.SEVERITY_FATAL); |
253 | 0 | } |
254 | |
|
255 | |
private static void addTargetSeverityMessage(FacesContext context, |
256 | |
UIComponent component, String messageId, Object[] args, |
257 | |
Severity severity) { |
258 | 24 | final String clientId = (component != null) ? component |
259 | |
.getClientId(context) : null; |
260 | 24 | addTargetSeverityMessage(context, clientId, messageId, args, severity); |
261 | 24 | } |
262 | |
|
263 | |
private static void addTargetSeverityMessage(FacesContext context, |
264 | |
String clientId, String messageId, Object[] args, Severity severity) { |
265 | 24 | final Locale locale = ComponentUtil_.getLocale(context); |
266 | 24 | final FacesMessage message = getMessage(context, locale, severity, |
267 | |
messageId, args); |
268 | 24 | context.addMessage(clientId, message); |
269 | 24 | } |
270 | |
|
271 | |
public static String getSummary(String messageId, Object[] args) { |
272 | 0 | FacesMessage message = getMessage(FacesContext.getCurrentInstance(), |
273 | |
messageId, args); |
274 | 0 | return (message != null) ? message.getSummary() : null; |
275 | |
} |
276 | |
|
277 | |
public static String getSummary(FacesContext context, String messageId, |
278 | |
Object[] args) { |
279 | 0 | FacesMessage message = getMessage(context, messageId, args); |
280 | 0 | return (message != null) ? message.getSummary() : null; |
281 | |
} |
282 | |
|
283 | |
public static String getDetail(String messageId, Object[] args) { |
284 | 0 | FacesMessage message = getMessage(FacesContext.getCurrentInstance(), |
285 | |
messageId, args); |
286 | 0 | return (message != null) ? message.getDetail() : null; |
287 | |
} |
288 | |
|
289 | |
public static String getDetail(FacesContext context, String messageId, |
290 | |
Object[] args) { |
291 | 0 | FacesMessage message = getMessage(context, messageId, args); |
292 | 0 | return (message != null) ? message.getDetail() : null; |
293 | |
} |
294 | |
|
295 | |
public static FacesMessage getMessage(FacesContext context, |
296 | |
String messageId, Object[] args) { |
297 | 75 | Locale locale = ComponentUtil_.getLocale(context); |
298 | 75 | return getMessage(context, locale, FacesMessage.SEVERITY_ERROR, |
299 | |
messageId, args); |
300 | |
} |
301 | |
|
302 | |
public static FacesMessage getMessage(FacesContext context, Locale locale, |
303 | |
Severity severity, String messageId, Object[] args) { |
304 | |
|
305 | 99 | MessageResourceBundle bundle = getBundle(context, locale); |
306 | 99 | String summary = bundle.get(messageId); |
307 | 99 | String detail = bundle.get(messageId + DETAIL_SUFFIX); |
308 | 99 | if (summary == null && detail == null) { |
309 | 4 | MessageResourceBundle defaultBundle = getDefaultBundle(context, |
310 | |
locale); |
311 | 4 | summary = defaultBundle.get(messageId); |
312 | 4 | detail = defaultBundle.get(messageId + DETAIL_SUFFIX); |
313 | |
} |
314 | 99 | if (args != null) { |
315 | 261 | for (int i = 0; i < args.length; i++) { |
316 | 166 | final Object o = args[i]; |
317 | 166 | if (o != null && (o instanceof String)) { |
318 | 62 | args[i] = HTMLEncodeUtil.encodeAll(o.toString()); |
319 | |
} |
320 | |
} |
321 | |
} |
322 | 99 | if (summary != null) { |
323 | 97 | summary = getFormattedMessage(summary, locale, args); |
324 | |
} |
325 | 99 | if (detail != null) { |
326 | 76 | detail = getFormattedMessage(detail, locale, args); |
327 | |
} |
328 | 99 | return new FacesMessage(severity, summary, detail); |
329 | |
} |
330 | |
|
331 | |
private static MessageResourceBundle getBundle(FacesContext context, |
332 | |
Locale locale) { |
333 | 99 | MessageResourceBundle bundle = null; |
334 | 99 | String appBundleName = context.getApplication().getMessageBundle(); |
335 | 99 | if (appBundleName != null) { |
336 | 26 | bundle = getBundle(context, locale, appBundleName); |
337 | |
} |
338 | |
|
339 | 99 | if (bundle == null) { |
340 | 73 | bundle = getDefaultBundle(context, locale); |
341 | |
} |
342 | 99 | return bundle; |
343 | |
} |
344 | |
|
345 | |
private static MessageResourceBundle getDefaultBundle(FacesContext context, |
346 | |
Locale locale) { |
347 | 77 | return getBundle(context, locale, FacesMessage.FACES_MESSAGES); |
348 | |
} |
349 | |
|
350 | |
private static MessageResourceBundle getBundle(FacesContext context, |
351 | |
Locale locale, String bundleName) { |
352 | 103 | return MessageResourceBundleChainFactory |
353 | |
.createChain(bundleName, locale); |
354 | |
} |
355 | |
|
356 | |
private static String getFormattedMessage(String message, Locale locale, |
357 | |
Object[] args) { |
358 | 173 | if (args == null || args.length == 0) { |
359 | 8 | return message; |
360 | |
} |
361 | 165 | return new MessageFormat(message, locale).format(args); |
362 | |
} |
363 | |
|
364 | |
public static boolean hasClientId(FacesContext context, |
365 | |
UIComponent component) { |
366 | 0 | AssertionUtil.assertNotNull("context", context); |
367 | 0 | final String clientId = component.getClientId(context); |
368 | 0 | for (Iterator itr = context.getClientIdsWithMessages(); itr.hasNext();) { |
369 | 0 | String cId = (String) itr.next(); |
370 | 0 | if (clientId.equals(cId)) { |
371 | 0 | return true; |
372 | |
} |
373 | |
} |
374 | 0 | return false; |
375 | |
} |
376 | |
|
377 | |
public static boolean hasMessagesByClientId(FacesContext context, |
378 | |
UIComponent component) { |
379 | 1 | AssertionUtil.assertNotNull("context", context); |
380 | 1 | final String clientId = component.getClientId(context); |
381 | 1 | return hasMessagesByClientId(context, clientId); |
382 | |
} |
383 | |
|
384 | |
public static boolean hasMessagesByClientId(FacesContext context, |
385 | |
String clientId) { |
386 | 1 | final Iterator itr = context.getMessages(clientId); |
387 | 1 | return itr.hasNext(); |
388 | |
} |
389 | |
|
390 | |
public static boolean hasMessages() { |
391 | 0 | return hasMessages(FacesContext.getCurrentInstance()); |
392 | |
} |
393 | |
|
394 | |
public static boolean hasMessages(FacesContext context) { |
395 | 2 | AssertionUtil.assertNotNull("context", context); |
396 | 2 | final Iterator itr = context.getMessages(); |
397 | 2 | return itr.hasNext(); |
398 | |
} |
399 | |
|
400 | |
public static boolean hasErrorOrFatalMessage() { |
401 | 0 | return hasErrorOrFatalMessage(FacesContext.getCurrentInstance()); |
402 | |
} |
403 | |
|
404 | |
public static boolean hasErrorOrFatalMessage(final FacesContext context) { |
405 | 3 | AssertionUtil.assertNotNull("context", context); |
406 | 3 | final FacesMessage[] allMessages = getAllMessages(context); |
407 | 4 | for (int i = 0; i < allMessages.length; i++) { |
408 | 3 | final FacesMessage fm = allMessages[i]; |
409 | 3 | final Severity severity = fm.getSeverity(); |
410 | 3 | if (severity.equals(FacesMessage.SEVERITY_ERROR) || |
411 | |
severity.equals(FacesMessage.SEVERITY_FATAL)) { |
412 | 2 | return true; |
413 | |
} |
414 | |
} |
415 | 1 | return false; |
416 | |
} |
417 | |
} |