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