package org.jvnet.hudson.plugins.purecoverage;
import hudson.model.AbstractProject;
import hudson.model.Actionable;
import hudson.model.ProminentProjectAction;
import hudson.model.Run;
import java.io.IOException;
import org.kohsuke.stapler.StaplerRequest;
import org.kohsuke.stapler.StaplerResponse;
@SuppressWarnings("unchecked")
public class CoverageProjectAction extends Actionable implements
ProminentProjectAction {
private static final long serialVersionUID = 1L;
private AbstractProject owner;
public CoverageProjectAction(AbstractProject owner) {
this.owner = owner;
}
public String getDisplayName() {
return "PureCoverage report";
}
public String getIconFileName() {
return "graph.gif";
}
public String getUrlName() {
return "purecoverage";
}
public String getSearchUrl() {
return getUrlName();
}
public CoverageResult getLastCoverageResult() {
Run build = owner.getLastStableBuild();
if (build != null) {
CoverageBuildAction action = build.getAction(CoverageBuildAction.class);
return action.getCoverageResult();
} else {
return null;
}
}
public String getLastCoverageTotal() {
Run build = owner.getLastStableBuild();
if (build != null) {
CoverageBuildAction action = build.getAction(CoverageBuildAction.class);
return action.getCoverageTotal();
} else {
return null;
}
}
public void doIndex(StaplerRequest req, StaplerResponse rsp) throws IOException {
if (hasResult()) {
rsp.sendRedirect2("../lastStableBuild/coverage");
} else {
rsp.sendRedirect2("nocoverage");
}
//We might redirect to some nodata document, but let's assume there's always last build with coverage stuff...
}
public boolean hasResult() {
return getLastCoverageTotal() != null;
}
}