KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > tapestry > services > impl > ComponentPropertySourceImpl


1 // Copyright 2005 The Apache Software Foundation
2
//
3
// Licensed under the Apache License, Version 2.0 (the "License");
4
// you may not use this file except in compliance with the License.
5
// You may obtain a copy of the License at
6
//
7
// http://www.apache.org/licenses/LICENSE-2.0
8
//
9
// Unless required by applicable law or agreed to in writing, software
10
// distributed under the License is distributed on an "AS IS" BASIS,
11
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
// See the License for the specific language governing permissions and
13
// limitations under the License.
14

15 package org.apache.tapestry.services.impl;
16
17 import java.util.ArrayList JavaDoc;
18 import java.util.HashMap JavaDoc;
19 import java.util.List JavaDoc;
20 import java.util.Locale JavaDoc;
21 import java.util.Map JavaDoc;
22
23 import org.apache.hivemind.Resource;
24 import org.apache.hivemind.lib.chain.ChainBuilder;
25 import org.apache.tapestry.IComponent;
26 import org.apache.tapestry.INamespace;
27 import org.apache.tapestry.engine.IPropertySource;
28 import org.apache.tapestry.event.ResetEventListener;
29 import org.apache.tapestry.services.ComponentPropertySource;
30 import org.apache.tapestry.spec.IComponentSpecification;
31 import org.apache.tapestry.util.PropertyHolderPropertySource;
32
33 /**
34  * TODO: Figure out a testing strategy for this beast!
35  *
36  * @author Howard M. Lewis Ship
37  * @since 4.0
38  */

39 public class ComponentPropertySourceImpl implements ComponentPropertySource, ResetEventListener
40 {
41     private IPropertySource _globalProperties;
42
43     private ChainBuilder _chainBuilder;
44
45     private Map JavaDoc _componentSources = new HashMap JavaDoc();
46
47     private Map JavaDoc _localizedComponentSources = new HashMap JavaDoc();
48
49     private Map JavaDoc _namespaceSources = new HashMap JavaDoc();
50
51     private Map JavaDoc _localizedNamespaceSources = new HashMap JavaDoc();
52
53     public synchronized void resetEventDidOccur()
54     {
55         _componentSources.clear();
56         _localizedComponentSources.clear();
57         _namespaceSources.clear();
58         _localizedNamespaceSources.clear();
59     }
60
61     private synchronized IPropertySource getSourceForNamespace(INamespace namespace)
62     {
63         Resource key = namespace.getSpecificationLocation();
64
65         IPropertySource result = (IPropertySource) _namespaceSources.get(key);
66
67         if (result == null)
68         {
69             result = createSourceForNamespace(namespace);
70             _namespaceSources.put(key, result);
71         }
72
73         return result;
74     }
75
76     private synchronized IPropertySource getSourceForComponent(IComponent component)
77     {
78         Resource key = component.getSpecification().getSpecificationLocation();
79
80         IPropertySource result = (IPropertySource) _componentSources.get(key);
81
82         if (result == null)
83         {
84             result = createSourceForComponent(component);
85             _componentSources.put(key, result);
86         }
87
88         return result;
89     }
90
91     private synchronized LocalizedPropertySource getLocalizedSourceForComponent(IComponent component)
92     {
93         Resource key = component.getSpecification().getSpecificationLocation();
94
95         LocalizedPropertySource result = (LocalizedPropertySource) _localizedComponentSources
96                 .get(key);
97
98         if (result == null)
99         {
100             result = new LocalizedPropertySource(getSourceForComponent(component));
101
102             _localizedComponentSources.put(key, result);
103         }
104
105         return result;
106     }
107
108     private synchronized LocalizedPropertySource getLocalizedSourceForNamespace(INamespace namespace)
109     {
110         Resource key = namespace.getSpecificationLocation();
111
112         LocalizedPropertySource result = (LocalizedPropertySource) _localizedNamespaceSources
113                 .get(key);
114
115         if (result == null)
116         {
117             result = new LocalizedPropertySource(getSourceForNamespace(namespace));
118
119             _localizedNamespaceSources.put(key, result);
120         }
121
122         return result;
123     }
124
125     private IPropertySource createSourceForComponent(IComponent component)
126     {
127         IComponentSpecification specification = component.getSpecification();
128
129         List JavaDoc sources = new ArrayList JavaDoc();
130
131         sources.add(new PropertyHolderPropertySource(specification));
132         sources.add(getSourceForNamespace(component.getNamespace()));
133
134         return (IPropertySource) _chainBuilder.buildImplementation(
135                 IPropertySource.class,
136                 sources,
137                 ImplMessages.componentPropertySourceDescription(specification));
138     }
139
140     private IPropertySource createSourceForNamespace(INamespace namespace)
141     {
142         List JavaDoc sources = new ArrayList JavaDoc();
143
144         sources.add(new PropertyHolderPropertySource(namespace.getSpecification()));
145         sources.add(_globalProperties);
146
147         return (IPropertySource) _chainBuilder.buildImplementation(
148                 IPropertySource.class,
149                 sources,
150                 ImplMessages.namespacePropertySourceDescription(namespace));
151     }
152
153     public String JavaDoc getComponentProperty(IComponent component, String JavaDoc propertyName)
154     {
155         return getSourceForComponent(component).getPropertyValue(propertyName);
156     }
157
158     public String JavaDoc getLocalizedComponentProperty(IComponent component, Locale JavaDoc locale,
159             String JavaDoc propertyName)
160     {
161         return getLocalizedSourceForComponent(component).getPropertyValue(propertyName, locale);
162     }
163
164     public String JavaDoc getNamespaceProperty(INamespace namespace, String JavaDoc propertyName)
165     {
166         return getSourceForNamespace(namespace).getPropertyValue(propertyName);
167     }
168
169     public String JavaDoc getLocalizedNamespaceProperty(INamespace namespace, Locale JavaDoc locale,
170             String JavaDoc propertyName)
171     {
172         return getLocalizedSourceForNamespace(namespace).getPropertyValue(propertyName, locale);
173     }
174
175     public void setChainBuilder(ChainBuilder chainBuilder)
176     {
177         _chainBuilder = chainBuilder;
178     }
179
180     public void setGlobalProperties(IPropertySource globalProperties)
181     {
182         _globalProperties = globalProperties;
183     }
184 }
Popular Tags