1 package org.kuali.common.devops.jenkins.upgrade.model; 2 3 import static com.google.common.base.Preconditions.checkNotNull; 4 import static com.google.common.collect.Lists.newArrayList; 5 import static org.kuali.common.devops.jenkins.upgrade.Jenkins.buildJobs; 6 import static org.kuali.common.util.base.Exceptions.illegalState; 7 import static org.kuali.common.util.base.Precondition.checkNotBlank; 8 9 import java.io.IOException; 10 import java.util.List; 11 12 import org.kuali.common.core.io.UnixFile; 13 14 import com.fasterxml.jackson.databind.annotation.JsonDeserialize; 15 import com.google.common.collect.ImmutableList; 16 17 @JsonDeserialize(builder = JenkinsSummary.Builder.class) 18 public final class JenkinsSummary { 19 20 private final UnixFile basedir; 21 private final ImmutableList<JobSummary> jobs; 22 private final String timeZoneId; 23 24 private JenkinsSummary(Builder builder) { 25 this.basedir = builder.basedir; 26 this.timeZoneId = builder.timeZoneId; 27 this.jobs = ImmutableList.copyOf(builder.jobs); 28 } 29 30 public static JenkinsSummary build(UnixFile basedir, String timeZoneId, long startedBefore) { 31 try { 32 List<JobSummary> jobs = buildJobs(basedir, timeZoneId, startedBefore); 33 return builder().withBasedir(basedir).withJobs(jobs).withTimeZoneId(timeZoneId).build(); 34 } catch (IOException e) { 35 throw illegalState(e); 36 } 37 } 38 39 public static Builder builder() { 40 return new Builder(); 41 } 42 43 public static class Builder implements org.apache.commons.lang3.builder.Builder<JenkinsSummary> { 44 45 private UnixFile basedir; 46 private List<JobSummary> jobs = newArrayList(); 47 private String timeZoneId; 48 49 public Builder withTimeZoneId(String timeZoneId) { 50 this.timeZoneId = timeZoneId; 51 return this; 52 } 53 54 public Builder withBasedir(UnixFile basedir) { 55 this.basedir = basedir; 56 return this; 57 } 58 59 public Builder withJobs(List<JobSummary> jobs) { 60 this.jobs = jobs; 61 return this; 62 } 63 64 @Override 65 public JenkinsSummary build() { 66 return validate(new JenkinsSummary(this)); 67 } 68 69 private static JenkinsSummary validate(JenkinsSummary instance) { 70 checkNotNull(instance.basedir, "basedir"); 71 checkNotNull(instance.jobs, "jobs"); 72 checkNotBlank(instance.timeZoneId, "timeZoneId"); 73 return instance; 74 } 75 } 76 77 public UnixFile getBasedir() { 78 return basedir; 79 } 80 81 public List<JobSummary> getJobs() { 82 return jobs; 83 } 84 85 public String getTimeZoneId() { 86 return timeZoneId; 87 } 88 89 }