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 & Obie Fernandez & Aslak Hellesøy    *
009     *****************************************************************************/
010    
011    package org.picocontainer.monitors;
012    
013    import java.io.Serializable;
014    import java.lang.reflect.Constructor;
015    import java.lang.reflect.Member;
016    import java.lang.reflect.Method;
017    
018    import org.picocontainer.ComponentAdapter;
019    import org.picocontainer.ComponentMonitor;
020    import org.picocontainer.MutablePicoContainer;
021    import org.picocontainer.PicoContainer;
022    import org.picocontainer.PicoLifecycleException;
023    import org.picocontainer.Injector;
024    import org.picocontainer.Behavior;
025    
026    /**
027     * A {@link ComponentMonitor} which does nothing. 
028     * 
029     * @author Paul Hammant
030     * @author Obie Fernandez
031     */
032    @SuppressWarnings("serial")
033    public class NullComponentMonitor implements ComponentMonitor, Serializable {
034    
035        public <T> Constructor<T> instantiating(PicoContainer container, ComponentAdapter<T> componentAdapter,
036                                         Constructor<T> constructor) {
037            return constructor;
038        }
039    
040        public <T> void instantiationFailed(PicoContainer container,
041                                        ComponentAdapter<T> componentAdapter,
042                                        Constructor<T> constructor,
043                                        Exception e) {
044        }
045    
046        public <T> void instantiated(PicoContainer container, ComponentAdapter<T>  componentAdapter,
047                                 Constructor<T>  constructor,
048                                 Object instantiated,
049                                 Object[] injected,
050                                 long duration) {
051        }
052    
053        public Object invoking(PicoContainer container,
054                               ComponentAdapter<?> componentAdapter,
055                               Member member,
056                               Object instance, Object[] args) {
057            return KEEP;
058        }
059    
060        public void invoked(PicoContainer container,
061                            ComponentAdapter<?> componentAdapter,
062                            Member member,
063                            Object instance,
064                            long duration, Object[] args, Object retVal) {
065        }
066    
067        public void invocationFailed(Member member, Object instance, Exception e) {
068        }
069    
070        public void lifecycleInvocationFailed(MutablePicoContainer container,
071                                              ComponentAdapter<?> componentAdapter, Method method,
072                                              Object instance,
073                                              RuntimeException cause) {
074            if (cause instanceof PicoLifecycleException) {
075                throw cause;
076            }
077            throw new PicoLifecycleException(method, instance, cause);
078        }
079    
080        public Object noComponentFound(MutablePicoContainer container, Object componentKey) {
081            return null;
082        }
083    
084        public Injector newInjector(Injector injector) {
085            return injector;
086        }
087    
088        /** {@inheritDoc} **/
089        public Behavior newBehavior(Behavior behavior) {
090            return behavior;
091        }
092        
093    
094    }