1 package net.sourceforge.pmd.swingui;
2
3 import net.sourceforge.pmd.Report;
4 import net.sourceforge.pmd.Rule;
5 import net.sourceforge.pmd.RuleViolation;
6
7 import java.awt.Color;
8 import java.io.StringWriter;
9 import java.util.Iterator;
10
11 /***
12 *
13 * Converts the violations list into a text string for viewing.
14 *
15 * @author Donald A. Leckie
16 * @since August 27, 2002
17 * @version $Revision: 1.19 $, $Date: 2003/05/28 18:08:32 $
18 */
19 class HTMLResultRenderer {
20
21 private boolean m_reportNoViolations;
22 private StringWriter m_writer;
23
24 /***
25 *******************************************************************************
26 *
27 */
28 protected void beginRendering(boolean reportNoViolations) {
29 m_reportNoViolations = reportNoViolations;
30 m_writer = new StringWriter(25000);
31
32 //
33 // Write HTML header.
34 //
35 m_writer.write("<!doctype html public \"-//w3c//dtd html 4.0 transitional//en\">\n");
36 m_writer.write("<html>\n");
37 m_writer.write("<head>\n");
38 m_writer.write("<meta content=\"text/html; charset=iso-8859-1\">\n");
39 m_writer.write("<title>PMD Analysis Results</title>\n");
40 m_writer.write("</head>\n");
41
42 //
43 // Write the body.
44 //
45 m_writer.write("<body>\n");
46 }
47
48 /***
49 *******************************************************************************
50 *
51 * @return HTML text.
52 */
53 protected String endRendering() {
54 m_writer.write("</body>\n");
55 m_writer.write("</html>\n");
56
57 return m_writer.toString();
58 }
59
60 /***
61 *******************************************************************************
62 *
63 * @param fileName
64 * @param report
65 */
66 public void render(String fileName, Report report) {
67 Iterator violations = report.iterator();
68
69 if (violations.hasNext() == false) {
70 if (m_reportNoViolations) {
71 //
72 // Write the name of the file that was analyzed.
73 //
74 m_writer.write("<b>Source File:</b> ");
75 m_writer.write(fileName);
76 m_writer.write("\n<p>\n");
77 m_writer.write("No rule violations detected.<br>\n");
78 }
79
80 return;
81 }
82
83 //
84 // Write the name of the file that was analyzed.
85 //
86 m_writer.write("<b>Source File:</b> ");
87 m_writer.write(fileName);
88 m_writer.write("\n<br>\n");
89
90 //Color pmdGray = UIManager.getColor("pmdGray");
91 //String hexValue = Integer.toHexString(pmdGray.getRGB());
92 String hexValue = Integer.toHexString(Color.WHITE.getRGB());
93
94 if (hexValue.startsWith("0x")) {
95 hexValue = hexValue.substring(2);
96 }
97
98 if (hexValue.length() > 6) {
99 hexValue = hexValue.substring(hexValue.length() - 6);
100 }
101
102 m_writer.write("<table bgcolor=\"#" + hexValue + "\" border>\n");
103
104 //
105 // Create the column headings.
106 //
107 m_writer.write("<tr>\n");
108 m_writer.write("<th><b>Line<br>No.</b></th>\n");
109 m_writer.write("<th><b>Rule</b></th>\n");
110 m_writer.write("<th><b>Priority</b></th>\n");
111 m_writer.write("<th><b>Description</b></th>\n");
112 m_writer.write("<th><b>Example</b></th>\n");
113 m_writer.write("</tr>\n");
114
115 while (violations.hasNext()) {
116 RuleViolation ruleViolation = (RuleViolation) violations.next();
117 Rule rule = ruleViolation.getRule();
118
119 //
120 // Begin table row.
121 //
122 m_writer.write("<tr>\n");
123
124 //
125 // Line Number
126 //
127 m_writer.write("<td align=\"center\" valign=\"top\">\n");
128 m_writer.write("<font size=\"3\">\n");
129 m_writer.write(String.valueOf(ruleViolation.getLine()));
130 m_writer.write("\n</font>\n");
131 m_writer.write("</td>\n");
132
133 //
134 // Rule Message
135 //
136 String ruleMessage = ruleViolation.getDescription();
137
138 if (ruleMessage == null) {
139 ruleMessage = "";
140 } else {
141 removeNewLineCharacters(ruleMessage);
142 }
143
144 m_writer.write("<td align=\"left\" valign=\"top\">\n");
145 m_writer.write("<font size=\"3\">\n");
146 m_writer.write(ruleMessage);
147 m_writer.write("\n</font>\n");
148 m_writer.write("</td>\n");
149
150 //
151 // Rule Priority
152 //
153 m_writer.write("<td align=\"left\" valign=\"top\">\n");
154 m_writer.write("<font size=\"3\">\n");
155 m_writer.write(rule.getPriorityName());
156 m_writer.write("\n</font>\n");
157 m_writer.write("</td>\n");
158
159 //
160 // Rule Description
161 //
162 String description = rule.getDescription();
163
164 if (description == null) {
165 description = "";
166 } else {
167 removeNewLineCharacters(description);
168 }
169
170 m_writer.write("<td align=\"left\" valign=\"top\">\n");
171 m_writer.write("<font size=\"3\">\n");
172 m_writer.write(description);
173 m_writer.write("\n</font>\n");
174 m_writer.write("</td>\n");
175
176 //
177 // Rule Example
178 //
179 String example = rule.getExample();
180
181 if ((example != null) && (example.length() > 0)) {
182 StringBuffer buffer = new StringBuffer(example);
183
184 for (int n = buffer.length() - 1; n >= 0; n--) {
185 if (buffer.charAt(n) == '\n') {
186 buffer.deleteCharAt(n);
187 } else {
188 break;
189 }
190 }
191
192 example = buffer.toString();
193
194 m_writer.write("<td align=\"left\" valign=\"top\">\n");
195 m_writer.write("<pre>\n");
196 m_writer.write("<font size=\"-1\">");
197 m_writer.write(example);
198 m_writer.write("</font>");
199 m_writer.write("\n</pre>\n");
200 m_writer.write("</td>\n");
201 }
202
203 //
204 // End table row.
205 //
206 m_writer.write("</tr>\n");
207 }
208
209 m_writer.write("</table>\n");
210 m_writer.write("<p><p>\n");
211 }
212
213 /***
214 ******************************************************************************
215 *
216 * @param text
217 *
218 * @return
219 */
220 private String removeNewLineCharacters(String text) {
221 char[] chars = text.trim().toCharArray();
222 int startIndex = 0;
223
224 for (int n = 0; n < chars.length; n++) {
225 if ((chars[n] != ' ') && (chars[n] != '\n')) {
226 startIndex = n;
227 break;
228 }
229 }
230
231 int lastIndex = chars.length - 1;
232
233 for (int n = lastIndex; n >= 0; n--) {
234 if ((chars[n] != ' ') && (chars[n] != '\n')) {
235 lastIndex = n;
236 break;
237 }
238 }
239
240 return String.valueOf(chars, startIndex, lastIndex + 1);
241 }
242 }
This page was automatically generated by Maven