License Apache License, 2.0
Lines 128
Keywords
Introspector (1) toString (1) toStringFromProperties (1)
Permissions
Owner: wellsantos
Viewable by Everyone
Editable by wellsantos
Hide
Easily highlight source code for your blog with our Syntax Highlighter. Join Siafoo Now or Learn More

ReflectUtil Atom Feed 0

In Brief Classe com rotinas para criar a representação textual de um objeto usando reflection através do processamento de todas as propriedades públicas (getters e setters).
# 's
  1import java.beans.BeanInfo;
2import java.beans.IntrospectionException;
3import java.beans.Introspector;
4import java.beans.PropertyDescriptor;
5import java.lang.reflect.Method;
6import java.text.DateFormat;
7import java.util.Calendar;
8import java.util.Date;
9
10/**
11 * Contém rotinas para manipular objetos através de reflection.
12 *
13 * @author wellsantos@wellsantos.com
14 */
15public class ReflectUtil {
16
17 protected ReflectUtil(){
18 }
19
20 /**
21 * Obtém a representação textual de um objeto usando reflection.<br />
22 * Este método não é performático e tem a finalidade de ser usado
23 * apenas em depurações/testes unitários.
24 *
25 * @param value objeto a processar
26 *
27 * @return a representação textual do objeto usando reflection.
28 */
29 public static String toString(Object value){
30 if (value == null){
31 return "";
32 }
33
34 Class<?> type = value.getClass();
35
36 if (!type.isPrimitive()
37 && !type.isEnum()
38 && !type.isArray()
39 && type != Character.class
40 && type != String.class){
41 if (value instanceof Date){
42 DateFormat dateFormat = LocaleUtil.get().getDateTimeFormat2();
43 synchronized (dateFormat) {
44 return dateFormat.format((Date)value);
45 }
46 }
47 if (value instanceof Calendar){
48 DateFormat dateFormat = LocaleUtil.get().getDateTimeFormat2();
49 synchronized (dateFormat) {
50 return dateFormat.format(((Calendar)value).getTime());
51 }
52 }
53 if (!(value instanceof Number)){
54 try {
55 Method toString = type.getMethod("toString");
56 Class<?> toStringOwner = toString.getDeclaringClass();
57
58 if (toStringOwner == null
59 || toStringOwner == Object.class
60 || toStringOwner.getName().equals(Object.class.getName())){
61 return toStringFromProperties(value);
62 }
63 } catch (SecurityException e) {
64 throw new RuntimeException(e);
65 } catch (NoSuchMethodException e) {
66 throw new RuntimeException(e);
67 }
68 }
69 }
70 return value.toString();
71 }
72
73 /**
74 * Obtém a representação textual de um objeto usando reflection
75 * processando todas as propriedades públicas (getters e setters). <br/>
76 * Este método não é performático e tem a finalidade de ser usado
77 * apenas em depurações/testes unitários.
78 *
79 * @param value objeto a processar
80 *
81 * @return a representação textual do objeto usando reflection.
82 */
83 public static String toStringFromProperties(Object value){
84 try {
85 BeanInfo info = Introspector.getBeanInfo(value.getClass());
86 StringBuilder str = new StringBuilder();
87 str.append(value.getClass().getSimpleName()).append('[');
88
89 if (info != null){
90 PropertyDescriptor[] pds = info.getPropertyDescriptors();
91
92 if (pds != null){
93 boolean first = true;
94
95 for (PropertyDescriptor pd : pds) {
96 Method rm = pd.getReadMethod();
97 if (rm != null
98 && !"class".equals(pd.getName())
99 && value.getClass().getMethod(rm.getName(), rm.getParameterTypes()).getAnnotation(SkipToString.class) == null){
100
101 Object prop;
102 try {
103 prop = rm.invoke(value);
104 } catch (Exception e) {
105 continue;
106 }
107
108 if (first){
109 first = false;
110 } else {
111 str.append(", ");
112 }
113
114 str.append(pd.getName()).append(": ").append(toString(prop));
115 }
116 }
117 }
118 }
119
120 return str.append(']').toString();
121 } catch (IntrospectionException e) {
122 throw new RuntimeException(e);
123 } catch (SecurityException e) {
124 throw new RuntimeException(e);
125 } catch (NoSuchMethodException e) {
126 throw new RuntimeException(e);
127 }
128 }
129}

Classe com rotinas para criar a representação textual de um objeto usando reflection através do processamento de todas as propriedades públicas (getters e setters).