1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.jclouds.aws.ec2.domain;
20
21 import static com.google.common.base.Preconditions.checkNotNull;
22
23 import java.util.Date;
24 import java.util.Map;
25 import java.util.Set;
26
27 import javax.annotation.Nullable;
28
29 import org.jclouds.ec2.domain.BlockDevice;
30 import org.jclouds.ec2.domain.InstanceState;
31 import org.jclouds.ec2.domain.RootDeviceType;
32 import org.jclouds.ec2.domain.RunningInstance;
33
34 import com.google.common.collect.ImmutableMap;
35 import com.google.common.collect.ImmutableSet;
36 import com.google.common.collect.Maps;
37 import com.google.common.collect.Sets;
38
39
40
41
42
43
44
45
46 public class AWSRunningInstance extends RunningInstance {
47 public static Builder builder() {
48 return new Builder();
49 }
50
51 public static class Builder extends org.jclouds.ec2.domain.RunningInstance.Builder {
52 private MonitoringState monitoringState;
53 private String placementGroup;
54 private Set<String> productCodes = Sets.newLinkedHashSet();
55 private String subnetId;
56 private String spotInstanceRequestId;
57 private String vpcId;
58 private Map<String, String> securityGroupIdToNames = Maps.newLinkedHashMap();
59
60 public Builder securityGroupIdToNames(Map<String, String> securityGroupIdToNames) {
61 this.securityGroupIdToNames = ImmutableMap.copyOf(checkNotNull(securityGroupIdToNames,
62 "securityGroupIdToNames"));
63 return this;
64 }
65
66 public Builder securityGroupIdToName(String key, String value) {
67 if (key != null && value != null)
68 this.securityGroupIdToNames.put(key, value);
69 return this;
70 }
71
72 public Builder monitoringState(MonitoringState monitoringState) {
73 this.monitoringState = monitoringState;
74 return this;
75 }
76
77 public Builder placementGroup(String placementGroup) {
78 this.placementGroup = placementGroup;
79 return this;
80 }
81
82 public Builder productCodes(Iterable<String> productCodes) {
83 this.productCodes = ImmutableSet.copyOf(checkNotNull(productCodes, "productCodes"));
84 return this;
85 }
86
87 public Builder productCode(String productCode) {
88 if (productCode != null)
89 this.productCodes.add(productCode);
90 return this;
91 }
92
93 public Builder subnetId(String subnetId) {
94 this.subnetId = subnetId;
95 return this;
96 }
97
98 public Builder spotInstanceRequestId(String spotInstanceRequestId) {
99 this.spotInstanceRequestId = spotInstanceRequestId;
100 return this;
101 }
102
103 public Builder vpcId(String vpcId) {
104 this.vpcId = vpcId;
105 return this;
106 }
107
108 @Override
109 public Builder amiLaunchIndex(String amiLaunchIndex) {
110 return Builder.class.cast(super.amiLaunchIndex(amiLaunchIndex));
111 }
112
113 @Override
114 public Builder availabilityZone(String availabilityZone) {
115 return Builder.class.cast(super.availabilityZone(availabilityZone));
116 }
117
118 @Override
119 public Builder devices(Map<String, BlockDevice> ebsBlockDevices) {
120 return Builder.class.cast(super.devices(ebsBlockDevices));
121 }
122
123 @Override
124 public Builder dnsName(String dnsName) {
125 return Builder.class.cast(super.dnsName(dnsName));
126 }
127
128 @Override
129 public Builder imageId(String imageId) {
130 return Builder.class.cast(super.imageId(imageId));
131 }
132
133 @Override
134 public Builder instanceId(String instanceId) {
135 return Builder.class.cast(super.instanceId(instanceId));
136 }
137
138 @Override
139 public Builder instanceState(InstanceState instanceState) {
140 return Builder.class.cast(super.instanceState(instanceState));
141 }
142
143 @Override
144 public Builder instanceType(String instanceType) {
145 return Builder.class.cast(super.instanceType(instanceType));
146 }
147
148 @Override
149 public Builder ipAddress(String ipAddress) {
150 return Builder.class.cast(super.ipAddress(ipAddress));
151 }
152
153 @Override
154 public Builder kernelId(String kernelId) {
155 return Builder.class.cast(super.kernelId(kernelId));
156 }
157
158 @Override
159 public Builder keyName(String keyName) {
160 return Builder.class.cast(super.keyName(keyName));
161 }
162
163 @Override
164 public Builder launchTime(Date launchTime) {
165 return Builder.class.cast(super.launchTime(launchTime));
166 }
167
168 @Override
169 public Builder platform(String platform) {
170 return Builder.class.cast(super.platform(platform));
171 }
172
173 @Override
174 public Builder privateDnsName(String privateDnsName) {
175 return Builder.class.cast(super.privateDnsName(privateDnsName));
176 }
177
178 @Override
179 public Builder privateIpAddress(String privateIpAddress) {
180 return Builder.class.cast(super.privateIpAddress(privateIpAddress));
181 }
182
183 @Override
184 public Builder ramdiskId(String ramdiskId) {
185 return Builder.class.cast(super.ramdiskId(ramdiskId));
186 }
187
188 @Override
189 public Builder reason(String reason) {
190 return Builder.class.cast(super.reason(reason));
191 }
192
193 @Override
194 public Builder region(String region) {
195 return Builder.class.cast(super.region(region));
196 }
197
198 @Override
199 public Builder rootDeviceName(String rootDeviceName) {
200 return Builder.class.cast(super.rootDeviceName(rootDeviceName));
201 }
202
203 @Override
204 public Builder rootDeviceType(RootDeviceType rootDeviceType) {
205 return Builder.class.cast(super.rootDeviceType(rootDeviceType));
206 }
207
208 @Override
209 public Builder virtualizationType(String virtualizationType) {
210 return Builder.class.cast(super.virtualizationType(virtualizationType));
211 }
212
213 @Override
214 public Builder device(String key, BlockDevice value) {
215 return Builder.class.cast(super.device(key, value));
216 }
217
218 @Override
219 public Builder groupId(String groupId) {
220 return Builder.class.cast(super.groupId(groupId));
221 }
222
223 @Override
224 public Builder groupIds(Iterable<String> groupIds) {
225 return Builder.class.cast(super.groupIds(groupIds));
226 }
227
228 @Override
229 public AWSRunningInstance build() {
230 return new AWSRunningInstance(region, securityGroupIdToNames, amiLaunchIndex, dnsName, imageId, instanceId,
231 instanceState, instanceType, ipAddress, kernelId, keyName, launchTime, availabilityZone,
232 virtualizationType, platform, privateDnsName, privateIpAddress, ramdiskId, reason, rootDeviceType,
233 rootDeviceName, ebsBlockDevices, monitoringState, placementGroup, productCodes, subnetId,
234 spotInstanceRequestId, vpcId);
235 }
236
237 }
238
239 private final MonitoringState monitoringState;
240 @Nullable
241 private final String placementGroup;
242 private final Set<String> productCodes;
243 @Nullable
244 private final String subnetId;
245 @Nullable
246 private final String spotInstanceRequestId;
247 @Nullable
248 private final String vpcId;
249 private final Map<String, String> securityGroupIdToNames;
250
251 protected AWSRunningInstance(String region, Map<String, String> securityGroupIdToNames, String amiLaunchIndex,
252 String dnsName, String imageId, String instanceId, InstanceState instanceState, String instanceType,
253 String ipAddress, String kernelId, String keyName, Date launchTime, String availabilityZone,
254 String virtualizationType, String platform, String privateDnsName, String privateIpAddress, String ramdiskId,
255 String reason, RootDeviceType rootDeviceType, String rootDeviceName, Map<String, BlockDevice> ebsBlockDevices,
256 MonitoringState monitoringState, String placementGroup, Iterable<String> productCodes, String subnetId,
257 String spotInstanceRequestId, String vpcId) {
258 super(region, securityGroupIdToNames.values(), amiLaunchIndex, dnsName, imageId, instanceId, instanceState,
259 instanceType, ipAddress, kernelId, keyName, launchTime, availabilityZone, virtualizationType, platform,
260 privateDnsName, privateIpAddress, ramdiskId, reason, rootDeviceType, rootDeviceName, ebsBlockDevices);
261 this.monitoringState = checkNotNull(monitoringState, "monitoringState");
262 this.placementGroup = placementGroup;
263 this.productCodes = ImmutableSet.copyOf(checkNotNull(productCodes, "productCodes"));
264 this.subnetId = subnetId;
265 this.spotInstanceRequestId = spotInstanceRequestId;
266 this.vpcId = vpcId;
267 this.securityGroupIdToNames = ImmutableMap.<String, String> copyOf(checkNotNull(securityGroupIdToNames,
268 "securityGroupIdToNames"));
269 }
270
271 public Map<String, String> getSecurityGroupIdToNames() {
272 return securityGroupIdToNames;
273 }
274
275
276
277
278 public MonitoringState getMonitoringState() {
279 return monitoringState;
280 }
281
282
283
284
285
286 public String getPlacementGroup() {
287 return placementGroup;
288 }
289
290
291
292
293 public Set<String> getProductCodes() {
294 return productCodes;
295 }
296
297
298
299
300 public String getSpotInstanceRequestId() {
301 return spotInstanceRequestId;
302 }
303
304
305
306
307
308 public String getVpcId() {
309 return vpcId;
310 }
311
312
313
314
315
316 public String getSubnetId() {
317 return subnetId;
318 }
319
320 @Override
321 public int hashCode() {
322 final int prime = 31;
323 int result = super.hashCode();
324 result = prime * result + ((placementGroup == null) ? 0 : placementGroup.hashCode());
325 result = prime * result + ((productCodes == null) ? 0 : productCodes.hashCode());
326 result = prime * result + ((spotInstanceRequestId == null) ? 0 : spotInstanceRequestId.hashCode());
327 result = prime * result + ((subnetId == null) ? 0 : subnetId.hashCode());
328 result = prime * result + ((vpcId == null) ? 0 : vpcId.hashCode());
329 return result;
330 }
331
332 @Override
333 public boolean equals(Object obj) {
334 if (this == obj)
335 return true;
336 if (!super.equals(obj))
337 return false;
338 if (getClass() != obj.getClass())
339 return false;
340 AWSRunningInstance other = (AWSRunningInstance) obj;
341 if (placementGroup == null) {
342 if (other.placementGroup != null)
343 return false;
344 } else if (!placementGroup.equals(other.placementGroup))
345 return false;
346 if (productCodes == null) {
347 if (other.productCodes != null)
348 return false;
349 } else if (!productCodes.equals(other.productCodes))
350 return false;
351 if (spotInstanceRequestId == null) {
352 if (other.spotInstanceRequestId != null)
353 return false;
354 } else if (!spotInstanceRequestId.equals(other.spotInstanceRequestId))
355 return false;
356 if (subnetId == null) {
357 if (other.subnetId != null)
358 return false;
359 } else if (!subnetId.equals(other.subnetId))
360 return false;
361 if (vpcId == null) {
362 if (other.vpcId != null)
363 return false;
364 } else if (!vpcId.equals(other.vpcId))
365 return false;
366 return true;
367 }
368
369 @Override
370 public String toString() {
371 return "[region=" + region + ", availabilityZone=" + availabilityZone + ", instanceId=" + instanceId
372 + ", instanceState=" + instanceState + ", instanceType=" + instanceType + ", virtualizationType="
373 + virtualizationType + ", imageId=" + imageId + ", ipAddress=" + ipAddress + ", dnsName=" + dnsName
374 + ", privateIpAddress=" + privateIpAddress + ", privateDnsName=" + privateDnsName + ", keyName=" + keyName
375 + ", platform=" + platform + ", launchTime=" + launchTime + ", rootDeviceName=" + rootDeviceName
376 + ", rootDeviceType=" + rootDeviceType + ", ebsBlockDevices=" + ebsBlockDevices + ", monitoringState="
377 + monitoringState + ", placementGroup=" + placementGroup + ", productCodes=" + productCodes
378 + ", spotInstanceRequestId=" + spotInstanceRequestId + ", subnetId=" + subnetId + ", vpcId=" + vpcId + "]";
379 }
380
381 }