package hudson.plugins.rubymetricfu;
import hudson.model.AbstractProject;
import hudson.model.Actionable;
import hudson.model.ProminentProjectAction;
import java.io.IOException;
import org.kohsuke.stapler.StaplerRequest;
import org.kohsuke.stapler.StaplerResponse;
import hudson.model.AbstractBuild;
import hudson.model.AbstractProject;
import hudson.model.Result;
@SuppressWarnings("unchecked")
public class RubyMetricsProjectAction extends Actionable
implements ProminentProjectAction {
protected final AbstractProject<?, ?> project;
public RubyMetricsProjectAction(AbstractProject<?, ?> project) {
this.project = project;
}
public AbstractProject<?, ?> getProject() {
return project;
}
public String getIconFileName() {
return "graph.gif";
}
public String getSearchUrl() {
return getUrlName();
}
public void doFlogGraph(StaplerRequest req, StaplerResponse rsp) throws IOException {
if (getLastResult() != null) {
getLastResult().doFlogGraph(req, rsp);
}
}
public void doFlayGraph(StaplerRequest req, StaplerResponse rsp) throws IOException {
if (getLastResult() != null) {
getLastResult().doFlayGraph(req, rsp);
}
}
public void doRcovGraph(StaplerRequest req, StaplerResponse rsp) throws IOException {
if (getLastResult() != null) {
getLastResult().doRcovGraph(req, rsp);
}
}
public void doIndex(StaplerRequest req, StaplerResponse rsp) throws IOException {
Integer buildNumber = getLastResultBuild();
if (buildNumber == null) {
rsp.sendRedirect2("nodata");
} else {
rsp.sendRedirect2("../" + buildNumber + "/" + getUrlName());
}
}
public String getDisplayName() {
return "Ruby Metrics Report";
}
public String getUrlName() {
return "rubymetrics";
}
public RubyMetricsBuildAction getLastResult() {
for (AbstractBuild<?, ?> b = project.getLastStableBuild(); b != null; b = b.getPreviousNotFailedBuild()) {
if (b.getResult() == Result.FAILURE) {
continue;
}
RubyMetricsBuildAction r = b.getAction(RubyMetricsBuildAction.class);
if (r != null) {
return r;
}
}
return null;
}
public Integer getLastResultBuild() {
for (AbstractBuild<?, ?> b = project.getLastStableBuild(); b != null; b = b.getPreviousNotFailedBuild()) {
if (b.getResult() == Result.FAILURE) {
continue;
}
RubyMetricsBuildAction r = b.getAction(RubyMetricsBuildAction.class);
if (r != null) {
return b.getNumber();
}
}
return null;
}
}