1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package javax.faces.validator;
20
21 import java.text.MessageFormat;
22 import java.util.Locale;
23
24 import javax.el.ValueExpression;
25 import javax.faces.application.FacesMessage;
26 import javax.faces.context.FacesContext;
27 import javax.faces.el.ValueBinding;
28
29
30
31
32
33
34
35
36 class _ParametrizableFacesMessage extends FacesMessage
37 {
38
39
40
41 private static final long serialVersionUID = 7792947730961657948L;
42
43 private final Object _args[];
44 private String _evaluatedDetail;
45 private String _evaluatedSummary;
46 private transient Object _evaluatedArgs[];
47 private Locale _locale;
48
49 public _ParametrizableFacesMessage(
50 String summary, String detail, Object[] args, Locale locale)
51 {
52 super(summary, detail);
53 if(locale == null)
54 {
55 throw new NullPointerException("locale");
56 }
57 _locale = locale;
58 _args = args;
59 }
60
61 public _ParametrizableFacesMessage(FacesMessage.Severity severity,
62 String summary, String detail, Object[] args, Locale locale)
63 {
64 super(severity, summary, detail);
65 if(locale == null)
66 {
67 throw new NullPointerException("locale");
68 }
69 _locale = locale;
70 _args = args;
71 }
72
73 @Override
74 public String getDetail()
75 {
76 if (_evaluatedArgs == null && _args != null)
77 {
78 evaluateArgs();
79 }
80 if (_evaluatedDetail == null)
81 {
82 MessageFormat format = new MessageFormat(super.getDetail(), _locale);
83 _evaluatedDetail = format.format(_evaluatedArgs);
84 }
85 return _evaluatedDetail;
86 }
87
88 @Override
89 public void setDetail(String detail)
90 {
91 super.setDetail(detail);
92 _evaluatedDetail = null;
93 }
94
95 public String getUnformattedDetail()
96 {
97 return super.getDetail();
98 }
99
100 @Override
101 public String getSummary()
102 {
103 if (_evaluatedArgs == null && _args != null)
104 {
105 evaluateArgs();
106 }
107 if (_evaluatedSummary == null)
108 {
109 MessageFormat format = new MessageFormat(super.getSummary(), _locale);
110 _evaluatedSummary = format.format(_evaluatedArgs);
111 }
112 return _evaluatedSummary;
113 }
114
115 @Override
116 public void setSummary(String summary)
117 {
118 super.setSummary(summary);
119 _evaluatedSummary = null;
120 }
121
122 public String getUnformattedSummary()
123 {
124 return super.getSummary();
125 }
126
127 private void evaluateArgs()
128 {
129 _evaluatedArgs = new Object[_args.length];
130 FacesContext facesContext = null;
131 for (int i = 0; i < _args.length; i++)
132 {
133 if (_args[i] == null)
134 {
135 continue;
136 }
137 else if (_args[i] instanceof ValueBinding)
138 {
139 if (facesContext == null)
140 {
141 facesContext = FacesContext.getCurrentInstance();
142 }
143 _evaluatedArgs[i] = ((ValueBinding)_args[i]).getValue(facesContext);
144 }
145 else if (_args[i] instanceof ValueExpression)
146 {
147 if (facesContext == null)
148 {
149 facesContext = FacesContext.getCurrentInstance();
150 }
151 _evaluatedArgs[i] = ((ValueExpression)_args[i]).getValue(facesContext.getELContext());
152 }
153 else
154 {
155 _evaluatedArgs[i] = _args[i];
156 }
157 }
158 }
159 }