1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package javax.faces.convert;
20
21 import javax.el.ValueExpression;
22 import javax.faces.application.FacesMessage;
23 import javax.faces.component.UIComponent;
24 import javax.faces.context.FacesContext;
25
26 import java.text.MessageFormat;
27 import java.util.Locale;
28 import java.util.MissingResourceException;
29 import java.util.ResourceBundle;
30
31
32
33
34
35 class _MessageUtils
36 {
37 private static final String DETAIL_SUFFIX = "_detail";
38
39 static FacesMessage getErrorMessage(FacesContext facesContext,
40 String messageId,
41 Object args[])
42 {
43 return getMessage(facesContext,
44 facesContext.getViewRoot().getLocale(),
45 FacesMessage.SEVERITY_ERROR,
46 messageId,
47 args);
48 }
49
50 static FacesMessage getMessage(FacesContext facesContext,
51 Locale locale,
52 FacesMessage.Severity severity,
53 String messageId,
54 Object args[])
55 {
56 ResourceBundle appBundle;
57 ResourceBundle defBundle;
58 String summary;
59 String detail;
60
61 appBundle = getApplicationBundle(facesContext, locale);
62 summary = getBundleString(appBundle, messageId);
63 if (summary != null)
64 {
65 detail = getBundleString(appBundle, messageId + DETAIL_SUFFIX);
66 }
67 else
68 {
69 defBundle = getDefaultBundle(facesContext, locale);
70 summary = getBundleString(defBundle, messageId);
71 if (summary != null)
72 {
73 detail = getBundleString(defBundle, messageId + DETAIL_SUFFIX);
74 }
75 else
76 {
77
78 detail = getBundleString(appBundle, messageId + DETAIL_SUFFIX);
79 if (detail != null)
80 {
81 summary = null;
82 }
83 else
84 {
85 detail = getBundleString(defBundle, messageId + DETAIL_SUFFIX);
86 if (detail != null)
87 {
88 summary = null;
89 }
90 else
91 {
92
93 facesContext.getExternalContext().log("No message with id " + messageId + " found in any bundle");
94 return new FacesMessage(severity, messageId, null);
95 }
96 }
97 }
98 }
99
100 if (args != null && args.length > 0)
101 {
102 return new _ParametrizableFacesMessage(severity, summary, detail, args, locale);
103 }
104 else
105 {
106 return new FacesMessage(severity, summary, detail);
107 }
108 }
109
110 private static String getBundleString(ResourceBundle bundle, String key)
111 {
112 try
113 {
114 return bundle == null ? null : bundle.getString(key);
115 }
116 catch (MissingResourceException e)
117 {
118 return null;
119 }
120 }
121
122
123 private static ResourceBundle getApplicationBundle(FacesContext facesContext, Locale locale)
124 {
125 String bundleName = facesContext.getApplication().getMessageBundle();
126 return bundleName != null ? getBundle(facesContext, locale, bundleName) : null;
127 }
128
129 private static ResourceBundle getDefaultBundle(FacesContext facesContext,
130 Locale locale)
131 {
132 return getBundle(facesContext, locale, FacesMessage.FACES_MESSAGES);
133 }
134
135 private static ResourceBundle getBundle(FacesContext facesContext,
136 Locale locale,
137 String bundleName)
138 {
139 try
140 {
141
142 return ResourceBundle.getBundle(bundleName,
143 locale,
144 facesContext.getClass().getClassLoader());
145 }
146 catch (MissingResourceException ignore1)
147 {
148 try
149 {
150
151 return ResourceBundle.getBundle(bundleName,
152 locale,
153 _MessageUtils.class.getClassLoader());
154 }
155 catch (MissingResourceException ignore2)
156 {
157 try
158 {
159
160 return ResourceBundle.getBundle(bundleName,
161 locale,
162 Thread.currentThread().getContextClassLoader());
163 }
164 catch (MissingResourceException damned)
165 {
166 facesContext.getExternalContext().log("resource bundle " + bundleName + " could not be found");
167 return null;
168 }
169 }
170 }
171 }
172
173 static Object getLabel(FacesContext facesContext, UIComponent component) {
174 Object label = component.getAttributes().get("label");
175 if(label != null)
176 return label;
177
178 ValueExpression expression = component.getValueExpression("label");
179 if(expression != null)
180 return expression;
181
182
183 return component.getClientId( facesContext );
184 }
185 }