Inspector | Message | Severity | Location |
---|---|---|---|
Java Inspector 048 | Copyrights information should be present in each file. | 1 | |
Java Inspector 049 | Use a Collection instead of arrays Object[] | 2 | 73:51 |
Java Inspector 049 | Use a Collection instead of arrays Object[] | 2 | 92:50 |
Java Inspector 049 | Use a Collection instead of arrays Object[] | 2 | 125:51 |
Java Inspector 049 | Use a Collection instead of arrays Object[] | 2 | 152:50 |
Java Inspector 082 | Parenthesis are redundant. | 2 | 76:54 |
Java Inspector 082 | Parenthesis are redundant. | 2 | 128:54 |
Java Inspector 089 | Type is not documented | 2 | 45:1 |
Java Inspector 089 | Undocumented method | 2 | 64:9 |
Java Inspector 089 | Undocumented method | 2 | 67:25 |
Java Inspector 089 | Undocumented method | 2 | 70:41 |
Java Inspector 089 | Undocumented method | 2 | 110:41 |
Java Inspector 005 | Classes, interfaces, methods, and variables should be named according to Sun's naming conventions. | 3 | 47:9 |
Java Inspector 025 | Avoid hardwired numeric literals. Allowed literals: [1, -1, 0] | 3 | 85:132 |
Java Inspector 025 | Avoid hardwired numeric literals. Allowed literals: [1, -1, 0] | 3 | 111:62 |
Java Inspector 025 | Avoid hardwired numeric literals. Allowed literals: [1, -1, 0] | 3 | 112:101 |
Java Inspector 025 | Avoid hardwired numeric literals. Allowed literals: [1, -1, 0] | 3 | 119:71 |
Java Inspector 025 | Avoid hardwired numeric literals. Allowed literals: [1, -1, 0] | 3 | 123:121 |
Java Inspector 025 | Avoid hardwired numeric literals. Allowed literals: [1, -1, 0] | 3 | 138:118 |
Java Inspector 025 | Avoid hardwired numeric literals. Allowed literals: [1, -1, 0] | 3 | 141:110 |
Java Inspector 025 | Avoid hardwired numeric literals. Allowed literals: [1, -1, 0] | 3 | 144:107 |
Java Inspector 025 | Avoid hardwired numeric literals. Allowed literals: [1, -1, 0] | 3 | 164:110 |
Java Inspector 025 | Avoid hardwired numeric literals. Allowed literals: [1, -1, 0] | 3 | 167:107 |
Java Inspector 026 | Avoid hardwired string literals. Allowed literals: [] | 3 | 68:88 |
Java Inspector 026 | Avoid hardwired string literals. Allowed literals: [] | 3 | 68:118 |
Java Inspector 026 | Avoid hardwired string literals. Allowed literals: [] | 3 | 77:100 |
Java Inspector 026 | Avoid hardwired string literals. Allowed literals: [] | 3 | 85:135 |
Java Inspector 026 | Avoid hardwired string literals. Allowed literals: [] | 3 | 85:177 |
Java Inspector 026 | Avoid hardwired string literals. Allowed literals: [] | 3 | 87:99 |
Java Inspector 026 | Avoid hardwired string literals. Allowed literals: [] | 3 | 100:121 |
Java Inspector 026 | Avoid hardwired string literals. Allowed literals: [] | 3 | 100:156 |
Java Inspector 026 | Avoid hardwired string literals. Allowed literals: [] | 3 | 103:91 |
Java Inspector 026 | Avoid hardwired string literals. Allowed literals: [] | 3 | 113:87 |
Java Inspector 026 | Avoid hardwired string literals. Allowed literals: [] | 3 | 113:99 |
Java Inspector 026 | Avoid hardwired string literals. Allowed literals: [] | 3 | 113:107 |
Java Inspector 026 | Avoid hardwired string literals. Allowed literals: [] | 3 | 117:63 |
Java Inspector 026 | Avoid hardwired string literals. Allowed literals: [] | 3 | 121:63 |
Java Inspector 026 | Avoid hardwired string literals. Allowed literals: [] | 3 | 122:63 |
Java Inspector 026 | Avoid hardwired string literals. Allowed literals: [] | 3 | 129:100 |
Java Inspector 026 | Avoid hardwired string literals. Allowed literals: [] | 3 | 140:95 |
Java Inspector 026 | Avoid hardwired string literals. Allowed literals: [] | 3 | 141:95 |
Java Inspector 026 | Avoid hardwired string literals. Allowed literals: [] | 3 | 147:99 |
Java Inspector 026 | Avoid hardwired string literals. Allowed literals: [] | 3 | 163:95 |
Java Inspector 026 | Avoid hardwired string literals. Allowed literals: [] | 3 | 164:95 |
Java Inspector 026 | Avoid hardwired string literals. Allowed literals: [] | 3 | 171:91 |
1/*
2 * hgcommons 9
3 * Hammurapi Group Common Library
4 * Copyright (C) 2003 Hammurapi Group
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2 of the License, or (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 *
20 * URL: http://www.hammurapi.biz/hammurapi-biz/ef/xmenu/hammurapi-group/products/products/hgcommons/index.html
21 * e-Mail: support@hammurapi.biz
22 */
23package biz.hammurapi.swing;
24
25import java.lang.reflect.Field;
26import java.lang.reflect.Method;
27import java.lang.reflect.Modifier;
28import java.util.ArrayList;
29import java.util.List;
30import java.util.logging.Level;
31import java.util.logging.Logger;
32
33import javax.swing.table.DefaultTableModel;
34import javax.swing.table.TableModel;
35import javax.swing.tree.TreeNode;
36
37import biz.hammurapi.convert.Converter;
38import biz.hammurapi.convert.ConvertingService;
39
40/**
41 * @author Pavel Vlasov
42 *
43 * @version $Revision: 1.1 $
44 */
45public class BeanVisualizer {
46
47 private static final Logger logger = Logger.getLogger(BeanVisualizer.class.getName());
48
49 private static boolean isPrimitive(Class klass) {
50 return String.class.equals(klass)
51 || Number.class.isAssignableFrom(klass)
52 || Character.class.equals(klass)
53 || Boolean.class.equals(klass)
54 || double.class.equals(klass)
55 || float.class.equals(klass)
56 || long.class.equals(klass)
57 || int.class.equals(klass)
58 || short.class.equals(klass)
59 || byte.class.equals(klass)
60 || char.class.equals(klass)
61 || boolean.class.equals(klass);
62 }
63
64 public Visualizable convert(final Object obj, Converter master) {
65 return new Visualizable() {
66
67 public TreeNode toTreeNode(TreeNode parent, String title) {
68 return new LazyTreeNodeTableVisualizable(parent, title+" ["+obj.getClass().getName()+"] "+obj) {
69
70 protected List loadChildren() {
71 List ret = new ArrayList();
72 Class beanClass=obj.getClass();
73 Method[] methods = beanClass.getMethods();
74 for (int i=0; i<methods.length; i++) {
75 // getXXX() methods. Object.getClass() is not included.
76 if (!(methods[i].getDeclaringClass().equals(Object.class))
77 && methods[i].getName().startsWith("get")
78 && methods[i].getParameterTypes().length==0
79 && !Modifier.isStatic(methods[i].getModifiers())
80 && methods[i].isSynthetic()
81 && !isPrimitive(methods[i].getReturnType())) {
82 try {
83 Object value=methods[i].invoke(obj, null);
84 Visualizable vs = (Visualizable) ConvertingService.convert(value, Visualizable.class);
85 ret.add(vs.toTreeNode(this, methods[i].getName().substring(3)+" ("+methods[i].getReturnType().getName()+")"));
86 } catch (Exception e) {
87 logger.log(Level.WARNING, "Could not retrieve value from "+methods[i], e);
88 }
89 }
90 }
91
92 Field[] fields = beanClass.getFields();
93 for (int i=0; i<fields.length; i++) {
94 try {
95 if (!isPrimitive(fields[i].getType())
96 && !Modifier.isStatic(methods[i].getModifiers())
97 && !fields[i].isSynthetic()) {
98 Object value=fields[i].get(obj);
99 Visualizable vs = (Visualizable) ConvertingService.convert(value, Visualizable.class);
100 ret.add(vs.toTreeNode(this, fields[i].getName()+" ("+fields[i].getType().getName()+")"));
101 }
102 } catch (Exception e) {
103 logger.log(Level.WARNING, "Could not retrieve value from "+methods[i], e);
104 }
105 }
106
107 return ret;
108 }
109
110 public TableModel toTable() {
111 int rowCount=2;
112 DefaultTableModel tm=new DefaultTableModel(rowCount,4);
113 tm.setColumnIdentifiers(new String[] {"Property", "Type", "Value"});
114
115 Class beanClass=obj.getClass();
116
117 tm.setValueAt("this", 0, 0);
118 tm.setValueAt(beanClass.getName(), 0, 1);
119 tm.setValueAt(obj, 0, 2);
120
121 tm.setValueAt("Hash code", 1, 0);
122 tm.setValueAt("int", 1, 1);
123 tm.setValueAt(Integer.toString(obj.hashCode(), Character.MAX_RADIX), 1, 2);
124
125 Method[] methods = beanClass.getMethods();
126 for (int i=0; i<methods.length; i++) {
127 // getXXX() methods. Object.getClass() is not included.
128 if (!(methods[i].getDeclaringClass().equals(Object.class))
129 && methods[i].getName().startsWith("get")
130 && methods[i].getParameterTypes().length==0
131 && !Modifier.isStatic(methods[i].getModifiers())
132 && methods[i].isSynthetic()
133 && isPrimitive(methods[i].getReturnType())) {
134 try {
135 Object value=methods[i].invoke(obj, null);
136 tm.setRowCount(++rowCount);
137 int idx = rowCount-1;
138 tm.setValueAt(methods[i].getName().substring(3), idx, 0);
139 if (value==null) {
140 tm.setValueAt("(null)", idx, 1);
141 tm.setValueAt("(null)", idx, 2);
142 } else {
143 tm.setValueAt(value.getClass().getName(), idx, 1);
144 tm.setValueAt(value, idx, 2);
145 }
146 } catch (Exception e) {
147 logger.log(Level.WARNING, "Could not retrieve value from "+methods[i], e);
148 }
149 }
150 }
151
152 Field[] fields = beanClass.getFields();
153 for (int i=0; i<fields.length; i++) {
154 try {
155 if (isPrimitive(fields[i].getType())
156 && !Modifier.isStatic(methods[i].getModifiers())
157 && !fields[i].isSynthetic()) {
158 Object value=fields[i].get(obj);
159 tm.setRowCount(++rowCount);
160 int idx = rowCount-1;
161 tm.setValueAt(fields[i].getName(), idx, 0);
162 if (value==null) {
163 tm.setValueAt("(null)", idx, 1);
164 tm.setValueAt("(null)", idx, 2);
165 } else {
166 tm.setValueAt(value.getClass().getName(), idx, 1);
167 tm.setValueAt(value, idx, 2);
168 }
169 }
170 } catch (Exception e) {
171 logger.log(Level.WARNING, "Could not retrieve value from "+methods[i], e);
172 }
173 }
174
175 return tm;
176 }
177
178 };
179 }
180
181 };
182 }
183
184}
185