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. */ import java.text.SimpleDateFormat; import java.util.Date; import java.util.Hashtable; import java.util.Iterator; 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.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; /** * @author <a href="dvicente72@gmail.com">David Vicente</a> * */ public class DashBoardMaven1ReportGenerator extends AbstractDashBoardGenerator { private String dashboardAnchorLink = "/dashboard-report.html"; private DashBoardMavenProject mavenProject; private Map map = new Hashtable(); private boolean isDBAvailable = false; /** * * @param dashboardReport */ public DashBoardMaven1ReportGenerator( DashBoardMavenProject mavenProject, boolean isDBAvailable, Log log ) { super( log ); this.mavenProject = mavenProject; this.isDBAvailable = isDBAvailable; Set reports = mavenProject.getReports(); Iterator iter = reports.iterator(); while ( iter.hasNext() ) { IDashBoardReportBean report = (IDashBoardReportBean) iter.next(); if ( report != null ) { map.put( report.getClass(), report ); } } } public void doGenerateReport( ResourceBundle bundle, Sink sink ) { createTitle( bundle, sink ); addDashboardCss(sink); this.sinkJavascriptCode( sink ); sink.body(); sink.anchor( "top" ); sink.anchor_(); createHeader( bundle, sink ); createBodyReport( bundle, sink ); sink.body_(); sink.flush(); sink.close(); } public void createTitle( ResourceBundle bundle, Sink sink ) { sink.head(); sink.title(); sink.text( bundle.getString( "dashboard.multireport.name" ) ); sink.title_(); sink.head_(); } public void createHeader( ResourceBundle bundle, Sink sink ) { sink.section1(); sink.sectionTitle1(); sink.text( bundle.getString( "dashboard.multireport.name" ) + " : " + this.mavenProject.getProjectName() ); sink.sectionTitle1_(); sink.text( "Date Generated: " + new SimpleDateFormat().format( new Date( System.currentTimeMillis() ) ) ); sink.horizontalRule(); if ( this.isDBAvailable ) { sink.sectionTitle3(); sink.bold(); sink.text( "[" ); sink.link( "dashboard-report-historic.html" ); sink.text( "Go to Historic page" ); sink.link_(); sink.text( "]" ); sink.bold_(); sink.sectionTitle3_(); sink.horizontalRule(); } sink.lineBreak(); sink.section1_(); } public void createBodyReport( ResourceBundle bundle, Sink sink ) { System.out.println( "DashBoardMultiReportGenerator createBodyByReport(...)" ); createAllSection( bundle, sink ); } public void createAllSection( ResourceBundle bundle, Sink sink ) { sink.table(); writeSuperHeader( sink ); writeHeader( bundle, sink, true ); createAllLineByReport( bundle, sink, mavenProject, true, "" ); createTotalLine( bundle, sink, mavenProject ); writeHeader( bundle, sink, false ); writeSuperHeader( sink ); sink.table_(); sink.lineBreak(); } public void createAllLineByReport( ResourceBundle bundle, Sink sink, DashBoardMavenProject mavenProject, boolean isRoot, String prefix ) { if ( mavenProject.getModules() != null && !mavenProject.getModules().isEmpty() ) { Iterator iter = mavenProject.getModules().iterator(); if ( !isRoot ) { prefix = writeMultiProjectRow( sink, mavenProject, prefix, dashboardAnchorLink ); } while ( iter.hasNext() ) { DashBoardMavenProject subproject = (DashBoardMavenProject) iter.next(); createAllLineByReport( bundle, sink, subproject, false, prefix ); } } else { sink.tableRow(); writeProjectCell( sink, mavenProject, prefix, dashboardAnchorLink ); if ( map.get( CoberturaReportBean.class ) != null ) { CoberturaReportBean coberReportBean = (CoberturaReportBean) mavenProject.getReportsByType( CoberturaReportBean.class ); if ( coberReportBean != null ) { sinkCellClass( sink, Integer.toString( coberReportBean.getNbClasses() ), "cobertura" ); // sinkCellClass( sink, getPercentValue( coberReportBean.getLineCoverRate() ) ,"cobertura"); sinkCellPercentGraphic( sink, coberReportBean.getLineCoverRate(), "cobertura" ); // sinkCellClass( sink, getPercentValue( coberReportBean.getBranchCoverRate() ),"cobertura" ); sinkCellPercentGraphic( sink, coberReportBean.getBranchCoverRate(), "cobertura" ); sinkHeaderBold( sink, "|" ); } else { sinkCellClass( sink, "", "cobertura" ); sinkCellClass( sink, "", "cobertura" ); sinkCellClass( sink, "", "cobertura" ); sinkHeaderBold( sink, "|" ); } } if ( map.get( CloverReportBean.class ) != null ) { CloverReportBean cloverReportBean = (CloverReportBean) mavenProject.getReportsByType( CloverReportBean.class ); if ( cloverReportBean != null ) { sinkCellPercentGraphic( sink, cloverReportBean.getPercentCoveredConditionals(), "clover", "(" + cloverReportBean.getCoveredElements() + " / " + cloverReportBean.getElements() + ")" ); this.sinkCellClass( sink, cloverReportBean.getConditionalsLabel(), "clover" ); this.sinkCellClass( sink, cloverReportBean.getStatementsLabel(), "clover" ); this.sinkCellClass( sink, cloverReportBean.getMethodsLabel(), "clover" ); sinkHeaderBold( sink, "|" ); } else { sinkCellClass( sink, "", "clover" ); sinkCellClass( sink, "", "clover" ); sinkCellClass( sink, "", "clover" ); sinkCellClass( sink, "", "clover" ); sinkHeaderBold( sink, "|" ); } } if ( map.get( SurefireReportBean.class ) != null ) { SurefireReportBean fireReportBean = (SurefireReportBean) mavenProject.getReportsByType( SurefireReportBean.class ); if ( fireReportBean != null ) { // sinkCellClass( sink, Double.toString( fireReportBean.getSucessRate() ) + "%" , "surefire"); sinkCellPercentGraphic( sink, fireReportBean.getSucessRate() / 100, "surefire" ); sinkCellClass( sink, Integer.toString( fireReportBean.getNbTests() ), "surefire" ); sinkCellClass( sink, Integer.toString( fireReportBean.getNbErrors() ), "surefire" ); sinkCellClass( sink, Integer.toString( fireReportBean.getNbFailures() ), "surefire" ); sinkCellClass( sink, Integer.toString( fireReportBean.getNbSkipped() ), "surefire" ); sinkCellClass( sink, Double.toString( fireReportBean.getElapsedTime() ), "surefire" ); sinkHeaderBold( sink, "|" ); } else { sinkCellClass( sink, "", "surefire" ); sinkCellClass( sink, "", "surefire" ); sinkCellClass( sink, "", "surefire" ); sinkCellClass( sink, "", "surefire" ); sinkCellClass( sink, "", "surefire" ); sinkCellClass( sink, "", "surefire" ); sinkHeaderBold( sink, "|" ); } } if ( map.get( CheckstyleReportBean.class ) != null ) { CheckstyleReportBean checkStyleReport = (CheckstyleReportBean) mavenProject.getReportsByType( CheckstyleReportBean.class ); if ( checkStyleReport != null ) { sinkCellClass( sink, Integer.toString( checkStyleReport.getNbClasses() ), "checkstyle" ); sinkCellClass( sink, Integer.toString( checkStyleReport.getNbTotal() ), "checkstyle" ); sinkCellClass( sink, Integer.toString( checkStyleReport.getNbInfos() ), "checkstyle" ); sinkCellClass( sink, Integer.toString( checkStyleReport.getNbWarnings() ), "checkstyle" ); sinkCellClass( sink, Integer.toString( checkStyleReport.getNbErrors() ), "checkstyle" ); sinkHeaderBold( sink, "|" ); } else { sinkCellClass( sink, "", "checkstyle" ); sinkCellClass( sink, "", "checkstyle" ); sinkCellClass( sink, "", "checkstyle" ); sinkCellClass( sink, "", "checkstyle" ); sinkCellClass( sink, "", "checkstyle" ); sinkHeaderBold( sink, "|" ); } } if ( map.get( PmdReportBean.class ) != null ) { PmdReportBean pmdReportBean = (PmdReportBean) mavenProject.getReportsByType( PmdReportBean.class ); if ( pmdReportBean != null ) { sinkCellClass( sink, Integer.toString( pmdReportBean.getNbClasses() ), "pmd" ); sinkCellClass( sink, Integer.toString( pmdReportBean.getNbViolations() ), "pmd" ); sinkHeaderBold( sink, "|" ); } else { sinkCellClass( sink, "", "pmd" ); sinkCellClass( sink, "", "pmd" ); sinkHeaderBold( sink, "|" ); } } if ( map.get( CpdReportBean.class ) != null ) { CpdReportBean cpdReportBean = (CpdReportBean) mavenProject.getReportsByType( CpdReportBean.class ); if ( cpdReportBean != null ) { sinkCellClass( sink, Integer.toString( cpdReportBean.getNbClasses() ), "cpd" ); sinkCellClass( sink, Integer.toString( cpdReportBean.getNbDuplicate() ), "cpd" ); sinkHeaderBold( sink, "|" ); } else { sinkCellClass( sink, "", "cpd" ); sinkCellClass( sink, "", "cpd" ); sinkHeaderBold( sink, "|" ); } } if ( map.get( FindBugsReportBean.class ) != null ) { FindBugsReportBean findBugsReportBean = (FindBugsReportBean) mavenProject.getReportsByType( FindBugsReportBean.class ); if ( findBugsReportBean != null ) { sinkCellClass( sink, Integer.toString( findBugsReportBean.getNbClasses() ), "findbugs" ); sinkCellClass( sink, Integer.toString( findBugsReportBean.getNbBugs() ), "findbugs" ); sinkCellClass( sink, Integer.toString( findBugsReportBean.getNbErrors() ), "findbugs" ); sinkCellClass( sink, Integer.toString( findBugsReportBean.getNbMissingClasses() ), "findbugs" ); sinkHeaderBold( sink, "|" ); } else { sinkCellClass( sink, "", "findbugs" ); sinkCellClass( sink, "", "findbugs" ); sinkCellClass( sink, "", "findbugs" ); sinkCellClass( sink, "", "findbugs" ); sinkHeaderBold( sink, "|" ); } } if ( map.get( TagListReportBean.class ) != null ) { TagListReportBean taglistReportBean = (TagListReportBean) mavenProject.getReportsByType( TagListReportBean.class ); if ( taglistReportBean != null ) { sinkCellClass( sink, Integer.toString( taglistReportBean.getNbClasses() ), "taglist" ); sinkCellClass( sink, Integer.toString( taglistReportBean.getNbTotal() ), "taglist" ); sinkHeaderBold( sink, "|" ); } else { sinkCellClass( sink, "", "taglist" ); sinkCellClass( sink, "", "taglist" ); sinkHeaderBold( sink, "|" ); } } sink.tableRow_(); } } private void writeProjectCell( Sink sink, DashBoardMavenProject mavenProject, String prefix, String suffix ) { if ( prefix == null || prefix.length() == 0 ) { String artefactId = mavenProject.getArtifactId(); String link = artefactId.substring( artefactId.lastIndexOf( "." ) + 1, artefactId.length() ); sinkCellWithLink( sink, mavenProject.getProjectName(), link + suffix ); } else { int nbTab = prefix.split( "/" ).length; String artefactId = mavenProject.getArtifactId(); String link = prefix + "/" + artefactId.substring( artefactId.lastIndexOf( "." ) + 1, artefactId.length() ); sinkCellTabWithLink( sink, mavenProject.getProjectName(), nbTab, link + suffix ); } } private String writeMultiProjectRow( Sink sink, DashBoardMavenProject mavenProject, String prefix, String suffix ) { if ( prefix == null || prefix.length() == 0 ) { String artefactId = mavenProject.getArtifactId(); prefix = artefactId.substring( artefactId.lastIndexOf( "." ) + 1, artefactId.length() ); sink.tableRow(); sinkCellBoldWithLink( sink, mavenProject.getProjectName(), prefix + suffix ); sink.tableRow_(); } else { sink.tableRow(); int nbTab = prefix.split( "/" ).length; String artefactId = mavenProject.getArtifactId(); prefix = prefix + "/" + artefactId.substring( artefactId.lastIndexOf( "." ) + 1, artefactId.length() ); sinkCellTabBoldWithLink( sink, mavenProject.getProjectName(), nbTab, prefix + suffix ); sink.tableRow_(); } return prefix; } private void writeSuperHeader( Sink sink ) { sink.tableRow(); sink.tableHeaderCell(); sink.nonBreakingSpace(); sink.tableHeaderCell_(); if ( map.get( CoberturaReportBean.class ) != null ) { sinkSuperHeaderClass( sink, "Cobertura", 3, "cobertura" ); this.sinkHeaderCollapsedIcon( sink, "cobertura" ); } if ( map.get( CloverReportBean.class ) != null ) { sinkSuperHeaderClass( sink, "Clover", 4, "clover" ); this.sinkHeaderCollapsedIcon( sink, "clover" ); } if ( map.get( SurefireReportBean.class ) != null ) { sinkSuperHeaderClass( sink, "Surefire", 6, "surefire" ); this.sinkHeaderCollapsedIcon( sink, "surefire" ); } if ( map.get( CheckstyleReportBean.class ) != null ) { sinkSuperHeaderClass( sink, "Checkstyle", 5, "checkstyle" ); this.sinkHeaderCollapsedIcon( sink, "checkstyle" ); } if ( map.get( PmdReportBean.class ) != null ) { sinkSuperHeaderClass( sink, "PMD", 2, "pmd" ); this.sinkHeaderCollapsedIcon( sink, "pmd" ); } if ( map.get( CpdReportBean.class ) != null ) { sinkSuperHeaderClass( sink, "CPD", 2, "cpd" ); this.sinkHeaderCollapsedIcon( sink, "cpd" ); } if ( map.get( FindBugsReportBean.class ) != null ) { sinkSuperHeaderClass( sink, "FindBugs", 4, "findbugs" ); this.sinkHeaderCollapsedIcon( sink, "findbugs" ); } if ( map.get( TagListReportBean.class ) != null ) { sinkSuperHeaderClass( sink, "Tag List", 2, "taglist" ); this.sinkHeaderCollapsedIcon( sink, "taglist" ); } sink.tableRow_(); } private void writeHeader( ResourceBundle bundle, Sink sink, boolean upside ) { sink.tableRow(); if ( upside ) { sinkHeader( sink, bundle.getString( "report.project.name.header" ) ); } else { sinkHeader( sink, "" ); } if ( map.get( CoberturaReportBean.class ) != null ) { sinkHeaderClass( sink, bundle.getString( "report.cobertura.label.nbclasses" ), "cobertura" ); sinkHeaderClass( sink, bundle.getString( "report.cobertura.label.linecover" ), "cobertura" ); sinkHeaderClass( sink, bundle.getString( "report.cobertura.label.branchcover" ), "cobertura" ); sinkHeaderBold( sink, "" ); } if ( map.get( CloverReportBean.class ) != null ) { sinkHeaderClass( sink, bundle.getString( "report.clover.label.total" ), "clover" ); sinkHeaderClass( sink, bundle.getString( "report.clover.label.conditionals" ), "clover" ); sinkHeaderClass( sink, bundle.getString( "report.clover.label.statements" ), "clover" ); sinkHeaderClass( sink, bundle.getString( "report.clover.label.methods" ), "clover" ); sinkHeaderBold( sink, "" ); } if ( map.get( SurefireReportBean.class ) != null ) { sinkHeaderClass( sink, bundle.getString( "report.surefire.label.successrate" ), "surefire" ); sinkHeaderClass( sink, bundle.getString( "report.surefire.label.tests" ), "surefire" ); sinkHeaderClass( sink, bundle.getString( "report.surefire.label.errors" ), "surefire" ); sinkHeaderClass( sink, bundle.getString( "report.surefire.label.failures" ), "surefire" ); sinkHeaderClass( sink, bundle.getString( "report.surefire.label.skipped" ), "surefire" ); sinkHeaderClass( sink, bundle.getString( "report.surefire.label.time" ), "surefire" ); sinkHeaderBold( sink, "" ); } if ( map.get( CheckstyleReportBean.class ) != null ) { sinkHeaderClass( sink, bundle.getString( "report.checkstyle.files" ), "checkstyle" ); sinkHeaderClass( sink, bundle.getString( "report.checkstyle.column.total" ), "checkstyle" ); sink.rawText( "<th class=\"checkstyle\">" + bundle.getString( "report.checkstyle.column.infos" ) ); sink.nonBreakingSpace(); iconInfo( sink ); sink.rawText( "</th>" ); sink.rawText( "<th class=\"checkstyle\">" + bundle.getString( "report.checkstyle.column.warnings" ) ); sink.nonBreakingSpace(); iconWarning( sink ); sink.rawText( "</th>" ); sink.rawText( "<th class=\"checkstyle\">" + bundle.getString( "report.checkstyle.column.errors" ) ); sink.nonBreakingSpace(); iconError( sink ); sink.rawText( "</th>" ); sinkHeaderBold( sink, "" ); } if ( map.get( PmdReportBean.class ) != null ) { sinkHeaderClass( sink, bundle.getString( "report.pmd.label.nbclasses" ), "pmd" ); sinkHeaderClass( sink, bundle.getString( "report.pmd.label.nbviolations" ), "pmd" ); sinkHeaderBold( sink, "" ); } if ( map.get( CpdReportBean.class ) != null ) { sinkHeaderClass( sink, bundle.getString( "report.cpd.label.nbclasses" ), "cpd" ); sinkHeaderClass( sink, bundle.getString( "report.cpd.label.nbduplicate" ), "cpd" ); sinkHeaderBold( sink, "" ); } if ( map.get( FindBugsReportBean.class ) != null ) { sinkHeaderClass( sink, bundle.getString( "report.findbugs.label.nbclasses" ), "findbugs" ); sinkHeaderClass( sink, bundle.getString( "report.findbugs.label.nbbugs" ), "findbugs" ); sinkHeaderClass( sink, bundle.getString( "report.findbugs.label.nberrors" ), "findbugs" ); sinkHeaderClass( sink, bundle.getString( "report.findbugs.label.nbMissingClasses" ), "findbugs" ); sinkHeaderBold( sink, "" ); } if ( map.get( TagListReportBean.class ) != null ) { sinkHeaderClass( sink, bundle.getString( "report.taglist.label.nbclasses" ), "taglist" ); sinkHeaderClass( sink, bundle.getString( "report.taglist.column.nboccurs" ), "taglist" ); sinkHeaderBold( sink, "" ); } sink.tableRow_(); } public void createTotalLine( ResourceBundle bundle, Sink sink, DashBoardMavenProject mavenProject ) { sink.tableRow(); sinkHeader( sink, "Total" ); CoberturaReportBean reportBean = (CoberturaReportBean) mavenProject.getReportsByType( CoberturaReportBean.class ); if ( reportBean != null ) { sinkHeaderClass( sink, Integer.toString( reportBean.getNbClasses() ), "cobertura" ); // sinkHeaderClass( sink, getPercentValue( reportBean.getLineCoverRate() ) , "cobertura"); sinkHeaderCellPercentGraphic( sink, reportBean.getLineCoverRate(), "cobertura" ); // sinkHeaderClass( sink, getPercentValue( reportBean.getBranchCoverRate() ) , "cobertura"); sinkHeaderCellPercentGraphic( sink, reportBean.getBranchCoverRate(), "cobertura" ); sinkHeaderBold( sink, "|" ); } CloverReportBean cloverReportBean = (CloverReportBean) mavenProject.getReportsByType( CloverReportBean.class ); if ( cloverReportBean != null ) { sinkHeaderCellPercentGraphic( sink, cloverReportBean.getPercentCoveredConditionals(), "clover", "(" + cloverReportBean.getCoveredElements() + " / " + cloverReportBean.getElements() + ")" ); sinkHeaderCellPercentGraphic( sink, cloverReportBean.getPercentCoveredConditionals(), "clover", "(" + cloverReportBean.getCoveredConditionals() + " / " + cloverReportBean.getConditionals() + ")" ); sinkHeaderCellPercentGraphic( sink, cloverReportBean.getPercentCoveredStatements(), "clover", "(" + cloverReportBean.getCoveredStatements() + " / " + cloverReportBean.getStatements() + ")" ); sinkHeaderCellPercentGraphic( sink, cloverReportBean.getPercentCoveredMethods(), "clover", "(" + cloverReportBean.getCoveredMethods() + " / " + cloverReportBean.getMethods() + ")" ); sinkHeaderBold( sink, "|" ); } SurefireReportBean fireReportBean = (SurefireReportBean) mavenProject.getReportsByType( SurefireReportBean.class ); if ( fireReportBean != null ) { sinkHeaderCellPercentGraphic( sink, fireReportBean.getSucessRate() / 100, "surefire" ); sinkHeaderClass( sink, Integer.toString( fireReportBean.getNbTests() ), "surefire" ); sinkHeaderClass( sink, Integer.toString( fireReportBean.getNbErrors() ), "surefire" ); sinkHeaderClass( sink, Integer.toString( fireReportBean.getNbFailures() ), "surefire" ); sinkHeaderClass( sink, Integer.toString( fireReportBean.getNbSkipped() ), "surefire" ); sinkHeaderClass( sink, Double.toString( fireReportBean.getElapsedTime() ), "surefire" ); sinkHeaderBold( sink, "|" ); } CheckstyleReportBean checkstyleReportBean = (CheckstyleReportBean) mavenProject.getReportsByType( CheckstyleReportBean.class ); if ( checkstyleReportBean != null ) { sinkHeaderClass( sink, Integer.toString( checkstyleReportBean.getNbClasses() ), "checkstyle" ); sinkHeaderClass( sink, Integer.toString( checkstyleReportBean.getNbTotal() ), "checkstyle" ); tableHeaderCellClass( sink, "checkstyle" ); sink.text( Integer.toString( checkstyleReportBean.getNbInfos() ) ); sinkInvertPercentGraphic( sink, checkstyleReportBean.getPercentInfos() ); tableHeaderCell_( sink ); tableHeaderCellClass( sink, "checkstyle" ); sink.text( Integer.toString( checkstyleReportBean.getNbWarnings() ) ); sinkInvertPercentGraphic( sink, checkstyleReportBean.getPercentWarnings() ); tableHeaderCell_( sink ); tableHeaderCellClass( sink, "checkstyle" ); sink.text( Integer.toString( checkstyleReportBean.getNbErrors() ) ); sinkInvertPercentGraphic( sink, checkstyleReportBean.getPercentErrors() ); tableHeaderCell_( sink ); sinkHeaderBold( sink, "|" ); } PmdReportBean pmdReportBean = (PmdReportBean) mavenProject.getReportsByType( PmdReportBean.class ); if ( pmdReportBean != null ) { sinkHeaderClass( sink, Integer.toString( pmdReportBean.getNbClasses() ), "pmd" ); sinkHeaderClass( sink, Integer.toString( pmdReportBean.getNbViolations() ), "pmd" ); sinkHeaderBold( sink, "|" ); } CpdReportBean cpdReportBean = (CpdReportBean) mavenProject.getReportsByType( CpdReportBean.class ); if ( cpdReportBean != null ) { sinkHeaderClass( sink, Integer.toString( cpdReportBean.getNbClasses() ), "cpd" ); sinkHeaderClass( sink, Integer.toString( cpdReportBean.getNbDuplicate() ), "cpd" ); sinkHeaderBold( sink, "|" ); } FindBugsReportBean findBugsReportBean = (FindBugsReportBean) mavenProject.getReportsByType( FindBugsReportBean.class ); if ( findBugsReportBean != null ) { sinkHeaderClass( sink, Integer.toString( findBugsReportBean.getNbClasses() ), "findbugs" ); sinkHeaderClass( sink, Integer.toString( findBugsReportBean.getNbBugs() ), "findbugs" ); sinkHeaderClass( sink, Integer.toString( findBugsReportBean.getNbErrors() ), "findbugs" ); sinkHeaderClass( sink, Integer.toString( findBugsReportBean.getNbMissingClasses() ), "findbugs" ); sinkHeaderBold( sink, "|" ); } TagListReportBean taglistReportBean = (TagListReportBean) mavenProject.getReportsByType( TagListReportBean.class ); if ( taglistReportBean != null ) { sinkHeaderClass( sink, Integer.toString( taglistReportBean.getNbClasses() ), "taglist" ); sinkHeaderClass( sink, Integer.toString( taglistReportBean.getNbTotal() ), "taglist" ); sinkHeaderBold( sink, "|" ); } sink.tableRow_(); } private void sinkHeaderCollapsedIcon( Sink sink, String id ) { sink.tableHeaderCell(); String idImg = "Collapsed" + id; sink.rawText( "<IMG SRC=\"./images/previous.gif\" ALT=\"" + id + "\" name=\"" + idImg + "\" onclick=\"javascript:toggleCol('" + idImg + "','" + id + "');\">" ); sink.tableHeaderCell_(); } private void sinkJavascriptCode( Sink sink ) { StringBuffer buff = new StringBuffer(); buff.append( "<script type=\"text/javascript\">" ); buff.append( " function toggleCol(imageID,strCol){" ); buff.append( " var ths = document.getElementsByTagName(\"th\");" ); buff.append( " var tds = document.getElementsByTagName(\"td\");" ); buff.append( " var mesimages = document.getElementsByName(imageID);" ); buff.append( " for (idx in ths) {" ); buff.append( " if (ths[idx].className == strCol)" ); buff.append( " {" ); buff.append( " if (ths[idx].style.display == \"none\") {" ); buff.append( " ths[idx].style.display = \"\";" ); buff.append( " for (var i = 0; i < mesimages.length; i++) {" ); buff.append( " mesimages[i].src = './images/previous.gif';" ); buff.append( " }" ); buff.append( " }" ); buff.append( " else {" ); buff.append( " ths[idx].style.display = \"none\";" ); buff.append( " for (var i = 0; i < mesimages.length; i++) {" ); buff.append( " mesimages[i].src = './images/next.gif';" ); buff.append( " }" ); buff.append( " }" ); buff.append( " }" ); buff.append( " }" ); buff.append( " for (idx in tds) {" ); buff.append( " if (tds[idx].className == strCol)" ); buff.append( " {" ); buff.append( " if (tds[idx].style.display == \"none\") " ); buff.append( " tds[idx].style.display = \"\";" ); buff.append( " else{" ); buff.append( " tds[idx].style.display = \"none\";" ); buff.append( " }" ); buff.append( " }" ); buff.append( " }" ); buff.append( " }" ); buff.append( "</script>" ); sink.rawText( buff.toString() ); } }