package com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.syntacticsugar;
import com.google.common.base.Supplier;
import com.smartcodeltd.jenkinsci.plugins.buildmonitor.facade.RelativeLocation;
import com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.JobView;
import com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.features.Feature;
import hudson.model.Job;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import static com.google.common.collect.Lists.newArrayList;
public class JobViewRecipe implements Supplier<JobView> {
private Job<?, ?> job;
private RelativeLocation relative;
private Date systemTime = new Date();
private List<Feature> features = newArrayList();
private boolean isPipeline;
public JobViewRecipe of(Job<?, ?> job) {
this.job = job;
this.relative = RelativeLocation.of(job); // default
return this;
}
public JobViewRecipe which(Feature... features) {
this.features = Arrays.asList(features);
return this;
}
public JobViewRecipe isAPipeline() {
this.isPipeline = true;
return this;
}
// todo: should RelativeLocation be a Feature?
public JobViewRecipe with(RelativeLocation relative) {
this.relative = relative;
return this;
}
public JobViewRecipe assuming(Date systemTime) {
this.systemTime = systemTime;
return this;
}
@Override
public JobView get() {
return new JobView(job, features, isPipeline, relative, systemTime);
}
}