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 java.text.MessageFormat; 014 import java.lang.reflect.Constructor; 015 import java.lang.reflect.Method; 016 import java.lang.reflect.Field; 017 import java.lang.reflect.Member; 018 019 import org.picocontainer.ComponentMonitor; 020 021 /** 022 * An abstract {@link ComponentMonitor} which supports all the message formats. 023 * 024 * @author Mauro Talevi 025 */ 026 public final class ComponentMonitorHelper { 027 028 public final static String INSTANTIATING = "PicoContainer: instantiating {0}"; 029 public final static String INSTANTIATED = "PicoContainer: instantiated {0} [{1} ms], component {2}, injected [{3}]"; 030 public final static String INSTANTIATION_FAILED = "PicoContainer: instantiation failed: {0}, reason: {1}"; 031 public final static String INVOKING = "PicoContainer: invoking {0} on {1}"; 032 public final static String INVOKED = "PicoContainer: invoked {0} on {1} [{2} ms]"; 033 public final static String INVOCATION_FAILED = "PicoContainer: invocation failed: {0} on {1}, reason: {2}"; 034 public final static String LIFECYCLE_INVOCATION_FAILED = "PicoContainer: lifecycle invocation failed: {0} on {1}, reason: {2}"; 035 public final static String NO_COMPONENT = "PicoContainer: No component for key: {0}"; 036 037 public static String format(String template, Object... arguments) { 038 return MessageFormat.format(template, arguments); 039 } 040 041 public static String parmsToString(Object[] injected) { 042 StringBuffer sb = new StringBuffer(); 043 for (int i = 0; i < injected.length; i++) { 044 String s = injected[i].getClass().getName(); 045 sb.append(s); 046 if (i < injected.length-1) { 047 sb.append(", "); 048 } 049 } 050 return sb.toString(); 051 } 052 053 public static String ctorToString(Constructor constructor) { 054 Class[] params = constructor.getParameterTypes(); 055 StringBuffer sb = new StringBuffer(constructor.getName()); 056 sb.append("("); 057 for (int i = 0; i < params.length; i++) { 058 String s = params[i].getName(); 059 sb.append(s); 060 if (i < params.length-1) { 061 sb.append(", "); 062 } 063 } 064 sb.append(")"); 065 return sb.toString(); 066 } 067 068 public static String methodToString(Member member) { 069 StringBuffer sb = new StringBuffer(member.getName()); 070 if (member instanceof Method) { 071 Class[] params = ((Method) member).getParameterTypes(); 072 sb.append("("); 073 for (int i = 0; i < params.length; i++) { 074 String s = params[i].getName(); 075 sb.append(s); 076 if (i < params.length-1) { 077 sb.append(", "); 078 } 079 } 080 sb.append(")"); 081 } 082 return sb.toString(); 083 } 084 085 public static String memberToString(Member m) { 086 if (m instanceof Field) { 087 return toString((Field) m); 088 } else { 089 return methodToString((Method) m); 090 } 091 } 092 093 public static String toString(Field field) { 094 StringBuffer sb = new StringBuffer(field.getName()); 095 sb.append("(").append(field.getName()).append(")"); 096 return sb.toString(); 097 } 098 099 }