package com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.features; import com.google.common.base.Optional; import com.google.common.collect.ImmutableList; import com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.JobView; import com.sonyericsson.jenkins.plugins.bfa.model.FailureCauseBuildAction; import com.sonyericsson.jenkins.plugins.bfa.model.FoundFailureCause; import org.codehaus.jackson.annotate.JsonValue; import java.util.List; import static com.google.common.collect.Lists.newArrayList; public class CanBeDiagnosedForProblems implements Feature<CanBeDiagnosedForProblems.Problems> { private JobView job; public CanBeDiagnosedForProblems() { } @Override public CanBeDiagnosedForProblems of(JobView jobView) { this.job = jobView; return this; } @Override public Problems asJson() { Optional<FailureCauseBuildAction> details = job.lastCompletedBuild().detailsOf(FailureCauseBuildAction.class); return details.isPresent() // would be nice to have .map(Claim(_)).orElse(), but hey... ? new Problems(details.get()) : null; // `null` because we don't want to serialise an empty object } public static class Problems { private final List<String> failures = newArrayList(); public Problems(FailureCauseBuildAction action) { for (FoundFailureCause failure : action.getFoundFailureCauses()) { failures.add(failure.getName()); } } @JsonValue public List<String> value() { return ImmutableList.copyOf(failures); } } }