1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package de.smartics.exceptions.report.renderer.html;
17
18 import org.apache.commons.lang.StringUtils;
19
20 import com.thoughtworks.qdox.model.DocletTag;
21 import com.thoughtworks.qdox.model.JavaAnnotatedElement;
22 import com.thoughtworks.qdox.model.JavaClass;
23 import com.thoughtworks.qdox.model.JavaField;
24
25 import de.smartics.exceptions.report.renderer.ValueTagRenderer;
26
27
28
29
30 public class HtmlValueTagRenderer implements ValueTagRenderer
31 {
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52 @Override
53 public StringBuilder render(final StringBuilder buffer, final DocletTag tag)
54 {
55 final String reference = tag.getValue();
56 if (StringUtils.isBlank(reference))
57 {
58 final JavaAnnotatedElement doc = tag.getContext();
59 if (doc instanceof JavaField)
60 {
61 final JavaField fieldDoc = (JavaField) doc;
62 appendConstantValue(buffer, fieldDoc);
63 }
64 }
65 else
66 {
67 JavaAnnotatedElement doc = tag.getContext();
68 if(doc instanceof JavaField)
69 {
70 doc = ((JavaField) doc).getDeclaringClass();
71 }
72
73 if (doc instanceof JavaClass)
74 {
75 final JavaClass classDoc = (JavaClass) doc;
76 final String className = getClassName(reference);
77 if (StringUtils.isNotBlank(className))
78 {
79 final JavaClass referencedClassDoc =
80 classDoc.getJavaClassLibrary().getJavaClass(className);
81 appendConstantValue(buffer, reference, referencedClassDoc);
82 }
83 else
84 {
85 appendConstantValue(buffer, reference, classDoc);
86 }
87 }
88 }
89 return buffer;
90 }
91
92
93
94
95
96
97
98
99
100
101
102 private static StringBuilder appendConstantValue(final StringBuilder buffer,
103 final String reference, final JavaClass classDoc)
104 {
105 final String member = getMemberName(reference);
106 if (classDoc != null)
107 {
108 if (StringUtils.isNotBlank(member))
109 {
110 for (JavaField fieldDoc : classDoc.getFields())
111 {
112 if (member.equals(fieldDoc.getName()))
113 {
114 appendConstantValue(buffer, fieldDoc);
115 return buffer;
116 }
117 }
118 buffer.append("<code>").append(reference).append("</code>");
119 }
120 }
121 else
122 {
123 buffer.append("<code>");
124 if (StringUtils.isNotBlank(member))
125 {
126 buffer.append(reference.replace('#', '.'));
127 }
128 else
129 {
130 buffer.append(reference);
131 }
132 buffer.append("</code>");
133 }
134 return buffer;
135 }
136
137
138
139
140
141
142
143 private static void appendConstantValue(final StringBuilder buffer,
144 final JavaField fieldDoc)
145 {
146 final Object value = fieldDoc.getInitializationExpression();
147 if (value != null)
148 {
149 buffer.append(value);
150 }
151 }
152
153
154
155
156
157
158
159 private static String getClassName(final String reference)
160 {
161 final int index = reference.indexOf('#');
162 if (index != -1)
163 {
164 final String className = reference.substring(0, index);
165 return className;
166 }
167 return reference;
168 }
169
170
171
172
173
174
175
176 private static String getMemberName(final String reference)
177 {
178 final int index = reference.indexOf('#');
179 if (index != -1 && index + 1 < reference.length())
180 {
181 final String memberName = reference.substring(index + 1);
182 return memberName;
183 }
184 return null;
185 }
186
187
188
189 }