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

hudson.plugins.helpers.AbstractMavenReporterImpl Maven / Gradle / Ivy

The newest version!
package hudson.plugins.helpers;

import hudson.maven.MavenBuildProxy;
import hudson.maven.MavenReporter;
import hudson.maven.MojoInfo;
import hudson.model.BuildListener;
import hudson.model.Result;
import org.apache.maven.project.MavenProject;

import java.io.IOException;

/**
 * An abstract MavenReporter that is designed to work with a Ghostwriter.
 *
 * @author Stephen Connolly
 * @since 28-Jan-2008 22:18:53
 */
public abstract class AbstractMavenReporterImpl extends MavenReporter {
// -------------------------- OTHER METHODS --------------------------

    /**
     * Returns the execution mode that this reporter will follow.
     *
     * @return the execution mode that this reporter will follow.
     */
    protected MojoExecutionReportingMode getExecutionMode() {
        return MojoExecutionReportingMode.ONLY_REPORT_ON_SUCCESS;
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public boolean postExecute(MavenBuildProxy build,
                               MavenProject pom,
                               MojoInfo mojo,
                               BuildListener listener,
                               Throwable error)
            throws InterruptedException, IOException {
        if (!isExecutingMojo(mojo)) {
            // not a mojo who's result we are interested in
            return true;
        }

        final Boolean okToContinue = getExecutionMode().isOkToContinue(this, build, listener, error);
        if (okToContinue != null) {
            return okToContinue;
        }

        build.registerAsProjectAction(this);

        return BuildProxy.doPerform(newGhostwriter(pom, mojo), build, pom, listener);
    }

    /**
     * Returns true if this is the mojo that corresponds with execution of the task we want to report on.
     *
     * @param mojo The mojo execution.
     * @return true if this is the mojo that corresponds with execution of the task we want to report on.
     */
    protected abstract boolean isExecutingMojo(MojoInfo mojo);

    /**
     * Creates the configured Ghostwriter based on the information from the pom and mojo. Will only be called when
     * isExecutingMojo returns true.
     *
     * @param pom  The pom.
     * @param mojo The mojo for which isExecutingMojo returned true.
     * @return The configured Ghostwriter instance.
     */
    protected abstract Ghostwriter newGhostwriter(MavenProject pom, MojoInfo mojo);

    /**
     * {@inheritDoc}
     */
    @Override
    public boolean preExecute(MavenBuildProxy build,
                              MavenProject pom,
                              MojoInfo mojo,
                              BuildListener listener)
            throws InterruptedException, IOException {
        return !isAutoconfMojo(mojo) || autoconfPom(build, pom, mojo, listener);
    }

    /**
     * Called during the preExecute phase when isAutoconfMojo returns true.
     * if we want to tweak the mojo.configuration to ensure that the mojo is configured with the options we need
     * here is the place to do that for example:
     * 

* XmlPlexusConfiguration xmlOutputDir = (XmlPlexusConfiguration) mojo.configuration.getChild("xmlOutputDir"); * if (xmlOutputDir == null) { * xmlOutputDir = new XmlPlexusConfiguration("xmlOutputDir"); * xmlOutputDir.setValue("${basedir}/target/xmlReport"); * mojo.configuration.addChild(xmlOutputDir); * } * * @param build The build. * @param pom The pom which will be manipulated by this method to autoconfigure. * @param mojo The mojo. * @param listener The build listener. * @return true if autoconf was successful. */ protected boolean autoconfPom(MavenBuildProxy build, MavenProject pom, MojoInfo mojo, BuildListener listener) { return true; } /** * Returns true if this mojo execution is an execution that we want to modify, i.e. where we want to * "fix" some of the configuration details, e.g. enable XML reports, etc. * * @param mojo The mojo. * @return true if this mojo execution is an execution that we want to modify. */ protected boolean isAutoconfMojo(MojoInfo mojo) { return false; } // -------------------------- ENUMERATIONS -------------------------- /** * The reporting mode. */ protected enum MojoExecutionReportingMode { /** * Only runs the Ghostwriter when the mojo executed successfully. */ ONLY_REPORT_ON_SUCCESS { Boolean isOkToContinue(MavenReporter reporter, MavenBuildProxy build, BuildListener listener, Throwable error) { return error == null ? null : Boolean.TRUE; } }, /** * Always runs the Ghostwriter, even if the mojo executed with errors. */ ALWAYS_REPORT_STABLE { Boolean isOkToContinue(MavenReporter reporter, MavenBuildProxy build, BuildListener listener, Throwable error) { return null; }}, /** * Always runs the Ghostwriter, if the mojo executed with errors set the build to UNSTABLE. */ REPORT_UNSTABLE_ON_ERROR { Boolean isOkToContinue(MavenReporter reporter, MavenBuildProxy build, BuildListener listener, Throwable error) { if (error != null) { listener.getLogger().println("[HUDSON] " + reporter.getDescriptor().getDisplayName() + " setting build to UNSTABLE"); build.setResult(Result.UNSTABLE); } return null; } }; // -------------------------- OTHER METHODS -------------------------- /** * Decides whether to continue and call the Ghostwriter in the event of a mojo execution error. * * @param reporter The MavenReporter. * @param build The maven build proxy. * @param listener The build listener. * @param error The mojo execution exception. * @return null to continue with execution of the Ghostwriter. Otherwise Boolean.TRUE * to continue the build or Boolean.FALSE to halt the build. */ abstract Boolean isOkToContinue(MavenReporter reporter, MavenBuildProxy build, BuildListener listener, Throwable error); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy