001 /**
002 * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
003 */
004 package net.sourceforge.pmd.renderers;
005
006 import java.io.IOException;
007 import java.io.Writer;
008 import java.util.Iterator;
009 import java.util.Properties;
010
011 import net.sourceforge.pmd.PMD;
012 import net.sourceforge.pmd.Report;
013 import net.sourceforge.pmd.RuleViolation;
014
015 /**
016 * Renderer to another HTML format.
017 * @author Vladimir
018 */
019 public class VBHTMLRenderer extends AbstractIncrementingRenderer {
020
021 public static final String NAME = "vbhtml";
022
023 public VBHTMLRenderer(Properties properties) {
024 super(NAME, "Vladimir Bossicard HTML format.", properties);
025 }
026
027 /**
028 * {@inheritDoc}
029 */
030 @Override
031 public void start() throws IOException {
032 getWriter().write(header());
033 }
034
035 /**
036 * {@inheritDoc}
037 */
038 @Override
039 public void renderFileViolations(Iterator<RuleViolation> violations) throws IOException {
040 if (!violations.hasNext()) {
041 return;
042 }
043
044 Writer writer = getWriter();
045 StringBuffer sb = new StringBuffer(500);
046 String filename = null;
047 String lineSep = PMD.EOL;
048
049 boolean colorize = false;
050 while (violations.hasNext()) {
051 sb.setLength(0);
052 RuleViolation rv = violations.next();
053 if (!rv.getFilename().equals(filename)) { // New File
054 if (filename != null) {
055 sb.append("</table></br>");
056 colorize = false;
057 }
058 filename = rv.getFilename();
059 sb.append("<table border=\"0\" width=\"80%\">");
060 sb.append("<tr id=TableHeader><td colspan=\"2\"><font class=title> ").append(filename).append(
061 "</font></tr>");
062 sb.append(lineSep);
063 }
064
065 if (colorize) {
066 sb.append("<tr id=RowColor1>");
067 } else {
068 sb.append("<tr id=RowColor2>");
069 }
070
071 colorize = !colorize;
072 sb.append("<td width=\"50\" align=\"right\"><font class=body>" + rv.getBeginLine()
073 + " </font></td>");
074 sb.append("<td><font class=body>" + rv.getDescription() + "</font></td>");
075 sb.append("</tr>");
076 sb.append(lineSep);
077 writer.write(sb.toString());
078 }
079 if (filename != null) {
080 writer.write("</table>");
081 }
082 }
083
084 /**
085 * {@inheritDoc}
086 */
087 @Override
088 public void end() throws IOException {
089 Writer writer = getWriter();
090 StringBuffer sb = new StringBuffer();
091
092 writer.write("<br>");
093
094 // output the problems
095 if (!errors.isEmpty()) {
096 sb.setLength(0);
097 sb.append("<table border=\"0\" width=\"80%\">");
098 sb.append("<tr id=TableHeader><td><font class=title> Problems found</font></td></tr>");
099 boolean colorize = false;
100 for (Report.ProcessingError error : errors) {
101 if (colorize) {
102 sb.append("<tr id=RowColor1>");
103 } else {
104 sb.append("<tr id=RowColor2>");
105 }
106 colorize = !colorize;
107 sb.append("<td><font class=body>").append(error).append("\"</font></td></tr>");
108 }
109 sb.append("</table>");
110 writer.write(sb.toString());
111 }
112
113 writer.write(footer());
114 }
115
116 private String header() {
117 StringBuffer sb = new StringBuffer(600);
118 sb.append("<html><head><title>PMD</title></head>");
119 sb.append("<style type=\"text/css\">");
120 sb.append("<!--" + PMD.EOL);
121 sb
122 .append("body { background-color: white; font-family:verdana, arial, helvetica, geneva; font-size: 16px; font-style: italic; color: black; }"
123 + PMD.EOL);
124 sb
125 .append(".title { font-family: verdana, arial, helvetica,geneva; font-size: 12px; font-weight:bold; color: white; }"
126 + PMD.EOL);
127 sb
128 .append(".body { font-family: verdana, arial, helvetica, geneva; font-size: 12px; font-weight:plain; color: black; }"
129 + PMD.EOL);
130 sb.append("#TableHeader { background-color: #003366; }" + PMD.EOL);
131 sb.append("#RowColor1 { background-color: #eeeeee; }" + PMD.EOL);
132 sb.append("#RowColor2 { background-color: white; }" + PMD.EOL);
133 sb.append("-->");
134 sb.append("</style>");
135 sb.append("<body><center>");
136 return sb.toString();
137 }
138
139 private String footer() {
140 return "</center></body></html>" + PMD.EOL;
141 }
142
143 }
|