package com.ikokoon.serenity.hudson; import hudson.model.AbstractProject; import hudson.model.Actionable; import hudson.model.ProminentProjectAction; import hudson.model.Run; import java.io.IOException; import org.apache.log4j.Logger; import org.kohsuke.stapler.StaplerRequest; import org.kohsuke.stapler.StaplerResponse; /** * An object in the chain of proxy objects that serve the front end in Hudson. * * @author Michael Couck * @since 09.12.09 * @version 01.00 */ @SuppressWarnings("unchecked") public class SerenityProjectAction extends Actionable implements ProminentProjectAction { private Logger logger = Logger.getLogger(SerenityProjectAction.class); /** The real owner that generated the build. */ private AbstractProject owner; /** * Constructor takes the real build from Hudson. * * @param owner * the build that generated the actual build */ public SerenityProjectAction(AbstractProject owner) { logger.debug("SerenityProjectAction:"); this.owner = owner; } /** * {@inheritDoc} */ public String getDisplayName() { logger.debug("getDisplayName"); return "Serenity report"; } /** * {@inheritDoc} */ public String getIconFileName() { logger.debug("getIconFileName"); return "graph.gif"; } /** * {@inheritDoc} */ public String getUrlName() { logger.debug("getUrlName"); return "serenity"; } /** * {@inheritDoc} */ public String getSearchUrl() { logger.debug("getSearchUrl"); return getUrlName(); } public ISerenityResult getLastResult() { logger.debug("getLastResult"); Run build = owner.getLastStableBuild(); if (build == null) { build = owner.getLastBuild(); } if (build != null) { SerenityBuildAction action = build.getAction(SerenityBuildAction.class); if (action != null) { return action.getResult(); } } return null; } public void doIndex(StaplerRequest req, StaplerResponse rsp) throws IOException { logger.debug("doIndex"); if (hasResult()) { rsp.sendRedirect2("../lastBuild/serenity"); } else { rsp.sendRedirect2("nocoverage"); } } public boolean hasResult() { logger.debug("hasResult"); return getLastResult() != null; } }