KickJava   Java API By Example, From Geeks To Geeks.

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


1 // Copyright 2004, 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.HashMap JavaDoc;
18 import java.util.Map JavaDoc;
19
20 import org.apache.hivemind.ErrorLog;
21 import org.apache.hivemind.Location;
22 import org.apache.hivemind.internal.Module;
23 import org.apache.hivemind.service.ObjectProvider;
24 import org.apache.hivemind.util.PropertyUtils;
25 import org.apache.tapestry.services.Infrastructure;
26
27 /**
28  * An ObjectProvider that streamlines access to the central
29  * {@link org.apache.tapestry.services.Infrastructure}object. The locator for this provider is the
30  * name of a property of the Infrastructure.
31  *
32  * @author Howard Lewis Ship
33  * @since 4.0
34  */

35
36 public class InfrastructureObjectProvider implements ObjectProvider
37 {
38     private ErrorLog _errorLog;
39
40     private Infrastructure _infrastructure;
41
42     private Map JavaDoc _cache = new HashMap JavaDoc();
43
44     public synchronized Object JavaDoc provideObject(Module contributingModule, Class JavaDoc propertyType,
45             String JavaDoc locator, Location location)
46     {
47         Object JavaDoc result = _cache.get(locator);
48
49         if (result == null)
50         {
51             result = readProperty(locator, location);
52             _cache.put(locator, result);
53         }
54
55         return result;
56     }
57
58     Object JavaDoc readProperty(String JavaDoc locator, Location location)
59     {
60         try
61         {
62             if (PropertyUtils.isReadable(_infrastructure, locator))
63                 return PropertyUtils.read(_infrastructure, locator);
64
65             return _infrastructure.getProperty(locator);
66         }
67         catch (Throwable JavaDoc ex)
68         {
69             _errorLog.error(ImplMessages.unableToReadInfrastructureProperty(
70                     locator,
71                     _infrastructure,
72                     ex), location, ex);
73
74             return null;
75         }
76     }
77
78     public void setErrorLog(ErrorLog errorLog)
79     {
80         _errorLog = errorLog;
81     }
82
83     public void setInfrastructure(Infrastructure infrastructure)
84     {
85         _infrastructure = infrastructure;
86     }
87
88 }
Popular Tags