VBHTMLRenderer.java
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> violationsthrows 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>&nbsp;").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         "&nbsp;&nbsp;&nbsp;</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>&nbsp;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 }