1 package org.kuali.common.devops.logic;
2
3 import static com.google.common.base.Stopwatch.createStarted;
4 import static java.util.concurrent.TimeUnit.MILLISECONDS;
5 import static org.kuali.common.util.log.Loggers.newLogger;
6
7 import java.util.List;
8 import java.util.Set;
9 import java.util.concurrent.Callable;
10
11 import javax.validation.ConstraintViolation;
12
13 import org.kuali.common.core.build.ViolationsBuilder;
14 import org.kuali.common.core.validate.annotation.IdiotProofImmutable;
15 import org.kuali.common.devops.metadata.logic.EnvironmentMetadataService;
16 import org.kuali.common.devops.model.Environment;
17 import org.kuali.common.util.inform.PercentCompleteInformer;
18 import org.slf4j.Logger;
19
20 import com.google.common.base.Stopwatch;
21 import com.google.common.collect.ImmutableList;
22
23 @IdiotProofImmutable
24 public final class BuilderFillerCallable implements Callable<Long> {
25
26 private final ImmutableList<Environment.Builder> builders;
27 private final EnvironmentMetadataService service;
28 private final PercentCompleteInformer informer;
29
30 private static final Logger logger = newLogger();
31
32 @Override
33 public Long call() {
34 Stopwatch sw = createStarted();
35 for (Environment.Builder builder : builders) {
36 logger.debug(builder.getFqdn());
37 Environments2.fillIn(builder, service);
38 informer.incrementProgress();
39 }
40 return sw.elapsed(MILLISECONDS);
41 }
42
43 private BuilderFillerCallable(Builder builder) {
44 this.builders = ImmutableList.copyOf(builder.builders);
45 this.service = builder.service;
46 this.informer = builder.informer;
47 }
48
49 public static Builder builder() {
50 return new Builder();
51 }
52
53 public static class Builder extends ViolationsBuilder<BuilderFillerCallable> {
54
55 private List<Environment.Builder> builders;
56 private EnvironmentMetadataService service;
57 private PercentCompleteInformer informer;
58
59 public Builder informer(PercentCompleteInformer informer) {
60 this.informer = informer;
61 return this;
62 }
63
64 public Builder builders(List<Environment.Builder> builders) {
65 this.builders = builders;
66 return this;
67 }
68
69 public Builder service(EnvironmentMetadataService service) {
70 this.service = service;
71 return this;
72 }
73
74 @Override
75 public BuilderFillerCallable build() {
76 return validate(make());
77 }
78
79 @Override
80 public Set<ConstraintViolation<BuilderFillerCallable>> violations() {
81 return violations(make());
82 }
83
84 private BuilderFillerCallable make() {
85 return new BuilderFillerCallable(this);
86 }
87
88 public List<Environment.Builder> getBuilders() {
89 return builders;
90 }
91
92 public void setBuilders(List<Environment.Builder> builders) {
93 this.builders = builders;
94 }
95
96 public EnvironmentMetadataService getService() {
97 return service;
98 }
99
100 public void setService(EnvironmentMetadataService service) {
101 this.service = service;
102 }
103
104 public PercentCompleteInformer getInformer() {
105 return informer;
106 }
107
108 public void setInformer(PercentCompleteInformer informer) {
109 this.informer = informer;
110 }
111
112 }
113
114 public List<Environment.Builder> getBuilders() {
115 return builders;
116 }
117
118 public EnvironmentMetadataService getService() {
119 return service;
120 }
121
122 public PercentCompleteInformer getInformer() {
123 return informer;
124 }
125
126 }