package hudson.plugins.pmd; import hudson.maven.MavenBuildProxy; import hudson.maven.MojoInfo; import hudson.maven.MavenBuild; import hudson.maven.MavenModule; import hudson.model.Action; import hudson.plugins.analysis.core.BuildResult; import hudson.plugins.analysis.core.FilesParser; import hudson.plugins.analysis.core.HealthAwareMavenReporter; import hudson.plugins.analysis.core.ParserResult; import hudson.plugins.analysis.util.PluginLogger; import hudson.plugins.pmd.parser.PmdParser; import java.io.IOException; import java.util.Collections; import java.util.List; import org.apache.maven.project.MavenProject; import org.kohsuke.stapler.DataBoundConstructor; /** * Publishes the results of the PMD analysis (maven 2 project type). * * @author Ulli Hafner */ public class PmdReporter extends HealthAwareMavenReporter { /** Unique identifier of this class. */ private static final long serialVersionUID = 2272875032054063496L; /** Default PMD pattern. */ private static final String PMD_XML_FILE = "pmd.xml"; /** Ant file-set pattern of files to work with. */ @SuppressWarnings("unused") private String pattern; // obsolete since release 2.5 /** * Creates a new instance of <code>PmdReporter</code>. * * @param threshold * Annotation threshold to be reached if a build should be considered as * unstable. * @param newThreshold * New annotations threshold to be reached if a build should be * considered as unstable. * @param failureThreshold * Annotation threshold to be reached if a build should be considered as * failure. * @param newFailureThreshold * New annotations threshold to be reached if a build should be * considered as failure. * @param healthy * Report health as 100% when the number of warnings is less than * this value * @param unHealthy * Report health as 0% when the number of warnings is greater * than this value * @param thresholdLimit * determines which warning priorities should be considered when * evaluating the build stability and health * @param canRunOnFailed * determines whether the plug-in can run for failed builds, too */ // CHECKSTYLE:OFF @SuppressWarnings("PMD.ExcessiveParameterList") @DataBoundConstructor public PmdReporter(final String threshold, final String newThreshold, final String failureThreshold, final String newFailureThreshold, final String healthy, final String unHealthy, final String thresholdLimit, final boolean canRunOnFailed) { super(threshold, newThreshold, failureThreshold, newFailureThreshold, healthy, unHealthy, thresholdLimit, canRunOnFailed, "PMD"); } // CHECKSTYLE:ON /** {@inheritDoc} */ @Override protected boolean acceptGoal(final String goal) { return "pmd".equals(goal) || "site".equals(goal); } /** {@inheritDoc} */ @Override public ParserResult perform(final MavenBuildProxy build, final MavenProject pom, final MojoInfo mojo, final PluginLogger logger) throws InterruptedException, IOException { FilesParser pmdCollector = new FilesParser(logger, PMD_XML_FILE, new PmdParser(getDefaultEncoding()), getModuleName(pom)); return getTargetPath(pom).act(pmdCollector); } /** {@inheritDoc} */ @Override protected BuildResult persistResult(final ParserResult project, final MavenBuild build) { PmdResult result = new PmdResult(build, getDefaultEncoding(), project); build.getActions().add(new MavenPmdResultAction(build, this, getDefaultEncoding(), result)); build.registerAsProjectAction(PmdReporter.this); return result; } /** {@inheritDoc} */ @Override public List<PmdProjectAction> getProjectActions(final MavenModule module) { return Collections.singletonList(new PmdProjectAction(module)); } /** {@inheritDoc} */ @Override protected Class<? extends Action> getResultActionClass() { return MavenPmdResultAction.class; } }