View Javadoc
1   /**
2    * Copyright 2004-2014 The Kuali Foundation
3    *
4    * Licensed under the Educational Community License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    * http://www.opensource.org/licenses/ecl2.php
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
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  }