You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by ni...@apache.org on 2014/04/02 11:14:30 UTC
[18/25] forking jclouds ec2 api
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/58fe66df/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/domain/Reservation.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/domain/Reservation.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/domain/Reservation.java
new file mode 100644
index 0000000..85db98e
--- /dev/null
+++ b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/domain/Reservation.java
@@ -0,0 +1,228 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.ec2.domain;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.util.Set;
+
+import org.jclouds.javax.annotation.Nullable;
+
+import com.google.common.base.Objects;
+import com.google.common.collect.ComparisonChain;
+import com.google.common.collect.ForwardingSet;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Ordering;
+
+/**
+ *
+ * @see <a href=
+ * "http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-ItemType-ReservationInfoType.html"
+ * />
+ * @author Adrian Cole
+ */
+public class Reservation<T extends RunningInstance> extends ForwardingSet<T> implements Comparable<Reservation<T>> {
+
+ public static <T extends RunningInstance> Builder<T> builder() {
+ return new Builder<T>();
+ }
+
+ public Builder<T> toBuilder() {
+ return Reservation.<T> builder().fromReservation(this);
+ }
+
+ public static class Builder<T extends RunningInstance> {
+ private String region;
+ private String ownerId;
+ private String requesterId;
+ private String reservationId;
+
+ private ImmutableSet.Builder<T> instances = ImmutableSet.<T> builder();
+ private ImmutableSet.Builder<String> groupNames = ImmutableSet.<String> builder();
+
+ /**
+ * @see Reservation#getRegion()
+ */
+ public Builder<T> region(String region) {
+ this.region = region;
+ return this;
+ }
+
+ /**
+ * @see Reservation#getOwnerId()
+ */
+ public Builder<T> ownerId(String ownerId) {
+ this.ownerId = ownerId;
+ return this;
+ }
+
+ /**
+ * @see Reservation#getRequesterId()
+ */
+ public Builder<T> requesterId(String requesterId) {
+ this.requesterId = requesterId;
+ return this;
+ }
+
+ /**
+ * @see Reservation#getReservationId()
+ */
+ public Builder<T> reservationId(String reservationId) {
+ this.reservationId = reservationId;
+ return this;
+ }
+
+ /**
+ * @see Reservation#iterator
+ */
+ public Builder<T> instance(T instance) {
+ this.instances.add(checkNotNull(instance, "instance"));
+ return this;
+ }
+
+ /**
+ * @see Reservation#iterator
+ */
+ public Builder<T> instances(Set<T> instances) {
+ this.instances.addAll(checkNotNull(instances, "instances"));
+ return this;
+ }
+
+ /**
+ * @see Reservation#getGroupNames()
+ */
+ public Builder<T> groupName(String groupName) {
+ this.groupNames.add(checkNotNull(groupName, "groupName"));
+ return this;
+ }
+
+ /**
+ * @see Reservation#getGroupNames()
+ */
+ public Builder<T> groupNames(Iterable<String> groupNames) {
+ this.groupNames = ImmutableSet.<String> builder().addAll(checkNotNull(groupNames, "groupNames"));
+ return this;
+ }
+
+ public Reservation<T> build() {
+ return new Reservation<T>(region, groupNames.build(), instances.build(), ownerId, requesterId, reservationId);
+ }
+
+ public Builder<T> fromReservation(Reservation<T> in) {
+ return region(in.region).ownerId(in.ownerId).requesterId(in.requesterId).reservationId(in.reservationId)
+ .instances(in).groupNames(in.groupNames);
+ }
+ }
+
+ private final String region;
+ private final ImmutableSet<String> groupNames;
+ private final ImmutableSet<T> instances;
+ @Nullable
+ private final String ownerId;
+ @Nullable
+ private final String requesterId;
+ @Nullable
+ private final String reservationId;
+
+ public Reservation(String region, Iterable<String> groupNames, Iterable<T> instances, @Nullable String ownerId,
+ @Nullable String requesterId, @Nullable String reservationId) {
+ this.region = checkNotNull(region, "region");
+ this.groupNames = ImmutableSet.copyOf(checkNotNull(groupNames, "groupNames"));
+ this.instances = ImmutableSet.copyOf(checkNotNull(instances, "instances"));
+ this.ownerId = ownerId;
+ this.requesterId = requesterId;
+ this.reservationId = reservationId;
+ }
+
+ @Override
+ protected Set<T> delegate() {
+ return instances;
+ }
+
+ /**
+ * To be removed in jclouds 1.6 <h4>Warning</h4>
+ *
+ * Especially on EC2 clones that may not support regions, this value is fragile. Consider
+ * alternate means to determine context.
+ */
+ @Deprecated
+ public String getRegion() {
+ return region;
+ }
+
+ /**
+ * Names of the security groups.
+ */
+ public Set<String> getGroupNames() {
+ return groupNames;
+ }
+
+ /**
+ * AWS Access Key ID of the user who owns the reservation.
+ */
+ public String getOwnerId() {
+ return ownerId;
+ }
+
+ /**
+ * The ID of the requester that launched the instances on your behalf (for example, AWS
+ * Management Console or Auto Scaling).
+ */
+ public String getRequesterId() {
+ return requesterId;
+ }
+
+ /**
+ * Unique ID of the reservation.
+ */
+ public String getReservationId() {
+ return reservationId;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hashCode(region, reservationId, super.hashCode());
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null || getClass() != obj.getClass())
+ return false;
+ @SuppressWarnings("unchecked")
+ Reservation<T> that = Reservation.class.cast(obj);
+ return super.equals(that) && Objects.equal(this.region, that.region)
+ && Objects.equal(this.reservationId, that.reservationId);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public String toString() {
+ return Objects.toStringHelper(this).omitNullValues().add("region", region).add("reservationId", reservationId)
+ .add("requesterId", requesterId).add("instances", instances).add("groupNames", groupNames).toString();
+ }
+
+ @Override
+ public int compareTo(Reservation<T> other) {
+ return ComparisonChain.start().compare(region, other.region)
+ .compare(reservationId, other.reservationId, Ordering.natural().nullsLast()).result();
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/58fe66df/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/domain/ReservedInstancesOffering.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/domain/ReservedInstancesOffering.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/domain/ReservedInstancesOffering.java
new file mode 100644
index 0000000..779fe9c
--- /dev/null
+++ b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/domain/ReservedInstancesOffering.java
@@ -0,0 +1,182 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.ec2.domain;
+
+/**
+ *
+ * @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-CreateVolume.html"
+ * />
+ * @author Adrian Cole
+ */
+public class ReservedInstancesOffering implements Comparable<ReservedInstancesOffering> {
+ private final String region;
+ private final String availabilityZone;
+ private final long duration;
+ private final float fixedPrice;
+ private final String instanceType;
+ private final String productDescription;
+ private final String id;
+ private final float usagePrice;
+
+ public ReservedInstancesOffering(String region, String availabilityZone, long duration, float fixedPrice, String instanceType,
+ String productDescription, String reservedInstancesOfferingId, float usagePrice) {
+ this.region = region;
+ this.availabilityZone = availabilityZone;
+ this.duration = duration;
+ this.fixedPrice = fixedPrice;
+ this.instanceType = instanceType;
+ this.productDescription = productDescription;
+ this.id = reservedInstancesOfferingId;
+ this.usagePrice = usagePrice;
+ }
+
+ /**
+ * To be removed in jclouds 1.6 <h4>Warning</h4>
+ *
+ * Especially on EC2 clones that may not support regions, this value is fragile. Consider
+ * alternate means to determine context.
+ */
+ @Deprecated
+ public String getRegion() {
+ return region;
+ }
+
+ /**
+ * @return The Availability Zone in which the Reserved Instance can be used.
+ */
+ public String getAvailabilityZone() {
+ return availabilityZone;
+ }
+
+ /**
+ *
+ * @return The duration of the Reserved Instance, in seconds
+ */
+ public long getDuration() {
+ return duration;
+ }
+
+ /**
+ *
+ * @return The purchase price of the Reserved Instance.
+ */
+ public float getFixedPrice() {
+ return fixedPrice;
+ }
+
+ /**
+ *
+ * @return The instance type on which the Reserved Instance can be used.
+ */
+ public String getInstanceType() {
+ return instanceType;
+ }
+
+ /**
+ *
+ * @return The Reserved Instance description.
+ */
+ public String getProductDescription() {
+ return productDescription;
+ }
+
+ /**
+ * @return The ID of the Reserved Instance offering.
+ */
+ public String getId() {
+ return id;
+ }
+
+ /**
+ *
+ * @return The usage price of the Reserved Instance, per hour.
+ */
+ public float getUsagePrice() {
+ return usagePrice;
+ }
+
+ @Override
+ public int compareTo(ReservedInstancesOffering o) {
+ return id.compareTo(o.id);
+ }
+
+ @Override
+ public String toString() {
+ return "[availabilityZone=" + availabilityZone + ", duration=" + duration
+ + ", fixedPrice=" + fixedPrice + ", id=" + id + ", instanceType=" + instanceType + ", productDescription="
+ + productDescription + ", region=" + region + ", usagePrice=" + usagePrice + "]";
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((availabilityZone == null) ? 0 : availabilityZone.hashCode());
+ result = prime * result + (int) (duration ^ (duration >>> 32));
+ result = prime * result + Float.floatToIntBits(fixedPrice);
+ result = prime * result + ((id == null) ? 0 : id.hashCode());
+ result = prime * result + ((instanceType == null) ? 0 : instanceType.hashCode());
+ result = prime * result + ((productDescription == null) ? 0 : productDescription.hashCode());
+ result = prime * result + ((region == null) ? 0 : region.hashCode());
+ result = prime * result + Float.floatToIntBits(usagePrice);
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ ReservedInstancesOffering other = (ReservedInstancesOffering) obj;
+ if (availabilityZone == null) {
+ if (other.availabilityZone != null)
+ return false;
+ } else if (!availabilityZone.equals(other.availabilityZone))
+ return false;
+ if (duration != other.duration)
+ return false;
+ if (Float.floatToIntBits(fixedPrice) != Float.floatToIntBits(other.fixedPrice))
+ return false;
+ if (id == null) {
+ if (other.id != null)
+ return false;
+ } else if (!id.equals(other.id))
+ return false;
+ if (instanceType == null) {
+ if (other.instanceType != null)
+ return false;
+ } else if (!instanceType.equals(other.instanceType))
+ return false;
+ if (productDescription == null) {
+ if (other.productDescription != null)
+ return false;
+ } else if (!productDescription.equals(other.productDescription))
+ return false;
+ if (region == null) {
+ if (other.region != null)
+ return false;
+ } else if (!region.equals(other.region))
+ return false;
+ if (Float.floatToIntBits(usagePrice) != Float.floatToIntBits(other.usagePrice))
+ return false;
+ return true;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/58fe66df/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/domain/RootDeviceType.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/domain/RootDeviceType.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/domain/RootDeviceType.java
new file mode 100644
index 0000000..687d842
--- /dev/null
+++ b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/domain/RootDeviceType.java
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.ec2.domain;
+
+import com.google.common.base.CaseFormat;
+
+/**
+ * The root device type used by the AMI. The AMI can use an Amazon EBS or instance store root
+ * device.
+ *
+ * @author Adrian Cole
+ */
+public enum RootDeviceType {
+
+ INSTANCE_STORE,
+
+ EBS, UNRECOGNIZED;
+
+ public String value() {
+ return CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.LOWER_HYPHEN, name());
+ }
+
+ public String toString() {
+ return value();
+ }
+
+ public static RootDeviceType fromValue(String v) {
+ try {
+ return valueOf(CaseFormat.LOWER_HYPHEN.to(CaseFormat.UPPER_UNDERSCORE, v));
+ } catch (IllegalArgumentException e) {
+ return UNRECOGNIZED;
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/58fe66df/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/domain/RunningInstance.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/domain/RunningInstance.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/domain/RunningInstance.java
new file mode 100644
index 0000000..725165a
--- /dev/null
+++ b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/domain/RunningInstance.java
@@ -0,0 +1,525 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.ec2.domain;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.util.Date;
+import java.util.Map;
+import java.util.Set;
+
+import org.jclouds.javax.annotation.Nullable;
+
+import com.google.common.base.Objects;
+import com.google.common.base.Objects.ToStringHelper;
+import com.google.common.base.Strings;
+import com.google.common.collect.ComparisonChain;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Ordering;
+import com.google.common.collect.Sets;
+
+/**
+ *
+ * @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-ItemType-RunningInstancesItemType.html"
+ * />
+ * @author Adrian Cole
+ */
+public class RunningInstance implements Comparable<RunningInstance> {
+
+ public static Builder<?> builder() {
+ return new ConcreteBuilder();
+ }
+
+ public Builder<?> toBuilder() {
+ return new ConcreteBuilder().fromRunningInstance(this);
+ }
+
+ public abstract static class Builder<T extends Builder<T>> {
+ protected abstract T self();
+
+ protected String region;
+ protected Set<String> groupNames = Sets.newLinkedHashSet();
+ protected String amiLaunchIndex;
+ protected String dnsName;
+ protected String imageId;
+ protected String instanceId;
+ protected InstanceState instanceState;
+ protected String rawState;
+ protected String instanceType;
+ protected String ipAddress;
+ protected String kernelId;
+ protected String keyName;
+ protected Date launchTime;
+ protected String availabilityZone;
+ protected String virtualizationType = "paravirtual";
+ protected String platform;
+ protected String privateDnsName;
+ protected String privateIpAddress;
+ protected String ramdiskId;
+ protected String reason;
+ protected RootDeviceType rootDeviceType = RootDeviceType.INSTANCE_STORE;
+ protected String rootDeviceName;
+ protected Map<String, BlockDevice> ebsBlockDevices = Maps.newLinkedHashMap();
+ protected Map<String, String> tags = Maps.newLinkedHashMap();
+
+ public T tags(Map<String, String> tags) {
+ this.tags = ImmutableMap.copyOf(checkNotNull(tags, "tags"));
+ return self();
+ }
+
+ public T tag(String key, String value) {
+ if (key != null)
+ this.tags.put(key, Strings.nullToEmpty(value));
+ return self();
+ }
+
+ public T region(String region) {
+ this.region = region;
+ return self();
+ }
+
+ public T groupNames(Iterable<String> groupNames) {
+ this.groupNames = ImmutableSet.copyOf(checkNotNull(groupNames, "groupNames"));
+ return self();
+ }
+
+ public T groupName(String groupName) {
+ if (groupName != null)
+ this.groupNames.add(groupName);
+ return self();
+ }
+
+ public T amiLaunchIndex(String amiLaunchIndex) {
+ this.amiLaunchIndex = amiLaunchIndex;
+ return self();
+ }
+
+ public T dnsName(String dnsName) {
+ this.dnsName = dnsName;
+ return self();
+ }
+
+ public T imageId(String imageId) {
+ this.imageId = imageId;
+ return self();
+ }
+
+ public T instanceId(String instanceId) {
+ this.instanceId = instanceId;
+ return self();
+ }
+
+ public T instanceState(InstanceState instanceState) {
+ this.instanceState = instanceState;
+ return self();
+ }
+
+ public T rawState(String rawState) {
+ this.rawState = rawState;
+ return self();
+ }
+
+ public T instanceType(String instanceType) {
+ this.instanceType = instanceType;
+ return self();
+ }
+
+ public T ipAddress(String ipAddress) {
+ this.ipAddress = ipAddress;
+ return self();
+ }
+
+ public T kernelId(String kernelId) {
+ this.kernelId = kernelId;
+ return self();
+ }
+
+ public T keyName(String keyName) {
+ this.keyName = keyName;
+ return self();
+ }
+
+ public T launchTime(Date launchTime) {
+ this.launchTime = launchTime;
+ return self();
+ }
+
+ public T availabilityZone(String availabilityZone) {
+ this.availabilityZone = availabilityZone;
+ return self();
+ }
+
+ public T virtualizationType(String virtualizationType) {
+ this.virtualizationType = virtualizationType;
+ return self();
+ }
+
+ public T platform(String platform) {
+ this.platform = platform;
+ return self();
+ }
+
+ public T privateDnsName(String privateDnsName) {
+ this.privateDnsName = privateDnsName;
+ return self();
+ }
+
+ public T privateIpAddress(String privateIpAddress) {
+ this.privateIpAddress = privateIpAddress;
+ return self();
+ }
+
+ public T ramdiskId(String ramdiskId) {
+ this.ramdiskId = ramdiskId;
+ return self();
+ }
+
+ public T reason(String reason) {
+ this.reason = reason;
+ return self();
+ }
+
+ public T rootDeviceType(RootDeviceType rootDeviceType) {
+ this.rootDeviceType = rootDeviceType;
+ return self();
+ }
+
+ public T rootDeviceName(String rootDeviceName) {
+ this.rootDeviceName = rootDeviceName;
+ return self();
+ }
+
+ public T devices(Map<String, BlockDevice> ebsBlockDevices) {
+ this.ebsBlockDevices = ImmutableMap.copyOf(checkNotNull(ebsBlockDevices, "ebsBlockDevices"));
+ return self();
+ }
+
+ public T device(String key, BlockDevice value) {
+ if (key != null && value != null)
+ this.ebsBlockDevices.put(key, value);
+ return self();
+ }
+
+ public T fromRunningInstance(RunningInstance in) {
+ return region(in.region).groupNames(in.groupNames).amiLaunchIndex(in.amiLaunchIndex).dnsName(in.dnsName)
+ .imageId(in.imageId).instanceId(in.instanceId).instanceState(in.instanceState).rawState(in.rawState)
+ .instanceType(in.instanceType).ipAddress(in.ipAddress).kernelId(in.kernelId).keyName(in.keyName)
+ .launchTime(in.launchTime).availabilityZone(in.availabilityZone)
+ .virtualizationType(in.virtualizationType).platform(in.platform).privateDnsName(in.privateDnsName)
+ .privateIpAddress(in.privateIpAddress).ramdiskId(in.ramdiskId).reason(in.reason)
+ .rootDeviceType(in.rootDeviceType).rootDeviceName(in.rootDeviceName).devices(in.ebsBlockDevices)
+ .tags(in.tags);
+ }
+
+ public abstract RunningInstance build();
+
+ }
+
+ private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
+ @Override
+ protected ConcreteBuilder self() {
+ return this;
+ }
+
+ @Override
+ public RunningInstance build() {
+ return new RunningInstance(region, groupNames, amiLaunchIndex, dnsName, imageId, instanceId, instanceState,
+ rawState, instanceType, ipAddress, kernelId, keyName, launchTime, availabilityZone, virtualizationType,
+ platform, privateDnsName, privateIpAddress, ramdiskId, reason, rootDeviceType, rootDeviceName,
+ ebsBlockDevices, tags);
+ }
+ }
+
+ protected final String region;
+ protected final Set<String> groupNames;
+ protected final String amiLaunchIndex;
+ @Nullable
+ protected final String dnsName;
+ protected final String imageId;
+ protected final String instanceId;
+ protected final InstanceState instanceState;
+ protected final String rawState;
+ protected final String instanceType;
+ @Nullable
+ protected final String ipAddress;
+ @Nullable
+ protected final String kernelId;
+ @Nullable
+ protected final String keyName;
+ protected final Date launchTime;
+ protected final String availabilityZone;
+ protected final String virtualizationType;
+ @Nullable
+ protected final String platform;
+ @Nullable
+ protected final String privateDnsName;
+ @Nullable
+ protected final String privateIpAddress;
+ @Nullable
+ protected final String ramdiskId;
+ @Nullable
+ protected final String reason;
+ protected final RootDeviceType rootDeviceType;
+ @Nullable
+ protected final String rootDeviceName;
+ protected final Map<String, BlockDevice> ebsBlockDevices;
+ protected final Map<String, String> tags;
+
+ protected RunningInstance(String region, Iterable<String> groupNames, @Nullable String amiLaunchIndex,
+ @Nullable String dnsName, String imageId, String instanceId, InstanceState instanceState, String rawState,
+ String instanceType, @Nullable String ipAddress, @Nullable String kernelId, @Nullable String keyName,
+ Date launchTime, String availabilityZone, String virtualizationType, @Nullable String platform,
+ @Nullable String privateDnsName, @Nullable String privateIpAddress, @Nullable String ramdiskId,
+ @Nullable String reason, RootDeviceType rootDeviceType, @Nullable String rootDeviceName,
+ Map<String, BlockDevice> ebsBlockDevices, Map<String, String> tags) {
+ this.region = checkNotNull(region, "region");
+ this.amiLaunchIndex = amiLaunchIndex; // nullable on runinstances.
+ this.dnsName = dnsName; // nullable on runinstances.
+ this.imageId = imageId; // nullable on runinstances.
+ this.instanceId = checkNotNull(instanceId, "instanceId");
+ this.instanceState = checkNotNull(instanceState, "instanceState for %s/%s", region, instanceId);
+ this.rawState = checkNotNull(rawState, "rawState for %s/%s", region, instanceId);
+ this.instanceType = checkNotNull(instanceType, "instanceType for %s/%s", region, instanceId);
+ this.ipAddress = ipAddress;
+ this.kernelId = kernelId;
+ this.keyName = keyName;
+ this.launchTime = launchTime;// nullable on spot.
+ this.availabilityZone = availabilityZone;// nullable on spot.
+ this.virtualizationType = virtualizationType;
+ this.platform = platform;
+ this.privateDnsName = privateDnsName;// nullable on runinstances.
+ this.privateIpAddress = privateIpAddress;// nullable on runinstances.
+ this.ramdiskId = ramdiskId;
+ this.reason = reason;
+ this.rootDeviceType = checkNotNull(rootDeviceType, "rootDeviceType for %s/%s", region, instanceId);
+ this.rootDeviceName = rootDeviceName;
+ this.ebsBlockDevices = ImmutableMap.copyOf(checkNotNull(ebsBlockDevices, "ebsBlockDevices for %s/%s", region, instanceId));
+ this.groupNames = ImmutableSet.copyOf(checkNotNull(groupNames, "groupNames for %s/%s", region, instanceId));
+ this.tags = ImmutableMap.<String, String> copyOf(checkNotNull(tags, "tags"));
+ }
+
+ /**
+ * To be removed in jclouds 1.6 <h4>Warning</h4>
+ *
+ * Especially on EC2 clones that may not support regions, this value is fragile. Consider
+ * alternate means to determine context.
+ */
+ @Deprecated
+ public String getRegion() {
+ return region;
+ }
+
+ /**
+ * The AMI launch index, which can be used to find this instance within the launch group. For
+ * more information, go to the Metadata section of the Amazon Elastic Compute Cloud Developer
+ * Guide.
+ *
+ * @see <a href="http://docs.amazonwebservices.com/AWSEC2/2010-08-31/DeveloperGuide/" />
+ */
+ public String getAmiLaunchIndex() {
+ return amiLaunchIndex;
+ }
+
+ /**
+ * The public DNS name assigned to the instance. This DNS name is contactable from outside the
+ * Amazon EC2 network. This element remains empty until the instance enters a running state.
+ */
+ public String getDnsName() {
+ return dnsName;
+ }
+
+ /**
+ * Image ID of the AMI used to launch the instance.
+ */
+ public String getImageId() {
+ return imageId;
+ }
+
+ /**
+ * Unique ID of the instance launched.
+ */
+ public String getId() {
+ return instanceId;
+ }
+
+ /**
+ * The current state of the instance.
+ */
+ public InstanceState getInstanceState() {
+ return instanceState;
+ }
+
+ /**
+ * The current state of the instance, as returned literally from the input XML
+ */
+ public String getRawState() {
+ return rawState;
+ }
+
+ /**
+ * The instance type.
+ */
+ public String getInstanceType() {
+ return instanceType;
+ }
+
+ /**
+ * Specifies the IP address of the instance.
+ */
+ public String getIpAddress() {
+ return ipAddress;
+ }
+
+ /**
+ * Optional. Kernel associated with this instance.
+ */
+ public String getKernelId() {
+ return kernelId;
+ }
+
+ /**
+ * If this instance was launched with an associated key pair, this displays the key pair name.
+ */
+ public String getKeyName() {
+ return keyName;
+ }
+
+ /**
+ * The time the instance launched.
+ */
+ public Date getLaunchTime() {
+ return launchTime;
+ }
+
+ /**
+ * The location where the instance launched.
+ */
+ public String getAvailabilityZone() {
+ return availabilityZone;
+ }
+
+ /**
+ * Specifies the instance's virtualization type. Valid values are paravirtual or hvm.
+ */
+ public String getVirtualizationType() {
+ return virtualizationType;
+ }
+
+ /**
+ * Platform of the instance (e.g., Windows).
+ */
+ public String getPlatform() {
+ return platform;
+ }
+
+ /**
+ * The private DNS name assigned to the instance. This DNS name can only be used inside the
+ * Amazon EC2 network. This element remains empty until the instance enters a running state.
+ */
+ public String getPrivateDnsName() {
+ return privateDnsName;
+ }
+
+ /**
+ * Specifies the private IP address that is assigned to the instance (Amazon VPC).
+ */
+ public String getPrivateIpAddress() {
+ return privateIpAddress;
+ }
+
+ /**
+ * Optional. RAM disk associated with this instance.
+ */
+ public String getRamdiskId() {
+ return ramdiskId;
+ }
+
+ /**
+ * Reason for the most recent state transition. This might be an empty string.
+ */
+ public String getReason() {
+ return reason;
+ }
+
+ public RootDeviceType getRootDeviceType() {
+ return rootDeviceType;
+ }
+
+ public String getRootDeviceName() {
+ return rootDeviceName;
+ }
+
+ /**
+ * EBS volumes associated with the instance.
+ */
+ public Map<String, BlockDevice> getEbsBlockDevices() {
+ return ebsBlockDevices;
+ }
+
+ /**
+ * Names of the security groups.
+ */
+ public Set<String> getGroupNames() {
+ return groupNames;
+ }
+
+ /**
+ * tags that are present in the instance
+ */
+ public Map<String, String> getTags() {
+ return tags;
+ }
+
+ @Override
+ public int compareTo(RunningInstance other) {
+ return ComparisonChain.start().compare(region, other.region).compare(instanceId, other.instanceId, Ordering.natural().nullsLast()).result();
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hashCode(region, instanceId);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null || getClass() != obj.getClass())
+ return false;
+ RunningInstance that = RunningInstance.class.cast(obj);
+ return Objects.equal(this.region, that.region) && Objects.equal(this.instanceId, that.instanceId);
+ }
+
+ protected ToStringHelper string() {
+ return Objects.toStringHelper(this).omitNullValues().add("region", region)
+ .add("availabilityZone", availabilityZone).add("id", instanceId).add("state", rawState)
+ .add("type", instanceType).add("virtualizationType", virtualizationType).add("imageId", imageId)
+ .add("ipAddress", ipAddress).add("dnsName", dnsName).add("privateIpAddress", privateIpAddress)
+ .add("privateDnsName", privateDnsName).add("keyName", keyName).add("groupNames", groupNames)
+ .add("platform", platform).add("launchTime", launchTime).add("rootDeviceName", rootDeviceName)
+ .add("rootDeviceType", rootDeviceType).add("ebsBlockDevices", ebsBlockDevices).add("tags", tags);
+ }
+
+ @Override
+ public String toString() {
+ return string().toString();
+ }
+
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/58fe66df/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/domain/SecurityGroup.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/domain/SecurityGroup.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/domain/SecurityGroup.java
new file mode 100644
index 0000000..caccebc
--- /dev/null
+++ b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/domain/SecurityGroup.java
@@ -0,0 +1,229 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.ec2.domain;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.util.Set;
+
+import org.jclouds.javax.annotation.Nullable;
+import org.jclouds.net.domain.IpPermission;
+
+import com.google.common.base.Objects;
+import com.google.common.base.Objects.ToStringHelper;
+import com.google.common.collect.ForwardingSet;
+import com.google.common.collect.ImmutableSet;
+
+/**
+ *
+ * @see <a href=
+ * "http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-ItemType-SecurityGroupItemType.html"
+ * />
+ * @author Adrian Cole
+ */
+public class SecurityGroup extends ForwardingSet<IpPermission> {
+
+ public static Builder<?> builder() {
+ return new ConcreteBuilder();
+ }
+
+ public Builder<?> toBuilder() {
+ return new ConcreteBuilder().fromSecurityGroup(this);
+ }
+
+ public abstract static class Builder<T extends Builder<T>> {
+ protected abstract T self();
+
+ protected String region;
+ protected String id;
+ protected String name;
+ protected String ownerId;
+ protected String description;
+ protected ImmutableSet.Builder<IpPermission> ipPermissions = ImmutableSet.<IpPermission> builder();
+
+ /**
+ * @see SecurityGroup#getRegion()
+ */
+ public T region(String region) {
+ this.region = region;
+ return self();
+ }
+
+ /**
+ * @see SecurityGroup#getId()
+ */
+ public T id(String id) {
+ this.id = id;
+ return self();
+ }
+
+ /**
+ * @see SecurityGroup#getName()
+ */
+ public T name(String name) {
+ this.name = name;
+ return self();
+ }
+
+ /**
+ * @see SecurityGroup#getOwnerId()
+ */
+ public T ownerId(String ownerId) {
+ this.ownerId = ownerId;
+ return self();
+ }
+
+ /**
+ * @see SecurityGroup#getDescription()
+ */
+ public T description(String description) {
+ this.description = description;
+ return self();
+ }
+
+ /**
+ * @see SecurityGroup#delegate()
+ */
+ public T role(IpPermission role) {
+ this.ipPermissions.add(role);
+ return self();
+ }
+
+ /**
+ * @see SecurityGroup#delegate()
+ */
+ public T ipPermissions(Iterable<IpPermission> ipPermissions) {
+ this.ipPermissions.addAll(checkNotNull(ipPermissions, "ipPermissions"));
+ return self();
+ }
+
+ /**
+ * @see SecurityGroup#delegate()
+ */
+ public T ipPermission(IpPermission ipPermission) {
+ this.ipPermissions.add(checkNotNull(ipPermission, "ipPermission"));
+ return self();
+ }
+
+ public SecurityGroup build() {
+ return new SecurityGroup(region, id, name, ownerId, description, ipPermissions.build());
+ }
+
+ public T fromSecurityGroup(SecurityGroup in) {
+ return region(in.region).id(in.id).name(in.name).ownerId(in.ownerId).description(in.description)
+ .ipPermissions(in);
+ }
+ }
+
+ private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
+ @Override
+ protected ConcreteBuilder self() {
+ return this;
+ }
+ }
+
+ private final String region;
+ private final String id;
+ private final String name;
+ private final String ownerId;
+ private final String description;
+ private final Set<IpPermission> ipPermissions;
+
+ public SecurityGroup(String region, String id, String name, String ownerId, String description,
+ Iterable<IpPermission> ipPermissions) {
+ this.region = checkNotNull(region, "region");
+ this.id = id;
+ this.name = name;
+ this.ownerId = ownerId;
+ this.description = description;
+ this.ipPermissions = ImmutableSet.copyOf(checkNotNull(ipPermissions, "ipPermissions"));
+ }
+
+ /**
+ * To be removed in jclouds 1.6 <h4>Warning</h4>
+ *
+ * Especially on EC2 clones that may not support regions, this value is
+ * fragile. Consider alternate means to determine context.
+ */
+ @Deprecated
+ public String getRegion() {
+ return region;
+ }
+
+ /**
+ * id of the security group. Not in all EC2 impls
+ */
+ @Nullable
+ public String getId() {
+ return id;
+ }
+
+ /**
+ * Name of the security group.
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * AWS Access Key ID of the owner of the security group.
+ */
+ public String getOwnerId() {
+ return ownerId;
+ }
+
+ /**
+ * Description of the security group.
+ */
+ public String getDescription() {
+ return description;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hashCode(region, id, name, ownerId);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null || getClass() != obj.getClass())
+ return false;
+ SecurityGroup that = SecurityGroup.class.cast(obj);
+ return Objects.equal(this.region, that.region)
+ && Objects.equal(this.id, that.id)
+ && Objects.equal(this.name, that.name)
+ && Objects.equal(this.ownerId, that.ownerId);
+ }
+
+ protected ToStringHelper string() {
+ return Objects.toStringHelper(this).omitNullValues().add("region", region).add("id", id).add("name", name)
+ .add("ownerId", ownerId).add("description", description)
+ .add("ipPermissions", ipPermissions.size() == 0 ? null : ipPermissions);
+ }
+
+ @Override
+ public String toString() {
+ return string().toString();
+ }
+
+ @Override
+ protected Set<IpPermission> delegate() {
+ return ipPermissions;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/58fe66df/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/domain/Snapshot.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/domain/Snapshot.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/domain/Snapshot.java
new file mode 100644
index 0000000..1800d33
--- /dev/null
+++ b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/domain/Snapshot.java
@@ -0,0 +1,235 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.ec2.domain;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.util.Date;
+
+/**
+ *
+ * @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-CreateSnapshot.html"
+ * />
+ * @author Adrian Cole
+ */
+public class Snapshot implements Comparable<Snapshot> {
+ public static enum Status {
+ PENDING, COMPLETED, ERROR, UNRECOGNIZED;
+ public String value() {
+ return name().toLowerCase();
+ }
+
+ @Override
+ public String toString() {
+ return value();
+ }
+
+ public static Status fromValue(String status) {
+ try {
+ return valueOf(checkNotNull(status, "status").toUpperCase());
+ } catch (IllegalArgumentException e) {
+ return UNRECOGNIZED;
+ }
+ }
+ }
+
+ private final String region;
+ private final String id;
+ private final String volumeId;
+ private final int volumeSize;
+ private final Status status;
+ private final Date startTime;
+ private final int progress;
+ private final String ownerId;
+ private final String description;
+ private final String ownerAlias;
+
+ public Snapshot(String region, String id, String volumeId, int volumeSize, Status status, Date startTime,
+ int progress, String ownerId, String description, String ownerAlias) {
+ this.region = checkNotNull(region, "region");
+ this.id = id;
+ this.volumeId = volumeId;
+ this.volumeSize = volumeSize;
+ this.status = status;
+ this.startTime = startTime;
+ this.progress = progress;
+ this.ownerId = ownerId;
+ this.description = description;
+ this.ownerAlias = ownerAlias;
+ }
+
+ /**
+ * To be removed in jclouds 1.6 <h4>Warning</h4>
+ *
+ * Especially on EC2 clones that may not support regions, this value is fragile. Consider
+ * alternate means to determine context.
+ */
+ @Deprecated
+ public String getRegion() {
+ return region;
+ }
+
+ /**
+ * The ID of the snapshot.
+ */
+ public String getId() {
+ return id;
+ }
+
+ /**
+ * The ID of the volume.
+ */
+ public String getVolumeId() {
+ return volumeId;
+ }
+
+ /**
+ * The size of the volume, in GiB.
+ */
+ public int getVolumeSize() {
+ return volumeSize;
+ }
+
+ /**
+ * Snapshot state (e.g., pending, completed, or error)
+ */
+ public Status getStatus() {
+ return status;
+ }
+
+ /**
+ * Time stamp when the snapshot was initiated.
+ */
+ public Date getStartTime() {
+ return startTime;
+ }
+
+ /**
+ * The progress of the snapshot, in percentage.
+ */
+ public int getProgress() {
+ return progress;
+ }
+
+ /**
+ * AWS Access Key ID of the user who owns the snapshot.
+ */
+ public String getOwnerId() {
+ return ownerId;
+ }
+
+ /**
+ * Description of the snapshot.
+ */
+ public String getDescription() {
+ return description;
+ }
+
+ /**
+ * The AWS identity alias (e.g., "amazon", "redhat", "self", etc.) or AWS identity ID that owns
+ * the AMI.
+ */
+ public String getOwnerAlias() {
+ return ownerAlias;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((description == null) ? 0 : description.hashCode());
+ result = prime * result + ((id == null) ? 0 : id.hashCode());
+ result = prime * result + ((ownerAlias == null) ? 0 : ownerAlias.hashCode());
+ result = prime * result + ((ownerId == null) ? 0 : ownerId.hashCode());
+ result = prime * result + progress;
+ result = prime * result + ((region == null) ? 0 : region.hashCode());
+ result = prime * result + ((startTime == null) ? 0 : startTime.hashCode());
+ result = prime * result + ((status == null) ? 0 : status.hashCode());
+ result = prime * result + ((volumeId == null) ? 0 : volumeId.hashCode());
+ result = prime * result + volumeSize;
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ Snapshot other = (Snapshot) obj;
+ if (description == null) {
+ if (other.description != null)
+ return false;
+ } else if (!description.equals(other.description))
+ return false;
+ if (id == null) {
+ if (other.id != null)
+ return false;
+ } else if (!id.equals(other.id))
+ return false;
+ if (ownerAlias == null) {
+ if (other.ownerAlias != null)
+ return false;
+ } else if (!ownerAlias.equals(other.ownerAlias))
+ return false;
+ if (ownerId == null) {
+ if (other.ownerId != null)
+ return false;
+ } else if (!ownerId.equals(other.ownerId))
+ return false;
+ if (progress != other.progress)
+ return false;
+ if (region == null) {
+ if (other.region != null)
+ return false;
+ } else if (!region.equals(other.region))
+ return false;
+ if (startTime == null) {
+ if (other.startTime != null)
+ return false;
+ } else if (!startTime.equals(other.startTime))
+ return false;
+ if (status == null) {
+ if (other.status != null)
+ return false;
+ } else if (!status.equals(other.status))
+ return false;
+ if (volumeId == null) {
+ if (other.volumeId != null)
+ return false;
+ } else if (!volumeId.equals(other.volumeId))
+ return false;
+ if (volumeSize != other.volumeSize)
+ return false;
+ return true;
+ }
+
+ @Override
+ public String toString() {
+ return "Snapshot [description=" + description + ", id=" + id + ", ownerAlias=" + ownerAlias + ", ownerId="
+ + ownerId + ", progress=" + progress + ", startTime=" + startTime + ", status=" + status + ", volumeId="
+ + volumeId + ", volumeSize=" + volumeSize + "]";
+ }
+
+ @Override
+ public int compareTo(Snapshot o) {
+ return startTime.compareTo(o.startTime);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/58fe66df/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/domain/Subnet.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/domain/Subnet.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/domain/Subnet.java
new file mode 100644
index 0000000..5e14ad8
--- /dev/null
+++ b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/domain/Subnet.java
@@ -0,0 +1,253 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.ec2.domain;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.util.Map;
+
+import com.google.common.base.Objects;
+import com.google.common.base.Objects.ToStringHelper;
+import com.google.common.collect.ImmutableMap;
+
+/**
+ * Amazon EC2 VPCs contain one or more subnets.
+ *
+ * @see <a href="http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Subnets.html" >doc</a>
+ *
+ * @author Adrian Cole
+ * @author Andrew Bayer
+ */
+public final class Subnet {
+
+ public static enum State {
+ /**
+ * The subnet is available for use.
+ */
+ AVAILABLE,
+ /**
+ * The subnet is not yet available for use.
+ */
+ PENDING, UNRECOGNIZED;
+ public String value() {
+ return name().toLowerCase();
+ }
+
+ public static State fromValue(String v) {
+ try {
+ return valueOf(v.toUpperCase());
+ } catch (IllegalArgumentException e) {
+ return UNRECOGNIZED;
+ }
+ }
+ }
+
+ private final String subnetId;
+ private final State subnetState;
+ private final String vpcId;
+ private final String cidrBlock;
+ private final int availableIpAddressCount;
+ private final String availabilityZone;
+ private final Map<String, String> tags;
+
+ private Subnet(String subnetId, State subnetState, String vpcId, String cidrBlock, int availableIpAddressCount,
+ String availabilityZone, ImmutableMap<String, String> tags) {
+ this.subnetId = checkNotNull(subnetId, "subnetId");
+ this.subnetState = checkNotNull(subnetState, "subnetState for %s", subnetId);
+ this.vpcId = checkNotNull(vpcId, "vpcId for %s", subnetId);
+ this.cidrBlock = checkNotNull(cidrBlock, "cidrBlock for %s", subnetId);
+ this.availableIpAddressCount = availableIpAddressCount;
+ this.availabilityZone = checkNotNull(availabilityZone, "availabilityZone for %s", subnetId);
+ this.tags = checkNotNull(tags, "tags for %s", subnetId);
+ }
+
+ /**
+ * The subnet ID, ex. subnet-c5473ba8
+ */
+ public String getSubnetId() {
+ return subnetId;
+ }
+
+ /**
+ * The subnet state - either available or pending.
+ */
+ public State getSubnetState() {
+ return subnetState;
+ }
+
+ /**
+ * The vpc ID this subnet belongs to.
+ */
+ public String getVpcId() {
+ return vpcId;
+ }
+
+ /**
+ * The CIDR block for this subnet.
+ */
+ public String getCidrBlock() {
+ return cidrBlock;
+ }
+
+ /**
+ * The number of available IPs in this subnet.
+ */
+ public int getAvailableIpAddressCount() {
+ return availableIpAddressCount;
+ }
+
+ /**
+ * The availability zone this subnet is in.
+ */
+ public String getAvailabilityZone() {
+ return availabilityZone;
+ }
+
+ /**
+ * Tags that are attached to this subnet.
+ */
+ public Map<String, String> getTags() {
+ return tags;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hashCode(subnetId, vpcId, availabilityZone);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null || getClass() != obj.getClass())
+ return false;
+ Subnet that = Subnet.class.cast(obj);
+ return Objects.equal(this.subnetId, that.subnetId) && Objects.equal(this.vpcId, that.vpcId)
+ && Objects.equal(this.availabilityZone, that.availabilityZone);
+ }
+
+ @Override
+ public String toString() {
+ return string().toString();
+ }
+
+ private ToStringHelper string() {
+ return Objects.toStringHelper(this).omitNullValues().add("subnetId", subnetId).add("subnetState", subnetState)
+ .add("vpcId", vpcId).add("cidrBlock", cidrBlock).add("availableIpAddressCount", availableIpAddressCount)
+ .add("availabilityZone", availabilityZone).add("tags", tags);
+ }
+
+ public static Builder builder() {
+ return new Builder();
+ }
+
+ public Builder toBuilder() {
+ return builder().from(this);
+ }
+
+ public static final class Builder {
+ private String subnetId;
+ private State subnetState;
+ private String vpcId;
+ private String cidrBlock;
+ private int availableIpAddressCount;
+ private String availabilityZone;
+ private ImmutableMap.Builder<String, String> tags = ImmutableMap.<String, String> builder();
+
+ /**
+ * @see Subnet#getSubnetId()
+ */
+ public Builder subnetId(String subnetId) {
+ this.subnetId = subnetId;
+ return this;
+ }
+
+ /**
+ * @see Subnet#getState()
+ */
+ public Builder subnetState(State subnetState) {
+ this.subnetState = subnetState;
+ return this;
+ }
+
+ /**
+ * @see Subnet#getVpcId()
+ */
+ public Builder vpcId(String vpcId) {
+ this.vpcId = vpcId;
+ return this;
+ }
+
+ /**
+ * @see Subnet#getCidrBlock()
+ */
+ public Builder cidrBlock(String cidrBlock) {
+ this.cidrBlock = cidrBlock;
+ return this;
+ }
+
+ /**
+ * @see Subnet#getAvailableIpAddressCount()
+ */
+ public Builder availableIpAddressCount(int availableIpAddressCount) {
+ this.availableIpAddressCount = availableIpAddressCount;
+ return this;
+ }
+
+ /**
+ * @see Subnet#getAvailabilityZone()
+ */
+ public Builder availabilityZone(String availabilityZone) {
+ this.availabilityZone = availabilityZone;
+ return this;
+ }
+
+ /**
+ * @see Subnet#getTags()
+ */
+ public Builder tags(Map<String, String> tags) {
+ this.tags.putAll(checkNotNull(tags, "tags"));
+ return this;
+ }
+
+ /**
+ * @see Subnet#getTags()
+ */
+ public Builder tag(String key) {
+ return tag(key, "");
+ }
+
+ /**
+ * @see Subnet#getTags()
+ */
+ public Builder tag(String key, String value) {
+ this.tags.put(checkNotNull(key, "key"), checkNotNull(value, "value"));
+ return this;
+ }
+
+ public Subnet build() {
+ return new Subnet(subnetId, subnetState, vpcId, cidrBlock, availableIpAddressCount, availabilityZone,
+ tags.build());
+ }
+
+ public Builder from(Subnet in) {
+ return this.subnetId(in.getSubnetId()).subnetState(in.getSubnetState()).vpcId(in.getVpcId())
+ .cidrBlock(in.getCidrBlock()).availableIpAddressCount(in.getAvailableIpAddressCount())
+ .availabilityZone(in.getAvailabilityZone()).tags(in.getTags());
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/58fe66df/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/domain/Tag.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/domain/Tag.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/domain/Tag.java
new file mode 100644
index 0000000..e640488
--- /dev/null
+++ b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/domain/Tag.java
@@ -0,0 +1,196 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.ec2.domain;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.base.Objects;
+import com.google.common.base.Objects.ToStringHelper;
+import com.google.common.base.Optional;
+
+/**
+ * To help you manage your Amazon EC2 instances, images, and other Amazon EC2
+ * resources, you can assign your own metadata to each resource in the form of
+ * tags.
+ *
+ * @see <a
+ * href="http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/Using_Tags.html"
+ * >doc</a>
+ *
+ * @author Adrian Cole
+ */
+public class Tag {
+
+ /**
+ * Describes the well-known resource types that can be tagged.
+ */
+ public interface ResourceType {
+ public static final String CUSTOMER_GATEWAY = "customer-gateway";
+ public static final String DHCP_OPTIONS = "dhcp-options";
+ public static final String IMAGE = "image";
+ public static final String INSTANCE = "instance";
+ public static final String INTERNET_GATEWAY = "internet-gateway";
+ public static final String NETWORK_ACL = "network-acl";
+ public static final String RESERVED_INSTANCES = "reserved-instances";
+ public static final String ROUTE_TABLE = "route-table";
+ public static final String SECURITY_GROUP = "security-group";
+ public static final String SNAPSHOT = "snapshot";
+ public static final String SPOT_INSTANCES_REQUEST = "spot-instances-request";
+ public static final String SUBNET = "subnet";
+ public static final String VOLUME = "volume";
+ public static final String VPC = "vpc";
+ public static final String VPN_CONNECTION = "vpn-connection";
+ public static final String VPN_GATEWAY = "vpn-gateway";
+ }
+
+ public static Builder builder() {
+ return new Builder();
+ }
+
+ public Builder toBuilder() {
+ return builder().fromTag(this);
+ }
+
+ public static class Builder {
+
+ protected String resourceId;
+ protected String resourceType;
+ protected String key;
+ protected Optional<String> value = Optional.absent();
+
+ /**
+ * @see Tag#getResourceId()
+ */
+ public Builder resourceId(String resourceId) {
+ this.resourceId = resourceId;
+ return this;
+ }
+
+ /**
+ * @see Tag#getResourceType()
+ */
+ public Builder resourceType(String resourceType) {
+ this.resourceType = resourceType;
+ return this;
+ }
+
+ /**
+ * @see Tag#getKey()
+ */
+ public Builder key(String key) {
+ this.key = key;
+ return this;
+ }
+
+ /**
+ * @see TagGroup#getValue()
+ */
+ public Builder value(String value) {
+ this.value = Optional.fromNullable(value);
+ return this;
+ }
+
+ public Tag build() {
+ return new Tag(resourceId, resourceType, key, value);
+ }
+
+ public Builder fromTag(Tag in) {
+ return this.resourceId(in.getResourceId()).resourceType(in.getResourceType()).key(in.getKey())
+ .value(in.getValue().orNull());
+ }
+ }
+
+ protected final String resourceId;
+ protected final String resourceType;
+ protected final String key;
+ protected final Optional<String> value;
+
+ protected Tag(String resourceId, String resourceType, String key, Optional<String> value) {
+ this.resourceId = checkNotNull(resourceId, "resourceId");
+ this.resourceType = checkNotNull(resourceType, "resourceType");
+ this.key = checkNotNull(key, "key");
+ this.value = checkNotNull(value, "value");
+ }
+
+ /**
+ * The resource ID ex. i-erf235
+ */
+ public String getResourceId() {
+ return resourceId;
+ }
+
+ /**
+ * The resource type. ex. customer-gateway, dhcp-options, image, instance,
+ * internet-gateway, network-acl, reserved-instances, route-table,
+ * security-group, snapshot, spot-instances-request, subnet, volume, vpc,
+ * vpn-connection, vpn-gateway
+ */
+ public String getResourceType() {
+ return resourceType;
+ }
+
+ /**
+ * The tag key.
+ */
+ public String getKey() {
+ return key;
+ }
+
+ /**
+ * The tag value.
+ */
+ public Optional<String> getValue() {
+ return value;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public int hashCode() {
+ return Objects.hashCode(resourceId, key);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ Tag other = (Tag) obj;
+ return Objects.equal(this.resourceId, other.resourceId) && Objects.equal(this.key, other.key);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public String toString() {
+ return string().toString();
+ }
+
+ protected ToStringHelper string() {
+ return Objects.toStringHelper(this).omitNullValues().add("resourceId", resourceId)
+ .add("resourceType", resourceType).add("key", key).add("value", value.orNull());
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/58fe66df/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/domain/UserIdGroupPair.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/domain/UserIdGroupPair.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/domain/UserIdGroupPair.java
new file mode 100644
index 0000000..657ad17
--- /dev/null
+++ b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/domain/UserIdGroupPair.java
@@ -0,0 +1,100 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.ec2.domain;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+/**
+ *
+ * @see <a href=
+ * "http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-ItemType-UserIdGroupPairType.html"
+ * />
+ * @author Adrian Cole
+ */
+public class UserIdGroupPair implements Comparable<UserIdGroupPair> {
+ private final String userId;
+ private final String groupName;
+
+ public UserIdGroupPair(String userId, String groupName) {
+ this.userId = checkNotNull(userId,"userId");
+ this.groupName = checkNotNull(groupName,"groupName");
+ }
+
+
+ @Override
+ public String toString() {
+ return "[userId=" + userId + ", groupName=" + groupName + "]";
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ public int compareTo(UserIdGroupPair o) {
+ return (this == o) ? 0 : getUserId().compareTo(o.getUserId());
+ }
+
+
+ /**
+ * AWS User ID of an identity. Cannot be used when specifying a CIDR IP address.
+ */
+ public String getUserId() {
+ return userId;
+ }
+
+
+ /**
+ * Name of the security group. Cannot be used when specifying a CIDR IP address.
+ */
+ public String getGroupName() {
+ return groupName;
+ }
+
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((groupName == null) ? 0 : groupName.hashCode());
+ result = prime * result + ((userId == null) ? 0 : userId.hashCode());
+ return result;
+ }
+
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ UserIdGroupPair other = (UserIdGroupPair) obj;
+ if (groupName == null) {
+ if (other.groupName != null)
+ return false;
+ } else if (!groupName.equals(other.groupName))
+ return false;
+ if (userId == null) {
+ if (other.userId != null)
+ return false;
+ } else if (!userId.equals(other.userId))
+ return false;
+ return true;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/58fe66df/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/domain/VirtualizationType.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/domain/VirtualizationType.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/domain/VirtualizationType.java
new file mode 100644
index 0000000..ce5dc33
--- /dev/null
+++ b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/domain/VirtualizationType.java
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.ec2.domain;
+
+import com.google.common.base.CaseFormat;
+
+/**
+ * Virtualization type of the image.
+ *
+ * @author Adrian Cole
+ */
+public enum VirtualizationType {
+
+ PARAVIRTUAL,
+
+ HVM, UNRECOGNIZED;
+
+ public String value() {
+ return CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.LOWER_HYPHEN, name());
+ }
+
+ public String toString() {
+ return value();
+ }
+
+ public static VirtualizationType fromValue(String v) {
+ try {
+ return valueOf(CaseFormat.LOWER_HYPHEN.to(CaseFormat.UPPER_UNDERSCORE, v));
+ } catch (IllegalArgumentException e) {
+ return UNRECOGNIZED;
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/58fe66df/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/domain/Volume.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/domain/Volume.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/domain/Volume.java
new file mode 100644
index 0000000..a5ca30b
--- /dev/null
+++ b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/domain/Volume.java
@@ -0,0 +1,296 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.ec2.domain;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.collect.Sets.newHashSet;
+
+import java.util.Date;
+import java.util.Set;
+
+import org.jclouds.javax.annotation.Nullable;
+
+import com.google.common.base.CaseFormat;
+import com.google.common.collect.ImmutableSet;
+
+/**
+ *
+ * @see <a href=
+ * "http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-CreateVolume.html"
+ * />
+ * @author Adrian Cole, Andrei Savu
+ */
+public class Volume implements Comparable<Volume> {
+
+ public Builder toBuilder() {
+ return builder().fromVolume(this);
+ }
+
+ /**
+ * Specifies whether the instance's Amazon EBS volumes are stopped or terminated when the
+ * instance is shut down.
+ *
+ * @author Adrian Cole
+ */
+ public static enum InstanceInitiatedShutdownBehavior {
+ STOP, TERMINATE, UNRECOGNIZED;
+ public String value() {
+ return name().toLowerCase();
+ }
+
+ @Override
+ public String toString() {
+ return value();
+ }
+
+ public static InstanceInitiatedShutdownBehavior fromValue(String status) {
+ try {
+ return valueOf(checkNotNull(status, "status").toUpperCase());
+ } catch (IllegalArgumentException e) {
+ return UNRECOGNIZED;
+ }
+ }
+ }
+
+ public static enum Status {
+ CREATING, AVAILABLE, IN_USE, DELETING, ERROR, UNRECOGNIZED;
+ public String value() {
+ return CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.LOWER_HYPHEN, name());
+ }
+
+ @Override
+ public String toString() {
+ return value();
+ }
+
+ public static Status fromValue(String status) {
+ try {
+ return valueOf(CaseFormat.LOWER_HYPHEN.to(CaseFormat.UPPER_UNDERSCORE, checkNotNull(status, "status")));
+ } catch (IllegalArgumentException e) {
+ return UNRECOGNIZED;
+ }
+ }
+ }
+
+ public static Builder builder() {
+ return new Builder();
+ }
+
+ public static class Builder {
+ private String region;
+ private String id;
+ private int size;
+ @Nullable
+ private String snapshotId;
+ private String availabilityZone;
+ private Status status;
+ private Date createTime;
+ private Set<Attachment> attachments = ImmutableSet.of();
+
+ public Builder region(String region) {
+ this.region = region;
+ return this;
+ }
+
+ public Builder id(String id) {
+ this.id = id;
+ return this;
+ }
+
+ public Builder size(int size) {
+ this.size = size;
+ return this;
+ }
+
+ public Builder snapshotId(String snapshotId) {
+ this.snapshotId = snapshotId;
+ return this;
+ }
+
+ public Builder availabilityZone(String availabilityZone) {
+ this.availabilityZone = availabilityZone;
+ return this;
+ }
+
+ public Builder status(Status status) {
+ this.status = status;
+ return this;
+ }
+
+ public Builder createTime(Date createTime) {
+ this.createTime = createTime;
+ return this;
+ }
+
+ public Builder attachments(Attachment... attachments) {
+ this.attachments = newHashSet(attachments);
+ return this;
+ }
+
+ public Builder attachments(Set<Attachment> attachments) {
+ this.attachments = ImmutableSet.copyOf(attachments);
+ return this;
+ }
+
+ public Volume build() {
+ return new Volume(region, id, size, snapshotId, availabilityZone, status, createTime, attachments);
+ }
+
+ public Builder fromVolume(Volume in) {
+ return region(in.region).id(in.id).size(in.size).snapshotId(in.snapshotId)
+ .availabilityZone(in.availabilityZone).status(in.status).createTime(in.createTime)
+ .attachments(in.attachments);
+ }
+ }
+
+ private final String region;
+ private final String id;
+ private final int size;
+ @Nullable
+ private final String snapshotId;
+ private final String availabilityZone;
+ private final Status status;
+ private final Date createTime;
+ private final Set<Attachment> attachments;
+
+ public Volume(String region, String id, int size, String snapshotId, String availabilityZone, Volume.Status status,
+ Date createTime, Iterable<Attachment> attachments) {
+ this.region = checkNotNull(region, "region");
+ this.id = id;
+ this.size = size;
+ this.snapshotId = snapshotId;
+ this.availabilityZone = availabilityZone;
+ this.status = status;
+ this.createTime = createTime;
+ this.attachments = ImmutableSet.copyOf(attachments);
+ }
+
+ /**
+ * To be removed in jclouds 1.6 <h4>Warning</h4>
+ *
+ * Especially on EC2 clones that may not support regions, this value is fragile. Consider
+ * alternate means to determine context.
+ */
+ @Deprecated
+ public String getRegion() {
+ return region;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public int getSize() {
+ return size;
+ }
+
+ public String getSnapshotId() {
+ return snapshotId;
+ }
+
+ public String getAvailabilityZone() {
+ return availabilityZone;
+ }
+
+ public Status getStatus() {
+ return status;
+ }
+
+ public Date getCreateTime() {
+ return createTime;
+ }
+
+ public Set<Attachment> getAttachments() {
+ return attachments;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((attachments == null) ? 0 : attachments.hashCode());
+ result = prime * result + ((availabilityZone == null) ? 0 : availabilityZone.hashCode());
+ result = prime * result + ((createTime == null) ? 0 : createTime.hashCode());
+ result = prime * result + ((id == null) ? 0 : id.hashCode());
+ result = prime * result + ((region == null) ? 0 : region.hashCode());
+ result = prime * result + size;
+ result = prime * result + ((snapshotId == null) ? 0 : snapshotId.hashCode());
+ result = prime * result + ((status == null) ? 0 : status.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ Volume other = (Volume) obj;
+ if (attachments == null) {
+ if (other.attachments != null)
+ return false;
+ } else if (!attachments.equals(other.attachments))
+ return false;
+ if (availabilityZone == null) {
+ if (other.availabilityZone != null)
+ return false;
+ } else if (!availabilityZone.equals(other.availabilityZone))
+ return false;
+ if (createTime == null) {
+ if (other.createTime != null)
+ return false;
+ } else if (!createTime.equals(other.createTime))
+ return false;
+ if (id == null) {
+ if (other.id != null)
+ return false;
+ } else if (!id.equals(other.id))
+ return false;
+ if (region == null) {
+ if (other.region != null)
+ return false;
+ } else if (!region.equals(other.region))
+ return false;
+ if (size != other.size)
+ return false;
+ if (snapshotId == null) {
+ if (other.snapshotId != null)
+ return false;
+ } else if (!snapshotId.equals(other.snapshotId))
+ return false;
+ if (status == null) {
+ if (other.status != null)
+ return false;
+ } else if (!status.equals(other.status))
+ return false;
+ return true;
+ }
+
+ @Override
+ public int compareTo(Volume that) {
+ return id.compareTo(that.id);
+ }
+
+ @Override
+ public String toString() {
+ return "Volume [attachments=" + attachments + ", availabilityZone=" + availabilityZone + ", createTime="
+ + createTime + ", id=" + id + ", region=" + region + ", size=" + size + ", snapshotId=" + snapshotId
+ + ", status=" + status + "]";
+ }
+}