1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.myfaces.view.facelets.el;
20
21 import java.util.HashMap;
22 import java.util.Map;
23
24 import javax.el.ValueExpression;
25 import javax.el.VariableMapper;
26
27 import org.apache.myfaces.view.facelets.PageContext;
28 import org.apache.myfaces.view.facelets.TemplateContext;
29
30
31
32
33
34
35
36
37
38
39
40 public final class DefaultVariableMapper extends VariableMapperBase
41 {
42 private Map<String, ValueExpression> _vars;
43
44 private PageContext _pageContext;
45
46 private TemplateContext _templateContext;
47
48 private VariableMapper _delegate;
49
50 public boolean _trackResolveVariables;
51
52 public boolean _variableResolved;
53
54 public DefaultVariableMapper()
55 {
56 super();
57 _trackResolveVariables = false;
58 _variableResolved = false;
59 }
60
61 public DefaultVariableMapper(VariableMapper delegate)
62 {
63 super();
64 this._delegate = delegate;
65 }
66
67
68
69
70 public ValueExpression resolveVariable(String name)
71 {
72 ValueExpression returnValue = null;
73
74 if (_vars != null)
75 {
76 returnValue = _vars.get(name);
77 }
78
79
80 if (returnValue == null)
81 {
82
83 if (_pageContext != null && _pageContext.getAttributeCount() > 0)
84 {
85 if (_pageContext.getAttributes().containsKey(name))
86 {
87 returnValue = _pageContext.getAttributes().get(name);
88 if (_trackResolveVariables)
89 {
90 if (returnValue instanceof CacheableValueExpression)
91 {
92 if (returnValue instanceof CacheableValueExpressionWrapper)
93 {
94 returnValue = ((CacheableValueExpressionWrapper)returnValue).
95 getWrapped();
96 }
97 }
98 else
99 {
100 _variableResolved = true;
101 }
102 }
103 return returnValue;
104 }
105 }
106
107 if (_templateContext != null)
108 {
109 if (!_templateContext.isParameterEmpty() &&
110 _templateContext.containsParameter(name))
111 {
112 returnValue = _templateContext.getParameter(name);
113 if (_trackResolveVariables &&
114 !(returnValue instanceof CacheableValueExpression))
115 {
116 _variableResolved = true;
117 }
118 return returnValue;
119 }
120 else if (!_templateContext.isKnownParametersEmpty() &&
121 _templateContext.containsKnownParameter(name))
122 {
123
124
125
126
127
128
129
130 if (_trackResolveVariables)
131 {
132 _variableResolved = true;
133 }
134 }
135 }
136
137 if (_delegate != null)
138 {
139 returnValue = _delegate.resolveVariable(name);
140 }
141 }
142 else if (_trackResolveVariables)
143 {
144
145
146 _variableResolved = true;
147 }
148
149 return returnValue;
150 }
151
152
153
154
155 public ValueExpression setVariable(String name, ValueExpression expression)
156 {
157 if (_vars == null)
158 {
159 _vars = new HashMap<String, ValueExpression>();
160 }
161
162 return _vars.put(name, expression);
163 }
164
165
166
167
168
169
170 public void setPageContext(PageContext pageContext)
171 {
172 this._pageContext = pageContext;
173 }
174
175
176
177
178
179
180 public void setTemplateContext(TemplateContext templateContext)
181 {
182 this._templateContext = templateContext;
183 }
184
185 @Override
186 public boolean isAnyFaceletsVariableResolved()
187 {
188 if (_trackResolveVariables)
189 {
190 return _variableResolved;
191 }
192 else
193 {
194
195 return true;
196 }
197 }
198
199 @Override
200 public void beforeConstructELExpression()
201 {
202 _trackResolveVariables = true;
203 _variableResolved = false;
204 }
205
206 @Override
207 public void afterConstructELExpression()
208 {
209 _trackResolveVariables = false;
210 _variableResolved = false;
211 }
212 }