package hudson.plugins.cobertura;
import hudson.model.*;
import org.kohsuke.stapler.StaplerRequest;
import org.kohsuke.stapler.StaplerResponse;
import java.io.IOException;
/**
* Project level action.
*
* @author Stephen Connolly
*/
public class CoberturaProjectAction extends Actionable implements ProminentProjectAction {
private final AbstractProject<?, ?> project;
private boolean onlyStable;
public CoberturaProjectAction(AbstractProject<?, ?> project, boolean onlyStable) {
this.project = project;
this.onlyStable = onlyStable;
}
public CoberturaProjectAction(AbstractProject<?, ?> project) {
this.project = project;
CoberturaPublisher cp = (CoberturaPublisher) project.getPublishersList().get(CoberturaPublisher.DESCRIPTOR);
if (cp != null) {
onlyStable = cp.getOnlyStable();
}
}
public AbstractProject<?, ?> getProject() {
return project;
}
/**
* {@inheritDoc}
*/
public String getIconFileName() {
return "graph.gif";
}
/**
* {@inheritDoc}
*/
public String getDisplayName() {
return Messages.CoberturaProjectAction_displayName();
}
/**
* {@inheritDoc}
*/
public String getUrlName() {
return "cobertura";
}
/**
* Getter for property 'lastResult'.
*
* @return Value for property 'lastResult'.
*/
public CoberturaBuildAction getLastResult() {
for (AbstractBuild<?, ?> b = getLastBuildToBeConsidered(); b != null; b = b.getPreviousNotFailedBuild()) {
if (b.getResult() == Result.FAILURE || (b.getResult() != Result.SUCCESS && onlyStable))
continue;
CoberturaBuildAction r = b.getAction(CoberturaBuildAction.class);
if (r != null)
return r;
}
return null;
}
private AbstractBuild<?, ?> getLastBuildToBeConsidered(){
return onlyStable ? project.getLastStableBuild() : project.getLastSuccessfulBuild();
}
/**
* Getter for property 'lastResult'.
*
* @return Value for property 'lastResult'.
*/
public Integer getLastResultBuild() {
for (AbstractBuild<?, ?> b = getLastBuildToBeConsidered(); b != null; b = b.getPreviousNotFailedBuild()) {
if (b.getResult() == Result.FAILURE || (b.getResult() != Result.SUCCESS && onlyStable))
continue;
CoberturaBuildAction r = b.getAction(CoberturaBuildAction.class);
if (r != null)
return b.getNumber();
}
return null;
}
public void doGraph(StaplerRequest req, StaplerResponse rsp) throws IOException {
if (getLastResult() != null)
getLastResult().doGraph(req, rsp);
}
public void doIndex(StaplerRequest req, StaplerResponse rsp) throws IOException {
Integer buildNumber = getLastResultBuild();
if (buildNumber == null) {
rsp.sendRedirect2("nodata");
} else {
rsp.sendRedirect2("../" + buildNumber + "/cobertura");
}
}
/**
* {@inheritDoc}
*/
public String getSearchUrl() {
return getUrlName();
}
}