package com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.features.headline; import com.google.common.base.Optional; import com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.BuildViewModel; import com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.JobView; import hudson.model.Result; import hudson.model.User; import jenkins.model.CauseOfInterruption; import jenkins.model.InterruptedBuildAction; import static java.lang.String.format; /** * @author Jan Molak */ public class HeadlineOfAborted implements CandidateHeadline { private final JobView job; private final HeadlineConfig config; public HeadlineOfAborted(JobView job, HeadlineConfig config) { this.job = job; this.config = config; } @Override public boolean isApplicableTo(JobView job) { return Result.ABORTED.equals(job.lastBuild().result()); } @Override public Headline asJson() { return new Headline(text(job.lastBuild())); } private String text(BuildViewModel build) { Optional<InterruptedBuildAction> interruption = build.detailsOf(InterruptedBuildAction.class); if (config.displayCommitters && interruption.isPresent()) { Optional<String> username = userResponsibleFor(interruption.get()); if (username.isPresent()) { return format("Execution aborted by %s", username.get()); } } return "Execution aborted"; } private Optional<String> userResponsibleFor(InterruptedBuildAction details) { if (details.getCauses().size() == 1) { CauseOfInterruption cause = details.getCauses().get(0); if (cause instanceof CauseOfInterruption.UserInterruption) { User user = ((CauseOfInterruption.UserInterruption) cause).getUser(); return Optional.of(user.getFullName()); } } return Optional.absent(); } }