package com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.features;
import com.google.common.base.Predicate;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables;
import com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.JobView;
import static com.google.common.collect.Lists.newArrayList;
import java.util.Iterator;
import java.util.List;
import org.codehaus.jackson.annotate.JsonProperty;
import org.codehaus.jackson.annotate.JsonValue;
import org.jvnet.hudson.plugins.groovypostbuild.GroovyPostbuildAction;
/**
* @author Daniel Beland
*/
public class HasBadges implements Feature<HasBadges.Badges> {
private ActionFilter filter = new ActionFilter();
private JobView job;
public HasBadges() {
}
@Override
public HasBadges of(JobView jobView) {
this.job = jobView;
return this;
}
@Override
public Badges asJson() {
Iterator<GroovyPostbuildAction> badges = Iterables.filter(job.lastBuild().allDetailsOf(GroovyPostbuildAction.class), filter).iterator();
return badges.hasNext()
? new Badges(badges)
: null; // `null` because we don't want to serialise an empty object
}
public static class Badges {
private final List<Badge> badges = newArrayList();
public Badges(Iterator<GroovyPostbuildAction> badgeActions) {
while (badgeActions.hasNext()) {
badges.add(new Badge(badgeActions.next()));
}
}
@JsonValue
public List<Badge> value() {
return ImmutableList.copyOf(badges);
}
}
public static class Badge {
private final GroovyPostbuildAction badge;
public Badge(GroovyPostbuildAction badge) {
this.badge = badge;
}
@JsonProperty
public final String text() {
return badge.getText();
}
@JsonProperty
public final String color() {
return badge.getColor();
}
@JsonProperty
public final String background() {
return badge.getBackground();
}
@JsonProperty
public final String border() {
return badge.getBorder();
}
@JsonProperty
public final String borderColor() {
return badge.getBorderColor();
}
}
private static class ActionFilter implements Predicate<GroovyPostbuildAction> {
@Override
public boolean apply(GroovyPostbuildAction action) {
return action.getIconPath() == null;
}
}
}