package hudson.plugins.checkstyle;
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.FilesParser;
import hudson.plugins.analysis.core.HealthAwareMavenReporter;
import hudson.plugins.analysis.core.ParserResult;
import hudson.plugins.analysis.util.PluginLogger;
import hudson.plugins.checkstyle.parser.CheckStyleParser;
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 Checkstyle analysis (maven 2 project type).
*
* @author Ulli Hafner
*/
public class CheckStyleReporter extends HealthAwareMavenReporter {
/** Unique identifier of this class. */
private static final long serialVersionUID = 2272875032054063496L;
/** Default Checkstyle pattern. */
private static final String CHECKSTYLE_XML_FILE = "checkstyle-result.xml";
/**
* Creates a new instance of <code>CheckStyleReporter</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 CheckStyleReporter(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, "CHECKSTYLE");
}
// CHECKSTYLE:ON
/** {@inheritDoc} */
@Override
protected boolean acceptGoal(final String goal) {
return "checkstyle".equals(goal) || "check".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 checkstyleCollector = new FilesParser(logger, CHECKSTYLE_XML_FILE,
new CheckStyleParser(getDefaultEncoding()), getModuleName(pom));
return getTargetPath(pom).act(checkstyleCollector);
}
/** {@inheritDoc} */
@Override
protected CheckStyleResult persistResult(final ParserResult project, final MavenBuild build) {
CheckStyleResult result = new CheckStyleResult(build, getDefaultEncoding(), project);
build.getActions().add(new MavenCheckStyleResultAction(build, this, getDefaultEncoding(), result));
build.registerAsProjectAction(CheckStyleReporter.this);
return result;
}
/** {@inheritDoc} */
@Override
public List<CheckStyleProjectAction> getProjectActions(final MavenModule module) {
return Collections.singletonList(new CheckStyleProjectAction(module));
}
/** {@inheritDoc} */
@Override
protected Class<? extends Action> getResultActionClass() {
return MavenCheckStyleResultAction.class;
}
}