package org.netmelody.cieye.spies.jenkins.jsondomain;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import com.google.common.base.Predicate;
import com.google.common.base.Strings;
import com.google.common.collect.Ordering;
import com.google.common.primitives.Longs;
import static com.google.common.collect.Collections2.filter;
import static com.google.common.collect.Lists.newArrayList;
public final class JobDetail extends Job {
public String displayName;
public String description;
public boolean buildable;
public boolean inQueue;
public boolean keepDependencies;
public boolean concurrentBuild;
public List<Build> builds;
public List<Action> actions;
public Build firstBuild;
public Build lastBuild;
public Build lastCompletedBuild;
public Build lastFailedBuild;
public Build lastStableBuild;
public Build lastSuccessfulBuild;
public Build lastUnstableBuild;
public Build lastUnsuccessfulBuild;
public int nextBuildNumber;
public List<Project> downstreamProjects;
public List<Project> upstreamProjects;
public List<HealthReport> healthReport;
//scm
//property
//queueItem
public String lastBadBuildUrl() {
final Collection<Build> candidates = filter(newArrayList(lastUnstableBuild, lastUnsuccessfulBuild, lastFailedBuild), valid());
if (candidates.isEmpty()) {
return "";
}
return lastFrom(candidates).url;
}
private Predicate<Build> valid() {
return new Predicate<Build>() {
@Override public boolean apply(Build build) {
return (build != null) && (!Strings.isNullOrEmpty(build.url)) && build.number >= 0;
}
};
}
public List<Build> builds() {
return (builds == null) ? new ArrayList<Build>() : builds;
}
private Build lastFrom(final Collection<Build> candidates) {
return new Ordering<Build>() {
@Override public int compare(Build left, Build right) {
return Longs.compare(left.number, right.number);
}
}.max(candidates);
}
}