1
2
3
4
5
6
7 package net.sf.mindoro.commons.util;
8
9 import java.lang.reflect.InvocationTargetException;
10 import java.lang.reflect.Method;
11 import java.lang.reflect.Modifier;
12
13 import org.apache.commons.logging.Log;
14 import org.apache.commons.logging.LogFactory;
15
16 /***
17 * @author aisrael
18 *
19 * TODO To change the template for this generated type comment go to Window -
20 * Preferences - Java - Code Style - Code Templates
21 */
22 public final class BeanUtils {
23
24 private static final Log log = LogFactory.getLog(BeanUtils.class);
25
26 /***
27 * BeanUtils instances should not be constructed in regular programming.
28 */
29 private BeanUtils() {
30
31 }
32
33 /***
34 * Return a String representation of the given object listing all public
35 * properties (suitable for logging or debugging).
36 *
37 * @param obj
38 * any Object
39 * @return a String representation of this object listing all public
40 * properties
41 */
42 public static String beanToString(final Object obj) {
43 final StringBuffer sb = new StringBuffer();
44
45 sb.append('(');
46 if (null == obj) {
47 sb.append("null");
48 } else {
49 final Class objClass = obj.getClass();
50 sb.append(objClass.getName()).append(' ');
51
52 final Method[] methods = objClass.getDeclaredMethods();
53 for (int i = 0; i < methods.length; ++i) {
54 final Method method = methods[i];
55 if (Modifier.isPublic(method.getModifiers()) && method.getName().startsWith("get")
56 && method.getParameterTypes().length == 0) {
57
58 extractPropertyValue(sb, obj, method);
59 }
60 }
61 }
62 sb.append(')');
63 return sb.toString();
64 }
65
66 /***
67 * @param sb
68 * StringBuffer
69 * @param obj
70 * Object
71 * @param method
72 * Method
73 */
74 private static void extractPropertyValue(final StringBuffer sb, final Object obj, final Method method) {
75 try {
76 final Object value = method.invoke(obj, new Object[0]);
77 sb.append('(').append(getFriendlyName(method.getName())).append(' ');
78
79 if (null == value) {
80 sb.append("null");
81 } else {
82 final String valueToString = value.toString();
83 if (value.getClass() == java.lang.String.class) {
84 sb.append('"').append(valueToString).append('"');
85 } else {
86 sb.append(valueToString);
87 }
88 }
89 sb.append(')');
90 } catch (final IllegalArgumentException e) {
91 log.error("IllegalArgumentException caught invoking \"" + method.getName() + "\" on "
92 + obj.toString(), e);
93 } catch (final IllegalAccessException e) {
94 log.error("IllegalAccessException caught invoking \"" + method.getName() + "\" on "
95 + obj.toString(), e);
96 } catch (final InvocationTargetException e) {
97 log.error("InvocationTargetException caught invoking \"" + method.getName() + "\" on "
98 + obj.toString(), e);
99 }
100 }
101
102 /***
103 * @param name
104 * getXXX() method name
105 * @return 'friendly name
106 */
107 private static String getFriendlyName(final String name) {
108 final String result;
109
110 if (name.startsWith("get")) {
111 result = name.substring(3, 4).toLowerCase() + name.substring(4, name.length());
112 } else {
113 result = name;
114 }
115
116 return result;
117 }
118 }