org.codehaus.mojo.javancss.NcssAggregateReportGenerator.java Source code

Java tutorial

Introduction

Here is the source code for org.codehaus.mojo.javancss.NcssAggregateReportGenerator.java

Source

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_();
    }

}