1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.kuali.common.aws.ec2.model;
17
18 import static com.google.common.base.Optional.absent;
19 import static org.kuali.common.util.base.Precondition.checkMin;
20
21 import org.kuali.common.core.build.ValidatingBuilder;
22 import org.kuali.common.core.validate.annotation.IdiotProofImmutable;
23
24 import com.fasterxml.jackson.annotation.JsonSetter;
25 import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
26 import com.google.common.base.Optional;
27
28 @IdiotProofImmutable
29 @JsonDeserialize(builder = RootVolume.Builder.class)
30 public final class RootVolume {
31
32 private final Optional<Integer> sizeInGigabytes;
33 private final Optional<Boolean> deleteOnTermination;
34
35 private RootVolume(Builder builder) {
36 this.sizeInGigabytes = builder.sizeInGigabytes;
37 this.deleteOnTermination = builder.deleteOnTermination;
38 }
39
40 public static RootVolume create(int sizeInGigabytes, boolean deleteOnTermination) {
41 return builder().withSizeInGigabytes(sizeInGigabytes).withDeleteOnTermination(deleteOnTermination).build();
42 }
43
44 public static Builder builder() {
45 return new Builder();
46 }
47
48 public static class Builder extends ValidatingBuilder<RootVolume> {
49
50 private Optional<Integer> sizeInGigabytes = absent();
51 private Optional<Boolean> deleteOnTermination = absent();
52
53 @JsonSetter
54 public Builder withSizeInGigabytes(Optional<Integer> sizeInGigabytes) {
55 this.sizeInGigabytes = sizeInGigabytes;
56 return this;
57 }
58
59 @JsonSetter
60 public Builder withDeleteOnTermination(Optional<Boolean> deleteOnTermination) {
61 this.deleteOnTermination = deleteOnTermination;
62 return this;
63 }
64
65 public Builder withSizeInGigabytes(int sizeInGigabytes) {
66 return withSizeInGigabytes(Optional.of(sizeInGigabytes));
67 }
68
69 public Builder withDeleteOnTermination(boolean deleteOnTermination) {
70 return withDeleteOnTermination(Optional.of(deleteOnTermination));
71 }
72
73 @Override
74 public RootVolume build() {
75 return validateInstance(validate(new RootVolume(this)));
76 }
77
78 private static RootVolume validateInstance(RootVolume instance) {
79 checkMin(instance.getSizeInGigabytes(), 1, "sizeInGigabytes");
80 return instance;
81 }
82 }
83
84 public Optional<Integer> getSizeInGigabytes() {
85 return sizeInGigabytes;
86 }
87
88 public Optional<Boolean> getDeleteOnTermination() {
89 return deleteOnTermination;
90 }
91
92 }