2009/05/20 - Apache Shale has been retired.
For more information, please explore the Attic.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.shale.test.mock;
19
20 import java.util.ArrayList;
21 import java.util.HashMap;
22 import java.util.Iterator;
23 import java.util.List;
24 import java.util.Locale;
25 import java.util.Map;
26 import java.util.ResourceBundle;
27 import javax.el.ArrayELResolver;
28 import javax.el.BeanELResolver;
29 import javax.el.CompositeELResolver;
30 import javax.el.ELContextListener;
31 import javax.el.ELException;
32 import javax.el.ELResolver;
33 import javax.el.ExpressionFactory;
34 import javax.el.ListELResolver;
35 import javax.el.MapELResolver;
36 import javax.el.ResourceBundleELResolver;
37 import javax.el.ValueExpression;
38 import javax.faces.FacesException;
39 import javax.faces.component.UIComponent;
40 import javax.faces.component.UIViewRoot;
41 import javax.faces.context.FacesContext;
42 import org.apache.shale.test.el.FacesImplicitObjectELResolver;
43 import org.apache.shale.test.el.FacesPropertyResolverChainWrapper;
44 import org.apache.shale.test.el.FacesResourceBundleELResolver;
45 import org.apache.shale.test.el.FacesScopedAttributeELResolver;
46 import org.apache.shale.test.el.FacesVariableResolverChainWrapper;
47 import org.apache.shale.test.el.MockExpressionFactory;
48
49 /***
50 * <p>Mock implementation of <code>ExternalContext</code> that includes the semantics
51 * added by JavaServer Faces 1.2.</p>
52 *
53 * $Id: MockApplication12.java 471898 2006-11-06 22:25:39Z gvanmatre $
54 *
55 * @since 1.0.4
56 */
57 public class MockApplication12 extends MockApplication {
58
59
60
61
62
63 /***
64 * <p>Construct a default instance.</p>
65 */
66 public MockApplication12() {
67
68 super();
69
70
71 expressionFactory = new MockExpressionFactory();
72
73 }
74
75
76
77
78
79 /***
80 * <p>A list of resource bundles configured for this application.</p>
81 */
82 private Map bundles = new HashMap();
83
84
85 /***
86 * <p>The set of configured ELContextListener instances.</p>
87 */
88 private List elContextListeners = new ArrayList();
89
90
91 /***
92 * <p>Expression factory for this instance.</p>
93 */
94 private ExpressionFactory expressionFactory = null;
95
96
97 /***
98 * <p>The configured composite resolver to be returned by <code>getELResolver()</code>.
99 * This value is lazily instantiated.</p>
100 */
101 private ELResolver resolver = null;
102
103
104 /***
105 * <p>The set of ELResolver instances configured on this instance.</p>
106 */
107 private List resolvers = new ArrayList();
108
109
110
111
112
113 /***
114 * <p>Add the specified resource bundle to those associated with
115 * this application.</p>
116 *
117 * @param name Name under which to add this resource bundle
118 * @param bundle ResourceBundle to add
119 */
120 public void addResourceBundle(String name, ResourceBundle bundle) {
121 bundles.put(name, bundle);
122 }
123
124
125 /***
126 * <p>Return a <code>Map</code> of the resource bundles configured
127 * for this application, keyed by name.</p>
128 */
129 public Map getResourceBundles() {
130 return bundles;
131 }
132
133
134
135
136
137 /*** {@inheritDoc} */
138 public void addELContextListener(ELContextListener listener) {
139
140 elContextListeners.add(listener);
141
142 }
143
144
145 /*** {@inheritDoc} */
146 public void addELResolver(ELResolver resolver) {
147
148
149
150 if (resolver != null) {
151 throw new IllegalStateException("Cannot add resolvers now");
152 }
153
154 resolvers.add(resolver);
155
156 }
157
158
159 /*** {@inheritDoc} */
160 public UIComponent createComponent(ValueExpression expression,
161 FacesContext context,
162 String componentType) {
163
164 UIComponent component = null;
165 try {
166 component = (UIComponent) expression.getValue(context.getELContext());
167 if (component == null) {
168 component = createComponent(componentType);
169 expression.setValue(context.getELContext(), component);
170 }
171
172 } catch (Exception e) {
173 throw new FacesException(e);
174 }
175 return component;
176
177 }
178
179
180 /*** {@inheritDoc} */
181 public Object evaluateExpressionGet(FacesContext context,
182 String expression,
183 Class expectedType) throws ELException {
184
185 ValueExpression ve = getExpressionFactory().createValueExpression
186 (context.getELContext(), expression, expectedType);
187 return ve.getValue(context.getELContext());
188
189 }
190
191
192 /*** {@inheritDoc} */
193 public ELContextListener[] getELContextListeners() {
194
195 return (ELContextListener[])
196 elContextListeners.toArray(new ELContextListener[elContextListeners.size()]);
197
198 }
199
200
201 /*** {@inheritDoc} */
202 public ELResolver getELResolver() {
203
204 if (resolver == null) {
205
206
207 CompositeELResolver composite = new CompositeELResolver();
208
209 composite.add(new FacesImplicitObjectELResolver());
210
211 CompositeELResolver nested = new CompositeELResolver();
212
213 nested.add(new FacesVariableResolverChainWrapper());
214 nested.add(new FacesPropertyResolverChainWrapper());
215 Iterator items = resolvers.iterator();
216 while (items.hasNext()) {
217 nested.add((ELResolver) items.next());
218 }
219 composite.add(nested);
220
221
222 composite.add(new ResourceBundleELResolver());
223 composite.add(new FacesResourceBundleELResolver());
224 composite.add(new MapELResolver());
225 composite.add(new ListELResolver());
226 composite.add(new ArrayELResolver());
227 composite.add(new BeanELResolver());
228 composite.add(new FacesScopedAttributeELResolver());
229
230
231 resolver = composite;
232
233 }
234 return resolver;
235
236 }
237
238
239 /*** {@inheritDoc} */
240 public ExpressionFactory getExpressionFactory() {
241
242 return this.expressionFactory;
243
244 }
245
246
247 /*** {@inheritDoc} */
248 public ResourceBundle getResourceBundle(FacesContext context, String name) {
249
250 if ((context == null) || (name == null)) {
251 throw new NullPointerException();
252 }
253 Locale locale = null;
254 UIViewRoot viewRoot = context.getViewRoot();
255 if (viewRoot != null) {
256 locale = viewRoot.getLocale();
257 }
258 if (locale == null) {
259 locale = Locale.getDefault();
260 }
261 return ResourceBundle.getBundle(name, locale);
262
263 }
264
265
266 /*** {@inheritDoc} */
267 public void removeELContextListener(ELContextListener listener) {
268
269 elContextListeners.remove(listener);
270
271 }
272
273
274 }