package com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.features.headline;
import com.google.common.collect.Sets;
import com.smartcodeltd.jenkinsci.plugins.buildmonitor.readability.Lister;
import com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.BuildViewModel;
import com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.JobView;
import java.util.Set;
import static com.google.common.collect.Iterables.contains;
import static com.google.common.collect.Lists.newArrayList;
import static com.google.common.collect.Lists.newLinkedList;
import static hudson.model.Result.*;
public class HeadlineOfFixed implements CandidateHeadline {
private final JobView job;
private final HeadlineConfig config;
public HeadlineOfFixed(JobView job, HeadlineConfig config) {
this.job = job;
this.config = config;
}
@Override
public boolean isApplicableTo(JobView job) {
return didTheJobJustGetFixedWith(job.lastCompletedBuild());
}
@Override
public Headline asJson() {
return new Headline(textFor(job.lastCompletedBuild()));
}
private String textFor(BuildViewModel lastBuild) {
return Lister.describe(
"Back in the green!",
"Fixed after %s committed their changes :-)",
newLinkedList(committersOf(lastBuild))
);
}
private boolean didTheJobJustGetFixedWith(BuildViewModel build) {
return SUCCESS.equals(build.result()) && previousFailed(build);
}
private boolean previousFailed(BuildViewModel build) {
return build.hasPreviousBuild() &&
contains(newArrayList(FAILURE, UNSTABLE, ABORTED), build.previousBuild().result());
}
private Set<String> committersOf(BuildViewModel build) {
return config.displayCommitters
? build.committers()
: Sets.<String>newHashSet();
}
}