Classes in this File | Line Coverage | Branch Coverage | Complexity | ||||
TilesContextPropertyAccessorDelegateFactory |
|
| 4.0;4 |
1 | /* | |
2 | * $Id: TilesContextPropertyAccessorDelegateFactory.java 1049696 2010-12-15 20:30:10Z apetrelli $ | |
3 | * | |
4 | * Licensed to the Apache Software Foundation (ASF) under one | |
5 | * or more contributor license agreements. See the NOTICE file | |
6 | * distributed with this work for additional information | |
7 | * regarding copyright ownership. The ASF licenses this file | |
8 | * to you under the Apache License, Version 2.0 (the | |
9 | * "License"); you may not use this file except in compliance | |
10 | * with the License. You may obtain a copy of the License at | |
11 | * | |
12 | * http://www.apache.org/licenses/LICENSE-2.0 | |
13 | * | |
14 | * Unless required by applicable law or agreed to in writing, | |
15 | * software distributed under the License is distributed on an | |
16 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | |
17 | * KIND, either express or implied. See the License for the | |
18 | * specific language governing permissions and limitations | |
19 | * under the License. | |
20 | */ | |
21 | ||
22 | package org.apache.tiles.ognl; | |
23 | ||
24 | import ognl.PropertyAccessor; | |
25 | ||
26 | import org.apache.tiles.request.ApplicationContext; | |
27 | import org.apache.tiles.request.Request; | |
28 | import org.apache.tiles.util.CombinedBeanInfo; | |
29 | ||
30 | /** | |
31 | * Decides the appropriate {@link PropertyAccessor} for the given property name | |
32 | * and {@link Request}. | |
33 | * | |
34 | * @version $Rev: 1049696 $ $Date: 2010-12-16 07:30:10 +1100 (Thu, 16 Dec 2010) $ | |
35 | * @since 2.2.0 | |
36 | */ | |
37 | 20 | public class TilesContextPropertyAccessorDelegateFactory implements |
38 | PropertyAccessorDelegateFactory<Request> { | |
39 | ||
40 | /** | |
41 | * The plain object property accessor, to be used directly for | |
42 | * {@link Request}. | |
43 | */ | |
44 | private PropertyAccessor objectPropertyAccessor; | |
45 | ||
46 | /** | |
47 | * The application context property accessor. | |
48 | */ | |
49 | private PropertyAccessor applicationContextPropertyAccessor; | |
50 | ||
51 | /** | |
52 | * The request scope property accessor. | |
53 | */ | |
54 | private PropertyAccessor anyScopePropertyAccessor; | |
55 | ||
56 | /** | |
57 | * The session scope property accessor. | |
58 | */ | |
59 | private PropertyAccessor scopePropertyAccessor; | |
60 | ||
61 | /** | |
62 | * The bean info of {@link Request} and | |
63 | * {@link org.apache.tiles.request.ApplicationContext}. | |
64 | */ | |
65 | private CombinedBeanInfo beanInfo; | |
66 | ||
67 | /** | |
68 | * Constructor. | |
69 | * | |
70 | * @param objectPropertyAccessor The plain object property accessor, to be | |
71 | * used directly for {@link Request}. | |
72 | * @param applicationContextPropertyAccessor The application context | |
73 | * property accessor. | |
74 | * @param anyScopePropertyAccessor The request scope property accessor. | |
75 | * @param scopePropertyAccessor The session scope property accessor. | |
76 | * @since 2.2.0 | |
77 | */ | |
78 | public TilesContextPropertyAccessorDelegateFactory( | |
79 | PropertyAccessor objectPropertyAccessor, | |
80 | PropertyAccessor applicationContextPropertyAccessor, | |
81 | PropertyAccessor anyScopePropertyAccessor, | |
82 | 10 | PropertyAccessor scopePropertyAccessor) { |
83 | 10 | beanInfo = new CombinedBeanInfo(Request.class, ApplicationContext.class); |
84 | 10 | this.objectPropertyAccessor = objectPropertyAccessor; |
85 | 10 | this.applicationContextPropertyAccessor = applicationContextPropertyAccessor; |
86 | 10 | this.anyScopePropertyAccessor = anyScopePropertyAccessor; |
87 | 10 | this.scopePropertyAccessor = scopePropertyAccessor; |
88 | 10 | } |
89 | ||
90 | /** {@inheritDoc} */ | |
91 | public PropertyAccessor getPropertyAccessor(String propertyName, | |
92 | Request request) { | |
93 | PropertyAccessor retValue; | |
94 | 20 | if (propertyName.endsWith("Scope")) { |
95 | 6 | String scopeName = propertyName.substring(0, propertyName.length() |
96 | - ScopePropertyAccessor.SCOPE_SUFFIX_LENGTH); | |
97 | 6 | if (request.getContext(scopeName) != null) { |
98 | 6 | return scopePropertyAccessor; |
99 | } | |
100 | } | |
101 | 14 | if (beanInfo.getMappedDescriptors(Request.class) |
102 | .containsKey(propertyName)) { | |
103 | 1 | retValue = objectPropertyAccessor; |
104 | 13 | } else if (beanInfo.getMappedDescriptors(ApplicationContext.class) |
105 | .containsKey(propertyName)) { | |
106 | 1 | retValue = applicationContextPropertyAccessor; |
107 | } else { | |
108 | 12 | return anyScopePropertyAccessor; |
109 | } | |
110 | 2 | return retValue; |
111 | } | |
112 | } |