01: // Copyright 2007 The Apache Software Foundation
02: //
03: // Licensed under the Apache License, Version 2.0 (the "License");
04: // you may not use this file except in compliance with the License.
05: // You may obtain a copy of the License at
06: //
07: // http://www.apache.org/licenses/LICENSE-2.0
08: //
09: // 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.ioc.internal.services;
16:
17: import org.apache.tapestry.ioc.AnnotationProvider;
18: import org.apache.tapestry.ioc.ObjectProvider;
19: import org.apache.tapestry.ioc.ObjectLocator;
20: import org.apache.tapestry.ioc.annotations.InjectService;
21: import org.apache.tapestry.ioc.annotations.Value;
22: import org.apache.tapestry.ioc.services.SymbolSource;
23: import org.apache.tapestry.ioc.services.TypeCoercer;
24:
25: public class ValueObjectProvider implements ObjectProvider {
26: private final SymbolSource _symbolSource;
27:
28: private final TypeCoercer _typeCoercer;
29:
30: public ValueObjectProvider(@InjectService("SymbolSource")
31: SymbolSource symbolSource,
32:
33: @InjectService("TypeCoercer")
34: TypeCoercer typeCoercer) {
35: _symbolSource = symbolSource;
36: _typeCoercer = typeCoercer;
37: }
38:
39: public <T> T provide(Class<T> objectType,
40: AnnotationProvider annotationProvider, ObjectLocator locator) {
41: Value annotation = annotationProvider
42: .getAnnotation(Value.class);
43:
44: if (annotation == null)
45: return null;
46:
47: String value = annotation.value();
48: String expanded = _symbolSource.expandSymbols(value);
49: T coerced = _typeCoercer.coerce(expanded, objectType);
50:
51: return coerced;
52: }
53: }
|