View Javadoc
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