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 "";
}
}
}