package org.codehaus.mojo.javancss;
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.ResourceBundle;
import org.apache.maven.plugin.logging.Log;
import org.codehaus.doxia.sink.Sink;
import org.dom4j.Document;
import org.dom4j.Node;
/**
* Generates the JavaNCSS aggregate report.
*
* @author <a href="mperham AT gmail.com">Mike Perham</a>
* @version $Id$
*/
public class NcssAggregateReportGenerator
extends AbstractNcssReportGenerator
{
/**
* @param sink the sink that will be used for reporting.
* @param bundle the correct RessourceBundle to be used for reporting.
* @param log the logger to output log with.
*/
public NcssAggregateReportGenerator( Sink sink, ResourceBundle bundle, Log log )
{
super( sink, bundle, log );
}
/**
* Generates the JavaNCSS report.
*
* @param locale the Locale used for this report.
* @param moduleReports the javancss raw reports to aggregate, List of ModuleReport.
* @param lineThreshold the maximum number of lines to keep in major reports.
*/
public void doReport( Locale locale, List moduleReports, int lineThreshold )
{
// HEADER
getSink().head();
getSink().title();
getSink().text( getString( "report.javancss.title" ) );
getSink().title_();
getSink().head_();
// BODY
getSink().body();
doIntro( false );
// packages
startSection( "report.javancss.module.link", "report.javancss.module.title" );
doModuleAnalysis( moduleReports );
endSection();
getSink().body_();
getSink().close();
}
private void doModuleAnalysis( List reports )
{
getSink().table();
getSink().tableRow();
headerCellHelper( getString( "report.javancss.header.module" ) );
headerCellHelper( getString( "report.javancss.header.packages" ) );
headerCellHelper( getString( "report.javancss.header.classetotal" ) );
headerCellHelper( getString( "report.javancss.header.functiontotal" ) );
headerCellHelper( getString( "report.javancss.header.ncsstotal" ) );
headerCellHelper( getString( "report.javancss.header.javadoc" ) );
headerCellHelper( getString( "report.javancss.header.javadoc_line" ) );
headerCellHelper( getString( "report.javancss.header.single_comment" ) );
headerCellHelper( getString( "report.javancss.header.multi_comment" ) );
getSink().tableRow_();
int packages = 0;
int classes = 0;
int methods = 0;
int ncss = 0;
int javadocs = 0;
int jdlines = 0;
int single = 0;
int multi = 0;
for ( Iterator it = reports.iterator(); it.hasNext(); )
{
ModuleReport report = (ModuleReport) it.next();
Document document = report.getJavancssDocument();
getSink().tableRow();
getLog().debug( "Aggregating " + report.getModule().getArtifactId() );
tableCellHelper( report.getModule().getArtifactId() );
int packageSize = document.selectNodes( "//javancss/packages/package" ).size();
packages += packageSize;
tableCellHelper( String.valueOf( packageSize ) );
Node node = document.selectSingleNode( "//javancss/packages/total" );
String classSize = node.valueOf( "classes" );
tableCellHelper( classSize );
classes += Integer.parseInt( classSize );
String methodSize = node.valueOf( "functions" );
tableCellHelper( methodSize );
methods += Integer.parseInt( methodSize );
String ncssSize = node.valueOf( "ncss" );
tableCellHelper( ncssSize );
ncss += Integer.parseInt( ncssSize );
String javadocSize = node.valueOf( "javadocs" );
tableCellHelper( javadocSize );
javadocs += Integer.parseInt( javadocSize );
String jdlineSize = node.valueOf( "javadoc_lines" );
tableCellHelper( jdlineSize );
jdlines += Integer.parseInt( jdlineSize );
String singleSize = node.valueOf( "single_comment_lines" );
tableCellHelper( singleSize );
single += Integer.parseInt( singleSize );
String multiSize = node.valueOf( "multi_comment_lines" );
tableCellHelper( multiSize );
multi += Integer.parseInt( multiSize );
getSink().tableRow_();
}
// Totals row
getSink().tableRow();
tableCellHelper( getString( "report.javancss.header.totals" ) );
tableCellHelper( String.valueOf( packages ) );
tableCellHelper( String.valueOf( classes ) );
tableCellHelper( String.valueOf( methods ) );
tableCellHelper( String.valueOf( ncss ) );
tableCellHelper( String.valueOf( javadocs ) );
tableCellHelper( String.valueOf( jdlines ) );
tableCellHelper( String.valueOf( single ) );
tableCellHelper( String.valueOf( multi ) );
getSink().tableRow_();
getSink().table_();
}
}