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 Paul Hammant                                             *
009     *****************************************************************************/
010    package org.picocontainer.containers;
011    
012    import org.picocontainer.ComponentAdapter;
013    import org.picocontainer.PicoContainer;
014    import org.picocontainer.PicoVisitor;
015    import org.picocontainer.NameBinding;
016    
017    import java.io.Serializable;
018    import java.util.Collection;
019    import java.util.Collections;
020    import java.util.List;
021    import java.lang.annotation.Annotation;
022    import java.lang.reflect.Type;
023    
024    /**
025     * empty pico container serving as recoil damper in situations where you
026     * do not like to check whether container reference suplpied to you
027     * is null or not
028     *
029     * @author Konstantin Pribluda
030     */
031    @SuppressWarnings("serial")
032    public class EmptyPicoContainer implements PicoContainer, Serializable {
033    
034        public Object getComponent(Object componentKeyOrType) {
035            return null;
036        }
037    
038        public Object getComponent(Object componentKeyOrType, Type into) {
039            return null;
040        }
041    
042        public <T> T getComponent(Class<T> componentType) {
043            return null;
044        }
045    
046        public <T> T getComponent(Class<T> componentType, Class<? extends Annotation> binding) {
047            return null;
048        }
049    
050        public List getComponents() {
051            return Collections.EMPTY_LIST;
052        }
053    
054        public PicoContainer getParent() {
055            return null;
056        }
057    
058        public ComponentAdapter<?> getComponentAdapter(Object componentKey) {
059            return null;
060        }
061    
062        public <T> ComponentAdapter<T> getComponentAdapter(Class<T> componentType, NameBinding componentNameBinding) {
063            return null;
064        }
065    
066        public <T> ComponentAdapter<T> getComponentAdapter(Class<T> componentType, Class<? extends Annotation> binding) {
067            return null;
068        }
069    
070        public Collection<ComponentAdapter<?>> getComponentAdapters() {
071            return Collections.emptyList();
072        }
073    
074        public <T> List<ComponentAdapter<T>> getComponentAdapters(Class<T> componentType) {
075            return Collections.emptyList();
076        }
077    
078        public <T> List<ComponentAdapter<T>> getComponentAdapters(Class<T> componentType, Class<? extends Annotation> binding) {
079            return Collections.emptyList();
080        }
081    
082        /**
083         * we do not have anything to do here. 
084         */
085        public void accept(PicoVisitor visitor) {
086        }
087    
088        public <T> List<T> getComponents(Class<T> componentType) {
089            return Collections.emptyList();
090        }
091    
092        public String toString() {
093            return "(empty)";
094        }
095    }