    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 Leo Simmons & J&ouml;rg Schaible                         *
    009     *****************************************************************************/
    010    package org.picocontainer.gems.adapters;
    011
    012    import org.picocontainer.PicoContainer;
    013    import org.picocontainer.PicoCompositionException;
    014    import org.picocontainer.PicoVerificationException;
    015    import org.picocontainer.adapters.AbstractAdapter;
    016
    017    import java.lang.reflect.Type;
    018
    019
    020    /**
    021     * Component adapter that wrapps a static factory with the help of {@link StaticFactory}.
    022     *
    023     * @author J&ouml;rg Schaible
    024     * @author Leo Simmons
    025     */
    026    @SuppressWarnings("serial")
    027    public final class StaticFactoryAdapter<T> extends AbstractAdapter<T> {
    028
    029
    030            private final StaticFactory<T> staticFactory;
    031
    032        /**
    033         * Construct a ComponentAdapter accessing a static factory creating the component.
    034         *
    035         * @param type The type of the created component.
    036         * @param staticFactory Wrapper instance for the static factory.
    037         */
    038        public StaticFactoryAdapter(final Class<T> type, final StaticFactory<T> staticFactory) {
    039
    040            this(type, type, staticFactory);
    041        }
    042
    043        /**
    044         * Construct a ComponentAdapter accessing a static factory creating the component using a special key for addComponent
    045         * registration.
    046         *
    047         * @param componentKey The key of the created component.
    048         * @param type The type of the created component.
    049         * @param staticFactory Wrapper instance for the static factory.
    050         */
    051        public StaticFactoryAdapter(final Object componentKey, final Class<T> type, final StaticFactory<T> staticFactory) {
    052            super(componentKey, type);
    053            this.staticFactory = staticFactory;
    054        }
    055
    056        /**
    057         * @return Returns the component created by the static factory.
    058         * @see org.picocontainer.ComponentAdapter#getComponentInstance(org.picocontainer.PicoContainer, java.lang.Class into)
    059         */
    060        public T getComponentInstance(final PicoContainer container, final Type into) throws PicoCompositionException {
    061            return staticFactory.get();
    062        }
    063
    064        /**
    065         * {@inheritDoc}
    066         *
    067         * @see org.picocontainer.ComponentAdapter#verify(org.picocontainer.PicoContainer)
    068         */
    069        public void verify(final PicoContainer container) throws PicoVerificationException {
    070        }
    071
    072        public String getDescriptor() {
    073            return "StaticFactory";
    074        }
    075    }