1 package org.kuali.common.devops.archive.sweep.jenkins.s3;
2
3 import static com.google.common.base.Optional.absent;
4 import static com.google.common.collect.Lists.newArrayList;
5
6 import java.util.List;
7 import java.util.concurrent.Callable;
8
9 import org.kuali.common.aws.s3.S3Service;
10 import org.kuali.common.aws.s3.model.ObjectMetadata;
11 import org.kuali.common.aws.s3.model.ObjectSummary;
12 import org.kuali.common.core.build.ValidatingBuilder;
13 import org.kuali.common.core.validate.annotation.IdiotProofImmutable;
14 import org.kuali.common.util.inform.PercentCompleteInformer;
15
16 import com.google.common.base.Optional;
17 import com.google.common.collect.ImmutableList;
18
19 @IdiotProofImmutable
20 public final class S3ObjectPairCallable implements Callable<List<S3ObjectPair>> {
21
22 private final String bucket;
23 private final Optional<PercentCompleteInformer> informer;
24 private final S3Service s3;
25 private final ImmutableList<ObjectSummary> summaries;
26
27 @Override
28 public List<S3ObjectPair> call() {
29 List<S3ObjectPair> pairs = newArrayList();
30 for (ObjectSummary summary : summaries) {
31 ObjectMetadata metadata = s3.getMetadata(bucket, summary.getKey());
32 S3ObjectPair pair = S3ObjectPair.builder().withMetadata(metadata).withSummary(summary).build();
33 pairs.add(pair);
34 if (informer.isPresent()) {
35 informer.get().incrementProgress();
36 }
37 }
38 return ImmutableList.copyOf(pairs);
39 }
40
41 private S3ObjectPairCallable(Builder builder) {
42 this.s3 = builder.s3;
43 this.summaries = ImmutableList.copyOf(builder.summaries);
44 this.bucket = builder.bucket;
45 this.informer = builder.informer;
46 }
47
48 public static Builder builder() {
49 return new Builder();
50 }
51
52 public static class Builder extends ValidatingBuilder<S3ObjectPairCallable> {
53
54 private String bucket;
55 private S3Service s3;
56 private List<ObjectSummary> summaries;
57 private Optional<PercentCompleteInformer> informer = absent();
58
59 public Builder withBucket(String bucket) {
60 this.bucket = bucket;
61 return this;
62 }
63
64 public Builder withS3(S3Service s3) {
65 this.s3 = s3;
66 return this;
67 }
68
69 public Builder withInformer(Optional<PercentCompleteInformer> informer) {
70 this.informer = informer;
71 return this;
72 }
73
74 public Builder withInformer(PercentCompleteInformer informer) {
75 return withInformer(Optional.of(informer));
76 }
77
78 public Builder withSummaries(List<ObjectSummary> summaries) {
79 this.summaries = summaries;
80 return this;
81 }
82
83 @Override
84 public S3ObjectPairCallable build() {
85 return validate(new S3ObjectPairCallable(this));
86 }
87 }
88
89 public S3Service getS3() {
90 return s3;
91 }
92
93 public List<ObjectSummary> getSummaries() {
94 return summaries;
95 }
96
97 public String getBucket() {
98 return bucket;
99 }
100
101 public Optional<PercentCompleteInformer> getInformer() {
102 return informer;
103 }
104
105 }