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 Hammaant *
009 *****************************************************************************/
010
011 package org.picocontainer.monitors;
012
013 import static org.picocontainer.monitors.ComponentMonitorHelper.methodToString;
014 import static org.picocontainer.monitors.ComponentMonitorHelper.memberToString;
015 import static org.picocontainer.monitors.ComponentMonitorHelper.ctorToString;
016 import static org.picocontainer.monitors.ComponentMonitorHelper.parmsToString;
017 import static org.picocontainer.monitors.ComponentMonitorHelper.format;
018
019 import java.io.OutputStream;
020 import java.io.PrintStream;
021 import java.io.Serializable;
022 import java.lang.reflect.Constructor;
023 import java.lang.reflect.Method;
024 import java.lang.reflect.Member;
025
026 import org.picocontainer.ComponentMonitor;
027 import org.picocontainer.ComponentAdapter;
028 import org.picocontainer.MutablePicoContainer;
029 import org.picocontainer.PicoContainer;
030
031 /**
032 * A {@link ComponentMonitor} which writes to a {@link OutputStream}.
033 * This is typically used to write to a console.
034 *
035 * @author Paul Hammant
036 * @author Aslak Hellesøy
037 * @author Mauro Talevi
038 */
039 public final class ConsoleComponentMonitor implements ComponentMonitor, Serializable {
040
041 private final transient PrintStream out;
042 private final ComponentMonitor delegate;
043
044 public ConsoleComponentMonitor() {
045 this(System.out);
046 }
047
048 public ConsoleComponentMonitor(OutputStream out) {
049 this(out, new NullComponentMonitor());
050 }
051
052 public ConsoleComponentMonitor(OutputStream out, ComponentMonitor delegate) {
053 this.out = new PrintStream(out);
054 this.delegate = delegate;
055 }
056
057 public Constructor instantiating(PicoContainer container, ComponentAdapter componentAdapter,
058 Constructor constructor
059 ) {
060 out.println(format(ComponentMonitorHelper.INSTANTIATING, ctorToString(constructor)));
061 return delegate.instantiating(container, componentAdapter, constructor);
062 }
063
064 public void instantiated(PicoContainer container, ComponentAdapter componentAdapter,
065 Constructor constructor,
066 Object instantiated,
067 Object[] parameters,
068 long duration) {
069 out.println(format(ComponentMonitorHelper.INSTANTIATED, ctorToString(constructor), duration, instantiated.getClass().getName(), parmsToString(parameters)));
070 delegate.instantiated(container, componentAdapter, constructor, instantiated, parameters, duration);
071 }
072
073 public void instantiationFailed(PicoContainer container,
074 ComponentAdapter componentAdapter,
075 Constructor constructor,
076 Exception cause) {
077 out.println(format(ComponentMonitorHelper.INSTANTIATION_FAILED, ctorToString(constructor), cause.getMessage()));
078 delegate.instantiationFailed(container, componentAdapter, constructor, cause);
079 }
080
081 public void invoking(PicoContainer container,
082 ComponentAdapter componentAdapter,
083 Member member,
084 Object instance) {
085 out.println(format(ComponentMonitorHelper.INVOKING, memberToString(member), instance));
086 delegate.invoking(container, componentAdapter, member, instance);
087 }
088
089 public void invoked(PicoContainer container,
090 ComponentAdapter componentAdapter,
091 Method method,
092 Object instance,
093 long duration) {
094 out.println(format(ComponentMonitorHelper.INVOKED, methodToString(method), instance, duration));
095 delegate.invoked(container, componentAdapter, method, instance, duration);
096 }
097
098 public void invocationFailed(Member member, Object instance, Exception cause) {
099 out.println(format(ComponentMonitorHelper.INVOCATION_FAILED, memberToString(member), instance, cause.getMessage()));
100 delegate.invocationFailed(member, instance, cause);
101 }
102
103 public void lifecycleInvocationFailed(MutablePicoContainer container,
104 ComponentAdapter componentAdapter, Method method,
105 Object instance,
106 RuntimeException cause) {
107 out.println(format(ComponentMonitorHelper.LIFECYCLE_INVOCATION_FAILED, methodToString(method), instance, cause.getMessage()));
108 delegate.lifecycleInvocationFailed(container, componentAdapter, method, instance, cause);
109 }
110
111 public Object noComponentFound(MutablePicoContainer container, Object componentKey) {
112 out.println(format(ComponentMonitorHelper.NO_COMPONENT, componentKey));
113 return delegate.noComponentFound(container, componentKey);
114 }
115
116 }