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    
018    package org.apache.commons.proxy.provider;
019    
020    import org.apache.commons.proxy.ObjectProvider;
021    import org.apache.commons.proxy.exception.ObjectProviderException;
022    
023    /**
024     * Uses <code>Class.newInstance()</code> to instantiate an object.
025     *
026     * @author James Carman
027     * @since 1.0
028     */
029    public class BeanProvider implements ObjectProvider
030    {
031    //----------------------------------------------------------------------------------------------------------------------
032    // Fields
033    //----------------------------------------------------------------------------------------------------------------------
034    
035        private Class beanClass;
036    
037    //----------------------------------------------------------------------------------------------------------------------
038    // Constructors
039    //----------------------------------------------------------------------------------------------------------------------
040    
041        public BeanProvider()
042        {
043        }
044    
045        /**
046         * Constructs a provider which instantiates objects of the specified bean class.
047         * @param beanClass the bean class
048         */
049        public BeanProvider( Class beanClass )
050        {
051            this.beanClass = beanClass;
052        }
053    
054    //----------------------------------------------------------------------------------------------------------------------
055    // ObjectProvider Implementation
056    //----------------------------------------------------------------------------------------------------------------------
057    
058        public Object getObject()
059        {
060            try
061            {
062                if( beanClass == null )
063                {
064                    throw new ObjectProviderException( "No bean class provided." );
065                }
066                return beanClass.newInstance();
067            }
068            catch( InstantiationException e )
069            {
070                throw new ObjectProviderException( "Class " + beanClass.getName() + " is not concrete.", e );
071            }
072            catch( IllegalAccessException e )
073            {
074                throw new ObjectProviderException( "Constructor for class " + beanClass.getName() + " is not accessible.",
075                                                   e );
076            }
077        }
078    
079    //----------------------------------------------------------------------------------------------------------------------
080    // Getter/Setter Methods
081    //----------------------------------------------------------------------------------------------------------------------
082    
083        public void setBeanClass( Class beanClass )
084        {
085            this.beanClass = beanClass;
086        }
087    }
088