package com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel; import com.smartcodeltd.jenkinsci.plugins.buildmonitor.facade.StaticJenkinsAPIs; import com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.features.*; import com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.features.headline.HeadlineConfig; import hudson.model.Job; import org.jenkinsci.plugins.workflow.job.WorkflowJob; import java.util.List; import static com.google.common.collect.Lists.newArrayList; /** * @author Jan Molak */ public class JobViews { private static final String Claim = "claim"; private static final String Build_Failure_Analyzer = "build-failure-analyzer"; private static final String Groovy_Post_Build = "groovy-postbuild"; private static final String Pipeline = "workflow-aggregator"; private final StaticJenkinsAPIs jenkins; private final com.smartcodeltd.jenkinsci.plugins.buildmonitor.Config config; public JobViews(StaticJenkinsAPIs jenkins, com.smartcodeltd.jenkinsci.plugins.buildmonitor.Config config) { this.jenkins = jenkins; this.config = config; } public JobView viewOf(Job<?, ?> job) { List<Feature> viewFeatures = newArrayList(); // todo: a more elegant way of assembling the features would be nice viewFeatures.add(new HasHeadline(new HeadlineConfig(config.shouldDisplayCommitters()))); viewFeatures.add(new KnowsLastCompletedBuildDetails()); viewFeatures.add(new KnowsCurrentBuildsDetails()); if (jenkins.hasPlugin(Claim)) { viewFeatures.add(new CanBeClaimed()); } if (jenkins.hasPlugin(Build_Failure_Analyzer)) { viewFeatures.add(new CanBeDiagnosedForProblems()); } if (jenkins.hasPlugin(Groovy_Post_Build)) { viewFeatures.add(new HasBadges()); } boolean isPipelineJob = jenkins.hasPlugin(Pipeline) && job instanceof WorkflowJob; return JobView.of(job, viewFeatures, isPipelineJob); } }