All Downloads are FREE. Search and download functionalities are using the official Maven repository.

hudson.plugins.testabilityexplorer.publisher.MavenPublisher Maven / Gradle / Ivy

package hudson.plugins.testabilityexplorer.publisher;

import net.sf.json.JSONObject;

import org.kohsuke.stapler.DataBoundConstructor;
import org.kohsuke.stapler.StaplerRequest;

import hudson.Extension;
import hudson.maven.MavenModule;
import hudson.maven.MavenReporter;
import hudson.maven.MavenReporterDescriptor;
import hudson.model.Action;
import hudson.plugins.testabilityexplorer.PluginImpl;
import hudson.plugins.testabilityexplorer.helpers.ParseDelegate;
import hudson.plugins.testabilityexplorer.helpers.ReportParseDelegate;
import hudson.plugins.testabilityexplorer.parser.StatisticsParser;
import hudson.plugins.testabilityexplorer.parser.XmlStatisticsParser;
import hudson.plugins.testabilityexplorer.parser.selectors.DefaultConverterSelector;
import hudson.plugins.testabilityexplorer.report.CostDetailBuilder;
import hudson.plugins.testabilityexplorer.report.ProjectIndividualReport;
import hudson.plugins.testabilityexplorer.report.charts.ChartBuilder;
import hudson.plugins.testabilityexplorer.report.charts.TestabilityChartBuilder;
import hudson.plugins.testabilityexplorer.report.health.ReportBuilder;
import hudson.plugins.testabilityexplorer.report.health.TemporaryHealthCalculator;
import hudson.plugins.testabilityexplorer.report.health.TestabilityReportBuilder;

/**
 * A {@link AbstractMavenReporterImpl} that will set up the plugin so that it can be used in M2
 * projects.
 *
 * @author reik.schatz
 */
public class MavenPublisher extends AbstractMavenReporterImpl {

    @Extension
    public static final class DescriptorImpl extends MavenReporterDescriptor {

        public DescriptorImpl() {
            super(MavenPublisher.class);
        }

        /**
         * {@inheritDoc}
         */
        @Override
        public String getDisplayName() {
            return "Publish " + PluginImpl.DISPLAY_NAME;
        }

        @Override
        public MavenReporter newInstance(StaplerRequest req, JSONObject formData)
                throws FormException {
            return req.bindJSON(MavenPublisher.class, formData);
        }

        @Override
        public String getHelpFile() {
            return "help";
        }

        @Override
        public String getConfigPage() {
            return getViewPage(MavenPublisher.class, "config.jelly");
        }
    }

    private final String m_reportFilenamePattern;

    private final int m_threshold;

    private final int m_perClassThreshold;

    private final boolean m_aggregateFiles;

    private final double m_weightFactor;

    @DataBoundConstructor
    public MavenPublisher(String reportFilenamePattern, String aggregateFiles,
            String weightFactor, String threshold, String perClassThreshold) {
        reportFilenamePattern.getClass();
        threshold.getClass();

        m_reportFilenamePattern = reportFilenamePattern;
        m_threshold = toInt(threshold, Integer.MAX_VALUE);
        m_perClassThreshold = toInt(perClassThreshold, Integer.MAX_VALUE);
        m_aggregateFiles = toBool(aggregateFiles, false);
        m_weightFactor = toDouble(weightFactor, DEFAULT_WEIGHT);

    }

    /**
     * {@inheritDoc}
     */
    @Override
    public Action getProjectAction(MavenModule module) {
        return new ProjectIndividualReport(module);
    }

    public ParseDelegate newParseDelegate() {
        return new ReportParseDelegate(getReportFilenamePattern(), getAggregateFiles(),
                getWeightFactor(), getThreshold(), getPerClassThreshold());
    }

    public StatisticsParser newStatisticsParser() {
        return new XmlStatisticsParser(new DefaultConverterSelector());
    }

    public CostDetailBuilder newDetailBuilder() {
        return new CostDetailBuilder();
    }

    public ReportBuilder newReportBuilder() {
        ChartBuilder chartBuilder = new TestabilityChartBuilder();
        return new TestabilityReportBuilder(chartBuilder, new TemporaryHealthCalculator());
    }

    /**
     * Returns the current file pattern to the report files.
     *
     * @return String
     */
    public String getReportFilenamePattern() {
        return m_reportFilenamePattern;
    }

    /**
     * Retunrs the current threshold for which the build will fail if the testability score is above
     * it.
     *
     * @return int
     */
    public int getThreshold() {
        return m_threshold;
    }

    public boolean getAggregateFiles() {
        return m_aggregateFiles;
    }

    public double getWeightFactor() {
        return m_weightFactor;
    }


    /**
     * Returns the current threshold, for which the build will become unstable if the testability
     * score is above it, on a per class basis.
     *
     * @return int
     */
    public int getPerClassThreshold() {
        return m_perClassThreshold;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy