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örg Schaible                         *
009 *****************************************************************************/
010package org.picocontainer.gems.adapters;
011
012import org.picocontainer.PicoContainer;
013import org.picocontainer.PicoCompositionException;
014import org.picocontainer.PicoVerificationException;
015import org.picocontainer.adapters.AbstractAdapter;
016
017import 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örg Schaible
024 * @author Leo Simmons
025 */
026@SuppressWarnings("serial")
027public 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}