package hudson.plugins.claim;
import hudson.Extension;
import hudson.model.Hudson;
import hudson.model.Job;
import hudson.model.RootAction;
import hudson.model.Run;
import hudson.model.TopLevelItem;
import hudson.model.View;
import hudson.util.RunList;
import java.util.ArrayList;
import java.util.List;
import org.kohsuke.stapler.Stapler;
@Extension
public class ClaimedBuildsReport implements RootAction {
public ClaimedBuildsReport() {
}
public String getIconFileName() {
return "orange-square.gif";
}
public String getUrlName() {
return "/claims";
}
public Run getFirstFail(Run r) {
Run lastGood = r.getPreviousNotFailedBuild();
Run firstFail;
if (lastGood == null) {
firstFail = r.getParent().getFirstBuild();
} else {
firstFail = lastGood.getNextBuild();
}
return firstFail;
}
public String getClaimantText(Run r) {
ClaimBuildAction claim = r.getAction(ClaimBuildAction.class);
if (claim == null || !claim.isClaimed()) {
return "unclaimed";
}
String reason = claim.getReason();
if (reason != null) {
return "claimed by " + claim.getClaimedBy() + " because: "
+ claim.getReason();
} else {
return "claimed by " + claim.getClaimedBy();
}
}
public View getOwner() {
View view = Stapler.getCurrentRequest().findAncestorObject(View.class);
if (view != null) {
return view;
} else {
return Hudson.getInstance().getPrimaryView();
}
}
public RunList getBuilds() {
List<Run> lastBuilds = new ArrayList<Run>();
for (TopLevelItem item : getOwner().getItems()) {
if (item instanceof Job) {
Job job = (Job) item;
Run lb = job.getLastBuild();
while (lb != null && (lb.hasntStartedYet() || lb.isBuilding()))
lb = lb.getPreviousBuild();
if (lb != null && lb.getAction(ClaimBuildAction.class) != null) {
lastBuilds.add(lb);
}
}
}
return RunList.fromRuns(lastBuilds).failureOnly();
}
public String getDisplayName() {
return "Claim Report";
}
}