View Javadoc

1   package org.codehaus.mojo.dashboard.report.plugin;
2   
3   /*
4    * Copyright 2007 David Vicente
5    *
6    * Licensed under the Apache License, Version 2.0 (the "License");
7    * you may not use this file except in compliance with the License.
8    * You may obtain a copy of the License at
9    *
10   *      http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing, software
13   * distributed under the License is distributed on an "AS IS" BASIS,
14   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15   * See the License for the specific language governing permissions and
16   * limitations under the License.
17   */
18  
19  import java.text.SimpleDateFormat;
20  import java.util.Date;
21  import java.util.Hashtable;
22  import java.util.Iterator;
23  import java.util.Map;
24  import java.util.ResourceBundle;
25  import java.util.Set;
26  
27  import org.apache.maven.plugin.logging.Log;
28  import org.codehaus.doxia.sink.Sink;
29  import org.codehaus.mojo.dashboard.report.plugin.beans.CheckstyleReportBean;
30  import org.codehaus.mojo.dashboard.report.plugin.beans.CloverReportBean;
31  import org.codehaus.mojo.dashboard.report.plugin.beans.CoberturaReportBean;
32  import org.codehaus.mojo.dashboard.report.plugin.beans.CpdReportBean;
33  import org.codehaus.mojo.dashboard.report.plugin.beans.DashBoardMavenProject;
34  import org.codehaus.mojo.dashboard.report.plugin.beans.FindBugsReportBean;
35  import org.codehaus.mojo.dashboard.report.plugin.beans.IDashBoardReportBean;
36  import org.codehaus.mojo.dashboard.report.plugin.beans.PmdReportBean;
37  import org.codehaus.mojo.dashboard.report.plugin.beans.SurefireReportBean;
38  import org.codehaus.mojo.dashboard.report.plugin.beans.TagListReportBean;
39  
40  /**
41   * @author <a href="dvicente72@gmail.com">David Vicente</a>
42   *
43   */
44  public class DashBoardMaven1ReportGenerator extends AbstractDashBoardGenerator
45  {
46  
47      private String dashboardAnchorLink = "/dashboard-report.html";
48  
49      private DashBoardMavenProject mavenProject;
50  
51      private Map map = new Hashtable();
52  
53      private boolean isDBAvailable = false;
54  
55      /**
56       *
57       * @param dashboardReport
58       */
59      public DashBoardMaven1ReportGenerator( DashBoardMavenProject mavenProject, boolean isDBAvailable, Log log )
60      {
61  
62          super( log );
63          this.mavenProject = mavenProject;
64          this.isDBAvailable = isDBAvailable;
65          Set reports = mavenProject.getReports();
66          Iterator iter = reports.iterator();
67          while ( iter.hasNext() )
68          {
69              IDashBoardReportBean report = (IDashBoardReportBean) iter.next();
70              if ( report != null )
71              {
72                  map.put( report.getClass(), report );
73              }
74          }
75  
76      }
77  
78      public void doGenerateReport( ResourceBundle bundle, Sink sink )
79      {
80  
81          createTitle( bundle, sink );
82          addDashboardCss(sink);
83          this.sinkJavascriptCode( sink );
84          sink.body();
85          sink.anchor( "top" );
86          sink.anchor_();
87          createHeader( bundle, sink );
88  
89          createBodyReport( bundle, sink );
90  
91          sink.body_();
92  
93          sink.flush();
94  
95          sink.close();
96      }
97  
98      public void createTitle( ResourceBundle bundle, Sink sink )
99      {
100         sink.head();
101         sink.title();
102         sink.text( bundle.getString( "dashboard.multireport.name" ) );
103         sink.title_();
104         sink.head_();
105     }
106 
107     public void createHeader( ResourceBundle bundle, Sink sink )
108     {
109         sink.section1();
110 
111         sink.sectionTitle1();
112         sink.text( bundle.getString( "dashboard.multireport.name" ) + " : " + this.mavenProject.getProjectName() );
113         sink.sectionTitle1_();
114 
115         sink.text( "Date Generated: " + new SimpleDateFormat().format( new Date( System.currentTimeMillis() ) ) );
116         sink.horizontalRule();
117 
118         if ( this.isDBAvailable )
119         {
120             sink.sectionTitle3();
121             sink.bold();
122             sink.text( "[" );
123             sink.link( "dashboard-report-historic.html" );
124             sink.text( "Go to Historic page" );
125             sink.link_();
126             sink.text( "]" );
127             sink.bold_();
128             sink.sectionTitle3_();
129             sink.horizontalRule();
130         }
131         sink.lineBreak();
132         sink.section1_();
133     }
134 
135     public void createBodyReport( ResourceBundle bundle, Sink sink )
136     {
137         System.out.println( "DashBoardMultiReportGenerator createBodyByReport(...)" );
138 
139         createAllSection( bundle, sink );
140 
141     }
142 
143     public void createAllSection( ResourceBundle bundle, Sink sink )
144     {
145 
146         sink.table();
147         writeSuperHeader( sink );
148         writeHeader( bundle, sink, true );
149         createAllLineByReport( bundle, sink, mavenProject, true, "" );
150         createTotalLine( bundle, sink, mavenProject );
151         writeHeader( bundle, sink, false );
152         writeSuperHeader( sink );
153         sink.table_();
154         sink.lineBreak();
155 
156     }
157 
158     public void createAllLineByReport( ResourceBundle bundle, Sink sink, DashBoardMavenProject mavenProject,
159                                        boolean isRoot, String prefix )
160     {
161 
162         if ( mavenProject.getModules() != null && !mavenProject.getModules().isEmpty() )
163         {
164             Iterator iter = mavenProject.getModules().iterator();
165             if ( !isRoot )
166             {
167                 prefix = writeMultiProjectRow( sink, mavenProject, prefix, dashboardAnchorLink );
168             }
169             while ( iter.hasNext() )
170             {
171                 DashBoardMavenProject subproject = (DashBoardMavenProject) iter.next();
172                 createAllLineByReport( bundle, sink, subproject, false, prefix );
173             }
174         }
175         else
176         {
177             sink.tableRow();
178             writeProjectCell( sink, mavenProject, prefix, dashboardAnchorLink );
179 
180             if ( map.get( CoberturaReportBean.class ) != null )
181             {
182                 CoberturaReportBean coberReportBean =
183                     (CoberturaReportBean) mavenProject.getReportsByType( CoberturaReportBean.class );
184                 if ( coberReportBean != null )
185                 {
186 
187                     sinkCellClass( sink, Integer.toString( coberReportBean.getNbClasses() ), "cobertura" );
188                     // sinkCellClass( sink, getPercentValue( coberReportBean.getLineCoverRate() ) ,"cobertura");
189                     sinkCellPercentGraphic( sink, coberReportBean.getLineCoverRate(), "cobertura" );
190                     // sinkCellClass( sink, getPercentValue( coberReportBean.getBranchCoverRate() ),"cobertura" );
191                     sinkCellPercentGraphic( sink, coberReportBean.getBranchCoverRate(), "cobertura" );
192                     sinkHeaderBold( sink, "|" );
193 
194                 }
195                 else
196                 {
197                     sinkCellClass( sink, "", "cobertura" );
198                     sinkCellClass( sink, "", "cobertura" );
199                     sinkCellClass( sink, "", "cobertura" );
200                     sinkHeaderBold( sink, "|" );
201                 }
202             }
203             if ( map.get( CloverReportBean.class ) != null )
204             {
205                 CloverReportBean cloverReportBean =
206                     (CloverReportBean) mavenProject.getReportsByType( CloverReportBean.class );
207                 if ( cloverReportBean != null )
208                 {
209 
210                     sinkCellPercentGraphic( sink, cloverReportBean.getPercentCoveredConditionals(), "clover", "("
211                                     + cloverReportBean.getCoveredElements() + " / " + cloverReportBean.getElements()
212                                     + ")" );
213                     this.sinkCellClass( sink, cloverReportBean.getConditionalsLabel(), "clover" );
214 
215                     this.sinkCellClass( sink, cloverReportBean.getStatementsLabel(), "clover" );
216 
217                     this.sinkCellClass( sink, cloverReportBean.getMethodsLabel(), "clover" );
218 
219                     sinkHeaderBold( sink, "|" );
220                 }
221                 else
222                 {
223                     sinkCellClass( sink, "", "clover" );
224                     sinkCellClass( sink, "", "clover" );
225                     sinkCellClass( sink, "", "clover" );
226                     sinkCellClass( sink, "", "clover" );
227                     sinkHeaderBold( sink, "|" );
228                 }
229             }
230             if ( map.get( SurefireReportBean.class ) != null )
231             {
232                 SurefireReportBean fireReportBean =
233                     (SurefireReportBean) mavenProject.getReportsByType( SurefireReportBean.class );
234                 if ( fireReportBean != null )
235                 {
236 
237                     // sinkCellClass( sink, Double.toString( fireReportBean.getSucessRate() ) + "%" , "surefire");
238                     sinkCellPercentGraphic( sink, fireReportBean.getSucessRate() / 100, "surefire" );
239 
240                     sinkCellClass( sink, Integer.toString( fireReportBean.getNbTests() ), "surefire" );
241 
242                     sinkCellClass( sink, Integer.toString( fireReportBean.getNbErrors() ), "surefire" );
243 
244                     sinkCellClass( sink, Integer.toString( fireReportBean.getNbFailures() ), "surefire" );
245 
246                     sinkCellClass( sink, Integer.toString( fireReportBean.getNbSkipped() ), "surefire" );
247 
248                     sinkCellClass( sink, Double.toString( fireReportBean.getElapsedTime() ), "surefire" );
249                     sinkHeaderBold( sink, "|" );
250 
251                 }
252                 else
253                 {
254                     sinkCellClass( sink, "", "surefire" );
255                     sinkCellClass( sink, "", "surefire" );
256                     sinkCellClass( sink, "", "surefire" );
257                     sinkCellClass( sink, "", "surefire" );
258                     sinkCellClass( sink, "", "surefire" );
259                     sinkCellClass( sink, "", "surefire" );
260                     sinkHeaderBold( sink, "|" );
261                 }
262             }
263             if ( map.get( CheckstyleReportBean.class ) != null )
264             {
265                 CheckstyleReportBean checkStyleReport =
266                     (CheckstyleReportBean) mavenProject.getReportsByType( CheckstyleReportBean.class );
267                 if ( checkStyleReport != null )
268                 {
269                     sinkCellClass( sink, Integer.toString( checkStyleReport.getNbClasses() ), "checkstyle" );
270                     sinkCellClass( sink, Integer.toString( checkStyleReport.getNbTotal() ), "checkstyle" );
271                     sinkCellClass( sink, Integer.toString( checkStyleReport.getNbInfos() ), "checkstyle" );
272                     sinkCellClass( sink, Integer.toString( checkStyleReport.getNbWarnings() ), "checkstyle" );
273                     sinkCellClass( sink, Integer.toString( checkStyleReport.getNbErrors() ), "checkstyle" );
274                     sinkHeaderBold( sink, "|" );
275                 }
276                 else
277                 {
278                     sinkCellClass( sink, "", "checkstyle" );
279                     sinkCellClass( sink, "", "checkstyle" );
280                     sinkCellClass( sink, "", "checkstyle" );
281                     sinkCellClass( sink, "", "checkstyle" );
282                     sinkCellClass( sink, "", "checkstyle" );
283                     sinkHeaderBold( sink, "|" );
284                 }
285             }
286             if ( map.get( PmdReportBean.class ) != null )
287             {
288                 PmdReportBean pmdReportBean = (PmdReportBean) mavenProject.getReportsByType( PmdReportBean.class );
289                 if ( pmdReportBean != null )
290                 {
291                     sinkCellClass( sink, Integer.toString( pmdReportBean.getNbClasses() ), "pmd" );
292                     sinkCellClass( sink, Integer.toString( pmdReportBean.getNbViolations() ), "pmd" );
293                     sinkHeaderBold( sink, "|" );
294 
295                 }
296                 else
297                 {
298                     sinkCellClass( sink, "", "pmd" );
299                     sinkCellClass( sink, "", "pmd" );
300                     sinkHeaderBold( sink, "|" );
301                 }
302             }
303             if ( map.get( CpdReportBean.class ) != null )
304             {
305                 CpdReportBean cpdReportBean = (CpdReportBean) mavenProject.getReportsByType( CpdReportBean.class );
306                 if ( cpdReportBean != null )
307                 {
308                     sinkCellClass( sink, Integer.toString( cpdReportBean.getNbClasses() ), "cpd" );
309                     sinkCellClass( sink, Integer.toString( cpdReportBean.getNbDuplicate() ), "cpd" );
310                     sinkHeaderBold( sink, "|" );
311                 }
312                 else
313                 {
314                     sinkCellClass( sink, "", "cpd" );
315                     sinkCellClass( sink, "", "cpd" );
316                     sinkHeaderBold( sink, "|" );
317                 }
318             }
319             if ( map.get( FindBugsReportBean.class ) != null )
320             {
321                 FindBugsReportBean findBugsReportBean =
322                     (FindBugsReportBean) mavenProject.getReportsByType( FindBugsReportBean.class );
323                 if ( findBugsReportBean != null )
324                 {
325                     sinkCellClass( sink, Integer.toString( findBugsReportBean.getNbClasses() ), "findbugs" );
326                     sinkCellClass( sink, Integer.toString( findBugsReportBean.getNbBugs() ), "findbugs" );
327                     sinkCellClass( sink, Integer.toString( findBugsReportBean.getNbErrors() ), "findbugs" );
328                     sinkCellClass( sink, Integer.toString( findBugsReportBean.getNbMissingClasses() ), "findbugs" );
329                     sinkHeaderBold( sink, "|" );
330                 }
331                 else
332                 {
333                     sinkCellClass( sink, "", "findbugs" );
334                     sinkCellClass( sink, "", "findbugs" );
335                     sinkCellClass( sink, "", "findbugs" );
336                     sinkCellClass( sink, "", "findbugs" );
337                     sinkHeaderBold( sink, "|" );
338                 }
339             }
340             if ( map.get( TagListReportBean.class ) != null )
341             {
342                 TagListReportBean taglistReportBean =
343                     (TagListReportBean) mavenProject.getReportsByType( TagListReportBean.class );
344                 if ( taglistReportBean != null )
345                 {
346                     sinkCellClass( sink, Integer.toString( taglistReportBean.getNbClasses() ), "taglist" );
347                     sinkCellClass( sink, Integer.toString( taglistReportBean.getNbTotal() ), "taglist" );
348                     sinkHeaderBold( sink, "|" );
349                 }
350                 else
351                 {
352                     sinkCellClass( sink, "", "taglist" );
353                     sinkCellClass( sink, "", "taglist" );
354                     sinkHeaderBold( sink, "|" );
355                 }
356 
357             }
358 
359             sink.tableRow_();
360         }
361     }
362 
363     private void writeProjectCell( Sink sink, DashBoardMavenProject mavenProject, String prefix, String suffix )
364     {
365         if ( prefix == null || prefix.length() == 0 )
366         {
367             String artefactId = mavenProject.getArtifactId();
368             String link = artefactId.substring( artefactId.lastIndexOf( "." ) + 1, artefactId.length() );
369             sinkCellWithLink( sink, mavenProject.getProjectName(), link + suffix );
370         }
371         else
372         {
373             int nbTab = prefix.split( "/" ).length;
374             String artefactId = mavenProject.getArtifactId();
375             String link = prefix + "/" + artefactId.substring( artefactId.lastIndexOf( "." ) + 1, artefactId.length() );
376             sinkCellTabWithLink( sink, mavenProject.getProjectName(), nbTab, link + suffix );
377         }
378     }
379 
380     private String writeMultiProjectRow( Sink sink, DashBoardMavenProject mavenProject, String prefix, String suffix )
381     {
382         if ( prefix == null || prefix.length() == 0 )
383         {
384             String artefactId = mavenProject.getArtifactId();
385             prefix = artefactId.substring( artefactId.lastIndexOf( "." ) + 1, artefactId.length() );
386             sink.tableRow();
387             sinkCellBoldWithLink( sink, mavenProject.getProjectName(), prefix + suffix );
388             sink.tableRow_();
389         }
390         else
391         {
392             sink.tableRow();
393             int nbTab = prefix.split( "/" ).length;
394             String artefactId = mavenProject.getArtifactId();
395             prefix = prefix + "/" + artefactId.substring( artefactId.lastIndexOf( "." ) + 1, artefactId.length() );
396             sinkCellTabBoldWithLink( sink, mavenProject.getProjectName(), nbTab, prefix + suffix );
397             sink.tableRow_();
398 
399         }
400         return prefix;
401     }
402 
403     private void writeSuperHeader( Sink sink )
404     {
405         sink.tableRow();
406         sink.tableHeaderCell();
407         sink.nonBreakingSpace();
408         sink.tableHeaderCell_();
409         if ( map.get( CoberturaReportBean.class ) != null )
410         {
411             sinkSuperHeaderClass( sink, "Cobertura", 3, "cobertura" );
412             this.sinkHeaderCollapsedIcon( sink, "cobertura" );
413         }
414         if ( map.get( CloverReportBean.class ) != null )
415         {
416             sinkSuperHeaderClass( sink, "Clover", 4, "clover" );
417             this.sinkHeaderCollapsedIcon( sink, "clover" );
418         }
419         if ( map.get( SurefireReportBean.class ) != null )
420         {
421             sinkSuperHeaderClass( sink, "Surefire", 6, "surefire" );
422             this.sinkHeaderCollapsedIcon( sink, "surefire" );
423         }
424         if ( map.get( CheckstyleReportBean.class ) != null )
425         {
426             sinkSuperHeaderClass( sink, "Checkstyle", 5, "checkstyle" );
427             this.sinkHeaderCollapsedIcon( sink, "checkstyle" );
428         }
429         if ( map.get( PmdReportBean.class ) != null )
430         {
431             sinkSuperHeaderClass( sink, "PMD", 2, "pmd" );
432             this.sinkHeaderCollapsedIcon( sink, "pmd" );
433         }
434         if ( map.get( CpdReportBean.class ) != null )
435         {
436             sinkSuperHeaderClass( sink, "CPD", 2, "cpd" );
437             this.sinkHeaderCollapsedIcon( sink, "cpd" );
438         }
439         if ( map.get( FindBugsReportBean.class ) != null )
440         {
441             sinkSuperHeaderClass( sink, "FindBugs", 4, "findbugs" );
442             this.sinkHeaderCollapsedIcon( sink, "findbugs" );
443         }
444         if ( map.get( TagListReportBean.class ) != null )
445         {
446             sinkSuperHeaderClass( sink, "Tag List", 2, "taglist" );
447             this.sinkHeaderCollapsedIcon( sink, "taglist" );
448         }
449 
450         sink.tableRow_();
451     }
452 
453     private void writeHeader( ResourceBundle bundle, Sink sink, boolean upside )
454     {
455         sink.tableRow();
456         if ( upside )
457         {
458             sinkHeader( sink, bundle.getString( "report.project.name.header" ) );
459         }
460         else
461         {
462             sinkHeader( sink, "" );
463         }
464         if ( map.get( CoberturaReportBean.class ) != null )
465         {
466             sinkHeaderClass( sink, bundle.getString( "report.cobertura.label.nbclasses" ), "cobertura" );
467             sinkHeaderClass( sink, bundle.getString( "report.cobertura.label.linecover" ), "cobertura" );
468             sinkHeaderClass( sink, bundle.getString( "report.cobertura.label.branchcover" ), "cobertura" );
469             sinkHeaderBold( sink, "" );
470         }
471         if ( map.get( CloverReportBean.class ) != null )
472         {
473             sinkHeaderClass( sink, bundle.getString( "report.clover.label.total" ), "clover" );
474             sinkHeaderClass( sink, bundle.getString( "report.clover.label.conditionals" ), "clover" );
475             sinkHeaderClass( sink, bundle.getString( "report.clover.label.statements" ), "clover" );
476             sinkHeaderClass( sink, bundle.getString( "report.clover.label.methods" ), "clover" );
477             sinkHeaderBold( sink, "" );
478         }
479         if ( map.get( SurefireReportBean.class ) != null )
480         {
481             sinkHeaderClass( sink, bundle.getString( "report.surefire.label.successrate" ), "surefire" );
482             sinkHeaderClass( sink, bundle.getString( "report.surefire.label.tests" ), "surefire" );
483             sinkHeaderClass( sink, bundle.getString( "report.surefire.label.errors" ), "surefire" );
484             sinkHeaderClass( sink, bundle.getString( "report.surefire.label.failures" ), "surefire" );
485             sinkHeaderClass( sink, bundle.getString( "report.surefire.label.skipped" ), "surefire" );
486             sinkHeaderClass( sink, bundle.getString( "report.surefire.label.time" ), "surefire" );
487             sinkHeaderBold( sink, "" );
488         }
489         if ( map.get( CheckstyleReportBean.class ) != null )
490         {
491 
492             sinkHeaderClass( sink, bundle.getString( "report.checkstyle.files" ), "checkstyle" );
493             sinkHeaderClass( sink, bundle.getString( "report.checkstyle.column.total" ), "checkstyle" );
494 
495             sink.rawText( "<th class=\"checkstyle\">" + bundle.getString( "report.checkstyle.column.infos" ) );
496             sink.nonBreakingSpace();
497             iconInfo( sink );
498             sink.rawText( "</th>" );
499 
500             sink.rawText( "<th class=\"checkstyle\">" + bundle.getString( "report.checkstyle.column.warnings" ) );
501             sink.nonBreakingSpace();
502             iconWarning( sink );
503             sink.rawText( "</th>" );
504 
505             sink.rawText( "<th class=\"checkstyle\">" + bundle.getString( "report.checkstyle.column.errors" ) );
506             sink.nonBreakingSpace();
507             iconError( sink );
508             sink.rawText( "</th>" );
509 
510             sinkHeaderBold( sink, "" );
511         }
512         if ( map.get( PmdReportBean.class ) != null )
513         {
514             sinkHeaderClass( sink, bundle.getString( "report.pmd.label.nbclasses" ), "pmd" );
515             sinkHeaderClass( sink, bundle.getString( "report.pmd.label.nbviolations" ), "pmd" );
516             sinkHeaderBold( sink, "" );
517         }
518         if ( map.get( CpdReportBean.class ) != null )
519         {
520             sinkHeaderClass( sink, bundle.getString( "report.cpd.label.nbclasses" ), "cpd" );
521             sinkHeaderClass( sink, bundle.getString( "report.cpd.label.nbduplicate" ), "cpd" );
522             sinkHeaderBold( sink, "" );
523         }
524         if ( map.get( FindBugsReportBean.class ) != null )
525         {
526             sinkHeaderClass( sink, bundle.getString( "report.findbugs.label.nbclasses" ), "findbugs" );
527             sinkHeaderClass( sink, bundle.getString( "report.findbugs.label.nbbugs" ), "findbugs" );
528             sinkHeaderClass( sink, bundle.getString( "report.findbugs.label.nberrors" ), "findbugs" );
529             sinkHeaderClass( sink, bundle.getString( "report.findbugs.label.nbMissingClasses" ), "findbugs" );
530             sinkHeaderBold( sink, "" );
531         }
532         if ( map.get( TagListReportBean.class ) != null )
533         {
534             sinkHeaderClass( sink, bundle.getString( "report.taglist.label.nbclasses" ), "taglist" );
535             sinkHeaderClass( sink, bundle.getString( "report.taglist.column.nboccurs" ), "taglist" );
536             sinkHeaderBold( sink, "" );
537         }
538         sink.tableRow_();
539     }
540 
541     public void createTotalLine( ResourceBundle bundle, Sink sink, DashBoardMavenProject mavenProject )
542     {
543         sink.tableRow();
544         sinkHeader( sink, "Total" );
545         CoberturaReportBean reportBean =
546             (CoberturaReportBean) mavenProject.getReportsByType( CoberturaReportBean.class );
547         if ( reportBean != null )
548         {
549             sinkHeaderClass( sink, Integer.toString( reportBean.getNbClasses() ), "cobertura" );
550             // sinkHeaderClass( sink, getPercentValue( reportBean.getLineCoverRate() ) , "cobertura");
551             sinkHeaderCellPercentGraphic( sink, reportBean.getLineCoverRate(), "cobertura" );
552             // sinkHeaderClass( sink, getPercentValue( reportBean.getBranchCoverRate() ) , "cobertura");
553             sinkHeaderCellPercentGraphic( sink, reportBean.getBranchCoverRate(), "cobertura" );
554             sinkHeaderBold( sink, "|" );
555         }
556         CloverReportBean cloverReportBean = (CloverReportBean) mavenProject.getReportsByType( CloverReportBean.class );
557         if ( cloverReportBean != null )
558         {
559             sinkHeaderCellPercentGraphic( sink, cloverReportBean.getPercentCoveredConditionals(), "clover", "("
560                             + cloverReportBean.getCoveredElements() + " / " + cloverReportBean.getElements() + ")" );
561 
562             sinkHeaderCellPercentGraphic( sink, cloverReportBean.getPercentCoveredConditionals(), "clover", "("
563                             + cloverReportBean.getCoveredConditionals() + " / " + cloverReportBean.getConditionals()
564                             + ")" );
565 
566             sinkHeaderCellPercentGraphic( sink, cloverReportBean.getPercentCoveredStatements(), "clover", "("
567                             + cloverReportBean.getCoveredStatements() + " / " + cloverReportBean.getStatements() + ")" );
568 
569             sinkHeaderCellPercentGraphic( sink, cloverReportBean.getPercentCoveredMethods(), "clover", "("
570                             + cloverReportBean.getCoveredMethods() + " / " + cloverReportBean.getMethods() + ")" );
571 
572             sinkHeaderBold( sink, "|" );
573         }
574         SurefireReportBean fireReportBean =
575             (SurefireReportBean) mavenProject.getReportsByType( SurefireReportBean.class );
576         if ( fireReportBean != null )
577         {
578             sinkHeaderCellPercentGraphic( sink, fireReportBean.getSucessRate() / 100, "surefire" );
579 
580             sinkHeaderClass( sink, Integer.toString( fireReportBean.getNbTests() ), "surefire" );
581 
582             sinkHeaderClass( sink, Integer.toString( fireReportBean.getNbErrors() ), "surefire" );
583 
584             sinkHeaderClass( sink, Integer.toString( fireReportBean.getNbFailures() ), "surefire" );
585 
586             sinkHeaderClass( sink, Integer.toString( fireReportBean.getNbSkipped() ), "surefire" );
587 
588             sinkHeaderClass( sink, Double.toString( fireReportBean.getElapsedTime() ), "surefire" );
589             sinkHeaderBold( sink, "|" );
590         }
591         CheckstyleReportBean checkstyleReportBean =
592             (CheckstyleReportBean) mavenProject.getReportsByType( CheckstyleReportBean.class );
593         if ( checkstyleReportBean != null )
594         {
595             sinkHeaderClass( sink, Integer.toString( checkstyleReportBean.getNbClasses() ), "checkstyle" );
596             sinkHeaderClass( sink, Integer.toString( checkstyleReportBean.getNbTotal() ), "checkstyle" );
597 
598             tableHeaderCellClass( sink, "checkstyle" );
599             sink.text( Integer.toString( checkstyleReportBean.getNbInfos() ) );
600             sinkInvertPercentGraphic( sink, checkstyleReportBean.getPercentInfos() );
601             tableHeaderCell_( sink );
602             tableHeaderCellClass( sink, "checkstyle" );
603             sink.text( Integer.toString( checkstyleReportBean.getNbWarnings() ) );
604             sinkInvertPercentGraphic( sink, checkstyleReportBean.getPercentWarnings() );
605             tableHeaderCell_( sink );
606             tableHeaderCellClass( sink, "checkstyle" );
607             sink.text( Integer.toString( checkstyleReportBean.getNbErrors() ) );
608             sinkInvertPercentGraphic( sink, checkstyleReportBean.getPercentErrors() );
609             tableHeaderCell_( sink );
610 
611             sinkHeaderBold( sink, "|" );
612         }
613         PmdReportBean pmdReportBean = (PmdReportBean) mavenProject.getReportsByType( PmdReportBean.class );
614         if ( pmdReportBean != null )
615         {
616             sinkHeaderClass( sink, Integer.toString( pmdReportBean.getNbClasses() ), "pmd" );
617             sinkHeaderClass( sink, Integer.toString( pmdReportBean.getNbViolations() ), "pmd" );
618             sinkHeaderBold( sink, "|" );
619 
620         }
621         CpdReportBean cpdReportBean = (CpdReportBean) mavenProject.getReportsByType( CpdReportBean.class );
622         if ( cpdReportBean != null )
623         {
624             sinkHeaderClass( sink, Integer.toString( cpdReportBean.getNbClasses() ), "cpd" );
625             sinkHeaderClass( sink, Integer.toString( cpdReportBean.getNbDuplicate() ), "cpd" );
626             sinkHeaderBold( sink, "|" );
627 
628         }
629         FindBugsReportBean findBugsReportBean =
630             (FindBugsReportBean) mavenProject.getReportsByType( FindBugsReportBean.class );
631         if ( findBugsReportBean != null )
632         {
633             sinkHeaderClass( sink, Integer.toString( findBugsReportBean.getNbClasses() ), "findbugs" );
634             sinkHeaderClass( sink, Integer.toString( findBugsReportBean.getNbBugs() ), "findbugs" );
635             sinkHeaderClass( sink, Integer.toString( findBugsReportBean.getNbErrors() ), "findbugs" );
636             sinkHeaderClass( sink, Integer.toString( findBugsReportBean.getNbMissingClasses() ), "findbugs" );
637             sinkHeaderBold( sink, "|" );
638         }
639         TagListReportBean taglistReportBean =
640             (TagListReportBean) mavenProject.getReportsByType( TagListReportBean.class );
641         if ( taglistReportBean != null )
642         {
643             sinkHeaderClass( sink, Integer.toString( taglistReportBean.getNbClasses() ), "taglist" );
644             sinkHeaderClass( sink, Integer.toString( taglistReportBean.getNbTotal() ), "taglist" );
645             sinkHeaderBold( sink, "|" );
646         }
647         sink.tableRow_();
648     }
649 
650     private void sinkHeaderCollapsedIcon( Sink sink, String id )
651     {
652         sink.tableHeaderCell();
653         String idImg = "Collapsed" + id;
654         sink.rawText( "<IMG SRC=\"./images/previous.gif\" ALT=\"" + id + "\" name=\"" + idImg
655                         + "\" onclick=\"javascript:toggleCol('" + idImg + "','" + id + "');\">" );
656         sink.tableHeaderCell_();
657     }
658 
659     private void sinkJavascriptCode( Sink sink )
660     {
661 
662         StringBuffer buff = new StringBuffer();
663 
664         buff.append( "<script type=\"text/javascript\">" );
665         buff.append( "        function toggleCol(imageID,strCol){" );
666         buff.append( "            var ths = document.getElementsByTagName(\"th\");" );
667         buff.append( "            var tds = document.getElementsByTagName(\"td\");" );
668         buff.append( "            var mesimages = document.getElementsByName(imageID);" );
669         buff.append( "            for (idx in ths) {" );
670         buff.append( "                if (ths[idx].className == strCol)" );
671         buff.append( "                {" );
672         buff.append( "                    if (ths[idx].style.display == \"none\") {" );
673         buff.append( "                        ths[idx].style.display = \"\";" );
674         buff.append( "                        for (var i = 0; i < mesimages.length; i++) {" );
675         buff.append( "                            mesimages[i].src = './images/previous.gif';" );
676         buff.append( "                        }" );
677         buff.append( "                    }" );
678         buff.append( "                    else {" );
679         buff.append( "                        ths[idx].style.display = \"none\";" );
680         buff.append( "                        for (var i = 0; i < mesimages.length; i++) {" );
681         buff.append( "                            mesimages[i].src = './images/next.gif';" );
682         buff.append( "                        }" );
683         buff.append( "                    }" );
684         buff.append( "                }" );
685         buff.append( "            }" );
686         buff.append( "            for (idx in tds) {" );
687         buff.append( "                if (tds[idx].className == strCol)" );
688         buff.append( "                {" );
689         buff.append( "                    if (tds[idx].style.display == \"none\") " );
690         buff.append( "                        tds[idx].style.display = \"\";" );
691         buff.append( "                    else{" );
692         buff.append( "                        tds[idx].style.display = \"none\";" );
693         buff.append( "                    }" );
694         buff.append( "                }" );
695         buff.append( "            }" );
696         buff.append( " }" );
697         buff.append( "</script>" );
698         sink.rawText( buff.toString() );
699     }
700 }