001    /*
002     * Licensed to the Apache Software Foundation (ASF) under one or more
003     * contributor license agreements.  See the NOTICE file distributed with
004     * this work for additional information regarding copyright ownership.
005     * The ASF licenses this file to You under the Apache License, Version 2.0
006     * (the "License"); you may not use this file except in compliance with
007     * the License.  You may obtain a copy of the License at
008     *
009     *      http://www.apache.org/licenses/LICENSE-2.0
010     *
011     * Unless required by applicable law or agreed to in writing, software
012     * distributed under the License is distributed on an "AS IS" BASIS,
013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014     * See the License for the specific language governing permissions and
015     * limitations under the License.
016     */
017    package org.apache.servicemix.common.xbean;
018    
019    import java.util.Map;
020    
021    import org.springframework.beans.BeansException;
022    import org.springframework.beans.factory.BeanFactory;
023    import org.springframework.beans.factory.BeanNotOfRequiredTypeException;
024    import org.springframework.beans.factory.NoSuchBeanDefinitionException;
025    
026    /**
027     * A simple BeanFactory containing a set of predefined beans which can be used
028     * as a parent for another BeanFactory.
029     *  
030     * @author gnodet
031     */
032    public class SimpleBeanFactory implements BeanFactory {
033        
034        private final Map beans;
035        
036        public SimpleBeanFactory(Map beans) {
037            this.beans = beans;
038        }
039        public boolean containsBean(String name) {
040            return beans.containsKey(name);
041        }
042        public String[] getAliases(String name) throws NoSuchBeanDefinitionException {
043            Object bean = beans.get(name);
044            if (bean == null) {
045                throw new NoSuchBeanDefinitionException(name);
046            }
047            return new String[0];
048        }
049        public Object getBean(String name) throws BeansException {
050            return getBean(name, null);
051        }
052        public Object getBean(String name, Class requiredType) throws BeansException {
053            Object bean = beans.get(name);
054            if (bean == null) {
055                throw new NoSuchBeanDefinitionException(name);
056            }
057            if (requiredType != null && !requiredType.isInstance(bean)) {
058                throw new BeanNotOfRequiredTypeException(name, requiredType, bean.getClass());
059            }
060            return bean;
061        }
062        public Class getType(String name) throws NoSuchBeanDefinitionException {
063            Object bean = beans.get(name);
064            if (bean == null) {
065                throw new NoSuchBeanDefinitionException(name);
066            }
067            return bean.getClass();
068        }
069        public boolean isSingleton(String name) throws NoSuchBeanDefinitionException {
070            Object bean = beans.get(name);
071            if (bean == null) {
072                throw new NoSuchBeanDefinitionException(name);
073            }
074            return true;
075        }
076        public boolean isTypeMatch(String name, Class targetType) throws NoSuchBeanDefinitionException {
077            if (!beans.containsKey(name)) {
078                throw new NoSuchBeanDefinitionException(name);
079            }
080            if (targetType == null || Object.class.equals(targetType)) {
081                return true;
082            }
083            return targetType.isAssignableFrom(beans.get(name).getClass());
084        }
085        public boolean isPrototype(String name) {
086            return false;
087        }
088        
089    }