001    // Copyright 2007, 2010, 2011 The Apache Software Foundation
002    //
003    // Licensed under the Apache License, Version 2.0 (the "License");
004    // you may not use this file except in compliance with the License.
005    // You may obtain a copy of the License at
006    //
007    //     http://www.apache.org/licenses/LICENSE-2.0
008    //
009    // Unless required by applicable law or agreed to in writing, software
010    // distributed under the License is distributed on an "AS IS" BASIS,
011    // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
012    // See the License for the specific language governing permissions and
013    // limitations under the License.
014    
015    package org.apache.tapestry5.ioc.internal;
016    
017    import org.apache.tapestry5.ioc.AnnotationProvider;
018    import org.apache.tapestry5.ioc.ObjectLocator;
019    import org.apache.tapestry5.ioc.Registry;
020    
021    import java.lang.annotation.Annotation;
022    
023    /**
024     * A wrapper around {@link InternalRegistry} that exists to expand symbols in a service id before
025     * invoking {@link ObjectLocator#getService(String, Class)}.
026     */
027    public class RegistryWrapper implements Registry
028    {
029        private final InternalRegistry registry;
030    
031        public RegistryWrapper(final InternalRegistry registry)
032        {
033            this.registry = registry;
034        }
035    
036        public void cleanupThread()
037        {
038            registry.cleanupThread();
039        }
040    
041        public void shutdown()
042        {
043            registry.shutdown();
044        }
045    
046        public <T> T getObject(Class<T> objectType, AnnotationProvider annotationProvider)
047        {
048            return registry.getObject(objectType, annotationProvider);
049        }
050    
051        public <T> T getService(String serviceId, Class<T> serviceInterface)
052        {
053            String expandedServiceId = registry.expandSymbols(serviceId);
054    
055            return registry.getService(expandedServiceId, serviceInterface);
056        }
057    
058        public <T> T getService(Class<T> serviceInterface)
059        {
060            return registry.getService(serviceInterface);
061        }
062    
063        public <T> T getService(Class<T> serviceInterface, Class<? extends Annotation>... markerTypes)
064        {
065            return registry.getService(serviceInterface, markerTypes);
066        }
067    
068        public <T> T autobuild(Class<T> clazz)
069        {
070            return registry.autobuild(clazz);
071        }
072    
073        public <T> T autobuild(String description, Class<T> clazz)
074        {
075            return registry.autobuild(description, clazz);
076        }
077    
078        public void performRegistryStartup()
079        {
080            registry.performRegistryStartup();
081        }
082    
083        public <T> T proxy(Class<T> interfaceClass, Class<? extends T> implementationClass)
084        {
085            return registry.proxy(interfaceClass, implementationClass);
086        }
087    
088    }