1 package org.codehaus.mojo.dashboard.report.plugin;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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
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
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
189 sinkCellPercentGraphic( sink, coberReportBean.getLineCoverRate(), "cobertura" );
190
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
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
551 sinkHeaderCellPercentGraphic( sink, reportBean.getLineCoverRate(), "cobertura" );
552
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 }