package com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.features; import com.google.common.base.Joiner; import com.google.common.collect.ImmutableList; import com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.BuildViewModel; import com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.JobView; import com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.duration.Duration; 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; /** * @author Jan Molak */ public class KnowsCurrentBuildsDetails implements Feature<KnowsCurrentBuildsDetails.CurrentBuilds> { private JobView job; public KnowsCurrentBuildsDetails(/* config */) { } @Override public KnowsCurrentBuildsDetails of(JobView jobView) { this.job = jobView; return this; } @Override public CurrentBuilds asJson() { return new CurrentBuilds(job.currentBuilds()); } private static String formattedDuration(Duration duration) { return null != duration ? duration.value() : ""; } private static String formattedStages(List<String> stages) { if (!stages.isEmpty()) { return "[" + Joiner.on(", ").join(stages) + "]"; } return ""; } public static class CurrentBuilds { private final List<CurrentBuild> builds = newArrayList(); public CurrentBuilds(List<BuildViewModel> currentBuilds) { for (Iterator<BuildViewModel> i = currentBuilds.iterator(); i.hasNext(); ) { builds.add(new CurrentBuild(i.next())); } } @JsonValue public List<CurrentBuild> value() { return ImmutableList.copyOf(builds); } } public static class CurrentBuild { private final BuildViewModel build; public CurrentBuild(BuildViewModel build) { this.build = build; } @JsonProperty public final String name() { return build.name(); } @JsonProperty public final String url() { return build.url(); } @JsonProperty public final String duration() { return formattedDuration(build.elapsedTime()); } @JsonProperty public final String description() { return build.description(); } @JsonProperty public final String pipelineStages() { if (build.isPipeline()) { return formattedStages(build.pipelineStages()); } return ""; } } }