http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/b41b0d04/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Deprecated.java ---------------------------------------------------------------------- diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Deprecated.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Deprecated.java index 26997e5..1af5d6b 100644 --- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Deprecated.java +++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Deprecated.java @@ -16,177 +16,42 @@ */ package org.jclouds.googlecomputeengine.domain; -import static com.google.common.base.Objects.equal; -import static com.google.common.base.Objects.toStringHelper; -import static com.google.common.base.Optional.fromNullable; - -import java.beans.ConstructorProperties; import java.net.URI; -import com.google.common.base.Objects; -import com.google.common.base.Optional; - -/** - * Deprecation information for an image or kernel - */ -public class Deprecated { - private final Optional<String> state; - private final Optional<URI> replacement; - private final Optional<String> deprecated; - private final Optional<String> obsolete; - private final Optional<String> deleted; - - @ConstructorProperties({"state", "replacement", "deprecated", "obsolete", "deleted"}) - public Deprecated(String state, URI replacement, String deprecated, String obsolete, - String deleted) { - this.state = fromNullable(state); - this.replacement = fromNullable(replacement); - this.deprecated = fromNullable(deprecated); - this.obsolete = fromNullable(obsolete); - this.deleted = fromNullable(deleted); - } +import org.jclouds.javax.annotation.Nullable; +import org.jclouds.json.SerializedNames; - /** - * @return The deprecation state of this image. - */ - public Optional<String> getState() { - return state; - } +import com.google.auto.value.AutoValue; - /** - * @return A fully-qualified URL of the suggested replacement for the deprecated image. - */ - public Optional<URI> getReplacement() { - return replacement; - } - - /** - * @return An optional RFC3339 timestamp for when the deprecation state of this resource will be changed to DEPRECATED. - */ - public Optional<String> getDeprecated() { - return deprecated; - } - - /** - * @return An optional RFC3339 timestamp on or after which the deprecation state of this resource will be changed toOBSOLETE. - */ - public Optional<String> getObsolete() { - return obsolete; - } +/** Deprecation information for an image or kernel */ +@AutoValue +public abstract class Deprecated { + /** The deprecation state of this image. */ + @Nullable public abstract String state(); - /** - * @return An optional RFC3339 timestamp on or after which the deprecation state of this resource will be changed to DELETED. - */ - public Optional<String> getDeleted() { - return deleted; - } + /** A fully-qualified URL of the suggested replacement for the deprecated image. */ + @Nullable public abstract URI replacement(); - /** - * {@inheritDoc} - */ - @Override - public int hashCode() { - return Objects.hashCode(state, replacement, deprecated, obsolete, deleted); - } + /** An optional RFC3339 timestamp for when the deprecation state of this resource will be changed to DEPRECATED. */ + @Nullable public abstract String deprecated(); /** - * {@inheritDoc} + * An optional RFC3339 timestamp on or after which the deprecation state of this resource will be changed to + * OBSOLETE. */ - @Override - public boolean equals(Object obj) { - if (this == obj) return true; - if (obj == null || getClass() != obj.getClass()) return false; - Deprecated that = Deprecated.class.cast(obj); - return equal(this.state, that.state) - && equal(this.replacement, that.replacement) - && equal(this.deprecated, that.deprecated) - && equal(this.obsolete, that.obsolete) - && equal(this.deleted, that.deleted); - } - - protected Objects.ToStringHelper string() { - return toStringHelper(this) - .omitNullValues() - .add("state", state.orNull()) - .add("replacement", replacement.orNull()) - .add("deprecated", deprecated.orNull()) - .add("obsolete", obsolete.orNull()) - .add("deleted", deleted.orNull()); - } + @Nullable public abstract String obsolete(); /** - * {@inheritDoc} + * An optional RFC3339 timestamp on or after which the deprecation state of this resource will be changed to + * DELETED. */ - @Override - public String toString() { - return string().toString(); - } + @Nullable public abstract String deleted(); - public static Builder builder() { - return new Builder(); + @SerializedNames({ "state", "replacement", "deprecated", "obsolete", "deleted" }) + public static Deprecated create(String state, URI replacement, String deprecated, String obsolete, String deleted) { + return new AutoValue_Deprecated(state, replacement, deprecated, obsolete, deleted); } - public Builder toBuilder() { - return builder().fromDeprecated(this); - } - - public static class Builder { - private String state; - private URI replacement; - private String deprecated; - private String obsolete; - private String deleted; - - /** - * @see org.jclouds.googlecomputeengine.domain.Deprecated#getState() - */ - public Builder state(String state) { - this.state = state; - return this; - } - - /** - * @see org.jclouds.googlecomputeengine.domain.Deprecated#getReplacement() - */ - public Builder replacement(URI replacement) { - this.replacement = replacement; - return this; - } - - /** - * @see org.jclouds.googlecomputeengine.domain.Deprecated#getDeprecated() - */ - public Builder deprecated(String deprecated) { - this.deprecated = deprecated; - return this; - } - - /** - * @see org.jclouds.googlecomputeengine.domain.Deprecated#getObsolete() - */ - public Builder obsolete(String obsolete) { - this.obsolete = obsolete; - return this; - } - - /** - * @see org.jclouds.googlecomputeengine.domain.Deprecated#getDeprecated() - */ - public Builder deleted(String deleted) { - this.deleted = deleted; - return this; - } - - public Deprecated build() { - return new Deprecated(state, replacement, deprecated, obsolete, deleted); - } - - public Builder fromDeprecated(Deprecated in) { - return new Builder().state(in.getState().orNull()) - .replacement(in.getReplacement().orNull()) - .deprecated(in.getDeprecated().orNull()) - .obsolete(in.getObsolete().orNull()) - .deleted(in.getDeleted().orNull()); - } + Deprecated() { } }
http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/b41b0d04/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Disk.java ---------------------------------------------------------------------- diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Disk.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Disk.java index 0494f43..140f47a 100644 --- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Disk.java +++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Disk.java @@ -16,130 +16,38 @@ */ package org.jclouds.googlecomputeengine.domain; -import static com.google.common.base.Objects.equal; -import static com.google.common.base.Optional.fromNullable; -import static com.google.common.base.Preconditions.checkNotNull; - -import java.beans.ConstructorProperties; import java.net.URI; -import java.util.Date; import org.jclouds.javax.annotation.Nullable; +import org.jclouds.json.SerializedNames; -import com.google.common.annotations.Beta; -import com.google.common.base.Objects; -import com.google.common.base.Optional; +import com.google.auto.value.AutoValue; -/** - * A persistent disk resource - */ -@Beta -public final class Disk extends AbstractDisk { +@AutoValue +public abstract class Disk { + public abstract String id(); - private final URI zone; - private final Optional<URI> type; + public abstract URI zone(); - @ConstructorProperties({ - "id", "creationTimestamp", "selfLink", "name", "description", "sizeGb", "zone", - "status", "type" - }) - private Disk(String id, Date creationTimestamp, URI selfLink, String name, String description, - Integer sizeGb, URI zone, String status, @Nullable URI type) { - super(Kind.DISK, id, creationTimestamp, selfLink, name, description, sizeGb, status); - this.zone = checkNotNull(zone, "zone of %s", name); - this.type = fromNullable(type); - } + public abstract String status(); // TODO: enum - /** - * @return URL for the zone where the persistent disk resides. - */ - public URI getZone() { - return zone; - } + public abstract String name(); - /** - * @return URL of the disk type resource describing which disk type - */ - public Optional<URI> getType(){ - return type; - } + @Nullable public abstract String description(); - /** - * {@inheritDoc} - */ - @Override - public boolean equals(Object obj) { - if (this == obj) return true; - if (obj == null || getClass() != obj.getClass()) return false; - Disk that = Disk.class.cast(obj); - return equal(this.kind, that.kind) - && equal(this.name, that.name) - && equal(this.zone, that.zone); - } - - /** - * {@inheritDoc} - */ - @Override - protected Objects.ToStringHelper string() { - return super.string() - .omitNullValues() - .add("zone", zone); - } + public abstract int sizeGb(); - /** - * {@inheritDoc} - */ - @Override - public String toString() { - return string().toString(); - } + public abstract URI selfLink(); - public static Builder builder() { - return new Builder(); - } + /** URL of the corresponding disk type resource. */ + @Nullable public abstract URI type(); - public Builder toBuilder() { - return new Builder().fromDisk(this); + @SerializedNames({ "id", "zone", "status", "name", "description", "sizeGb", "selfLink", "type" }) + public static Disk create(String id, URI zone, String status, String name, String description, int sizeGb, + URI selfLink, URI type) { + return new AutoValue_Disk(id, zone, status, name, description, sizeGb, selfLink, type); } - public static final class Builder extends AbstractDisk.Builder<Builder> { - - private URI zone; - private URI type; - - /** - * @see Disk#getZone() - */ - public Builder zone(URI zone) { - this.zone = zone; - return this; - } - - /** - * @see Disk#getType() - */ - public Builder type(URI type){ - this.type = type; - return this; - } - - @Override - protected Builder self() { - return this; - } - - public Disk build() { - return new Disk(super.id, super.creationTimestamp, super.selfLink, super.name, - super.description, super.sizeGb, zone, super.status, type); - } - - public Builder fromDisk(Disk in) { - return super.fromAbstractDisk(in) - .zone(in.getZone()) - .type(in.getType().orNull()); - } - + Disk(){ } - } http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/b41b0d04/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/DiskType.java ---------------------------------------------------------------------- diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/DiskType.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/DiskType.java index ac7224c..bab2d08 100644 --- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/DiskType.java +++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/DiskType.java @@ -16,150 +16,38 @@ */ package org.jclouds.googlecomputeengine.domain; -import static com.google.common.base.Optional.fromNullable; -import static com.google.common.base.Preconditions.checkNotNull; - -import java.beans.ConstructorProperties; import java.net.URI; -import java.util.Date; -import com.google.common.base.Objects; -import com.google.common.base.Optional; +import org.jclouds.javax.annotation.Nullable; +import org.jclouds.json.SerializedNames; -/** - * Represents a DiskType resource. - * - * @see <a href="https://cloud.google.com/compute/docs/reference/latest/diskTypes"/> - */ -public final class DiskType extends Resource { +import com.google.auto.value.AutoValue; - private final String zone; - private final Long defaultDiskSizeGb; - private final Optional<String> validDiskSize; - private final Optional<Deprecated> deprecated; - - @ConstructorProperties({ - "id", "creationTimestamp", "selfLink", "name", "description", "validDiskSize", - "deprecated", "zone", "defaultDiskSizeGb" - }) - private DiskType(String id, Date creationTimestamp, URI selfLink, String name, String description, - String validDiskSize, Deprecated deprecated, String zone, long defaultDiskSizeGb){ - super(Kind.DISK_TYPE, id == null ? "" : id, creationTimestamp, selfLink, name, description); - this.validDiskSize = fromNullable(validDiskSize); - this.deprecated = fromNullable(deprecated); - this.zone = checkNotNull(zone, "zone of %s", name); - this.defaultDiskSizeGb = defaultDiskSizeGb; - } +@AutoValue +public abstract class DiskType { - /** - * @return An optional textual description of the valid disk size. For example, "10GB-10TB." - */ - public Optional<String> getValidDiskSize(){ - return validDiskSize; - } + public abstract String name(); - /** - * @return If applicable, the deprecation status associated with this disk type. - */ - public Optional<Deprecated> getDeprecated(){ - return deprecated; - } + @Nullable public abstract String description(); - /** - * @return The fully-qualified URL for the zone where the disk type resource resides. - */ - public String getZone(){ - return zone; - } + /** Textual description of the valid disk size. For example, "10GB-10TB." */ + @Nullable public abstract String validDiskSize(); - /** - * @return Server defined default disk size in GB. - */ - public long getDefaultDiskSizeGb(){ - return defaultDiskSizeGb; - } + @Nullable public abstract Deprecated deprecated(); - /** - * {@inheritDoc} - */ - @Override - protected Objects.ToStringHelper string() { - return super.string() - .add("validDiskSize", validDiskSize.orNull()) - .add("defaultDiskSizeGb", defaultDiskSizeGb) - .add("zone", zone) - .add("deprecated", deprecated.orNull()); - } + public abstract URI zone(); - /** - * {@inheritDoc} - */ - @Override - public String toString() { - return string().toString(); - } + public abstract URI selfLink(); - public static Builder builder() { - return new Builder(); - } + /** Server defined default disk size in GB. */ + public abstract long defaultDiskSizeGb(); - public Builder toBuilder(){ - return new Builder().fromDiskType(this); + @SerializedNames({ "name", "description", "validDiskSize", "deprecated", "zone", "selfLink", "defaultDiskSizeGb" }) + public static DiskType create(String name, String description, String validDiskSize, Deprecated deprecated, URI zone, + URI selfLink, long defaultDiskSizeGb) { + return new AutoValue_DiskType(name, description, validDiskSize, deprecated, zone, selfLink, defaultDiskSizeGb); } - public static final class Builder extends Resource.Builder<Builder> { - - private String zone; - private Long defaultDiskSizeGb; - private String validDiskSize; - private Deprecated deprecated; - - /** - * @see DiskType#getZone() - */ - public Builder zone(String zone){ - this.zone = zone; - return this; - } - - /** - * @see DiskType#getDefaultDiskSizeGb() - */ - public Builder defaultDiskSizeGb(long defaultDiskSizeGb){ - this.defaultDiskSizeGb = defaultDiskSizeGb; - return this; - } - - /** - * @see DiskType#getValidDiskSize() - */ - public Builder validDiskSize(String validDiskSize){ - this.validDiskSize = validDiskSize; - return this; - } - - /** - * @see DiskType#getDeprecated() - */ - public Builder deprecated(Deprecated deprecated){ - this.deprecated = deprecated; - return this; - } - - @Override - protected Builder self() { - return this; - } - - public DiskType build() { - return new DiskType(id, creationTimestamp, selfLink, name, description, - validDiskSize, deprecated, zone, defaultDiskSizeGb); - } - - public Builder fromDiskType(DiskType in) { - return super.fromResource(in).zone(in.getZone()).defaultDiskSizeGb(in - .getDefaultDiskSizeGb()).validDiskSize(in.getValidDiskSize().orNull()) - .deprecated(in.getDeprecated().orNull()); - } + DiskType() { } } http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/b41b0d04/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Firewall.java ---------------------------------------------------------------------- diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Firewall.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Firewall.java index 6197ff7..e8e4add 100644 --- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Firewall.java +++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Firewall.java @@ -16,59 +16,53 @@ */ package org.jclouds.googlecomputeengine.domain; -import static com.google.common.base.Objects.equal; -import static com.google.common.base.Objects.toStringHelper; -import static com.google.common.base.Preconditions.checkNotNull; -import static com.google.common.base.Preconditions.checkState; -import static com.google.common.collect.Range.closed; -import static com.google.common.collect.Range.singleton; +import static org.jclouds.googlecomputeengine.internal.NullSafeCopies.copyOf; -import java.beans.ConstructorProperties; import java.net.URI; -import java.util.Date; -import java.util.Set; +import java.util.List; -import org.jclouds.net.domain.IpProtocol; +import org.jclouds.javax.annotation.Nullable; +import org.jclouds.json.SerializedNames; -import com.google.common.annotations.Beta; -import com.google.common.base.Objects; -import com.google.common.collect.ImmutableSet; -import com.google.common.collect.RangeSet; -import com.google.common.collect.TreeRangeSet; +import com.google.auto.value.AutoValue; -/** - * Represents a network firewall - */ -@Beta -public final class Firewall extends Resource { +@AutoValue +public abstract class Firewall { + + /** A protocol and port-range tuple that describes a permitted connection. */ + @AutoValue + public abstract static class Rule { + /** This can either be a well known protocol string (tcp, udp or icmp) or the IP protocol number. */ + public abstract String ipProtocol(); + + /** + * An optional list of ports which are allowed. This is only applicable for UDP or TCP protocol. Each entry must + * be either an integer or a range (ex. {@code 12345-12349}). If not specified, connections through any port are + * allowed. + */ + @Nullable public abstract List<String> ports(); - private final URI network; - private final Set<String> sourceRanges; - private final Set<String> sourceTags; - private final Set<String> targetTags; - private final Set<Rule> allowed; + @SerializedNames({ "IPProtocol", "ports" }) + public static Rule create(String ipProtocol, List<String> ports) { + return new AutoValue_Firewall_Rule(ipProtocol, ports); + } - @ConstructorProperties({ - "id", "creationTimestamp", "selfLink", "name", "description", "network", "sourceRanges", - "sourceTags", "targetTags", "allowed" - }) - protected Firewall(String id, Date creationTimestamp, URI selfLink, String name, String description, - URI network, Set<String> sourceRanges, Set<String> sourceTags, Set<String> targetTags, - Set<Rule> allowed) { - super(Kind.FIREWALL, id, creationTimestamp, selfLink, name, description); - this.network = checkNotNull(network, "network of %s", name); - this.sourceRanges = sourceRanges == null ? ImmutableSet.<String>of() : sourceRanges; - this.sourceTags = sourceTags == null ? ImmutableSet.<String>of() : sourceTags; - this.targetTags = targetTags == null ? ImmutableSet.<String>of() : targetTags; - this.allowed = allowed == null ? ImmutableSet.<Rule>of() : allowed; + Rule() { + } } + public abstract String id(); + + public abstract URI selfLink(); + + public abstract String name(); + + @Nullable public abstract String description(); + /** * @return URI of the network to which this firewall is applied; provided by the client when the firewall is created. */ - public URI getNetwork() { - return network; - } + public abstract URI network(); /** * One or both of sourceRanges and sourceTags may be set; an inbound connection is allowed if either the range or @@ -76,299 +70,37 @@ public final class Firewall extends Resource { * * @return a list of IP address blocks expressed in CIDR format which this rule applies to. */ - public Set<String> getSourceRanges() { - return sourceRanges; - } + public abstract List<String> sourceRanges(); /** * @return a list of instance items which this rule applies to. One or both of sourceRanges and sourceTags may be - * set; an inbound connection is allowed if either the range or the tag of the source matches. + * set; an inbound connection is allowed if either the range or the tag of the source matches. */ - public Set<String> getSourceTags() { - return sourceTags; - } + public abstract List<String> sourceTags(); /** * If no targetTags are specified, the firewall rule applies to all instances on the specified network. * * @return a list of instance items indicating sets of instances located on network which may make network - * connections as specified in allowed. + * connections as specified in allowed. */ - public Set<String> getTargetTags() { - return targetTags; - } + public abstract List<String> targetTags(); /** * Each rule specifies a protocol and port-range tuple that describes a permitted connection. * * @return the list of rules specified by this firewall. */ - public Set<Rule> getAllowed() { - return allowed; + public abstract List<Rule> allowed(); + + @SerializedNames( + { "id", "selfLink", "name", "description", "network", "sourceRanges", "sourceTags", "targetTags", "allowed" }) + public static Firewall create(String id, URI selfLink, String name, String description, URI network, + List<String> sourceRanges, List<String> sourceTags, List<String> targetTags, List<Rule> allowed) { + return new AutoValue_Firewall(id, selfLink, name, description, network, copyOf(sourceRanges), copyOf(sourceTags), + copyOf(targetTags), copyOf(allowed)); } - /** - * {@inheritDoc} - */ - @Override - protected Objects.ToStringHelper string() { - return super.string() - .add("network", network) - .add("sourceRanges", sourceRanges) - .add("sourceTags", sourceTags) - .add("targetTags", targetTags) - .add("allowed", allowed); - } - - /** - * {@inheritDoc} - */ - @Override - public String toString() { - return string().toString(); - } - - public static Builder builder() { - return new Builder(); - } - - public Builder toBuilder() { - return new Builder().fromFirewall(this); - } - - public static final class Builder extends Resource.Builder<Builder> { - - private URI network; - private ImmutableSet.Builder<String> sourceRanges = ImmutableSet.builder(); - private ImmutableSet.Builder<String> sourceTags = ImmutableSet.builder(); - private ImmutableSet.Builder<String> targetTags = ImmutableSet.builder(); - private ImmutableSet.Builder<Rule> allowed = ImmutableSet.builder(); - - /** - * @see Firewall#getNetwork() - */ - public Builder network(URI network) { - this.network = network; - return this; - } - - /** - * @see Firewall#getSourceRanges() - */ - public Builder addSourceRange(String sourceRange) { - this.sourceRanges.add(checkNotNull(sourceRange)); - return this; - } - - /** - * @see Firewall#getSourceRanges() - */ - public Builder sourceRanges(Set<String> sourceRanges) { - this.sourceRanges.addAll(checkNotNull(sourceRanges)); - return this; - } - - /** - * @see Firewall#getSourceTags() - */ - public Builder addSourceTag(String sourceTag) { - this.sourceTags.add(checkNotNull(sourceTag)); - return this; - } - - /** - * @see Firewall#getSourceTags() - */ - public Builder sourceTags(Set<String> sourceTags) { - this.sourceTags.addAll(checkNotNull(sourceTags)); - return this; - } - - /** - * @see Firewall#getTargetTags() - */ - public Builder addTargetTag(String targetTag) { - this.targetTags.add(checkNotNull(targetTag)); - return this; - } - - /** - * @see Firewall#getTargetTags() - */ - public Builder targetTags(Set<String> targetTags) { - this.targetTags.addAll(checkNotNull(targetTags)); - return this; - } - - /** - * @see Firewall#getAllowed() - */ - public Builder addAllowed(Rule firewallRule) { - this.allowed.add(checkNotNull(firewallRule)); - return this; - } - - /** - * @see Firewall#getAllowed() - */ - public Builder allowed(Set<Rule> firewallRules) { - this.allowed = ImmutableSet.builder(); - this.allowed.addAll(firewallRules); - return this; - } - - @Override - protected Builder self() { - return this; - } - - public Firewall build() { - return new Firewall(super.id, super.creationTimestamp, super.selfLink, super.name, - super.description, network, sourceRanges.build(), sourceTags.build(), targetTags.build(), - allowed.build()); - } - - public Builder fromFirewall(Firewall in) { - return super.fromResource(in).network(in.getNetwork()).sourceRanges(in.getSourceRanges()).sourceTags(in - .getSourceTags()).targetTags(in.getTargetTags()).allowed(in.getAllowed()); - } - - } - - /** - * A Firewall rule. Rule specifies a protocol and port-range tuple that describes a - * permitted connection. - * - * @see <a href="https://developers.google.com/compute/docs/reference/v1/firewalls"/> - */ - public static final class Rule { - - private final IpProtocol ipProtocol; - private final RangeSet<Integer> ports; - - /* Some handy shortcuts */ - public static Rule permitTcpRule(Integer start, Integer end) { return Rule.builder().IpProtocol(IpProtocol.TCP).addPortRange(start, end).build(); } - public static Rule permitTcpRule(Integer port) { return Rule.builder().IpProtocol(IpProtocol.TCP).addPort(port).build(); } - public static Rule permitUdpRule(Integer start, Integer end) { return Rule.builder().IpProtocol(IpProtocol.UDP).addPortRange(start, end).build(); } - public static Rule permitUdpRule(Integer port) { return Rule.builder().IpProtocol(IpProtocol.UDP).addPort(port).build(); } - @ConstructorProperties({ - "IpProtocol", "ports" - }) - private Rule(IpProtocol IpProtocol, RangeSet<Integer> ports) { - this.ipProtocol = checkNotNull(IpProtocol); - this.ports = ports == null ? TreeRangeSet.<Integer>create() : ports; - } - - /** - * This can either be a well known protocol string (tcp, udp or icmp) or the IP protocol number. - * - * @return this is the IP protocol that is allowed for this rule. - */ - public IpProtocol getIpProtocol() { - return ipProtocol; - } - - /** - * Each entry must be either an integer or a range. If not specified, connections through any port are allowed. - * Example inputs include: ["22"], ["80,"443"], and ["12345-12349"]. - * <p/> - * It is an error to specify this for any protocol that isn't UDP or TCP. - * - * @return An optional list of ports which are allowed. - */ - public RangeSet<Integer> getPorts() { - return ports; - } - - /** - * {@inheritDoc} - */ - @Override - public int hashCode() { - return Objects.hashCode(ipProtocol, ports); - } - - /** - * {@inheritDoc} - */ - @Override - public boolean equals(Object obj) { - if (this == obj) return true; - if (obj == null || getClass() != obj.getClass()) return false; - Rule that = Rule.class.cast(obj); - return equal(this.ipProtocol, that.ipProtocol) - && equal(this.ports, that.ports); - } - - public Objects.ToStringHelper string() { - return toStringHelper(this) - .add("IpProtocol", ipProtocol).add("ports", ports); - } - - /** - * {@inheritDoc} - */ - @Override - public String toString() { - return string().toString(); - } - - public static Builder builder() { - return new Builder(); - } - - public Builder toBuilder() { - return builder().fromFirewallRule(this); - } - - public static final class Builder { - - private IpProtocol ipProtocol; - private RangeSet<Integer> ports = TreeRangeSet.create(); - - /** - * @see org.jclouds.googlecomputeengine.domain.Firewall.Rule#getIpProtocol() - */ - public Builder IpProtocol(IpProtocol IpProtocol) { - this.ipProtocol = IpProtocol; - return this; - } - - /** - * @see org.jclouds.googlecomputeengine.domain.Firewall.Rule#getPorts() - */ - public Builder addPort(Integer port) { - this.ports.add(singleton(checkNotNull(port, "port"))); - return this; - } - - /** - * @see org.jclouds.googlecomputeengine.domain.Firewall.Rule#getPorts() - */ - public Builder addPortRange(Integer start, Integer end) { - checkState(checkNotNull(start, "start") < checkNotNull(end, "end"), - "start of range must be lower than end of range"); - this.ports.add(closed(start, end)); - return this; - } - - /** - * @see org.jclouds.googlecomputeengine.domain.Firewall.Rule#getPorts() - */ - public Builder ports(RangeSet<Integer> ports) { - this.ports = TreeRangeSet.create(); - this.ports.addAll(ports); - return this; - } - - public Rule build() { - return new Rule(ipProtocol, ports); - } - - public Builder fromFirewallRule(Rule firewallRule) { - return new Builder().IpProtocol(firewallRule.getIpProtocol()).ports(firewallRule.getPorts()); - } - } - + Firewall() { } } http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/b41b0d04/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/ForwardingRule.java ---------------------------------------------------------------------- diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/ForwardingRule.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/ForwardingRule.java index fd59a95..7216da9 100644 --- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/ForwardingRule.java +++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/ForwardingRule.java @@ -16,199 +16,68 @@ */ package org.jclouds.googlecomputeengine.domain; -import com.google.common.annotations.Beta; -import com.google.common.base.Objects; -import com.google.common.base.Optional; - -import java.beans.ConstructorProperties; import java.net.URI; -import java.util.Date; - -import static com.google.common.base.Objects.equal; -import static com.google.common.base.Optional.fromNullable; -import static com.google.common.base.Preconditions.checkNotNull; import org.jclouds.javax.annotation.Nullable; +import org.jclouds.json.SerializedNames; -@Beta -public class ForwardingRule extends Resource { +import com.google.auto.value.AutoValue; +@AutoValue +public abstract class ForwardingRule { - /** - * "AH": Specifies the IP Authentication Header protocol. - * "ESP": Specifies the IP Encapsulating Security Payload protocol. - * "SCTP": Specifies the Stream Control Transmission Protocol. - * "TCP": Specifies the Transmission Control Protocol. - * "UDP": Specifies the User Datagram Protocol. - */ - public enum IPProtocolOption { + public enum IPProtocol { + /** IP Authentication Header protocol. */ AH, + /** IP Encapsulating Security Payload protocol. */ ESP, + /** Stream Control Transmission Protocol. */ SCTP, + /** Transmission Control Protocol. */ TCP, + /** Specifies the User Datagram Protocol. */ UDP } - private final URI region; - private final Optional<String> ipAddress; - private final Optional<IPProtocolOption> ipProtocol; - private final Optional<String> portRange; - private final URI target; - - @ConstructorProperties({ - "id", "creationTimestamp", "selfLink", "name", "description", "region", "IPAddress", "IPProtocol", - "portRange", "target" - }) - private ForwardingRule(String id, Date creationTimestamp, URI selfLink, String name, String description, - URI region, @Nullable String ipAddress, @Nullable IPProtocolOption ipProtocol, @Nullable String portRange, - URI target) { - super(Kind.FORWARDING_RULE, id, creationTimestamp, selfLink, name, description); - this.region = checkNotNull(region, "region of %s", name); - this.ipAddress = fromNullable(ipAddress); - this.ipProtocol = fromNullable(ipProtocol); - this.portRange = fromNullable(portRange); - this.target = checkNotNull(target, "target of %s", name); - } + public abstract String id(); - public static Builder builder() { - return new Builder(); - } + public abstract URI selfLink(); - /** - * @return URL of the region where the forwarding rule resides. - */ - public URI getRegion() { - return region; - } + public abstract String name(); + + @Nullable public abstract String description(); + + public abstract URI region(); /** - * @return the external IP address that this forwarding rule is serving on behalf of. If this is a reserved + * The external IP address that this forwarding rule is serving on behalf of. If this is a reserved * address, the address must live in the same region as the forwarding rule. By default, * this field is empty and an ephemeral IP is assigned to the ForwardingRule. */ - public Optional<String> getIpAddress() { - return ipAddress; - } + @Nullable public abstract String ipAddress(); - /** - * @return the IP protocol to which this rule applies. If left empty, the default value used is TCP. - */ - public Optional<IPProtocolOption> getIpProtocol() { - return ipProtocol; - } + public abstract IPProtocol ipProtocol(); /** - * @return If IPProtocol is TCP or UDP, packets addressed to ports in the specified range will be forwarded to + * If IPProtocol is TCP or UDP, packets addressed to ports in the specified range will be forwarded to * backend. By default, this is empty and all ports are allowed. */ - public Optional<String> getPortRange() { - return portRange; - } + @Nullable public abstract String portRange(); /** - * @return the URL of the target resource to receive the matched traffic. The target resource must live in the + * The URL of the target resource to receive the matched traffic. The target resource must live in the * same region as this forwarding rule. */ - public URI getTarget() { - return target; + public abstract URI target(); + + @SerializedNames( + { "id", "selfLink", "name", "description", "region", "IPAddress", "IPProtocol", "portRange", "target" }) + public static ForwardingRule create(String id, URI selfLink, String name, String description, URI region, + String ipAddress, IPProtocol ipProtocol, String portRange, URI target) { + return new AutoValue_ForwardingRule(id, selfLink, name, description, region, ipAddress, + ipProtocol == null ? IPProtocol.TCP : ipProtocol, portRange, target); } - /** - * {@inheritDoc} - */ - @Override - public boolean equals(Object obj) { - if (this == obj) return true; - if (obj == null || getClass() != obj.getClass()) return false; - ForwardingRule that = ForwardingRule.class.cast(obj); - return equal(this.kind, that.kind) - && equal(this.name, that.name) - && equal(this.region, that.region); + ForwardingRule() { } - - /** - * {@inheritDoc} - */ - @Override - protected Objects.ToStringHelper string() { - return super.string() - .omitNullValues() - .add("region", region) - .add("ipAddress", ipAddress.orNull()) - .add("ipProtocol", ipProtocol.orNull()) - .add("portRange", portRange.orNull()) - .add("target", target); - } - - public Builder toBuilder() { - return new Builder().fromForwardingRule(this); - } - - public static final class Builder extends Resource.Builder<Builder> { - private URI region; - private String ipAddress; - private IPProtocolOption ipProtocol; - private String portRange; - private URI target; - - /** - * @see ForwardingRule#getRegion() - */ - public Builder region(URI region) { - this.region = region; - return this; - } - - /** - * @see org.jclouds.googlecomputeengine.domain.ForwardingRule#getIpAddress() - */ - public Builder ipAddress(String ipAddress) { - this.ipAddress = ipAddress; - return this; - } - - /** - * @see org.jclouds.googlecomputeengine.domain.ForwardingRule#getIpProtocol() - */ - public Builder ipProtocol(IPProtocolOption ipProtocol) { - this.ipProtocol = ipProtocol; - return this; - } - - /** - * @see org.jclouds.googlecomputeengine.domain.ForwardingRule#getPortRange() - */ - public Builder portRange(String portRange) { - this.portRange = portRange; - return this; - } - - /** - * @see org.jclouds.googlecomputeengine.domain.ForwardingRule#getTarget() - */ - public Builder target(URI target) { - this.target = target; - return this; - } - - @Override - protected Builder self() { - return this; - } - - public ForwardingRule build() { - return new ForwardingRule(super.id, super.creationTimestamp, super.selfLink, super.name, super.description, - region, ipAddress, ipProtocol, portRange, target); - } - - public Builder fromForwardingRule(ForwardingRule in) { - return super.fromResource(in) - .region(in.getRegion()) - .ipAddress(in.getIpAddress().orNull()) - .ipProtocol(in.getIpProtocol().orNull()) - .portRange(in.getPortRange().orNull()) - .target(in.getTarget()); - } - } - } http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/b41b0d04/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/HttpHealthCheck.java ---------------------------------------------------------------------- diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/HttpHealthCheck.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/HttpHealthCheck.java index 8e0096a..0d49756 100644 --- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/HttpHealthCheck.java +++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/HttpHealthCheck.java @@ -16,220 +16,67 @@ */ package org.jclouds.googlecomputeengine.domain; -import com.google.common.annotations.Beta; -import com.google.common.base.Objects; -import com.google.common.base.Optional; - -import java.beans.ConstructorProperties; import java.net.URI; -import java.util.Date; - -import static com.google.common.base.Objects.equal; -import static com.google.common.base.Optional.fromNullable; import org.jclouds.javax.annotation.Nullable; +import org.jclouds.json.SerializedNames; -@Beta -public class HttpHealthCheck extends Resource { - private final Optional<String> host; - private final Optional<String> requestPath; - private final Optional<Integer> port; - private final Optional<Integer> checkIntervalSec; - private final Optional<Integer> timeoutSec; - private final Optional<Integer> unhealthyThreshold; - private final Optional<Integer> healthyThreshold; - - @ConstructorProperties({ - "id", "creationTimestamp", "selfLink", "name", "description", "host", "requestPath", "port", - "checkIntervalSec", "timeoutSec", "unhealthyThreshold", "healthyThreshold" - }) - private HttpHealthCheck(String id, Date creationTimestamp, URI selfLink, String name, String description, - @Nullable String host, @Nullable String requestPath, int port, int checkIntervalSec, - int timeoutSec, int unhealthyThreshold, int healthyThreshold) { - super(Kind.HTTP_HEALTH_CHECK, id, creationTimestamp, selfLink, name, description); - this.host = fromNullable(host); - this.requestPath = fromNullable(requestPath); - this.port = fromNullable(port); - this.checkIntervalSec = fromNullable(checkIntervalSec); - this.timeoutSec = fromNullable(timeoutSec); - this.unhealthyThreshold = fromNullable(unhealthyThreshold); - this.healthyThreshold = fromNullable(healthyThreshold); - } +import com.google.auto.value.AutoValue; - public static Builder builder() { - return new Builder(); - } +@AutoValue +public abstract class HttpHealthCheck { - /** - * @return the value of the host header in the HTTP health check request. If left empty (default value), - * the public IP on behalf of which this health check is performed will be used. - */ - public Optional<String> getHost() { - return host; - } + public abstract String id(); - /** - * @return the request path of the HTTP health check request. The default value is /. - */ - public Optional<String> getRequestPath() { - return requestPath; - } + public abstract URI selfLink(); - /** - * @return the TCP port number for the HTTP health check request. The default value is 80. - */ - public Optional<Integer> getPort() { - return port; - } + public abstract String name(); - /** - * @return how often (in seconds) to send a health check. The default value is 5 seconds. - */ - public Optional<Integer> getCheckIntervalSec() { - return checkIntervalSec; - } + @Nullable public abstract String description(); /** - * @return how long (in seconds) to wait before claiming failure. The default value is 5 seconds. + * The value of the host header in the HTTP health check request. If left empty (default value), + * the public IP on behalf of which this health check is performed will be used. */ - public Optional<Integer> getTimeoutSec() { - return timeoutSec; - } + @Nullable public abstract String host(); - /** - * @return a so-far healthy VM will be marked unhealthy after this many consecutive failures. - * The default value is 2. - */ - public Optional<Integer> getUnhealthyThreshold() { - return unhealthyThreshold; - } + public abstract String requestPath(); - /** - * @return an unhealthy VM will be marked healthy after this many consecutive successes. The default value is 2. - */ - public Optional<Integer> getHealthyThreshold() { - return healthyThreshold; - } + /** The TCP port number for the HTTP health check request. */ + public abstract int port(); - /** - * {@inheritDoc} - */ - @Override - public boolean equals(Object obj) { - if (this == obj) return true; - if (obj == null || getClass() != obj.getClass()) return false; - HttpHealthCheck that = HttpHealthCheck.class.cast(obj); - return equal(this.kind, that.kind) - && equal(this.name, that.name) - && equal(this.host, that.host); - } + /** How often (in seconds) to send a health check. */ + public abstract int checkIntervalSec(); + + /** How long (in seconds) to wait before claiming failure. */ + public abstract int timeoutSec(); + + /** A so-far healthy VM will be marked unhealthy after this many consecutive failures. */ + public abstract int unhealthyThreshold(); + + /** An unhealthy VM will be marked healthy after this many consecutive successes. */ + public abstract int healthyThreshold(); /** - * {@inheritDoc} + * @param requestPath Defaults to "/" when null. + * @param port Defaults to 80 when null. + * @param checkIntervalSec Defaults to 5 when null. + * @param timeoutSec Defaults to 5 when null. + * @param unhealthyThreshold Defaults to 2 when null. + * @param healthyThreshold Defaults to 2 when null. */ - @Override - protected Objects.ToStringHelper string() { - return super.string() - .omitNullValues() - .add("host", host.orNull()) - .add("requestPath", requestPath.orNull()) - .add("port", port.orNull()) - .add("checkIntervalSec", checkIntervalSec.orNull()) - .add("timeoutSec", timeoutSec.orNull()) - .add("unhealthyThreshold", unhealthyThreshold.orNull()) - .add("healthyThreshold", healthyThreshold.orNull()); - } - - public Builder toBuilder() { - return new Builder().fromHttpHealthCheck(this); + @SerializedNames( + { "id", "selfLink", "name", "description", "host", "requestPath", "port", "checkIntervalSec", "timeoutSec", + "unhealthyThreshold", "healthyThreshold" }) + public static HttpHealthCheck create(String id, URI selfLink, String name, String description, String host, + String requestPath, Integer port, Integer checkIntervalSec, Integer timeoutSec, Integer unhealthyThreshold, + Integer healthyThreshold) { + return new AutoValue_HttpHealthCheck(id, selfLink, name, description, host, + requestPath != null ? requestPath : "/", port != null ? port : 80, + checkIntervalSec != null ? checkIntervalSec : 5, timeoutSec != null ? timeoutSec : 5, + unhealthyThreshold != null ? unhealthyThreshold : 2, healthyThreshold != null ? healthyThreshold : 2); } - public static final class Builder extends Resource.Builder<Builder> { - private String host; - private String requestPath; - private int port; - private int checkIntervalSec; - private int timeoutSec; - private int unhealthyThreshold; - private int healthyThreshold; - - /** - * @see HttpHealthCheck#getHost() - */ - public Builder host(String host) { - this.host = host; - return this; - } - - /** - * @see org.jclouds.googlecomputeengine.domain.HttpHealthCheck#getRequestPath() - */ - public Builder requestPath(String requestPath) { - this.requestPath = requestPath; - return this; - } - - /** - * @see org.jclouds.googlecomputeengine.domain.HttpHealthCheck#getPort() - */ - public Builder port(int port) { - this.port = port; - return this; - } - - /** - * @see org.jclouds.googlecomputeengine.domain.HttpHealthCheck#getCheckIntervalSec() - */ - public Builder checkIntervalSec(int checkIntervalSec) { - this.checkIntervalSec = checkIntervalSec; - return this; - } - - /** - * @see org.jclouds.googlecomputeengine.domain.HttpHealthCheck#getTimeoutSec() - */ - public Builder timeoutSec(int timeoutSec) { - this.timeoutSec = timeoutSec; - return this; - } - - /** - * @see HttpHealthCheck#getUnhealthyThreshold() - */ - public Builder unhealthyThreshold(int unhealthyThreshold) { - this.unhealthyThreshold = unhealthyThreshold; - return this; - } - - /** - * @see HttpHealthCheck#getHealthyThreshold() - */ - public Builder healthyThreshold(int healthyThreshold) { - this.healthyThreshold = healthyThreshold; - return this; - } - - @Override - protected Builder self() { - return this; - } - - public HttpHealthCheck build() { - return new HttpHealthCheck(super.id, super.creationTimestamp, super.selfLink, super.name, - super.description, host, requestPath, port, checkIntervalSec, timeoutSec, unhealthyThreshold, - healthyThreshold); - } - - public Builder fromHttpHealthCheck(HttpHealthCheck in) { - return super.fromResource(in) - .host(in.getHost().orNull()) - .requestPath(in.getRequestPath().orNull()) - .port(in.getPort().orNull()) - .checkIntervalSec(in.getCheckIntervalSec().orNull()) - .timeoutSec(in.getTimeoutSec().orNull()) - .unhealthyThreshold(in.getUnhealthyThreshold().orNull()) - .healthyThreshold(in.getHealthyThreshold().orNull()); - } + HttpHealthCheck() { } - } http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/b41b0d04/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Image.java ---------------------------------------------------------------------- diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Image.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Image.java index ddd315a..e70e92e 100644 --- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Image.java +++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Image.java @@ -16,266 +16,66 @@ */ package org.jclouds.googlecomputeengine.domain; -import static com.google.common.base.Objects.equal; -import static com.google.common.base.Objects.toStringHelper; -import static com.google.common.base.Optional.fromNullable; -import static com.google.common.base.Preconditions.checkNotNull; - -import java.beans.ConstructorProperties; import java.net.URI; -import java.util.Date; - -import com.google.common.annotations.Beta; -import com.google.common.base.Objects; -import com.google.common.base.Optional; - -/** - * Represents a disk image to use on an instance. - */ -@Beta -public final class Image extends Resource { - - private final String sourceType; - private final Optional<RawDisk> rawDisk; - private final Optional<Deprecated> deprecated; - - @ConstructorProperties({ - "id", "creationTimestamp", "selfLink", "name", "description", "sourceType", - "rawDisk", "deprecated" - }) - protected Image(String id, Date creationTimestamp, URI selfLink, String name, String description, - String sourceType, RawDisk rawDisk, Deprecated deprecated) { - super(Kind.IMAGE, id, creationTimestamp, selfLink, name, description); - this.sourceType = checkNotNull(sourceType, "sourceType of %s", name); - this.rawDisk = fromNullable(rawDisk); - this.deprecated = fromNullable(deprecated); - } - - /** - * @return must be RAW; provided by the client when the disk image is created. - */ - public String getSourceType() { - return sourceType; - } - - /** - * @return the raw disk image parameters. - */ - public Optional<RawDisk> getRawDisk() { - return rawDisk; - } - - /** - * @return the deprecation information for this image - */ - public Optional<Deprecated> getDeprecated() { - return deprecated; - } - - /** - * {@inheritDoc} - */ - @Override - protected Objects.ToStringHelper string() { - return super.string() - .omitNullValues() - .add("sourceType", sourceType) - .add("rawDisk", rawDisk) - .add("deprecated", deprecated.orNull()); - } - /** - * {@inheritDoc} - */ - @Override - public String toString() { - return string().toString(); - } - - public static Builder builder() { - return new Builder(); - } - - public Builder toBuilder() { - return new Builder().fromImage(this); - } +import org.jclouds.javax.annotation.Nullable; +import org.jclouds.json.SerializedNames; - public static final class Builder extends Resource.Builder<Builder> { +import com.google.auto.value.AutoValue; - private String sourceType; - private RawDisk rawDisk; - private Deprecated deprecated; +@AutoValue +public abstract class Image { + @AutoValue + public abstract static class RawDisk { /** - * @see Image#getSourceType() + * The full Google Cloud Storage URL where the disk image is stored; provided by the client when the disk + * image is created. */ - public Builder sourceType(String sourceType) { - this.sourceType = checkNotNull(sourceType, "sourceType"); - return this; - } + public abstract URI source(); /** - * @see Image#getDeprecated() + * The format used to encode and transmit the block device. */ - public Builder deprecated(Deprecated deprecated) { - this.deprecated = checkNotNull(deprecated, "deprecated"); - return this; - } + public abstract String containerType(); /** - * @see Image#getRawDisk() + * SHA1 checksum of the disk image before unpacking; provided by the client when the disk + * image is created. */ - public Builder rawDisk(RawDisk rawDisk) { - this.rawDisk = checkNotNull(rawDisk); - return this; - } + @Nullable public abstract String sha1Checksum(); - @Override - protected Builder self() { - return this; + @SerializedNames({ "source", "containerType", "sha1Checksum" }) + public static RawDisk create(URI source, String containerType, String sha1Checksum) { + return new AutoValue_Image_RawDisk(source, containerType, sha1Checksum); } - public Image build() { - return new Image(super.id, super.creationTimestamp, super.selfLink, super.name, - super.description, sourceType, rawDisk, deprecated); + RawDisk() { } - - public Builder fromImage(Image in) { - return super.fromResource(in) - .sourceType(in.getSourceType()) - .rawDisk(in.getRawDisk().orNull()) - .deprecated(in.getDeprecated().orNull()); - } - } - /** - * A raw disk image, usually the base for an image. - * - * @see <a href="https://developers.google.com/compute/docs/reference/v1/images"/> - */ - public static class RawDisk { - - private final String source; - private final String containerType; - private final Optional<String> sha1Checksum; - - @ConstructorProperties({ - "source", "containerType", "sha1Checksum" - }) - private RawDisk(String source, String containerType, String sha1Checksum) { - this.source = checkNotNull(source, "source"); - this.containerType = checkNotNull(containerType, "containerType"); - this.sha1Checksum = fromNullable(sha1Checksum); - } - - /** - * @return the full Google Cloud Storage URL where the disk image is stored; provided by the client when the disk - * image is created. - */ - public String getSource() { - return source; - } - - /** - * @return the format used to encode and transmit the block device. - */ - public String getContainerType() { - return containerType; - } - - /** - * @return an optional SHA1 checksum of the disk image before unpacking; provided by the client when the disk - * image is created. - */ - public Optional<String> getSha1Checksum() { - return sha1Checksum; - } - - /** - * {@inheritDoc} - */ - @Override - public int hashCode() { - return Objects.hashCode(source, containerType, sha1Checksum); - } + public abstract String id(); - /** - * {@inheritDoc} - */ - @Override - public boolean equals(Object obj) { - if (this == obj) return true; - if (obj == null || getClass() != obj.getClass()) return false; - RawDisk that = RawDisk.class.cast(obj); - return equal(this.source, that.source) - && equal(this.containerType, that.containerType) - && equal(this.sha1Checksum, that.sha1Checksum); - } + public abstract URI selfLink(); - protected Objects.ToStringHelper string() { - return toStringHelper(this) - .omitNullValues() - .add("source", source) - .add("containerType", containerType) - .add("sha1Checksum", sha1Checksum.orNull()); - } + public abstract String name(); - /** - * {@inheritDoc} - */ - @Override - public String toString() { - return string().toString(); - } + @Nullable public abstract String description(); - public static Builder builder() { - return new Builder(); - } + /** Must be RAW; provided by the client when the disk image is created. */ + // TODO: if this is true, why bother listing it? + public abstract String sourceType(); - public Builder toBuilder() { - return builder().fromImageRawDisk(this); - } - - public static class Builder { - - private String source; - private String containerType; - private String sha1Checksum; - - /** - * @see org.jclouds.googlecomputeengine.domain.Image.RawDisk#getSource() - */ - public Builder source(String source) { - this.source = checkNotNull(source); - return this; - } + @Nullable public abstract RawDisk rawDisk(); - /** - * @see org.jclouds.googlecomputeengine.domain.Image.RawDisk#getContainerType() - */ - public Builder containerType(String containerType) { - this.containerType = checkNotNull(containerType); - return this; - } + @Nullable public abstract Deprecated deprecated(); - /** - * @see org.jclouds.googlecomputeengine.domain.Image.RawDisk#getSha1Checksum() - */ - public Builder sha1Checksum(String sha1Checksum) { - this.sha1Checksum = sha1Checksum; - return this; - } - - public RawDisk build() { - return new RawDisk(source, containerType, sha1Checksum); - } + @SerializedNames({ "id", "selfLink", "name", "description", "sourceType", "rawDisk", "deprecated" }) + public static Image create(String id, URI selfLink, String name, String description, String sourceType, + RawDisk rawDisk, Deprecated deprecated) { + return new AutoValue_Image(id, selfLink, name, description, sourceType, rawDisk, deprecated); + } - public Builder fromImageRawDisk(RawDisk rawDisk) { - return new Builder().source(rawDisk.getSource()) - .containerType(rawDisk.getContainerType()) - .sha1Checksum(rawDisk.getSha1Checksum().orNull()); - } - } + Image() { } }
