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 *****************************************************************************/ 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ö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 }