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
20 import java.io.IOException;
21 import java.text.SimpleDateFormat;
22 import java.util.Date;
23 import java.util.Hashtable;
24 import java.util.Iterator;
25 import java.util.List;
26 import java.util.Map;
27 import java.util.ResourceBundle;
28 import java.util.Set;
29
30 import org.apache.maven.plugin.logging.Log;
31 import org.hibernate.Query;
32
33 import org.codehaus.doxia.sink.Sink;
34 import org.codehaus.mojo.dashboard.report.plugin.beans.CheckstyleReportBean;
35 import org.codehaus.mojo.dashboard.report.plugin.beans.CloverReportBean;
36 import org.codehaus.mojo.dashboard.report.plugin.beans.CoberturaReportBean;
37 import org.codehaus.mojo.dashboard.report.plugin.beans.CpdReportBean;
38 import org.codehaus.mojo.dashboard.report.plugin.beans.DashBoardMavenProject;
39 import org.codehaus.mojo.dashboard.report.plugin.beans.FindBugsReportBean;
40 import org.codehaus.mojo.dashboard.report.plugin.beans.IDashBoardReportBean;
41 import org.codehaus.mojo.dashboard.report.plugin.beans.PmdReportBean;
42 import org.codehaus.mojo.dashboard.report.plugin.beans.SurefireReportBean;
43 import org.codehaus.mojo.dashboard.report.plugin.beans.TagListReportBean;
44 import org.codehaus.mojo.dashboard.report.plugin.chart.IChartRenderer;
45 import org.codehaus.mojo.dashboard.report.plugin.chart.time.CheckstyleTimeChartStrategy;
46 import org.codehaus.mojo.dashboard.report.plugin.chart.time.CloverTimeChartStrategy;
47 import org.codehaus.mojo.dashboard.report.plugin.chart.time.CoberturaTimeChartStrategy;
48 import org.codehaus.mojo.dashboard.report.plugin.chart.time.CpdTimeChartStrategy;
49 import org.codehaus.mojo.dashboard.report.plugin.chart.time.FindBugsTimeChartStrategy;
50 import org.codehaus.mojo.dashboard.report.plugin.chart.time.MarkerTimeChartDecorator;
51 import org.codehaus.mojo.dashboard.report.plugin.chart.time.PmdTimeChartStrategy;
52 import org.codehaus.mojo.dashboard.report.plugin.chart.time.SurefirePercentAxisDecorator;
53 import org.codehaus.mojo.dashboard.report.plugin.chart.time.SurefireTimeChartStrategy;
54 import org.codehaus.mojo.dashboard.report.plugin.chart.time.TaglistTimeChartStrategy;
55 import org.codehaus.mojo.dashboard.report.plugin.chart.time.TimeChartRenderer;
56 import org.codehaus.mojo.dashboard.report.plugin.configuration.Configuration;
57 import org.codehaus.mojo.dashboard.report.plugin.configuration.Graph;
58 import org.codehaus.mojo.dashboard.report.plugin.configuration.Section;
59 import org.codehaus.mojo.dashboard.report.plugin.hibernate.HibernateService;
60
61
62
63
64 public class DashBoardHistoricReportGenerator extends AbstractDashBoardGenerator
65 {
66
67
68
69 private final DashBoardMavenProject mavenProject;
70
71 private final Map map = new Hashtable();
72
73 private final HibernateService hibernateService;
74
75 private Long dashBoardMavenProjectID;
76
77 private final Configuration configuration;
78
79 private boolean keepVersionAsDiscriminantCriteria = true;
80
81 private boolean generateGraphs = true;
82
83
84
85
86 private SimpleDateFormat dateFormat = new SimpleDateFormat( "yyyy-MM-dd" );
87
88 public DashBoardHistoricReportGenerator( DashBoardMavenProject mavenProject, HibernateService hibernateService,
89 Configuration configuration, boolean keepVersionAsDiscriminantCriteria,
90 boolean generateGraphs, Log log )
91 {
92 super( log );
93 this.mavenProject = mavenProject;
94 this.hibernateService = hibernateService;
95 this.configuration = configuration;
96 this.keepVersionAsDiscriminantCriteria = keepVersionAsDiscriminantCriteria;
97 this.generateGraphs = generateGraphs;
98 Set reports = mavenProject.getReports();
99 Iterator iter = reports.iterator();
100 while ( iter.hasNext() )
101 {
102 IDashBoardReportBean report = (IDashBoardReportBean) iter.next();
103 if ( report != null )
104 {
105 this.map.put( report.getClass(), report );
106 }
107 }
108 String queryStr = "";
109 if ( keepVersionAsDiscriminantCriteria )
110 {
111 queryStr =
112 "org.codehaus.mojo.dashboard.report.plugin.beans.DashBoardMavenProject.getDashBoardMavenProjectID";
113 }
114 else
115 {
116 queryStr =
117 "org.codehaus.mojo.dashboard.report.plugin.beans.DashBoardMavenProject.getDashBoardMavenProjectIDWithoutVersion";
118 }
119 Query query = hibernateService.getSession().getNamedQuery( queryStr );
120 query.setParameter( "artifactid", mavenProject.getArtifactId() );
121 query.setParameter( "groupid", mavenProject.getGroupId() );
122 if ( keepVersionAsDiscriminantCriteria )
123 {
124 query.setParameter( "version", mavenProject.getVersion() );
125 }
126 List result = query.list();
127 if ( result != null && !result.isEmpty() )
128 {
129 this.dashBoardMavenProjectID = (Long) ( result.get( 0 ) );
130 }
131
132 }
133
134 public void doGenerateReport( ResourceBundle bundle, Sink sink )
135 {
136
137 this.createTitle( bundle, sink );
138 addDashboardCss(sink);
139 sink.body();
140 sink.anchor( "top" );
141 sink.anchor_();
142 this.createHeader( bundle, sink );
143
144 if ( this.map.get( CoberturaReportBean.class ) != null )
145 {
146 this.createCoberturaSection( bundle, sink, (CoberturaReportBean) this.map.get( CoberturaReportBean.class ) );
147 }
148 if ( this.map.get( CloverReportBean.class ) != null )
149 {
150 this.createCloverSection( bundle, sink, (CloverReportBean) this.map.get( CloverReportBean.class ) );
151 }
152 if ( this.map.get( SurefireReportBean.class ) != null )
153 {
154 this.createSurefireSection( bundle, sink, (SurefireReportBean) this.map.get( SurefireReportBean.class ) );
155 }
156 if ( this.map.get( CheckstyleReportBean.class ) != null )
157 {
158 this.createCheckStyleSection( bundle, sink,
159 (CheckstyleReportBean) this.map.get( CheckstyleReportBean.class ) );
160 }
161 if ( this.map.get( PmdReportBean.class ) != null )
162 {
163 this.createPmdSection( bundle, sink, (PmdReportBean) this.map.get( PmdReportBean.class ) );
164 }
165 if ( this.map.get( CpdReportBean.class ) != null )
166 {
167 this.createCpdSection( bundle, sink, (CpdReportBean) this.map.get( CpdReportBean.class ) );
168 }
169 if ( this.map.get( FindBugsReportBean.class ) != null )
170 {
171 this.createFindBugsSection( bundle, sink, (FindBugsReportBean) this.map.get( FindBugsReportBean.class ) );
172 }
173 if ( this.map.get( TagListReportBean.class ) != null )
174 {
175 this.createTaglistSection( bundle, sink, (TagListReportBean) this.map.get( TagListReportBean.class ) );
176 }
177
178 sink.body_();
179
180 sink.flush();
181
182 sink.close();
183 }
184
185 public void createTitle( ResourceBundle bundle, Sink sink )
186 {
187 sink.head();
188 sink.title();
189 sink.text( bundle.getString( "dashboard.report.name" ) );
190 sink.title_();
191 sink.head_();
192 }
193
194 public void createHeader( ResourceBundle bundle, Sink sink )
195 {
196 sink.section1();
197
198 sink.sectionTitle1();
199 sink.text( bundle.getString( "dashboard.report.name" ) );
200 sink.sectionTitle1_();
201
202 sink.text( "Date Generated: " + new SimpleDateFormat().format( new Date( System.currentTimeMillis() ) ) );
203 sink.horizontalRule();
204
205 sink.sectionTitle3();
206 sink.text( "[" );
207 sink.link( "dashboard-report.html" );
208 sink.text( "Summary Dashboard" );
209 sink.link_();
210 sink.text( "]" );
211 sink.sectionTitle3_();
212 sink.horizontalRule();
213
214 if ( this.map.get( CoberturaReportBean.class ) != null )
215 {
216 sink.text( "[" );
217 sink.link( "#cobertura" );
218 sink.text( bundle.getString( "report.cobertura.header" ) );
219 sink.link_();
220 sink.text( "]" );
221 sink.lineBreak();
222 }
223 if ( this.map.get( CloverReportBean.class ) != null )
224 {
225 sink.text( "[" );
226 sink.link( "#clover" );
227 sink.text( bundle.getString( "report.clover.header" ) );
228 sink.link_();
229 sink.text( "]" );
230 sink.lineBreak();
231 }
232 if ( this.map.get( SurefireReportBean.class ) != null )
233 {
234 sink.text( "[" );
235 sink.link( "#surefire" );
236 sink.text( bundle.getString( "report.surefire.header" ) );
237 sink.link_();
238 sink.text( "]" );
239 sink.lineBreak();
240 }
241 if ( this.map.get( CheckstyleReportBean.class ) != null )
242 {
243 sink.text( "[" );
244 sink.link( "#checkstyle" );
245 sink.text( bundle.getString( "report.checkstyle.header" ) );
246 sink.link_();
247 sink.text( "]" );
248 sink.lineBreak();
249 }
250 if ( this.map.get( PmdReportBean.class ) != null )
251 {
252 sink.text( "[" );
253 sink.link( "#pmd" );
254 sink.text( bundle.getString( "report.pmd.header" ) );
255 sink.link_();
256 sink.text( "]" );
257 sink.lineBreak();
258 }
259 if ( this.map.get( CpdReportBean.class ) != null )
260 {
261 sink.text( "[" );
262 sink.link( "#cpd" );
263 sink.text( bundle.getString( "report.cpd.header" ) );
264 sink.link_();
265 sink.text( "]" );
266 sink.lineBreak();
267 }
268 if ( this.map.get( FindBugsReportBean.class ) != null )
269 {
270 sink.text( "[" );
271 sink.link( "#findbugs" );
272 sink.text( bundle.getString( "report.findbugs.header" ) );
273 sink.link_();
274 sink.text( "]" );
275 sink.lineBreak();
276 }
277 if ( this.map.get( TagListReportBean.class ) != null )
278 {
279 sink.text( "[" );
280 sink.link( "#taglist" );
281 sink.text( bundle.getString( "report.taglist.header" ) );
282 sink.link_();
283 sink.text( "]" );
284 sink.lineBreak();
285 }
286
287
288
289
290
291 sink.horizontalRule();
292 sink.lineBreak();
293 if ( !this.generateGraphs )
294 {
295 sink.text( "[" + bundle.getString( "dashboard.report.generategraphs.disabled" ) + "]" );
296 sink.lineBreak();
297 }
298 sink.section1_();
299 }
300
301 public void createSurefireSection( ResourceBundle bundle, Sink sink, SurefireReportBean report )
302 {
303
304 sink.section1();
305
306 sink.sectionTitle2();
307 sink.anchor( "surefire" );
308 sink.anchor_();
309 sink.link( "dashboard-report.html#surefire" );
310 sink.text( bundle.getString( "report.surefire.header" ) );
311 sink.link_();
312
313 sink.sectionTitle2_();
314 this.linkToTopPage( sink );
315 sink.section1_();
316 sink.lineBreak();
317
318 if ( report == null )
319 {
320 sink.text( "Error: Unable to generate Surefire historic graphs." );
321 }
322 else
323 {
324 Section section = this.configuration.getSectionById( "surefire.summary" );
325 if ( section == null )
326 {
327 sink.text( "Error: Unable to generate Surefire historic graphs." );
328 }
329 else
330 {
331 List graphs = section.getGraphs();
332
333 Iterator iter = graphs.iterator();
334
335 while ( iter.hasNext() )
336 {
337 Graph graph = (Graph) iter.next();
338
339 String namedQuery = "";
340 if ( this.keepVersionAsDiscriminantCriteria )
341 {
342 namedQuery =
343 "org.codehaus.mojo.dashboard.report.plugin.beans.SurefireReportBean.getSurefireByPeriodByVersion";
344 }
345 else
346 {
347 namedQuery =
348 "org.codehaus.mojo.dashboard.report.plugin.beans.SurefireReportBean.getSurefireByPeriod";
349 }
350
351 Query query = this.hibernateService.getSession().getNamedQuery( namedQuery );
352
353 query.setParameter( "id", this.dashBoardMavenProjectID );
354 query.setParameter( "startdate", graph.getStartPeriodDate() );
355 query.setParameter( "enddate", graph.getEndPeriodDate() );
356 List result = query.list();
357 if ( !this.generateGraphs )
358 {
359 sink.sectionTitle3();
360 sink.text( this.mavenProject.getProjectName() + " : " + graph.getTitle() );
361 sink.sectionTitle3_();
362
363 if ( result != null && result.size() > 0 )
364 {
365 sink.table();
366 sink.tableRow();
367 sink.tableHeaderCell();
368 sink.text( "Date" );
369 sink.tableHeaderCell_();
370 sink.tableHeaderCell();
371 sink.text( bundle.getString( "report.surefire.label.successrate" ) );
372 sink.tableHeaderCell_();
373 sink.tableHeaderCell();
374 sink.text( bundle.getString( "report.surefire.label.tests" ) );
375 sink.tableHeaderCell_();
376 sink.tableHeaderCell();
377 sink.text( bundle.getString( "report.surefire.label.errors" ) );
378 sink.tableHeaderCell_();
379 sink.tableHeaderCell();
380 sink.text( bundle.getString( "report.surefire.label.failures" ) );
381 sink.tableHeaderCell_();
382 sink.tableHeaderCell();
383 sink.text( bundle.getString( "report.surefire.label.skipped" ) );
384 sink.tableHeaderCell_();
385 sink.tableRow_();
386
387 Iterator iterRes = result.iterator();
388 while ( iterRes.hasNext() )
389 {
390 sink.tableRow();
391 SurefireReportBean reportH = (SurefireReportBean) iterRes.next();
392 Date date = reportH.getDateGeneration();
393
394 this.sinkCell( sink, normalizeToString( date ) );
395 this.sinkCellPercentGraphic( sink, reportH.getSucessRate() / 100, "surefire" );
396 this.sinkCell( sink, Integer.toString( reportH.getNbTests() ) );
397 this.sinkCell( sink, Integer.toString( reportH.getNbErrors() ) );
398 this.sinkCell( sink, Integer.toString( reportH.getNbFailures() ) );
399 this.sinkCell( sink, Integer.toString( reportH.getNbSkipped() ) );
400 }
401 sink.table_();
402 }
403 else
404 {
405 sink.text( "[" + bundle.getString( "dashboard.report.generategraphs.nodata" ) + "]" );
406 sink.lineBreak();
407 }
408 }
409 else
410 {
411 IChartRenderer chart1 =
412 new TimeChartRenderer( new SurefireTimeChartStrategy( bundle,
413 this.mavenProject.getProjectName()
414 + " : "
415 + graph.getTitle(),
416 result, graph.getTimeUnit(),
417 graph.getStartPeriodDate(),
418 graph.getEndPeriodDate() ) );
419 chart1 = new SurefirePercentAxisDecorator( chart1, result );
420 if ( !this.keepVersionAsDiscriminantCriteria )
421 {
422 String versionQuery =
423 "org.codehaus.mojo.dashboard.report.plugin.beans.SurefireReportBean.getMarkerVersionByDate";
424 query = this.hibernateService.getSession().getNamedQuery( versionQuery );
425 query.setParameter( "id", this.dashBoardMavenProjectID );
426 query.setParameter( "startdate", graph.getStartPeriodDate() );
427 query.setParameter( "enddate", graph.getEndPeriodDate() );
428 result = query.list();
429 chart1 = new MarkerTimeChartDecorator( chart1, result );
430 }
431
432 if ( !chart1.isEmpty() )
433 {
434 String filename = this.replaceForbiddenChar( this.mavenProject.getProjectName() );
435 filename += "_Histo_Surefire." + chart1.getFileExtension();
436 String prefix = graph.getId();
437 filename = prefix.replace( '.', '_' ) + filename;
438 filename = filename.replace( ' ', '_' );
439 String filenameWithPath = this.getImagesPath() + "/" + filename;
440 this.getLog().debug( "createHistoSurefireGraph = " + filename );
441 try
442 {
443 chart1.saveToFile( filenameWithPath );
444 String link = "images/" + filename;
445 link = link.replace( ' ', '_' );
446 sink.figure();
447 sink.figureGraphics( link );
448 sink.figure_();
449 }
450 catch ( IOException e )
451 {
452 this.getLog().debug( "createHistoSurefireGraph exception = " + e.getMessage() );
453 }
454 }
455 sink.lineBreak();
456 }
457 sink.lineBreak();
458 }
459 }
460 }
461
462 }
463
464
465
466
467
468
469
470 public void createCloverSection( ResourceBundle bundle, Sink sink, CloverReportBean report )
471 {
472 sink.section1();
473
474 sink.sectionTitle2();
475 sink.anchor( "clover" );
476 sink.anchor_();
477 sink.link( "dashboard-report.html#clover" );
478 sink.text( bundle.getString( "report.clover.header" ) );
479 sink.link_();
480
481 sink.sectionTitle2_();
482 this.linkToTopPage( sink );
483 sink.section1_();
484 sink.lineBreak();
485
486 if ( report == null )
487 {
488 sink.text( "Error: Unable to generate Clover historic graphs." );
489 }
490 else
491 {
492 Section section = this.configuration.getSectionById( "clover.summary" );
493 if ( section == null )
494 {
495 sink.text( "Error: Unable to generate Clover historic graphs." );
496 }
497 else
498 {
499 List graphs = section.getGraphs();
500
501 Iterator iter = graphs.iterator();
502
503 while ( iter.hasNext() )
504 {
505 Graph graph = (Graph) iter.next();
506
507 String namedQuery = "";
508 if ( this.keepVersionAsDiscriminantCriteria )
509 {
510 namedQuery =
511 "org.codehaus.mojo.dashboard.report.plugin.beans.CloverReportBean.getCloverByPeriodByVersion";
512 }
513 else
514 {
515 namedQuery =
516 "org.codehaus.mojo.dashboard.report.plugin.beans.CloverReportBean.getCloverByPeriod";
517 }
518
519 Query query = this.hibernateService.getSession().getNamedQuery( namedQuery );
520 query.setParameter( "id", this.dashBoardMavenProjectID );
521 query.setParameter( "startdate", graph.getStartPeriodDate() );
522 query.setParameter( "enddate", graph.getEndPeriodDate() );
523 List result = query.list();
524 if ( !this.generateGraphs )
525 {
526 sink.sectionTitle3();
527 sink.text( this.mavenProject.getProjectName() + " : " + graph.getTitle() );
528 sink.sectionTitle3_();
529
530 if ( result != null && result.size() > 0 )
531 {
532 sink.table();
533 sink.tableRow();
534 sink.tableHeaderCell();
535 sink.text( "Date" );
536 sink.tableHeaderCell_();
537
538 sink.tableHeaderCell();
539 sink.text( bundle.getString( "report.clover.label.total" ) );
540 sink.tableHeaderCell_();
541 sink.tableHeaderCell();
542 sink.text( bundle.getString( "report.clover.label.conditionals" ) );
543 sink.tableHeaderCell_();
544 sink.tableHeaderCell();
545 sink.text( bundle.getString( "report.clover.label.statements" ) );
546 sink.tableHeaderCell_();
547 sink.tableHeaderCell();
548 sink.text( bundle.getString( "report.clover.label.methods" ) );
549 sink.tableHeaderCell_();
550
551 sink.tableRow_();
552
553 Iterator iterRes = result.iterator();
554 while ( iterRes.hasNext() )
555 {
556 sink.tableRow();
557 CloverReportBean clover = (CloverReportBean) iterRes.next();
558 Date date = clover.getDateGeneration();
559
560 this.sinkCell( sink, normalizeToString( date ) );
561
562 this.sinkCellPercentGraphic( sink, clover.getPercentCoveredElements(), "clover" );
563
564 this.sinkCell( sink, getPercentValue( clover.getPercentCoveredConditionals() ) );
565 this.sinkCell( sink, getPercentValue( clover.getPercentCoveredStatements() ) );
566 this.sinkCell( sink, getPercentValue( clover.getPercentCoveredMethods() ) );
567
568 }
569 sink.table_();
570 }
571 else
572 {
573 sink.text( "[" + bundle.getString( "dashboard.report.generategraphs.nodata" ) + "]" );
574 sink.lineBreak();
575 }
576 }
577 else
578 {
579 IChartRenderer chart1 =
580 new TimeChartRenderer( new CloverTimeChartStrategy( bundle,
581 this.mavenProject.getProjectName()
582 + " : "
583 + graph.getTitle(),
584 result, graph.getTimeUnit(),
585 graph.getStartPeriodDate(),
586 graph.getEndPeriodDate() ) );
587 if ( !this.keepVersionAsDiscriminantCriteria )
588 {
589 String versionQuery =
590 "org.codehaus.mojo.dashboard.report.plugin.beans.CloverReportBean.getMarkerVersionByDate";
591 query = this.hibernateService.getSession().getNamedQuery( versionQuery );
592 query.setParameter( "id", this.dashBoardMavenProjectID );
593 query.setParameter( "startdate", graph.getStartPeriodDate() );
594 query.setParameter( "enddate", graph.getEndPeriodDate() );
595 result = query.list();
596 chart1 = new MarkerTimeChartDecorator( chart1, result );
597 }
598 if ( !chart1.isEmpty() )
599 {
600 String filename = this.replaceForbiddenChar( this.mavenProject.getProjectName() );
601 filename += "_Histo_Clover." + chart1.getFileExtension();
602 String prefix = graph.getId();
603 filename = prefix.replace( '.', '_' ) + filename;
604 filename = filename.replace( ' ', '_' );
605 String filenameWithPath = this.getImagesPath() + "/" + filename;
606 this.getLog().debug( "createHistoCloverGraph = " + filename );
607 try
608 {
609 chart1.saveToFile( filenameWithPath );
610 String link = "images/" + filename;
611 link = link.replace( ' ', '_' );
612 sink.figure();
613 sink.figureGraphics( link );
614 sink.figure_();
615 }
616 catch ( IOException e )
617 {
618 this.getLog().debug( "createHistoCloverGraph exception = " + e.getMessage() );
619 }
620 }
621 sink.lineBreak();
622 }
623 }
624 sink.lineBreak();
625 }
626 }
627
628 sink.lineBreak();
629
630 }
631
632 public void createCoberturaSection( ResourceBundle bundle, Sink sink, CoberturaReportBean report )
633 {
634
635 sink.section1();
636
637 sink.sectionTitle2();
638 sink.anchor( "cobertura" );
639 sink.anchor_();
640 sink.link( "dashboard-report.html#cobertura" );
641 sink.text( bundle.getString( "report.cobertura.header" ) );
642 sink.link_();
643
644 sink.sectionTitle2_();
645 this.linkToTopPage( sink );
646 sink.section1_();
647 sink.lineBreak();
648 if ( report == null )
649 {
650 sink.text( "Error: Unable to generate Cobertura historic graphs." );
651 }
652 else
653 {
654 Section section = this.configuration.getSectionById( "cobertura.summary" );
655 if ( section == null )
656 {
657 sink.text( "Error: Unable to generate Cobertura historic graphs." );
658 }
659 else
660 {
661 List graphs = section.getGraphs();
662
663 Iterator iter = graphs.iterator();
664
665 while ( iter.hasNext() )
666 {
667 Graph graph = (Graph) iter.next();
668
669 String namedQuery = "";
670 if ( this.keepVersionAsDiscriminantCriteria )
671 {
672 namedQuery =
673 "org.codehaus.mojo.dashboard.report.plugin.beans.CoberturaReportBean.getCoberturaByPeriodByVersion";
674 }
675 else
676 {
677 namedQuery =
678 "org.codehaus.mojo.dashboard.report.plugin.beans.CoberturaReportBean.getCoberturaByPeriod";
679 }
680
681 Query query = this.hibernateService.getSession().getNamedQuery( namedQuery );
682 query.setParameter( "id", this.dashBoardMavenProjectID );
683 query.setParameter( "startdate", graph.getStartPeriodDate() );
684 query.setParameter( "enddate", graph.getEndPeriodDate() );
685 List result = query.list();
686
687 if ( !this.generateGraphs )
688 {
689 sink.sectionTitle3();
690 sink.text( this.mavenProject.getProjectName() + " : " + graph.getTitle() );
691 sink.sectionTitle3_();
692
693 if ( result != null && result.size() > 0 )
694 {
695 sink.table();
696 sink.tableRow();
697
698 sinkHeader( sink, "Date" );
699 sinkHeader( sink, bundle.getString( "report.cobertura.label.nbclasses" ) );
700 sinkHeader( sink, bundle.getString( "report.cobertura.label.linecover" ) );
701 sinkHeader( sink, bundle.getString( "report.cobertura.label.branchcover" ) );
702
703 sink.tableRow_();
704
705 Iterator iterRes = result.iterator();
706 while ( iterRes.hasNext() )
707 {
708 CoberturaReportBean cober = (CoberturaReportBean) iterRes.next();
709 Date date = cober.getDateGeneration();
710
711 sink.tableRow();
712 this.sinkCell( sink, normalizeToString( date ) );
713 this.sinkCell( sink, Integer.toString( cober.getNbClasses() ) );
714 sinkCellPercentGraphic( sink, cober.getLineCoverRate(), "cobertura" );
715 sinkCellPercentGraphic( sink, cober.getBranchCoverRate(), "cobertura" );
716 sink.tableRow_();
717 }
718 sink.table_();
719 }
720 else
721 {
722 sink.text( "[" + bundle.getString( "dashboard.report.generategraphs.nodata" ) + "]" );
723 sink.lineBreak();
724 }
725 }
726 else
727 {
728 IChartRenderer chart1 =
729 new TimeChartRenderer( new CoberturaTimeChartStrategy( bundle,
730 this.mavenProject.getProjectName()
731 + " : "
732 + graph.getTitle(),
733 result, graph.getTimeUnit(),
734 graph.getStartPeriodDate(),
735 graph.getEndPeriodDate() ) );
736 if ( !this.keepVersionAsDiscriminantCriteria )
737 {
738 String versionQuery =
739 "org.codehaus.mojo.dashboard.report.plugin.beans.CoberturaReportBean.getMarkerVersionByDate";
740 query = this.hibernateService.getSession().getNamedQuery( versionQuery );
741 query.setParameter( "id", this.dashBoardMavenProjectID );
742 query.setParameter( "startdate", graph.getStartPeriodDate() );
743 query.setParameter( "enddate", graph.getEndPeriodDate() );
744 result = query.list();
745 chart1 = new MarkerTimeChartDecorator( chart1, result );
746 }
747
748 if ( !chart1.isEmpty() )
749 {
750 String filename = this.replaceForbiddenChar( this.mavenProject.getProjectName() );
751 filename += "_Histo_Cobertura." + chart1.getFileExtension();
752 String prefix = graph.getId();
753 filename = prefix.replace( '.', '_' ) + filename;
754 filename = filename.replace( ' ', '_' );
755 String filenameWithPath = this.getImagesPath() + "/" + filename;
756 this.getLog().debug( "createHistoCoberturaGraph = " + filename );
757 try
758 {
759 chart1.saveToFile( filenameWithPath );
760 String link = "images/" + filename;
761 link = link.replace( ' ', '_' );
762 sink.figure();
763 sink.figureGraphics( link );
764 sink.figure_();
765 }
766 catch ( IOException e )
767 {
768 this.getLog().debug( "createHistoCoberturaGraph exception = " + e.getMessage() );
769 }
770 }
771 sink.lineBreak();
772 }
773 sink.lineBreak();
774 }
775 }
776 }
777 sink.lineBreak();
778
779 }
780
781 public void createPmdSection( ResourceBundle bundle, Sink sink, PmdReportBean report )
782 {
783
784 sink.section1();
785
786 sink.sectionTitle2();
787 sink.anchor( "pmd" );
788 sink.anchor_();
789 sink.link( "dashboard-report.html#pmd" );
790 sink.text( bundle.getString( "report.pmd.header" ) );
791 sink.link_();
792 sink.sectionTitle2_();
793 this.linkToTopPage( sink );
794 sink.section1_();
795 sink.lineBreak();
796 if ( report == null )
797 {
798 sink.text( "Error: Unable to generate PMD historic graphs." );
799 }
800 else
801 {
802 Section section = this.configuration.getSectionById( "pmd.summary" );
803 if ( section == null )
804 {
805 sink.text( "Error: Unable to generate PMD historic graphs." );
806 }
807 else
808 {
809 List graphs = section.getGraphs();
810
811 Iterator iter = graphs.iterator();
812
813 while ( iter.hasNext() )
814 {
815 Graph graph = (Graph) iter.next();
816
817 String namedQuery = "";
818 if ( this.keepVersionAsDiscriminantCriteria )
819 {
820 namedQuery =
821 "org.codehaus.mojo.dashboard.report.plugin.beans.PmdReportBean.getPmdByPeriodByVersion";
822 }
823 else
824 {
825 namedQuery = "org.codehaus.mojo.dashboard.report.plugin.beans.PmdReportBean.getPmdByPeriod";
826 }
827
828 Query query = this.hibernateService.getSession().getNamedQuery( namedQuery );
829 query.setParameter( "id", this.dashBoardMavenProjectID );
830 query.setParameter( "startdate", graph.getStartPeriodDate() );
831 query.setParameter( "enddate", graph.getEndPeriodDate() );
832 List result = query.list();
833 if ( !this.generateGraphs )
834 {
835 sink.sectionTitle3();
836 sink.text( this.mavenProject.getProjectName() + " : " + graph.getTitle() );
837 sink.sectionTitle3_();
838
839 if ( result != null && result.size() > 0 )
840 {
841 sink.table();
842 sink.tableRow();
843 sink.tableHeaderCell();
844 sink.text( "Date" );
845 sink.tableHeaderCell_();
846
847 this.sinkHeader( sink, bundle.getString( "report.pmd.label.nbclasses" ) );
848
849 this.sinkHeader( sink, bundle.getString( "report.pmd.label.nbviolations" ) );
850
851 sink.tableRow_();
852
853 Iterator iterRes = result.iterator();
854 while ( iterRes.hasNext() )
855 {
856 sink.tableRow();
857 PmdReportBean pmd = (PmdReportBean) iterRes.next();
858 Date date = pmd.getDateGeneration();
859
860 this.sinkCell( sink, normalizeToString( date ) );
861 this.sinkCell( sink, Integer.toString( pmd.getNbClasses() ) );
862 this.sinkCell( sink, Integer.toString( pmd.getNbViolations() ) );
863
864 }
865 sink.table_();
866 }
867 else
868 {
869 sink.text( "[" + bundle.getString( "dashboard.report.generategraphs.nodata" ) + "]" );
870 sink.lineBreak();
871 }
872 }
873 else
874 {
875 IChartRenderer chart1 =
876 new TimeChartRenderer( new PmdTimeChartStrategy( bundle, this.mavenProject.getProjectName()
877 + " : " + graph.getTitle(), result, graph.getTimeUnit(),
878 graph.getStartPeriodDate(),
879 graph.getEndPeriodDate() ) );
880 if ( !this.keepVersionAsDiscriminantCriteria )
881 {
882 String versionQuery =
883 "org.codehaus.mojo.dashboard.report.plugin.beans.PmdReportBean.getMarkerVersionByDate";
884 query = this.hibernateService.getSession().getNamedQuery( versionQuery );
885 query.setParameter( "id", this.dashBoardMavenProjectID );
886 query.setParameter( "startdate", graph.getStartPeriodDate() );
887 query.setParameter( "enddate", graph.getEndPeriodDate() );
888 result = query.list();
889 chart1 = new MarkerTimeChartDecorator( chart1, result );
890 }
891 if ( !chart1.isEmpty() )
892 {
893 String filename = this.replaceForbiddenChar( this.mavenProject.getProjectName() );
894 filename += "_Histo_Pmd." + chart1.getFileExtension();
895 String prefix = graph.getId();
896 filename = prefix.replace( '.', '_' ) + filename;
897 filename = filename.replace( ' ', '_' );
898 String filenameWithPath = this.getImagesPath() + "/" + filename;
899 this.getLog().debug( "createHistoPmdGraph = " + filename );
900 try
901 {
902 chart1.saveToFile( filenameWithPath );
903 String link = "images/" + filename;
904 link = link.replace( ' ', '_' );
905 sink.figure();
906 sink.figureGraphics( link );
907 sink.figure_();
908 }
909 catch ( IOException e )
910 {
911 this.getLog().debug( "createHistoPmdGraph exception = " + e.getMessage() );
912 }
913 }
914 sink.lineBreak();
915 }
916 sink.lineBreak();
917 }
918 }
919 }
920 sink.lineBreak();
921 }
922
923 public void createCpdSection( ResourceBundle bundle, Sink sink, CpdReportBean report )
924 {
925
926 sink.section1();
927
928 sink.sectionTitle2();
929 sink.anchor( "cpd" );
930 sink.anchor_();
931 sink.link( "dashboard-report.html#cpd" );
932 sink.text( bundle.getString( "report.cpd.header" ) );
933 sink.link_();
934
935 sink.sectionTitle2_();
936 this.linkToTopPage( sink );
937 sink.section1_();
938 sink.lineBreak();
939 if ( report == null )
940 {
941 sink.text( "Error: Unable to generate CPD historic graphs." );
942 }
943 else
944 {
945 Section section = this.configuration.getSectionById( "cpd.summary" );
946 if ( section == null )
947 {
948 sink.text( "Error: Unable to generate CPD historic graphs." );
949 }
950 else
951 {
952 List graphs = section.getGraphs();
953
954 Iterator iter = graphs.iterator();
955
956 while ( iter.hasNext() )
957 {
958 Graph graph = (Graph) iter.next();
959
960 String namedQuery = "";
961 if ( this.keepVersionAsDiscriminantCriteria )
962 {
963 namedQuery =
964 "org.codehaus.mojo.dashboard.report.plugin.beans.CpdReportBean.getCpdByPeriodByVersion";
965 }
966 else
967 {
968 namedQuery = "org.codehaus.mojo.dashboard.report.plugin.beans.CpdReportBean.getCpdByPeriod";
969 }
970
971 Query query = this.hibernateService.getSession().getNamedQuery( namedQuery );
972 query.setParameter( "id", this.dashBoardMavenProjectID );
973 query.setParameter( "startdate", graph.getStartPeriodDate() );
974 query.setParameter( "enddate", graph.getEndPeriodDate() );
975 List result = query.list();
976 if ( !this.generateGraphs )
977 {
978 sink.sectionTitle3();
979 sink.text( this.mavenProject.getProjectName() + " : " + graph.getTitle() );
980 sink.sectionTitle3_();
981
982 if ( result != null && result.size() > 0 )
983 {
984 sink.table();
985 sink.tableRow();
986 sink.tableHeaderCell();
987 sink.text( "Date" );
988 sink.tableHeaderCell_();
989
990 this.sinkHeader( sink, bundle.getString( "report.cpd.label.nbclasses" ) );
991
992 this.sinkHeader( sink, bundle.getString( "report.cpd.label.nbduplicate" ) );
993
994 sink.tableRow_();
995
996 Iterator iterRes = result.iterator();
997 while ( iterRes.hasNext() )
998 {
999 sink.tableRow();
1000 CpdReportBean cpd = (CpdReportBean) iterRes.next();
1001 Date date = cpd.getDateGeneration();
1002
1003 this.sinkCell( sink, normalizeToString( date ) );
1004 this.sinkCell( sink, Integer.toString( cpd.getNbClasses() ) );
1005 this.sinkCell( sink, Integer.toString( cpd.getNbDuplicate() ) );
1006
1007 }
1008 sink.table_();
1009 }
1010 else
1011 {
1012 sink.text( "[" + bundle.getString( "dashboard.report.generategraphs.nodata" ) + "]" );
1013 sink.lineBreak();
1014 }
1015 }
1016 else
1017 {
1018 IChartRenderer chart1 =
1019 new TimeChartRenderer( new CpdTimeChartStrategy( bundle, this.mavenProject.getProjectName()
1020 + " : " + graph.getTitle(), result, graph.getTimeUnit(),
1021 graph.getStartPeriodDate(),
1022 graph.getEndPeriodDate() ) );
1023 if ( !this.keepVersionAsDiscriminantCriteria )
1024 {
1025 String versionQuery =
1026 "org.codehaus.mojo.dashboard.report.plugin.beans.CpdReportBean.getMarkerVersionByDate";
1027 query = this.hibernateService.getSession().getNamedQuery( versionQuery );
1028 query.setParameter( "id", this.dashBoardMavenProjectID );
1029 query.setParameter( "startdate", graph.getStartPeriodDate() );
1030 query.setParameter( "enddate", graph.getEndPeriodDate() );
1031 result = query.list();
1032 chart1 = new MarkerTimeChartDecorator( chart1, result );
1033 }
1034 if ( !chart1.isEmpty() )
1035 {
1036 String filename = this.replaceForbiddenChar( this.mavenProject.getProjectName() );
1037 filename += "_Histo_Cpd." + chart1.getFileExtension();
1038 String prefix = graph.getId();
1039 filename = prefix.replace( '.', '_' ) + filename;
1040 filename = filename.replace( ' ', '_' );
1041 String filenameWithPath = this.getImagesPath() + "/" + filename;
1042 this.getLog().debug( "createHistoCpdGraph = " + filename );
1043 try
1044 {
1045 chart1.saveToFile( filenameWithPath );
1046 String link = "images/" + filename;
1047 link = link.replace( ' ', '_' );
1048 sink.figure();
1049 sink.figureGraphics( link );
1050 sink.figure_();
1051 }
1052 catch ( IOException e )
1053 {
1054 this.getLog().debug( "createHistoCpdGraph exception = " + e.getMessage() );
1055 }
1056 }
1057 sink.lineBreak();
1058 }
1059 sink.lineBreak();
1060 }
1061 }
1062 }
1063 sink.lineBreak();
1064 }
1065
1066 public void createCheckStyleSection( ResourceBundle bundle, Sink sink, CheckstyleReportBean report )
1067 {
1068
1069 sink.section1();
1070 sink.sectionTitle2();
1071 sink.anchor( "checkstyle" );
1072 sink.anchor_();
1073 sink.link( "dashboard-report.html#checkstyle" );
1074 sink.text( bundle.getString( "report.checkstyle.header" ) );
1075 sink.link_();
1076
1077 sink.sectionTitle2_();
1078 this.linkToTopPage( sink );
1079 sink.section1_();
1080 if ( report == null )
1081 {
1082 sink.text( "Error: Unable to generate Checkstyle historic graphs." );
1083 }
1084 else
1085 {
1086 Section section = this.configuration.getSectionById( "checkstyle.summary" );
1087 if ( section == null )
1088 {
1089 sink.text( "Error: Unable to generate Checkstyle historic graphs." );
1090 }
1091 else
1092 {
1093 List graphs = section.getGraphs();
1094
1095 Iterator iter = graphs.iterator();
1096
1097 while ( iter.hasNext() )
1098 {
1099 Graph graph = (Graph) iter.next();
1100
1101 String namedQuery = "";
1102 if ( this.keepVersionAsDiscriminantCriteria )
1103 {
1104 namedQuery =
1105 "org.codehaus.mojo.dashboard.report.plugin.beans.CheckstyleReportBean.getCheckstyleByPeriodByVersion";
1106 }
1107 else
1108 {
1109 namedQuery =
1110 "org.codehaus.mojo.dashboard.report.plugin.beans.CheckstyleReportBean.getCheckstyleByPeriod";
1111 }
1112
1113 Query query = this.hibernateService.getSession().getNamedQuery( namedQuery );
1114 query.setParameter( "id", this.dashBoardMavenProjectID );
1115 query.setParameter( "startdate", graph.getStartPeriodDate() );
1116 query.setParameter( "enddate", graph.getEndPeriodDate() );
1117 List result = query.list();
1118 if ( !this.generateGraphs )
1119 {
1120 sink.sectionTitle3();
1121 sink.text( this.mavenProject.getProjectName() + " : " + graph.getTitle() );
1122 sink.sectionTitle3_();
1123
1124 if ( result != null && result.size() > 0 )
1125 {
1126 sink.table();
1127 sink.tableRow();
1128 sink.tableHeaderCell();
1129 sink.text( "Date" );
1130 sink.tableHeaderCell_();
1131
1132 sink.tableHeaderCell();
1133 sink.text( bundle.getString( "report.checkstyle.files" ) );
1134 sink.tableHeaderCell_();
1135
1136 sink.tableHeaderCell();
1137 sink.text( bundle.getString( "report.checkstyle.column.total" ) );
1138 sink.tableHeaderCell_();
1139
1140 sink.tableHeaderCell();
1141 sink.text( bundle.getString( "report.checkstyle.column.infos" ) );
1142 sink.nonBreakingSpace();
1143 this.iconInfo( sink );
1144 sink.tableHeaderCell_();
1145
1146 sink.tableHeaderCell();
1147 sink.text( bundle.getString( "report.checkstyle.column.warnings" ) );
1148 sink.nonBreakingSpace();
1149 this.iconWarning( sink );
1150 sink.tableHeaderCell_();
1151
1152 sink.tableHeaderCell();
1153 sink.text( bundle.getString( "report.checkstyle.column.errors" ) );
1154 sink.nonBreakingSpace();
1155 this.iconError( sink );
1156 sink.tableHeaderCell_();
1157
1158 sink.tableRow_();
1159
1160 Iterator iterRes = result.iterator();
1161 while ( iterRes.hasNext() )
1162 {
1163 sink.tableRow();
1164 CheckstyleReportBean check = (CheckstyleReportBean) iterRes.next();
1165 Date date = check.getDateGeneration();
1166
1167 this.sinkCell( sink, normalizeToString( date ) );
1168 this.sinkCell( sink, Integer.toString( check.getNbClasses() ) );
1169 this.sinkCell( sink, Integer.toString( check.getNbTotal() ) );
1170
1171 sink.tableCell();
1172 sink.text( Integer.toString( check.getNbInfos() ) );
1173 sinkInvertPercentGraphic( sink, check.getPercentInfos() );
1174 sink.tableCell_();
1175 sink.tableCell();
1176 sink.text( Integer.toString( check.getNbWarnings() ) );
1177 sinkInvertPercentGraphic( sink, check.getPercentWarnings() );
1178 sink.tableCell_();
1179 sink.tableCell();
1180 sink.text( Integer.toString( check.getNbErrors() ) );
1181 sinkInvertPercentGraphic( sink, check.getPercentErrors() );
1182 sink.tableCell_();
1183
1184 }
1185 sink.table_();
1186 }
1187 else
1188 {
1189 sink.text( "[" + bundle.getString( "dashboard.report.generategraphs.nodata" ) + "]" );
1190 sink.lineBreak();
1191 }
1192 }
1193 else
1194 {
1195 IChartRenderer chart1 =
1196 new TimeChartRenderer( new CheckstyleTimeChartStrategy( bundle,
1197 this.mavenProject.getProjectName()
1198 + " : "
1199 + graph.getTitle(),
1200 result, graph.getTimeUnit(),
1201 graph.getStartPeriodDate(),
1202 graph.getEndPeriodDate() ) );
1203 if ( !this.keepVersionAsDiscriminantCriteria )
1204 {
1205 String versionQuery =
1206 "org.codehaus.mojo.dashboard.report.plugin.beans.CheckstyleReportBean.getMarkerVersionByDate";
1207 query = this.hibernateService.getSession().getNamedQuery( versionQuery );
1208 query.setParameter( "id", this.dashBoardMavenProjectID );
1209 query.setParameter( "startdate", graph.getStartPeriodDate() );
1210 query.setParameter( "enddate", graph.getEndPeriodDate() );
1211 result = query.list();
1212 chart1 = new MarkerTimeChartDecorator( chart1, result );
1213 }
1214 if ( !chart1.isEmpty() )
1215 {
1216 String filename = this.replaceForbiddenChar( this.mavenProject.getProjectName() );
1217 filename += "_Histo_Checkstyle." + chart1.getFileExtension();
1218 String prefix = graph.getId();
1219 filename = prefix.replace( '.', '_' ) + filename;
1220 filename = filename.replace( ' ', '_' );
1221 String filenameWithPath = this.getImagesPath() + "/" + filename;
1222 this.getLog().debug( "createHistoCheckstyleGraph = " + filename );
1223 try
1224 {
1225 chart1.saveToFile( filenameWithPath );
1226 String link = "images/" + filename;
1227 link = link.replace( ' ', '_' );
1228 sink.figure();
1229 sink.figureGraphics( link );
1230 sink.figure_();
1231 }
1232 catch ( IOException e )
1233 {
1234 this.getLog().debug( "createHistoCheckstyleGraph exception = " + e.getMessage() );
1235 }
1236 }
1237 sink.lineBreak();
1238 }
1239 sink.lineBreak();
1240 }
1241 }
1242 }
1243 sink.lineBreak();
1244
1245 }
1246
1247 public void createFindBugsSection( ResourceBundle bundle, Sink sink, FindBugsReportBean report )
1248 {
1249
1250 sink.section1();
1251
1252 sink.sectionTitle2();
1253 sink.anchor( "findbugs" );
1254 sink.anchor_();
1255 sink.link( "dashboard-report.html#findbugs" );
1256 sink.text( bundle.getString( "report.findbugs.header" ) );
1257 sink.link_();
1258
1259 sink.sectionTitle2_();
1260 this.linkToTopPage( sink );
1261 sink.section1_();
1262 sink.lineBreak();
1263
1264 Section section = this.configuration.getSectionById( "findbugs.summary" );
1265 if ( report == null )
1266 {
1267 sink.text( "Error: Unable to generate FindBugs historic graphs." );
1268 }
1269 else
1270 {
1271 if ( section == null )
1272 {
1273 sink.text( "Error: Unable to generate FindBugs historic graphs." );
1274 }
1275 else
1276 {
1277 List graphs = section.getGraphs();
1278
1279 Iterator iter = graphs.iterator();
1280
1281 while ( iter.hasNext() )
1282 {
1283 Graph graph = (Graph) iter.next();
1284
1285 String namedQuery = "";
1286 if ( this.keepVersionAsDiscriminantCriteria )
1287 {
1288 namedQuery =
1289 "org.codehaus.mojo.dashboard.report.plugin.beans.FindBugsReportBean.getFindBugsByPeriodByVersion";
1290 }
1291 else
1292 {
1293 namedQuery =
1294 "org.codehaus.mojo.dashboard.report.plugin.beans.FindBugsReportBean.getFindBugsByPeriod";
1295 }
1296
1297 Query query = this.hibernateService.getSession().getNamedQuery( namedQuery );
1298 query.setParameter( "id", this.dashBoardMavenProjectID );
1299 query.setParameter( "startdate", graph.getStartPeriodDate() );
1300 query.setParameter( "enddate", graph.getEndPeriodDate() );
1301 List result = query.list();
1302 if ( !this.generateGraphs )
1303 {
1304 sink.sectionTitle3();
1305 sink.text( this.mavenProject.getProjectName() + " : " + graph.getTitle() );
1306 sink.sectionTitle3_();
1307
1308 if ( result != null && result.size() > 0 )
1309 {
1310 sink.table();
1311 sink.tableRow();
1312 this.sinkHeader( sink, "Date" );
1313 this.sinkHeader( sink, bundle.getString( "report.findbugs.label.nbclasses" ) );
1314 this.sinkHeader( sink, bundle.getString( "report.findbugs.label.nbbugs" ) );
1315 this.sinkHeader( sink, bundle.getString( "report.findbugs.label.nberrors" ) );
1316 this.sinkHeader( sink, bundle.getString( "report.findbugs.label.nbMissingClasses" ) );
1317 sink.tableRow_();
1318
1319 Iterator iterRes = result.iterator();
1320 while ( iterRes.hasNext() )
1321 {
1322 sink.tableRow();
1323 FindBugsReportBean findbugs = (FindBugsReportBean) iterRes.next();
1324 Date date = findbugs.getDateGeneration();
1325
1326 this.sinkCell( sink, normalizeToString( date ) );
1327
1328 this.sinkCell( sink, Integer.toString( findbugs.getNbClasses() ) );
1329 this.sinkCell( sink, Integer.toString( findbugs.getNbBugs() ) );
1330 this.sinkCell( sink, Integer.toString( findbugs.getNbErrors() ) );
1331 this.sinkCell( sink, Integer.toString( findbugs.getNbMissingClasses() ) );
1332
1333 }
1334 sink.table_();
1335 }
1336 else
1337 {
1338 sink.text( "[" + bundle.getString( "dashboard.report.generategraphs.nodata" ) + "]" );
1339 sink.lineBreak();
1340 }
1341 }
1342 else
1343 {
1344 IChartRenderer chart1 =
1345 new TimeChartRenderer( new FindBugsTimeChartStrategy( bundle,
1346 this.mavenProject.getProjectName()
1347 + " : "
1348 + graph.getTitle(),
1349 result, graph.getTimeUnit(),
1350 graph.getStartPeriodDate(),
1351 graph.getEndPeriodDate() ) );
1352 if ( !this.keepVersionAsDiscriminantCriteria )
1353 {
1354 String versionQuery =
1355 "org.codehaus.mojo.dashboard.report.plugin.beans.FindBugsReportBean.getMarkerVersionByDate";
1356 query = this.hibernateService.getSession().getNamedQuery( versionQuery );
1357 query.setParameter( "id", this.dashBoardMavenProjectID );
1358 query.setParameter( "startdate", graph.getStartPeriodDate() );
1359 query.setParameter( "enddate", graph.getEndPeriodDate() );
1360 result = query.list();
1361 chart1 = new MarkerTimeChartDecorator( chart1, result );
1362 }
1363 if ( !chart1.isEmpty() )
1364 {
1365 String filename = this.replaceForbiddenChar( this.mavenProject.getProjectName() );
1366 filename += "_Histo_FindBugs." + chart1.getFileExtension();
1367 String prefix = graph.getId();
1368 filename = prefix.replace( '.', '_' ) + filename;
1369 filename = filename.replace( ' ', '_' );
1370 String filenameWithPath = this.getImagesPath() + "/" + filename;
1371 this.getLog().debug( "createHistoFindBugsGraph = " + filename );
1372 try
1373 {
1374 chart1.saveToFile( filenameWithPath );
1375 String link = "images/" + filename;
1376 link = link.replace( ' ', '_' );
1377 sink.figure();
1378 sink.figureGraphics( link );
1379 sink.figure_();
1380 }
1381 catch ( IOException e )
1382 {
1383 this.getLog().debug( "createHistoFindBugsGraph exception = " + e.getMessage() );
1384 }
1385 }
1386 sink.lineBreak();
1387 }
1388 sink.lineBreak();
1389 }
1390 }
1391 }
1392 sink.lineBreak();
1393 }
1394
1395 public void createTaglistSection( ResourceBundle bundle, Sink sink, TagListReportBean report )
1396 {
1397
1398 sink.section1();
1399
1400 sink.sectionTitle2();
1401 sink.anchor( "taglist" );
1402 sink.anchor_();
1403 sink.link( "dashboard-report.html#taglist" );
1404 sink.text( bundle.getString( "report.taglist.header" ) );
1405 sink.link_();
1406
1407 sink.sectionTitle2_();
1408 this.linkToTopPage( sink );
1409 sink.section1_();
1410 sink.lineBreak();
1411 if ( report == null )
1412 {
1413 sink.text( "Error: Unable to generate Taglist historic graphs." );
1414 }
1415 else
1416 {
1417 Section section = this.configuration.getSectionById( "taglist.summary" );
1418 if ( section == null )
1419 {
1420 sink.text( "Error: Unable to generate Taglist historic graphs." );
1421 }
1422 else
1423 {
1424 List graphs = section.getGraphs();
1425
1426 Iterator iter = graphs.iterator();
1427
1428 while ( iter.hasNext() )
1429 {
1430 Graph graph = (Graph) iter.next();
1431
1432 String namedQuery = "";
1433 if ( this.keepVersionAsDiscriminantCriteria )
1434 {
1435 namedQuery =
1436 "org.codehaus.mojo.dashboard.report.plugin.beans.TagListReportBean.getTagListByPeriodByVersion";
1437 }
1438 else
1439 {
1440 namedQuery =
1441 "org.codehaus.mojo.dashboard.report.plugin.beans.TagListReportBean.getTagListByPeriod";
1442 }
1443
1444 Query query = this.hibernateService.getSession().getNamedQuery( namedQuery );
1445 query.setParameter( "id", this.dashBoardMavenProjectID );
1446 query.setParameter( "startdate", graph.getStartPeriodDate() );
1447 query.setParameter( "enddate", graph.getEndPeriodDate() );
1448 List result = query.list();
1449 if ( !this.generateGraphs )
1450 {
1451 sink.sectionTitle3();
1452 sink.text( this.mavenProject.getProjectName() + " : " + graph.getTitle() );
1453 sink.sectionTitle3_();
1454
1455 if ( result != null && result.size() > 0 )
1456 {
1457 sink.table();
1458 sink.tableRow();
1459 this.sinkHeader( sink, "Date" );
1460 this.sinkHeader( sink, bundle.getString( "report.taglist.label.nbclasses" ) );
1461 this.sinkHeader( sink, bundle.getString( "report.taglist.column.nboccurs" ) );
1462 sink.tableRow_();
1463
1464 Iterator iterRes = result.iterator();
1465 while ( iterRes.hasNext() )
1466 {
1467 sink.tableRow();
1468 TagListReportBean taglistReport = (TagListReportBean) iterRes.next();
1469 Date date = taglistReport.getDateGeneration();
1470
1471 this.sinkCell( sink, normalizeToString( date ) );
1472
1473 this.sinkCell( sink, Integer.toString( taglistReport.getNbClasses() ) );
1474 this.sinkCell( sink, Integer.toString( taglistReport.getNbTotal() ) );
1475 }
1476 sink.table_();
1477 }
1478 else
1479 {
1480 sink.text( "[" + bundle.getString( "dashboard.report.generategraphs.nodata" ) + "]" );
1481 sink.lineBreak();
1482 }
1483 }
1484 else
1485 {
1486 IChartRenderer chart1 =
1487 new TimeChartRenderer( new TaglistTimeChartStrategy( bundle,
1488 this.mavenProject.getProjectName()
1489 + " : "
1490 + graph.getTitle(),
1491 result, graph.getTimeUnit(),
1492 graph.getStartPeriodDate(),
1493 graph.getEndPeriodDate() ) );
1494 if ( !this.keepVersionAsDiscriminantCriteria )
1495 {
1496 String versionQuery =
1497 "org.codehaus.mojo.dashboard.report.plugin.beans.TagListReportBean.getMarkerVersionByDate";
1498 query = this.hibernateService.getSession().getNamedQuery( versionQuery );
1499 query.setParameter( "id", this.dashBoardMavenProjectID );
1500 query.setParameter( "startdate", graph.getStartPeriodDate() );
1501 query.setParameter( "enddate", graph.getEndPeriodDate() );
1502 result = query.list();
1503 chart1 = new MarkerTimeChartDecorator( chart1, result );
1504 }
1505 if ( !chart1.isEmpty() )
1506 {
1507 String filename = this.replaceForbiddenChar( this.mavenProject.getProjectName() );
1508 filename += "_Histo_Taglist." + chart1.getFileExtension();
1509 String prefix = graph.getId();
1510 filename = prefix.replace( '.', '_' ) + filename;
1511 filename = filename.replace( ' ', '_' );
1512 String filenameWithPath = this.getImagesPath() + "/" + filename;
1513 this.getLog().debug( "createHistoTaglistGraph = " + filename );
1514 try
1515 {
1516 chart1.saveToFile( filenameWithPath );
1517 String link = "images/" + filename;
1518 link = link.replace( ' ', '_' );
1519 sink.figure();
1520 sink.figureGraphics( link );
1521 sink.figure_();
1522 }
1523 catch ( IOException e )
1524 {
1525 this.getLog().debug( "createHistoTaglistGraph exception = " + e.getMessage() );
1526 }
1527 }
1528 sink.lineBreak();
1529 }
1530 sink.lineBreak();
1531 }
1532 }
1533 }
1534 sink.lineBreak();
1535 }
1536
1537
1538
1539
1540
1541
1542
1543
1544 public String normalizeToString( Date date )
1545 {
1546 return this.dateFormat.format( date );
1547 }
1548 }