71ac30857c59c3181cc69cd2cb2c144b27dfe154
[utils] / system / spring / src / main / java / org / wamblee / system / spring / RequiredServiceBean.java
1 /*
2  * Copyright 2007 the original author or authors.
3  * 
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  * 
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  * 
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */ 
16 package org.wamblee.system.spring;
17
18 import java.util.List;
19
20 import org.springframework.beans.factory.FactoryBean;
21 import org.wamblee.system.core.RequiredInterface;
22 import org.wamblee.system.core.SystemAssemblyException;
23
24 /**
25  * Bean which adds a service required by the spring component to 
26  * the application context so that other spring beans can use it.  
27  *  
28  * @author Erik Brakkee
29  */
30 class RequiredServiceBean implements FactoryBean {
31         
32         private RequiredInterface _required; 
33         
34         /**
35          * Constructs the bean. 
36          * @param aId Id of the bean in the service registry.  
37          */
38         public RequiredServiceBean(String aId) { 
39                 List<RequiredInterface> required = SpringComponent.THIS.get().getRequiredInterfaces();
40                 for ( RequiredInterface intf: required) { 
41                         if ( intf.getName().equals(aId)) { 
42                                 _required = intf; 
43                                 return;
44                         }
45                 }
46                 throw new SystemAssemblyException("Cannot resolve required component '" + aId + "'");
47         }
48
49         @Override
50         public Object getObject() throws Exception {
51                 return SpringComponent.SCOPE.get().getInterfaceImplementation(
52                                 _required.getProvider(), Object.class);
53         }
54
55         @Override
56         public Class getObjectType() {
57                 return null;
58         }
59
60         @Override
61         public boolean isSingleton() {
62                 return true; 
63         }
64
65 }