package hudson.views;
import hudson.Extension;
import hudson.model.Descriptor;
import hudson.model.Job;
import hudson.model.Run;
import hudson.model.TopLevelItem;
import org.kohsuke.stapler.DataBoundConstructor;
public class BuildStatusFilter extends AbstractIncludeExcludeJobFilter {
private boolean neverBuilt;
private boolean building;
private boolean inBuildQueue;
@DataBoundConstructor
public BuildStatusFilter(boolean neverBuilt,
boolean building, boolean inBuildQueue,
String includeExcludeTypeString) {
super(includeExcludeTypeString);
this.neverBuilt = neverBuilt;
this.building = building;
this.inBuildQueue = inBuildQueue;
}
@SuppressWarnings("unchecked")
boolean matches(TopLevelItem item) {
if (item instanceof Job) {
Job job = (Job) item;
if (building && job.isBuilding()) {
return true;
}
if (inBuildQueue && job.isInQueue()) {
return true;
}
Run last = job.getLastBuild();
if (last == null && neverBuilt) {
return true;
}
}
return false;
}
@Extension
public static class DescriptorImpl extends Descriptor<ViewJobFilter> {
@Override
public String getDisplayName() {
return "Build Statuses Filter";
}
@Override
public String getHelpFile() {
return "/plugin/view-job-filters/include-exclude-help.html";
}
}
public boolean isNeverBuilt() {
return neverBuilt;
}
public boolean isBuilding() {
return building;
}
public boolean isInBuildQueue() {
return inBuildQueue;
}
}