package org.codehaus.mojo.dashboard.report.plugin;
/*
* Copyright 2007 David Vicente
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* under the License.
*/
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.ResourceBundle;
import java.util.Set;
import org.apache.maven.doxia.sink.Sink;
import org.apache.maven.plugin.logging.Log;
import org.hibernate.Query;
import org.codehaus.mojo.dashboard.report.plugin.beans.CheckstyleReportBean;
import org.codehaus.mojo.dashboard.report.plugin.beans.CloverReportBean;
import org.codehaus.mojo.dashboard.report.plugin.beans.CoberturaReportBean;
import org.codehaus.mojo.dashboard.report.plugin.beans.CpdReportBean;
import org.codehaus.mojo.dashboard.report.plugin.beans.DashBoardMavenProject;
import org.codehaus.mojo.dashboard.report.plugin.beans.FindBugsReportBean;
import org.codehaus.mojo.dashboard.report.plugin.beans.IDashBoardReportBean;
import org.codehaus.mojo.dashboard.report.plugin.beans.PmdReportBean;
import org.codehaus.mojo.dashboard.report.plugin.beans.SurefireReportBean;
import org.codehaus.mojo.dashboard.report.plugin.beans.TagListReportBean;
import org.codehaus.mojo.dashboard.report.plugin.chart.IChartRenderer;
import org.codehaus.mojo.dashboard.report.plugin.chart.time.CheckstyleTimeChartStrategy;
import org.codehaus.mojo.dashboard.report.plugin.chart.time.CloverTimeChartStrategy;
import org.codehaus.mojo.dashboard.report.plugin.chart.time.CoberturaTimeChartStrategy;
import org.codehaus.mojo.dashboard.report.plugin.chart.time.CpdTimeChartStrategy;
import org.codehaus.mojo.dashboard.report.plugin.chart.time.FindBugsTimeChartStrategy;
import org.codehaus.mojo.dashboard.report.plugin.chart.time.MarkerTimeChartDecorator;
import org.codehaus.mojo.dashboard.report.plugin.chart.time.PmdTimeChartStrategy;
import org.codehaus.mojo.dashboard.report.plugin.chart.time.SurefirePercentAxisDecorator;
import org.codehaus.mojo.dashboard.report.plugin.chart.time.SurefireTimeChartStrategy;
import org.codehaus.mojo.dashboard.report.plugin.chart.time.TaglistTimeChartStrategy;
import org.codehaus.mojo.dashboard.report.plugin.chart.time.TimeChartRenderer;
import org.codehaus.mojo.dashboard.report.plugin.configuration.Configuration;
import org.codehaus.mojo.dashboard.report.plugin.configuration.Graph;
import org.codehaus.mojo.dashboard.report.plugin.configuration.Section;
import org.codehaus.mojo.dashboard.report.plugin.hibernate.HibernateService;
/**
* @author <a href="dvicente72@gmail.com">David Vicente</a>
*/
public class DashBoardHistoricReportGenerator extends AbstractDashBoardGenerator
{
/**
*
*/
private final DashBoardMavenProject mavenProject;
private final Map map = new Hashtable();
private final HibernateService hibernateService;
private Long dashBoardMavenProjectID;
private final Configuration configuration;
private boolean keepVersionAsDiscriminantCriteria = true;
private boolean generateGraphs = true;
/**
* Date format used to parse or format a date for the period.
*/
private SimpleDateFormat dateFormat = new SimpleDateFormat( "yyyy-MM-dd" );
public DashBoardHistoricReportGenerator( DashBoardMavenProject mavenProject, HibernateService hibernateService,
Configuration configuration, boolean keepVersionAsDiscriminantCriteria,
boolean generateGraphs, Log log )
{
super( log );
this.mavenProject = mavenProject;
this.hibernateService = hibernateService;
this.configuration = configuration;
this.keepVersionAsDiscriminantCriteria = keepVersionAsDiscriminantCriteria;
this.generateGraphs = generateGraphs;
Set reports = mavenProject.getReports();
Iterator iter = reports.iterator();
while ( iter.hasNext() )
{
IDashBoardReportBean report = (IDashBoardReportBean) iter.next();
if ( report != null )
{
this.map.put( report.getClass(), report );
}
}
String queryStr = "";
if ( keepVersionAsDiscriminantCriteria )
{
queryStr =
"org.codehaus.mojo.dashboard.report.plugin.beans.DashBoardMavenProject.getDashBoardMavenProjectID";
}
else
{
queryStr =
"org.codehaus.mojo.dashboard.report.plugin.beans.DashBoardMavenProject.getDashBoardMavenProjectIDWithoutVersion";
}
Query query = hibernateService.getSession().getNamedQuery( queryStr );
query.setParameter( "artifactid", mavenProject.getArtifactId() );
query.setParameter( "groupid", mavenProject.getGroupId() );
if ( keepVersionAsDiscriminantCriteria )
{
query.setParameter( "version", mavenProject.getVersion() );
}
List result = query.list();
if ( result != null && !result.isEmpty() )
{
this.dashBoardMavenProjectID = (Long) ( result.get( 0 ) );
}
}
public void doGenerateReport( ResourceBundle bundle, Sink sink )
{
this.createTitle( bundle, sink );
addDashboardCss(sink);
sink.body();
sink.anchor( "top" );
sink.anchor_();
this.createHeader( bundle, sink );
if ( this.map.get( CoberturaReportBean.class ) != null )
{
this.createCoberturaSection( bundle, sink, (CoberturaReportBean) this.map.get( CoberturaReportBean.class ) );
}
if ( this.map.get( CloverReportBean.class ) != null )
{
this.createCloverSection( bundle, sink, (CloverReportBean) this.map.get( CloverReportBean.class ) );
}
if ( this.map.get( SurefireReportBean.class ) != null )
{
this.createSurefireSection( bundle, sink, (SurefireReportBean) this.map.get( SurefireReportBean.class ) );
}
if ( this.map.get( CheckstyleReportBean.class ) != null )
{
this.createCheckStyleSection( bundle, sink,
(CheckstyleReportBean) this.map.get( CheckstyleReportBean.class ) );
}
if ( this.map.get( PmdReportBean.class ) != null )
{
this.createPmdSection( bundle, sink, (PmdReportBean) this.map.get( PmdReportBean.class ) );
}
if ( this.map.get( CpdReportBean.class ) != null )
{
this.createCpdSection( bundle, sink, (CpdReportBean) this.map.get( CpdReportBean.class ) );
}
if ( this.map.get( FindBugsReportBean.class ) != null )
{
this.createFindBugsSection( bundle, sink, (FindBugsReportBean) this.map.get( FindBugsReportBean.class ) );
}
if ( this.map.get( TagListReportBean.class ) != null )
{
this.createTaglistSection( bundle, sink, (TagListReportBean) this.map.get( TagListReportBean.class ) );
}
sink.body_();
sink.flush();
sink.close();
}
public void createTitle( ResourceBundle bundle, Sink sink )
{
sink.head();
sink.title();
sink.text( bundle.getString( "dashboard.report.name" ) );
sink.title_();
sink.head_();
}
public void createHeader( ResourceBundle bundle, Sink sink )
{
sink.section1();
sink.sectionTitle1();
sink.text( bundle.getString( "dashboard.report.name" ) );
sink.sectionTitle1_();
sink.text( "Date Generated: " + new SimpleDateFormat().format( new Date( System.currentTimeMillis() ) ) );
sink.horizontalRule();
sink.sectionTitle3();
sink.text( "[" );
sink.link( "dashboard-report.html" );
sink.text( "Summary Dashboard" );
sink.link_();
sink.text( "]" );
sink.sectionTitle3_();
sink.horizontalRule();
if ( this.map.get( CoberturaReportBean.class ) != null )
{
sink.text( "[" );
sink.link( "#cobertura" );
sink.text( bundle.getString( "report.cobertura.header" ) );
sink.link_();
sink.text( "]" );
sink.lineBreak();
}
if ( this.map.get( CloverReportBean.class ) != null )
{
sink.text( "[" );
sink.link( "#clover" );
sink.text( bundle.getString( "report.clover.header" ) );
sink.link_();
sink.text( "]" );
sink.lineBreak();
}
if ( this.map.get( SurefireReportBean.class ) != null )
{
sink.text( "[" );
sink.link( "#surefire" );
sink.text( bundle.getString( "report.surefire.header" ) );
sink.link_();
sink.text( "]" );
sink.lineBreak();
}
if ( this.map.get( CheckstyleReportBean.class ) != null )
{
sink.text( "[" );
sink.link( "#checkstyle" );
sink.text( bundle.getString( "report.checkstyle.header" ) );
sink.link_();
sink.text( "]" );
sink.lineBreak();
}
if ( this.map.get( PmdReportBean.class ) != null )
{
sink.text( "[" );
sink.link( "#pmd" );
sink.text( bundle.getString( "report.pmd.header" ) );
sink.link_();
sink.text( "]" );
sink.lineBreak();
}
if ( this.map.get( CpdReportBean.class ) != null )
{
sink.text( "[" );
sink.link( "#cpd" );
sink.text( bundle.getString( "report.cpd.header" ) );
sink.link_();
sink.text( "]" );
sink.lineBreak();
}
if ( this.map.get( FindBugsReportBean.class ) != null )
{
sink.text( "[" );
sink.link( "#findbugs" );
sink.text( bundle.getString( "report.findbugs.header" ) );
sink.link_();
sink.text( "]" );
sink.lineBreak();
}
if ( this.map.get( TagListReportBean.class ) != null )
{
sink.text( "[" );
sink.link( "#taglist" );
sink.text( bundle.getString( "report.taglist.header" ) );
sink.link_();
sink.text( "]" );
sink.lineBreak();
}
/*
* if ( map.get( JDependReportBean.class ) != null ) { sink.text( "[" ); sink.link( "#jdepend" ); sink.text(
* bundle.getString( "report.xrefpackage.header" ) ); sink.link_(); sink.text( "]" ); sink.lineBreak(); }
*/
sink.horizontalRule();
sink.lineBreak();
if ( !this.generateGraphs )
{
sink.text( "[" + bundle.getString( "dashboard.report.generategraphs.disabled" ) + "]" );
sink.lineBreak();
}
sink.section1_();
}
public void createSurefireSection( ResourceBundle bundle, Sink sink, SurefireReportBean report )
{
sink.section1();
sink.sectionTitle2();
sink.anchor( "surefire" );
sink.anchor_();
sink.link( "dashboard-report.html#surefire" );
sink.text( bundle.getString( "report.surefire.header" ) );
sink.link_();
sink.sectionTitle2_();
this.linkToTopPage( sink );
sink.section1_();
sink.lineBreak();
if ( report == null )
{
sink.text( "Error: Unable to generate Surefire historic graphs." );
}
else
{
Section section = this.configuration.getSectionById( "surefire.summary" );
if ( section == null )
{
sink.text( "Error: Unable to generate Surefire historic graphs." );
}
else
{
List graphs = section.getGraphs();
Iterator iter = graphs.iterator();
while ( iter.hasNext() )
{
Graph graph = (Graph) iter.next();
String namedQuery = "";
if ( this.keepVersionAsDiscriminantCriteria )
{
namedQuery =
"org.codehaus.mojo.dashboard.report.plugin.beans.SurefireReportBean.getSurefireByPeriodByVersion";
}
else
{
namedQuery =
"org.codehaus.mojo.dashboard.report.plugin.beans.SurefireReportBean.getSurefireByPeriod";
}
Query query = this.hibernateService.getSession().getNamedQuery( namedQuery );
query.setParameter( "id", this.dashBoardMavenProjectID );
query.setParameter( "startdate", graph.getStartPeriodDate() );
query.setParameter( "enddate", graph.getEndPeriodDate() );
List result = query.list();
if ( !this.generateGraphs )
{
sink.sectionTitle3();
sink.text( this.mavenProject.getProjectName() + " : " + graph.getTitle() );
sink.sectionTitle3_();
if ( result != null && result.size() > 0 )
{
sink.table();
sink.tableRow();
sink.tableHeaderCell();
sink.text( "Date" );
sink.tableHeaderCell_();
sink.tableHeaderCell();
sink.text( bundle.getString( "report.surefire.label.successrate" ) );
sink.tableHeaderCell_();
sink.tableHeaderCell();
sink.text( bundle.getString( "report.surefire.label.tests" ) );
sink.tableHeaderCell_();
sink.tableHeaderCell();
sink.text( bundle.getString( "report.surefire.label.errors" ) );
sink.tableHeaderCell_();
sink.tableHeaderCell();
sink.text( bundle.getString( "report.surefire.label.failures" ) );
sink.tableHeaderCell_();
sink.tableHeaderCell();
sink.text( bundle.getString( "report.surefire.label.skipped" ) );
sink.tableHeaderCell_();
sink.tableRow_();
Iterator iterRes = result.iterator();
while ( iterRes.hasNext() )
{
sink.tableRow();
SurefireReportBean reportH = (SurefireReportBean) iterRes.next();
Date date = reportH.getDateGeneration();
this.sinkCell( sink, normalizeToString( date ) );
this.sinkCellPercentGraphic( sink, reportH.getSucessRate() / 100, "surefire" );
this.sinkCell( sink, Integer.toString( reportH.getNbTests() ) );
this.sinkCell( sink, Integer.toString( reportH.getNbErrors() ) );
this.sinkCell( sink, Integer.toString( reportH.getNbFailures() ) );
this.sinkCell( sink, Integer.toString( reportH.getNbSkipped() ) );
}
sink.table_();
}
else
{
sink.text( "[" + bundle.getString( "dashboard.report.generategraphs.nodata" ) + "]" );
sink.lineBreak();
}
}
else
{
IChartRenderer chart1 =
new TimeChartRenderer( new SurefireTimeChartStrategy( bundle,
this.mavenProject.getProjectName()
+ " : "
+ graph.getTitle(),
result, graph.getTimeUnit(),
graph.getStartPeriodDate(),
graph.getEndPeriodDate() ) );
chart1 = new SurefirePercentAxisDecorator( chart1, result );
if ( !this.keepVersionAsDiscriminantCriteria )
{
String versionQuery =
"org.codehaus.mojo.dashboard.report.plugin.beans.SurefireReportBean.getMarkerVersionByDate";
query = this.hibernateService.getSession().getNamedQuery( versionQuery );
query.setParameter( "id", this.dashBoardMavenProjectID );
query.setParameter( "startdate", graph.getStartPeriodDate() );
query.setParameter( "enddate", graph.getEndPeriodDate() );
result = query.list();
chart1 = new MarkerTimeChartDecorator( chart1, result );
}
if ( !chart1.isEmpty() )
{
String filename = this.replaceForbiddenChar( this.mavenProject.getProjectName() );
filename += "_Histo_Surefire." + chart1.getFileExtension();
String prefix = graph.getId();
filename = prefix.replace( '.', '_' ) + filename;
filename = filename.replace( ' ', '_' );
String filenameWithPath = this.getImagesPath() + "/" + filename;
this.getLog().debug( "createHistoSurefireGraph = " + filename );
try
{
chart1.saveToFile( filenameWithPath );
String link = "images/" + filename;
link = link.replace( ' ', '_' );
sink.figure();
sink.figureGraphics( link );
sink.figure_();
}
catch ( IOException e )
{
this.getLog().debug( "createHistoSurefireGraph exception = " + e.getMessage() );
}
}
sink.lineBreak();
}
sink.lineBreak();
}
}
}
}
/**
* Fixes MOJO-813. addition of Clover support. written by <a href="mailto:mbeerman@yahoo.com">Matthew Beermann</a>
*
* @param bundle
* @param sink
*/
public void createCloverSection( ResourceBundle bundle, Sink sink, CloverReportBean report )
{
sink.section1();
sink.sectionTitle2();
sink.anchor( "clover" );
sink.anchor_();
sink.link( "dashboard-report.html#clover" );
sink.text( bundle.getString( "report.clover.header" ) );
sink.link_();
sink.sectionTitle2_();
this.linkToTopPage( sink );
sink.section1_();
sink.lineBreak();
if ( report == null )
{
sink.text( "Error: Unable to generate Clover historic graphs." );
}
else
{
Section section = this.configuration.getSectionById( "clover.summary" );
if ( section == null )
{
sink.text( "Error: Unable to generate Clover historic graphs." );
}
else
{
List graphs = section.getGraphs();
Iterator iter = graphs.iterator();
while ( iter.hasNext() )
{
Graph graph = (Graph) iter.next();
String namedQuery = "";
if ( this.keepVersionAsDiscriminantCriteria )
{
namedQuery =
"org.codehaus.mojo.dashboard.report.plugin.beans.CloverReportBean.getCloverByPeriodByVersion";
}
else
{
namedQuery =
"org.codehaus.mojo.dashboard.report.plugin.beans.CloverReportBean.getCloverByPeriod";
}
Query query = this.hibernateService.getSession().getNamedQuery( namedQuery );
query.setParameter( "id", this.dashBoardMavenProjectID );
query.setParameter( "startdate", graph.getStartPeriodDate() );
query.setParameter( "enddate", graph.getEndPeriodDate() );
List result = query.list();
if ( !this.generateGraphs )
{
sink.sectionTitle3();
sink.text( this.mavenProject.getProjectName() + " : " + graph.getTitle() );
sink.sectionTitle3_();
if ( result != null && result.size() > 0 )
{
sink.table();
sink.tableRow();
sink.tableHeaderCell();
sink.text( "Date" );
sink.tableHeaderCell_();
sink.tableHeaderCell();
sink.text( bundle.getString( "report.clover.label.total" ) );
sink.tableHeaderCell_();
sink.tableHeaderCell();
sink.text( bundle.getString( "report.clover.label.conditionals" ) );
sink.tableHeaderCell_();
sink.tableHeaderCell();
sink.text( bundle.getString( "report.clover.label.statements" ) );
sink.tableHeaderCell_();
sink.tableHeaderCell();
sink.text( bundle.getString( "report.clover.label.methods" ) );
sink.tableHeaderCell_();
sink.tableRow_();
Iterator iterRes = result.iterator();
while ( iterRes.hasNext() )
{
sink.tableRow();
CloverReportBean clover = (CloverReportBean) iterRes.next();
Date date = clover.getDateGeneration();
this.sinkCell( sink, normalizeToString( date ) );
this.sinkCellPercentGraphic( sink, clover.getPercentCoveredElements(), "clover" );
this.sinkCell( sink, getPercentValue( clover.getPercentCoveredConditionals() ) );
this.sinkCell( sink, getPercentValue( clover.getPercentCoveredStatements() ) );
this.sinkCell( sink, getPercentValue( clover.getPercentCoveredMethods() ) );
}
sink.table_();
}
else
{
sink.text( "[" + bundle.getString( "dashboard.report.generategraphs.nodata" ) + "]" );
sink.lineBreak();
}
}
else
{
IChartRenderer chart1 =
new TimeChartRenderer( new CloverTimeChartStrategy( bundle,
this.mavenProject.getProjectName()
+ " : "
+ graph.getTitle(),
result, graph.getTimeUnit(),
graph.getStartPeriodDate(),
graph.getEndPeriodDate() ) );
if ( !this.keepVersionAsDiscriminantCriteria )
{
String versionQuery =
"org.codehaus.mojo.dashboard.report.plugin.beans.CloverReportBean.getMarkerVersionByDate";
query = this.hibernateService.getSession().getNamedQuery( versionQuery );
query.setParameter( "id", this.dashBoardMavenProjectID );
query.setParameter( "startdate", graph.getStartPeriodDate() );
query.setParameter( "enddate", graph.getEndPeriodDate() );
result = query.list();
chart1 = new MarkerTimeChartDecorator( chart1, result );
}
if ( !chart1.isEmpty() )
{
String filename = this.replaceForbiddenChar( this.mavenProject.getProjectName() );
filename += "_Histo_Clover." + chart1.getFileExtension();
String prefix = graph.getId();
filename = prefix.replace( '.', '_' ) + filename;
filename = filename.replace( ' ', '_' );
String filenameWithPath = this.getImagesPath() + "/" + filename;
this.getLog().debug( "createHistoCloverGraph = " + filename );
try
{
chart1.saveToFile( filenameWithPath );
String link = "images/" + filename;
link = link.replace( ' ', '_' );
sink.figure();
sink.figureGraphics( link );
sink.figure_();
}
catch ( IOException e )
{
this.getLog().debug( "createHistoCloverGraph exception = " + e.getMessage() );
}
}
sink.lineBreak();
}
}
sink.lineBreak();
}
}
sink.lineBreak();
}
public void createCoberturaSection( ResourceBundle bundle, Sink sink, CoberturaReportBean report )
{
sink.section1();
sink.sectionTitle2();
sink.anchor( "cobertura" );
sink.anchor_();
sink.link( "dashboard-report.html#cobertura" );
sink.text( bundle.getString( "report.cobertura.header" ) );
sink.link_();
sink.sectionTitle2_();
this.linkToTopPage( sink );
sink.section1_();
sink.lineBreak();
if ( report == null )
{
sink.text( "Error: Unable to generate Cobertura historic graphs." );
}
else
{
Section section = this.configuration.getSectionById( "cobertura.summary" );
if ( section == null )
{
sink.text( "Error: Unable to generate Cobertura historic graphs." );
}
else
{
List graphs = section.getGraphs();
Iterator iter = graphs.iterator();
while ( iter.hasNext() )
{
Graph graph = (Graph) iter.next();
String namedQuery = "";
if ( this.keepVersionAsDiscriminantCriteria )
{
namedQuery =
"org.codehaus.mojo.dashboard.report.plugin.beans.CoberturaReportBean.getCoberturaByPeriodByVersion";
}
else
{
namedQuery =
"org.codehaus.mojo.dashboard.report.plugin.beans.CoberturaReportBean.getCoberturaByPeriod";
}
Query query = this.hibernateService.getSession().getNamedQuery( namedQuery );
query.setParameter( "id", this.dashBoardMavenProjectID );
query.setParameter( "startdate", graph.getStartPeriodDate() );
query.setParameter( "enddate", graph.getEndPeriodDate() );
List result = query.list();
if ( !this.generateGraphs )
{
sink.sectionTitle3();
sink.text( this.mavenProject.getProjectName() + " : " + graph.getTitle() );
sink.sectionTitle3_();
if ( result != null && result.size() > 0 )
{
sink.table();
sink.tableRow();
sinkHeader( sink, "Date" );
sinkHeader( sink, bundle.getString( "report.cobertura.label.nbclasses" ) );
sinkHeader( sink, bundle.getString( "report.cobertura.label.linecover" ) );
sinkHeader( sink, bundle.getString( "report.cobertura.label.branchcover" ) );
sink.tableRow_();
Iterator iterRes = result.iterator();
while ( iterRes.hasNext() )
{
CoberturaReportBean cober = (CoberturaReportBean) iterRes.next();
Date date = cober.getDateGeneration();
sink.tableRow();
this.sinkCell( sink, normalizeToString( date ) );
this.sinkCell( sink, Integer.toString( cober.getNbClasses() ) );
sinkCellPercentGraphic( sink, cober.getLineCoverRate(), "cobertura" );
sinkCellPercentGraphic( sink, cober.getBranchCoverRate(), "cobertura" );
sink.tableRow_();
}
sink.table_();
}
else
{
sink.text( "[" + bundle.getString( "dashboard.report.generategraphs.nodata" ) + "]" );
sink.lineBreak();
}
}
else
{
IChartRenderer chart1 =
new TimeChartRenderer( new CoberturaTimeChartStrategy( bundle,
this.mavenProject.getProjectName()
+ " : "
+ graph.getTitle(),
result, graph.getTimeUnit(),
graph.getStartPeriodDate(),
graph.getEndPeriodDate() ) );
if ( !this.keepVersionAsDiscriminantCriteria )
{
String versionQuery =
"org.codehaus.mojo.dashboard.report.plugin.beans.CoberturaReportBean.getMarkerVersionByDate";
query = this.hibernateService.getSession().getNamedQuery( versionQuery );
query.setParameter( "id", this.dashBoardMavenProjectID );
query.setParameter( "startdate", graph.getStartPeriodDate() );
query.setParameter( "enddate", graph.getEndPeriodDate() );
result = query.list();
chart1 = new MarkerTimeChartDecorator( chart1, result );
}
if ( !chart1.isEmpty() )
{
String filename = this.replaceForbiddenChar( this.mavenProject.getProjectName() );
filename += "_Histo_Cobertura." + chart1.getFileExtension();
String prefix = graph.getId();
filename = prefix.replace( '.', '_' ) + filename;
filename = filename.replace( ' ', '_' );
String filenameWithPath = this.getImagesPath() + "/" + filename;
this.getLog().debug( "createHistoCoberturaGraph = " + filename );
try
{
chart1.saveToFile( filenameWithPath );
String link = "images/" + filename;
link = link.replace( ' ', '_' );
sink.figure();
sink.figureGraphics( link );
sink.figure_();
}
catch ( IOException e )
{
this.getLog().debug( "createHistoCoberturaGraph exception = " + e.getMessage() );
}
}
sink.lineBreak();
}
sink.lineBreak();
}
}
}
sink.lineBreak();
}
public void createPmdSection( ResourceBundle bundle, Sink sink, PmdReportBean report )
{
sink.section1();
sink.sectionTitle2();
sink.anchor( "pmd" );
sink.anchor_();
sink.link( "dashboard-report.html#pmd" );
sink.text( bundle.getString( "report.pmd.header" ) );
sink.link_();
sink.sectionTitle2_();
this.linkToTopPage( sink );
sink.section1_();
sink.lineBreak();
if ( report == null )
{
sink.text( "Error: Unable to generate PMD historic graphs." );
}
else
{
Section section = this.configuration.getSectionById( "pmd.summary" );
if ( section == null )
{
sink.text( "Error: Unable to generate PMD historic graphs." );
}
else
{
List graphs = section.getGraphs();
Iterator iter = graphs.iterator();
while ( iter.hasNext() )
{
Graph graph = (Graph) iter.next();
String namedQuery = "";
if ( this.keepVersionAsDiscriminantCriteria )
{
namedQuery =
"org.codehaus.mojo.dashboard.report.plugin.beans.PmdReportBean.getPmdByPeriodByVersion";
}
else
{
namedQuery = "org.codehaus.mojo.dashboard.report.plugin.beans.PmdReportBean.getPmdByPeriod";
}
Query query = this.hibernateService.getSession().getNamedQuery( namedQuery );
query.setParameter( "id", this.dashBoardMavenProjectID );
query.setParameter( "startdate", graph.getStartPeriodDate() );
query.setParameter( "enddate", graph.getEndPeriodDate() );
List result = query.list();
if ( !this.generateGraphs )
{
sink.sectionTitle3();
sink.text( this.mavenProject.getProjectName() + " : " + graph.getTitle() );
sink.sectionTitle3_();
if ( result != null && result.size() > 0 )
{
sink.table();
sink.tableRow();
sink.tableHeaderCell();
sink.text( "Date" );
sink.tableHeaderCell_();
this.sinkHeader( sink, bundle.getString( "report.pmd.label.nbclasses" ) );
this.sinkHeader( sink, bundle.getString( "report.pmd.label.nbviolations" ) );
sink.tableRow_();
Iterator iterRes = result.iterator();
while ( iterRes.hasNext() )
{
sink.tableRow();
PmdReportBean pmd = (PmdReportBean) iterRes.next();
Date date = pmd.getDateGeneration();
this.sinkCell( sink, normalizeToString( date ) );
this.sinkCell( sink, Integer.toString( pmd.getNbClasses() ) );
this.sinkCell( sink, Integer.toString( pmd.getNbViolations() ) );
}
sink.table_();
}
else
{
sink.text( "[" + bundle.getString( "dashboard.report.generategraphs.nodata" ) + "]" );
sink.lineBreak();
}
}
else
{
IChartRenderer chart1 =
new TimeChartRenderer( new PmdTimeChartStrategy( bundle, this.mavenProject.getProjectName()
+ " : " + graph.getTitle(), result, graph.getTimeUnit(),
graph.getStartPeriodDate(),
graph.getEndPeriodDate() ) );
if ( !this.keepVersionAsDiscriminantCriteria )
{
String versionQuery =
"org.codehaus.mojo.dashboard.report.plugin.beans.PmdReportBean.getMarkerVersionByDate";
query = this.hibernateService.getSession().getNamedQuery( versionQuery );
query.setParameter( "id", this.dashBoardMavenProjectID );
query.setParameter( "startdate", graph.getStartPeriodDate() );
query.setParameter( "enddate", graph.getEndPeriodDate() );
result = query.list();
chart1 = new MarkerTimeChartDecorator( chart1, result );
}
if ( !chart1.isEmpty() )
{
String filename = this.replaceForbiddenChar( this.mavenProject.getProjectName() );
filename += "_Histo_Pmd." + chart1.getFileExtension();
String prefix = graph.getId();
filename = prefix.replace( '.', '_' ) + filename;
filename = filename.replace( ' ', '_' );
String filenameWithPath = this.getImagesPath() + "/" + filename;
this.getLog().debug( "createHistoPmdGraph = " + filename );
try
{
chart1.saveToFile( filenameWithPath );
String link = "images/" + filename;
link = link.replace( ' ', '_' );
sink.figure();
sink.figureGraphics( link );
sink.figure_();
}
catch ( IOException e )
{
this.getLog().debug( "createHistoPmdGraph exception = " + e.getMessage() );
}
}
sink.lineBreak();
}
sink.lineBreak();
}
}
}
sink.lineBreak();
}
public void createCpdSection( ResourceBundle bundle, Sink sink, CpdReportBean report )
{
sink.section1();
sink.sectionTitle2();
sink.anchor( "cpd" );
sink.anchor_();
sink.link( "dashboard-report.html#cpd" );
sink.text( bundle.getString( "report.cpd.header" ) );
sink.link_();
sink.sectionTitle2_();
this.linkToTopPage( sink );
sink.section1_();
sink.lineBreak();
if ( report == null )
{
sink.text( "Error: Unable to generate CPD historic graphs." );
}
else
{
Section section = this.configuration.getSectionById( "cpd.summary" );
if ( section == null )
{
sink.text( "Error: Unable to generate CPD historic graphs." );
}
else
{
List graphs = section.getGraphs();
Iterator iter = graphs.iterator();
while ( iter.hasNext() )
{
Graph graph = (Graph) iter.next();
String namedQuery = "";
if ( this.keepVersionAsDiscriminantCriteria )
{
namedQuery =
"org.codehaus.mojo.dashboard.report.plugin.beans.CpdReportBean.getCpdByPeriodByVersion";
}
else
{
namedQuery = "org.codehaus.mojo.dashboard.report.plugin.beans.CpdReportBean.getCpdByPeriod";
}
Query query = this.hibernateService.getSession().getNamedQuery( namedQuery );
query.setParameter( "id", this.dashBoardMavenProjectID );
query.setParameter( "startdate", graph.getStartPeriodDate() );
query.setParameter( "enddate", graph.getEndPeriodDate() );
List result = query.list();
if ( !this.generateGraphs )
{
sink.sectionTitle3();
sink.text( this.mavenProject.getProjectName() + " : " + graph.getTitle() );
sink.sectionTitle3_();
if ( result != null && result.size() > 0 )
{
sink.table();
sink.tableRow();
sink.tableHeaderCell();
sink.text( "Date" );
sink.tableHeaderCell_();
this.sinkHeader( sink, bundle.getString( "report.cpd.label.nbclasses" ) );
this.sinkHeader( sink, bundle.getString( "report.cpd.label.nbduplicate" ) );
sink.tableRow_();
Iterator iterRes = result.iterator();
while ( iterRes.hasNext() )
{
sink.tableRow();
CpdReportBean cpd = (CpdReportBean) iterRes.next();
Date date = cpd.getDateGeneration();
this.sinkCell( sink, normalizeToString( date ) );
this.sinkCell( sink, Integer.toString( cpd.getNbClasses() ) );
this.sinkCell( sink, Integer.toString( cpd.getNbDuplicate() ) );
}
sink.table_();
}
else
{
sink.text( "[" + bundle.getString( "dashboard.report.generategraphs.nodata" ) + "]" );
sink.lineBreak();
}
}
else
{
IChartRenderer chart1 =
new TimeChartRenderer( new CpdTimeChartStrategy( bundle, this.mavenProject.getProjectName()
+ " : " + graph.getTitle(), result, graph.getTimeUnit(),
graph.getStartPeriodDate(),
graph.getEndPeriodDate() ) );
if ( !this.keepVersionAsDiscriminantCriteria )
{
String versionQuery =
"org.codehaus.mojo.dashboard.report.plugin.beans.CpdReportBean.getMarkerVersionByDate";
query = this.hibernateService.getSession().getNamedQuery( versionQuery );
query.setParameter( "id", this.dashBoardMavenProjectID );
query.setParameter( "startdate", graph.getStartPeriodDate() );
query.setParameter( "enddate", graph.getEndPeriodDate() );
result = query.list();
chart1 = new MarkerTimeChartDecorator( chart1, result );
}
if ( !chart1.isEmpty() )
{
String filename = this.replaceForbiddenChar( this.mavenProject.getProjectName() );
filename += "_Histo_Cpd." + chart1.getFileExtension();
String prefix = graph.getId();
filename = prefix.replace( '.', '_' ) + filename;
filename = filename.replace( ' ', '_' );
String filenameWithPath = this.getImagesPath() + "/" + filename;
this.getLog().debug( "createHistoCpdGraph = " + filename );
try
{
chart1.saveToFile( filenameWithPath );
String link = "images/" + filename;
link = link.replace( ' ', '_' );
sink.figure();
sink.figureGraphics( link );
sink.figure_();
}
catch ( IOException e )
{
this.getLog().debug( "createHistoCpdGraph exception = " + e.getMessage() );
}
}
sink.lineBreak();
}
sink.lineBreak();
}
}
}
sink.lineBreak();
}
public void createCheckStyleSection( ResourceBundle bundle, Sink sink, CheckstyleReportBean report )
{
sink.section1();
sink.sectionTitle2();
sink.anchor( "checkstyle" );
sink.anchor_();
sink.link( "dashboard-report.html#checkstyle" );
sink.text( bundle.getString( "report.checkstyle.header" ) );
sink.link_();
sink.sectionTitle2_();
this.linkToTopPage( sink );
sink.section1_();
if ( report == null )
{
sink.text( "Error: Unable to generate Checkstyle historic graphs." );
}
else
{
Section section = this.configuration.getSectionById( "checkstyle.summary" );
if ( section == null )
{
sink.text( "Error: Unable to generate Checkstyle historic graphs." );
}
else
{
List graphs = section.getGraphs();
Iterator iter = graphs.iterator();
while ( iter.hasNext() )
{
Graph graph = (Graph) iter.next();
String namedQuery = "";
if ( this.keepVersionAsDiscriminantCriteria )
{
namedQuery =
"org.codehaus.mojo.dashboard.report.plugin.beans.CheckstyleReportBean.getCheckstyleByPeriodByVersion";
}
else
{
namedQuery =
"org.codehaus.mojo.dashboard.report.plugin.beans.CheckstyleReportBean.getCheckstyleByPeriod";
}
Query query = this.hibernateService.getSession().getNamedQuery( namedQuery );
query.setParameter( "id", this.dashBoardMavenProjectID );
query.setParameter( "startdate", graph.getStartPeriodDate() );
query.setParameter( "enddate", graph.getEndPeriodDate() );
List result = query.list();
if ( !this.generateGraphs )
{
sink.sectionTitle3();
sink.text( this.mavenProject.getProjectName() + " : " + graph.getTitle() );
sink.sectionTitle3_();
if ( result != null && result.size() > 0 )
{
sink.table();
sink.tableRow();
sink.tableHeaderCell();
sink.text( "Date" );
sink.tableHeaderCell_();
sink.tableHeaderCell();
sink.text( bundle.getString( "report.checkstyle.files" ) );
sink.tableHeaderCell_();
sink.tableHeaderCell();
sink.text( bundle.getString( "report.checkstyle.column.total" ) );
sink.tableHeaderCell_();
sink.tableHeaderCell();
sink.text( bundle.getString( "report.checkstyle.column.infos" ) );
sink.nonBreakingSpace();
this.iconInfo( sink );
sink.tableHeaderCell_();
sink.tableHeaderCell();
sink.text( bundle.getString( "report.checkstyle.column.warnings" ) );
sink.nonBreakingSpace();
this.iconWarning( sink );
sink.tableHeaderCell_();
sink.tableHeaderCell();
sink.text( bundle.getString( "report.checkstyle.column.errors" ) );
sink.nonBreakingSpace();
this.iconError( sink );
sink.tableHeaderCell_();
sink.tableRow_();
Iterator iterRes = result.iterator();
while ( iterRes.hasNext() )
{
sink.tableRow();
CheckstyleReportBean check = (CheckstyleReportBean) iterRes.next();
Date date = check.getDateGeneration();
this.sinkCell( sink, normalizeToString( date ) );
this.sinkCell( sink, Integer.toString( check.getNbClasses() ) );
this.sinkCell( sink, Integer.toString( check.getNbTotal() ) );
sink.tableCell();
sink.text( Integer.toString( check.getNbInfos() ) );
sinkInvertPercentGraphic( sink, check.getPercentInfos() );
sink.tableCell_();
sink.tableCell();
sink.text( Integer.toString( check.getNbWarnings() ) );
sinkInvertPercentGraphic( sink, check.getPercentWarnings() );
sink.tableCell_();
sink.tableCell();
sink.text( Integer.toString( check.getNbErrors() ) );
sinkInvertPercentGraphic( sink, check.getPercentErrors() );
sink.tableCell_();
}
sink.table_();
}
else
{
sink.text( "[" + bundle.getString( "dashboard.report.generategraphs.nodata" ) + "]" );
sink.lineBreak();
}
}
else
{
IChartRenderer chart1 =
new TimeChartRenderer( new CheckstyleTimeChartStrategy( bundle,
this.mavenProject.getProjectName()
+ " : "
+ graph.getTitle(),
result, graph.getTimeUnit(),
graph.getStartPeriodDate(),
graph.getEndPeriodDate() ) );
if ( !this.keepVersionAsDiscriminantCriteria )
{
String versionQuery =
"org.codehaus.mojo.dashboard.report.plugin.beans.CheckstyleReportBean.getMarkerVersionByDate";
query = this.hibernateService.getSession().getNamedQuery( versionQuery );
query.setParameter( "id", this.dashBoardMavenProjectID );
query.setParameter( "startdate", graph.getStartPeriodDate() );
query.setParameter( "enddate", graph.getEndPeriodDate() );
result = query.list();
chart1 = new MarkerTimeChartDecorator( chart1, result );
}
if ( !chart1.isEmpty() )
{
String filename = this.replaceForbiddenChar( this.mavenProject.getProjectName() );
filename += "_Histo_Checkstyle." + chart1.getFileExtension();
String prefix = graph.getId();
filename = prefix.replace( '.', '_' ) + filename;
filename = filename.replace( ' ', '_' );
String filenameWithPath = this.getImagesPath() + "/" + filename;
this.getLog().debug( "createHistoCheckstyleGraph = " + filename );
try
{
chart1.saveToFile( filenameWithPath );
String link = "images/" + filename;
link = link.replace( ' ', '_' );
sink.figure();
sink.figureGraphics( link );
sink.figure_();
}
catch ( IOException e )
{
this.getLog().debug( "createHistoCheckstyleGraph exception = " + e.getMessage() );
}
}
sink.lineBreak();
}
sink.lineBreak();
}
}
}
sink.lineBreak();
}
public void createFindBugsSection( ResourceBundle bundle, Sink sink, FindBugsReportBean report )
{
sink.section1();
sink.sectionTitle2();
sink.anchor( "findbugs" );
sink.anchor_();
sink.link( "dashboard-report.html#findbugs" );
sink.text( bundle.getString( "report.findbugs.header" ) );
sink.link_();
sink.sectionTitle2_();
this.linkToTopPage( sink );
sink.section1_();
sink.lineBreak();
Section section = this.configuration.getSectionById( "findbugs.summary" );
if ( report == null )
{
sink.text( "Error: Unable to generate FindBugs historic graphs." );
}
else
{
if ( section == null )
{
sink.text( "Error: Unable to generate FindBugs historic graphs." );
}
else
{
List graphs = section.getGraphs();
Iterator iter = graphs.iterator();
while ( iter.hasNext() )
{
Graph graph = (Graph) iter.next();
String namedQuery = "";
if ( this.keepVersionAsDiscriminantCriteria )
{
namedQuery =
"org.codehaus.mojo.dashboard.report.plugin.beans.FindBugsReportBean.getFindBugsByPeriodByVersion";
}
else
{
namedQuery =
"org.codehaus.mojo.dashboard.report.plugin.beans.FindBugsReportBean.getFindBugsByPeriod";
}
Query query = this.hibernateService.getSession().getNamedQuery( namedQuery );
query.setParameter( "id", this.dashBoardMavenProjectID );
query.setParameter( "startdate", graph.getStartPeriodDate() );
query.setParameter( "enddate", graph.getEndPeriodDate() );
List result = query.list();
if ( !this.generateGraphs )
{
sink.sectionTitle3();
sink.text( this.mavenProject.getProjectName() + " : " + graph.getTitle() );
sink.sectionTitle3_();
if ( result != null && result.size() > 0 )
{
sink.table();
sink.tableRow();
this.sinkHeader( sink, "Date" );
this.sinkHeader( sink, bundle.getString( "report.findbugs.label.nbclasses" ) );
this.sinkHeader( sink, bundle.getString( "report.findbugs.label.nbbugs" ) );
this.sinkHeader( sink, bundle.getString( "report.findbugs.label.nberrors" ) );
this.sinkHeader( sink, bundle.getString( "report.findbugs.label.nbMissingClasses" ) );
sink.tableRow_();
Iterator iterRes = result.iterator();
while ( iterRes.hasNext() )
{
sink.tableRow();
FindBugsReportBean findbugs = (FindBugsReportBean) iterRes.next();
Date date = findbugs.getDateGeneration();
this.sinkCell( sink, normalizeToString( date ) );
this.sinkCell( sink, Integer.toString( findbugs.getNbClasses() ) );
this.sinkCell( sink, Integer.toString( findbugs.getNbBugs() ) );
this.sinkCell( sink, Integer.toString( findbugs.getNbErrors() ) );
this.sinkCell( sink, Integer.toString( findbugs.getNbMissingClasses() ) );
}
sink.table_();
}
else
{
sink.text( "[" + bundle.getString( "dashboard.report.generategraphs.nodata" ) + "]" );
sink.lineBreak();
}
}
else
{
IChartRenderer chart1 =
new TimeChartRenderer( new FindBugsTimeChartStrategy( bundle,
this.mavenProject.getProjectName()
+ " : "
+ graph.getTitle(),
result, graph.getTimeUnit(),
graph.getStartPeriodDate(),
graph.getEndPeriodDate() ) );
if ( !this.keepVersionAsDiscriminantCriteria )
{
String versionQuery =
"org.codehaus.mojo.dashboard.report.plugin.beans.FindBugsReportBean.getMarkerVersionByDate";
query = this.hibernateService.getSession().getNamedQuery( versionQuery );
query.setParameter( "id", this.dashBoardMavenProjectID );
query.setParameter( "startdate", graph.getStartPeriodDate() );
query.setParameter( "enddate", graph.getEndPeriodDate() );
result = query.list();
chart1 = new MarkerTimeChartDecorator( chart1, result );
}
if ( !chart1.isEmpty() )
{
String filename = this.replaceForbiddenChar( this.mavenProject.getProjectName() );
filename += "_Histo_FindBugs." + chart1.getFileExtension();
String prefix = graph.getId();
filename = prefix.replace( '.', '_' ) + filename;
filename = filename.replace( ' ', '_' );
String filenameWithPath = this.getImagesPath() + "/" + filename;
this.getLog().debug( "createHistoFindBugsGraph = " + filename );
try
{
chart1.saveToFile( filenameWithPath );
String link = "images/" + filename;
link = link.replace( ' ', '_' );
sink.figure();
sink.figureGraphics( link );
sink.figure_();
}
catch ( IOException e )
{
this.getLog().debug( "createHistoFindBugsGraph exception = " + e.getMessage() );
}
}
sink.lineBreak();
}
sink.lineBreak();
}
}
}
sink.lineBreak();
}
public void createTaglistSection( ResourceBundle bundle, Sink sink, TagListReportBean report )
{
sink.section1();
sink.sectionTitle2();
sink.anchor( "taglist" );
sink.anchor_();
sink.link( "dashboard-report.html#taglist" );
sink.text( bundle.getString( "report.taglist.header" ) );
sink.link_();
sink.sectionTitle2_();
this.linkToTopPage( sink );
sink.section1_();
sink.lineBreak();
if ( report == null )
{
sink.text( "Error: Unable to generate Taglist historic graphs." );
}
else
{
Section section = this.configuration.getSectionById( "taglist.summary" );
if ( section == null )
{
sink.text( "Error: Unable to generate Taglist historic graphs." );
}
else
{
List graphs = section.getGraphs();
Iterator iter = graphs.iterator();
while ( iter.hasNext() )
{
Graph graph = (Graph) iter.next();
String namedQuery = "";
if ( this.keepVersionAsDiscriminantCriteria )
{
namedQuery =
"org.codehaus.mojo.dashboard.report.plugin.beans.TagListReportBean.getTagListByPeriodByVersion";
}
else
{
namedQuery =
"org.codehaus.mojo.dashboard.report.plugin.beans.TagListReportBean.getTagListByPeriod";
}
Query query = this.hibernateService.getSession().getNamedQuery( namedQuery );
query.setParameter( "id", this.dashBoardMavenProjectID );
query.setParameter( "startdate", graph.getStartPeriodDate() );
query.setParameter( "enddate", graph.getEndPeriodDate() );
List result = query.list();
if ( !this.generateGraphs )
{
sink.sectionTitle3();
sink.text( this.mavenProject.getProjectName() + " : " + graph.getTitle() );
sink.sectionTitle3_();
if ( result != null && result.size() > 0 )
{
sink.table();
sink.tableRow();
this.sinkHeader( sink, "Date" );
this.sinkHeader( sink, bundle.getString( "report.taglist.label.nbclasses" ) );
this.sinkHeader( sink, bundle.getString( "report.taglist.column.nboccurs" ) );
sink.tableRow_();
Iterator iterRes = result.iterator();
while ( iterRes.hasNext() )
{
sink.tableRow();
TagListReportBean taglistReport = (TagListReportBean) iterRes.next();
Date date = taglistReport.getDateGeneration();
this.sinkCell( sink, normalizeToString( date ) );
this.sinkCell( sink, Integer.toString( taglistReport.getNbClasses() ) );
this.sinkCell( sink, Integer.toString( taglistReport.getNbTotal() ) );
}
sink.table_();
}
else
{
sink.text( "[" + bundle.getString( "dashboard.report.generategraphs.nodata" ) + "]" );
sink.lineBreak();
}
}
else
{
IChartRenderer chart1 =
new TimeChartRenderer( new TaglistTimeChartStrategy( bundle,
this.mavenProject.getProjectName()
+ " : "
+ graph.getTitle(),
result, graph.getTimeUnit(),
graph.getStartPeriodDate(),
graph.getEndPeriodDate() ) );
if ( !this.keepVersionAsDiscriminantCriteria )
{
String versionQuery =
"org.codehaus.mojo.dashboard.report.plugin.beans.TagListReportBean.getMarkerVersionByDate";
query = this.hibernateService.getSession().getNamedQuery( versionQuery );
query.setParameter( "id", this.dashBoardMavenProjectID );
query.setParameter( "startdate", graph.getStartPeriodDate() );
query.setParameter( "enddate", graph.getEndPeriodDate() );
result = query.list();
chart1 = new MarkerTimeChartDecorator( chart1, result );
}
if ( !chart1.isEmpty() )
{
String filename = this.replaceForbiddenChar( this.mavenProject.getProjectName() );
filename += "_Histo_Taglist." + chart1.getFileExtension();
String prefix = graph.getId();
filename = prefix.replace( '.', '_' ) + filename;
filename = filename.replace( ' ', '_' );
String filenameWithPath = this.getImagesPath() + "/" + filename;
this.getLog().debug( "createHistoTaglistGraph = " + filename );
try
{
chart1.saveToFile( filenameWithPath );
String link = "images/" + filename;
link = link.replace( ' ', '_' );
sink.figure();
sink.figureGraphics( link );
sink.figure_();
}
catch ( IOException e )
{
this.getLog().debug( "createHistoTaglistGraph exception = " + e.getMessage() );
}
}
sink.lineBreak();
}
sink.lineBreak();
}
}
}
sink.lineBreak();
}
/**
* Format the specified date to String.
*
* @param date
* Date to format
* @return Formatted date.
*/
public String normalizeToString( Date date )
{
return this.dateFormat.format( date );
}
}