001    /*****************************************************************************
002     * Copyright (C) PicoContainer Organization. All rights reserved.            *
003     * ------------------------------------------------------------------------- *
004     * The software in this package is published under the terms of the BSD      *
005     * style license a copy of which has been included with this distribution in *
006     * the LICENSE.txt file.                                                     *
007     *                                                                           *
008     * Original code by                                                          *
009     *****************************************************************************/
010    package org.picocontainer.defaults;
011    
012    import org.picocontainer.ComponentAdapter;
013    import org.picocontainer.Parameter;
014    import org.picocontainer.PicoIntrospectionException;
015    
016    /**
017     * @author Aslak Hellesøy
018     * @see org.picocontainer.gems.HotSwappingComponentAdapterFactory for a more feature-rich version of the class
019     * @since 1.2, moved from package {@link org.picocontainer.alternatives}
020     */
021    public class ImplementationHidingComponentAdapterFactory extends DecoratingComponentAdapterFactory {
022        private final boolean strict;
023    
024        /**
025         * For serialisation only. Do not use this constructor explicitly.
026         */
027        public ImplementationHidingComponentAdapterFactory() {
028            this(null);
029        }
030    
031        public ImplementationHidingComponentAdapterFactory(ComponentAdapterFactory delegate, boolean strict) {
032            super(delegate);
033            this.strict = strict;
034        }
035    
036        public ImplementationHidingComponentAdapterFactory(ComponentAdapterFactory delegate) {
037            this(delegate, true);
038        }
039    
040        public ComponentAdapter createComponentAdapter(Object componentKey, Class componentImplementation, Parameter[] parameters) throws PicoIntrospectionException, AssignabilityRegistrationException, NotConcreteRegistrationException {
041            return new ImplementationHidingComponentAdapter(super.createComponentAdapter(componentKey, componentImplementation, parameters), strict);
042        }
043    }