http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/b41b0d04/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Operation.java ---------------------------------------------------------------------- diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Operation.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Operation.java index 3c9b685..8d6ade4 100644 --- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Operation.java +++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Operation.java @@ -16,537 +16,111 @@ */ 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 static org.jclouds.googlecomputeengine.internal.NullSafeCopies.copyOf; -import java.beans.ConstructorProperties; import java.net.URI; import java.util.Date; import java.util.List; -import org.jclouds.http.HttpResponse; 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.common.collect.ImmutableList; +import com.google.auto.value.AutoValue; -/** - * Describes an operation being executed on some Resource - */ -@Beta -public class Operation extends Resource { +@AutoValue +public abstract class Operation { - public static enum Status { - PENDING, - RUNNING, - DONE - } + @AutoValue + public abstract static class Error { + /** The error type identifier for this error. */ + public abstract String code(); // TODO: enum? - private final URI targetLink; - private final Optional<String> targetId; - private final Optional<String> clientOperationId; - private final Status status; - private final Optional<String> statusMessage; - private final String user; - private final Optional<Integer> progress; - private final Date insertTime; - private final Optional<Date> startTime; - private final Optional<Date> endTime; - private final Optional<HttpResponse> httpError; - private final String operationType; - private final List<Error> errors; - private final Optional<URI> zone; - private final Optional<URI> region; - - protected Operation(String id, Date creationTimestamp, URI selfLink, String name, String description, - URI targetLink, String targetId, String clientOperationId, Status status, - String statusMessage, String user, Integer progress, Date insertTime, Date startTime, - Date endTime, Integer httpErrorStatusCode, String httpErrorMessage, String operationType, - @Nullable List<Error> errors, URI region, URI zone) { - super(Kind.OPERATION, id, creationTimestamp, selfLink, name, description); - this.targetLink = checkNotNull(targetLink, "targetLink of %s", name); - this.targetId = fromNullable(targetId); - this.clientOperationId = fromNullable(clientOperationId); - this.status = checkNotNull(status, "status of %s", name); - this.statusMessage = fromNullable(statusMessage); - this.user = checkNotNull(user, "user of %s", name); - this.progress = fromNullable(progress); - this.insertTime = checkNotNull(insertTime, "insertTime of %s", name); - this.startTime = fromNullable(startTime); - this.endTime = fromNullable(endTime); - this.httpError = httpErrorStatusCode != null && httpErrorStatusCode != 0 ? - Optional.of(HttpResponse.builder() - .statusCode(httpErrorStatusCode) - .message(httpErrorMessage) - .build()) - : Optional.<HttpResponse>absent(); - this.operationType = checkNotNull(operationType, "insertTime of %s", name); - this.errors = errors == null ? ImmutableList.<Error>of() : ImmutableList.copyOf(errors); - this.region = fromNullable(region); - this.zone = fromNullable(zone); - } + /** The field in the request which caused the error. */ + @Nullable public abstract String location(); - /** - * @return URL of the resource the operation is mutating. - */ - public URI getTargetLink() { - return targetLink; - } + @Nullable public abstract String message(); - /** - * @return An optional identifier specified by the client when the mutation was initiated. Must be unique for all - * operation resources in the project. - */ - public Optional<String> getClientOperationId() { - return clientOperationId; - } + @SerializedNames({ "code", "location", "message" }) + public static Error create(String code, String location, String message) { + return new AutoValue_Operation_Error(code, location, message); + } - /** - * @return unique target id which identifies a particular incarnation of the target. - */ - public Optional<String> getTargetId() { - return targetId; + Error() { + } } - /** - * @return region this operation is in, if any. - */ - public Optional<URI> getRegion() { - return region; + public static enum Status { + PENDING, + RUNNING, + DONE } - /** - * @return zone this operation is in, if any. - */ - public Optional<URI> getZone() { - return zone; - } + public abstract String id(); - /** - * @return Status of the operation. Can be one of the following: PENDING, RUNNING, or DONE. - */ - public Status getStatus() { - return status; - } + public abstract URI selfLink(); - /** - * @return An optional textual description of the current status of the operation. - */ - public Optional<String> getStatusMessage() { - return statusMessage; - } + public abstract String name(); - /** - * @return User who requested the operation, for example "[email protected]". - */ - public String getUser() { - return user; - } + @Nullable public abstract String description(); - /** - * @return an optional progress indicator that ranges from 0 to 100. This should not be used to guess at when the - * operation will be complete. This number should be monotonically increasing as the operation progresses - * (output only). - */ - public Optional<Integer> getProgress() { - return progress; - } + /** URL of the resource the operation is mutating. */ + public abstract URI targetLink(); - /** - * @return the time that this operation was requested. - */ - public Date getInsertTime() { - return insertTime; - } + /** Target id which identifies a particular incarnation of the target. */ + @Nullable public abstract String targetId(); /** - * @return the time that this operation was started by the server. + * Identifier specified by the client when the mutation was initiated. Must be unique for all operation resources in + * the project. */ - public Optional<Date> getStartTime() { - return startTime; - } + @Nullable public abstract String clientOperationId(); - /** - * @return the time that this operation was completed. - */ - public Optional<Date> getEndTime() { - return endTime; - } + public abstract Status status(); - /** - * @return if operation fails, the HttpResponse with error status code returned and the message, e.g. NOT_FOUND. - */ - public Optional<HttpResponse> getHttpError() { - return httpError; - } + /** Textual description of the current status of the operation. */ + @Nullable public abstract String statusMessage(); - /** - * @return type of the operation. Examples include insert, update, and delete. - */ - public String getOperationType() { - return operationType; - } + /** User who requested the operation, for example {@code [email protected]}. */ + public abstract String user(); /** - * @return if error occurred during processing of this operation, this field will be populated. + * A progress indicator that ranges from 0 to 100. This should not be used to guess at when the + * operation will be complete. This number should be monotonically increasing as the operation progresses. */ - public List<Error> getErrors() { - return errors; - } + @Nullable public abstract Integer progress(); // TODO: check really nullable - /** - * {@inheritDoc} - */ - @Override - protected Objects.ToStringHelper string() { - return super.string() - .omitNullValues() - .add("targetLink", targetLink) - .add("targetId", targetId.orNull()) - .add("clientOperationId", clientOperationId.orNull()) - .add("status", status) - .add("statusMessage", statusMessage.orNull()) - .add("user", user) - .add("progress", progress.orNull()) - .add("insertTime", insertTime) - .add("startTime", startTime.orNull()) - .add("endTime", endTime.orNull()) - .add("httpError", httpError.orNull()) - .add("operationType", operationType) - .add("errors", errors) - .add("region", region.orNull()) - .add("zone", zone.orNull()); - } + /** The time that this operation was requested. */ + public abstract Date insertTime(); - /** - * {@inheritDoc} - */ - @Override - public String toString() { - return string().toString(); - } + @Nullable public abstract Date startTime(); - public static Builder builder() { - return new Builder(); - } + @Nullable public abstract Date endTime(); - public Builder toBuilder() { - return new Builder().fromOperation(this); - } - - public static final class Builder extends Resource.Builder<Builder> { - - private URI targetLink; - private String targetId; - private String clientOperationId; - private Status status; - private String statusMessage; - private String user; - private Integer progress; - private Date insertTime; - private Date startTime; - private Date endTime; - private Integer httpErrorStatusCode; - private String httpErrorMessage; - private String operationType; - private ImmutableList.Builder<Error> errors = ImmutableList.builder(); - private URI region; - private URI zone; - - /** - * @see Operation#getTargetLink() - */ - public Builder targetLink(URI targetLink) { - this.targetLink = targetLink; - return self(); - } - - /** - * @see Operation#getRegion() - */ - public Builder region(URI region) { - this.region = region; - return self(); - } - - /** - * @see Operation#getZone() - */ - public Builder zone(URI zone) { - this.zone = zone; - return self(); - } - - /** - * @see Operation#getTargetId() - */ - public Builder targetId(String targetId) { - this.targetId = targetId; - return self(); - } - - /** - * @see Operation#getClientOperationId() - */ - public Builder clientOperationId(String clientOperationId) { - this.clientOperationId = clientOperationId; - return self(); - } - - /** - * @see Operation#getStatus() - */ - public Builder status(Status status) { - this.status = status; - return self(); - } - - /** - * @see Operation#getStatusMessage() - */ - public Builder statusMessage(String statusMessage) { - this.statusMessage = statusMessage; - return self(); - } - - /** - * @see Operation#getUser() - */ - public Builder user(String user) { - this.user = user; - return self(); - } - - /** - * @see Operation#getProgress() - */ - public Builder progress(Integer progress) { - this.progress = progress; - return self(); - } - - /** - * @see Operation#getInsertTime() - */ - public Builder insertTime(Date insertTime) { - this.insertTime = insertTime; - return self(); - } - - /** - * @see Operation#getStartTime() - */ - public Builder startTime(Date startTime) { - this.startTime = startTime; - return self(); - } - - /** - * @see Operation#getEndTime() - */ - public Builder endTime(Date endTime) { - this.endTime = endTime; - return self(); - } - - /** - * @see Operation#getHttpError() - */ - public Builder httpErrorStatusCode(Integer httpErrorStatusCode) { - this.httpErrorStatusCode = httpErrorStatusCode; - return self(); - } - - /** - * @see Operation#getHttpError() - */ - public Builder httpErrorMessage(String httpErrorMessage) { - this.httpErrorMessage = httpErrorMessage; - return self(); - } + @Nullable public abstract Integer httpErrorStatusCode(); - /** - * @see Operation#getOperationType() - */ - public Builder operationType(String operationType) { - this.operationType = operationType; - return self(); - } + @Nullable public abstract String httpErrorMessage(); - /** - * @see Operation#getErrors() - */ - public Builder errors(Iterable<Error> errors) { - if (errors != null) - this.errors.addAll(errors); - return self(); - } + /** Examples include insert, update, and delete. */ + public abstract String operationType(); // TODO: enum - /** - * @see Operation#getErrors() - */ - public Builder addError(Error error) { - this.errors.add(error); - return self(); - } + public abstract List<Error> errors(); - @Override - protected Builder self() { - return this; - } + @Nullable public abstract URI region(); - public Operation build() { - return new Operation(super.id, super.creationTimestamp, super.selfLink, super.name, - super.description, targetLink, targetId, clientOperationId, status, statusMessage, user, progress, - insertTime, startTime, endTime, httpErrorStatusCode, httpErrorMessage, operationType, - errors.build(), region, zone); - } + @Nullable public abstract URI zone(); - public Builder fromOperation(Operation in) { - return super.fromResource(in) - .targetLink(in.getTargetLink()) - .targetId(in.getTargetId().orNull()) - .clientOperationId(in.getClientOperationId().orNull()) - .status(in.getStatus()) - .statusMessage(in.getStatusMessage().orNull()) - .user(in.getUser()) - .progress(in.getProgress().get()) - .insertTime(in.getInsertTime()) - .startTime(in.getStartTime().orNull()) - .endTime(in.getEndTime().orNull()) - .httpErrorStatusCode(in.getHttpError().isPresent() ? in.getHttpError().get().getStatusCode() : null) - .httpErrorMessage(in.getHttpError().isPresent() ? in.getHttpError().get().getMessage() : null) - .operationType(in.getOperationType()).errors(in.getErrors()) - .zone(in.getZone().orNull()).region(in.getRegion().orNull()); - } + @SerializedNames({ "id", "selfLink", "name", "description", "targetLink", "targetId", "clientOperationId", "status", + "statusMessage", "user", "progress", "insertTime", "startTime", "endTime", "httpErrorStatusCode", + "httpErrorMessage", "operationType", "errors", "region", "zone" }) + public static Operation create(String id, URI selfLink, String name, String description, URI targetLink, + String targetId, String clientOperationId, Status status, String statusMessage, String user, Integer progress, + Date insertTime, Date startTime, Date endTime, Integer httpErrorStatusCode, String httpErrorMessage, + String operationType, List<Error> errors, URI region, URI zone) { + return new AutoValue_Operation(id, selfLink, name, description, targetLink, targetId, clientOperationId, status, + statusMessage, user, progress, insertTime, startTime, endTime, httpErrorStatusCode, httpErrorMessage, + operationType, copyOf(errors), region, zone); } - /** - * A particular error for an operation including the details. - */ - public static final class Error { - - private final String code; - private final Optional<String> location; - private final Optional<String> message; - - @ConstructorProperties({ - "code", "location", "message" - }) - private Error(String code, String location, String message) { - this.code = checkNotNull(code, "code"); - this.location = fromNullable(location); - this.message = fromNullable(message); - } - - /** - * @return the error type identifier for this error. - */ - public String getCode() { - return code; - } - - /** - * @return indicates the field in the request which caused the error.. - */ - public Optional<String> getLocation() { - return location; - } - - /** - * @return an optional, human-readable error message. - */ - public Optional<String> getMessage() { - return message; - } - - /** - * {@inheritDoc} - */ - @Override - public int hashCode() { - return Objects.hashCode(code, location, message); - } - - /** - * {@inheritDoc} - */ - @Override - public boolean equals(Object obj) { - if (this == obj) return true; - if (obj == null || getClass() != obj.getClass()) return false; - Error that = Error.class.cast(obj); - return equal(this.code, that.code) - && equal(this.location, that.location) - && equal(this.message, that.message); - } - - protected Objects.ToStringHelper string() { - return toStringHelper(this) - .omitNullValues() - .add("code", code) - .add("location", location.orNull()) - .add("message", message.orNull()); - } - - /** - * {@inheritDoc} - */ - @Override - public String toString() { - return string().toString(); - } - - public static Builder builder() { - return new Builder(); - } - - public Builder toBuilder() { - return builder().fromOperationErrorDetail(this); - } - - public static final class Builder { - - private String code; - private String location; - private String message; - - /** - * @see org.jclouds.googlecomputeengine.domain.Operation.Error#getCode() - */ - public Builder code(String code) { - this.code = code; - return this; - } - - /** - * @see org.jclouds.googlecomputeengine.domain.Operation.Error#getLocation() - */ - public Builder location(String location) { - this.location = location; - return this; - } - - /** - * @see org.jclouds.googlecomputeengine.domain.Operation.Error#getMessage() - */ - public Builder message(String message) { - this.message = message; - return this; - } - - public Error build() { - return new Error(code, location, message); - } - - public Builder fromOperationErrorDetail(Error in) { - return new Builder().code(in.getCode()).location(in.getLocation().orNull()).message - (in.getMessage().orNull()); - } - } + Operation() { } }
http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/b41b0d04/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Project.java ---------------------------------------------------------------------- diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Project.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Project.java index c0f4c8d..d5bb303 100644 --- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Project.java +++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Project.java @@ -16,146 +16,44 @@ */ package org.jclouds.googlecomputeengine.domain; -import static com.google.common.base.Preconditions.checkNotNull; +import static org.jclouds.googlecomputeengine.internal.NullSafeCopies.copyOf; import java.net.URI; -import java.util.Date; -import java.util.Set; +import java.util.List; 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.auto.value.AutoValue; -/** - * A Project resource is the root collection and settings resource for all Google Compute Engine resources. - */ -@Beta -public class Project extends Resource { +/** The root collection and settings resource for all Google Compute Engine resources. */ +@AutoValue +public abstract class Project { - private final Metadata commonInstanceMetadata; - private final Set<Quota> quotas; - private final Set<String> externalIpAddresses; + public abstract String id(); - protected Project(String id, Date creationTimestamp, URI selfLink, String name, String description, - Metadata commonInstanceMetadata, Set<Quota> quotas, Set<String> externalIpAddresses) { - super(Kind.PROJECT, id, creationTimestamp, selfLink, name, description); - this.commonInstanceMetadata = checkNotNull(commonInstanceMetadata, "commonInstanceMetadata"); - this.quotas = quotas == null ? ImmutableSet.<Quota>of() : ImmutableSet.copyOf(quotas); - this.externalIpAddresses = externalIpAddresses == null ? ImmutableSet.<String>of() : ImmutableSet.copyOf - (externalIpAddresses); - } + public abstract URI selfLink(); - /** - * @return metadata key/value pairs available to all instances contained in this project. - */ - public Metadata getCommonInstanceMetadata() { - return commonInstanceMetadata; - } + public abstract String name(); - /** - * @return quotas assigned to this project. - */ - public Set<Quota> getQuotas() { - return quotas; - } + @Nullable public abstract String description(); - /** - * @return internet available IP addresses available for use in this project. - */ - @Nullable - public Set<String> getExternalIpAddresses() { - return externalIpAddresses; - } + /** Key/value pairs available to all instances contained in this project. */ + public abstract Metadata commonInstanceMetadata(); - /** - * {@inheritDoc} - */ - @Override - protected Objects.ToStringHelper string() { - return super.string() - .add("commonInstanceMetadata", commonInstanceMetadata) - .add("quotas", quotas) - .add("externalIpAddresses", externalIpAddresses); - } + public abstract List<Quota> quotas(); - /** - * {@inheritDoc} - */ - @Override - public String toString() { - return string().toString(); - } + /** Available IP addresses available for use in this project. */ + public abstract List<String> externalIpAddresses(); - public static Builder builder() { - return new Builder(); + @SerializedNames( + { "id", "selfLink", "name", "description", "commonInstanceMetadata", "quotas", "externalIpAddresses" }) + public static Project create(String id, URI selfLink, String name, String description, + Metadata commonInstanceMetadata, List<Quota> quotas, List<String> externalIpAddresses) { + return new AutoValue_Project(id, selfLink, name, description, commonInstanceMetadata, copyOf(quotas), + copyOf(externalIpAddresses)); } - public Builder toBuilder() { - return new Builder().fromProject(this); + Project() { } - - public static final class Builder extends Resource.Builder<Builder> { - - private Metadata commonInstanceMetadata; - private ImmutableSet.Builder<Quota> quotas = ImmutableSet.builder(); - private ImmutableSet.Builder<String> externalIpAddresses = ImmutableSet.builder(); - - /** - * @see Project#getCommonInstanceMetadata() - */ - public Builder commonInstanceMetadata(Metadata commonInstanceMetadata) { - this.commonInstanceMetadata = commonInstanceMetadata; - return this; - } - - /** - * @see Project#getQuotas() - */ - public Builder addQuota(String metric, double usage, double limit) { - this.quotas.add(Quota.builder().metric(metric).usage(usage).limit(limit).build()); - return this; - } - - /** - * @see Project#getQuotas() - */ - public Builder quotas(Set<Quota> quotas) { - this.quotas.addAll(checkNotNull(quotas)); - return this; - } - - /** - * @see Project#getExternalIpAddresses() - */ - public Builder addExternalIpAddress(String externalIpAddress) { - this.externalIpAddresses.add(checkNotNull(externalIpAddress, "externalIpAddress")); - return this; - } - - /** - * @see Project#getExternalIpAddresses() - */ - public Builder externalIpAddresses(Set<String> externalIpAddresses) { - this.externalIpAddresses.addAll(checkNotNull(externalIpAddresses, "externalIpAddresses")); - return this; - } - - @Override - protected Builder self() { - return this; - } - - public Project build() { - return new Project(super.id, super.creationTimestamp, super.selfLink, super.name, - super.description, commonInstanceMetadata, quotas.build(), externalIpAddresses.build()); - } - - public Builder fromProject(Project in) { - return super.fromResource(in).commonInstanceMetadata(in.getCommonInstanceMetadata()).quotas(in.getQuotas()) - .externalIpAddresses(in.getExternalIpAddresses()); - } - } - } http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/b41b0d04/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Quota.java ---------------------------------------------------------------------- diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Quota.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Quota.java index 08ce247..b1cbad5 100644 --- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Quota.java +++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Quota.java @@ -16,132 +16,26 @@ */ package org.jclouds.googlecomputeengine.domain; -import static com.google.common.base.Preconditions.checkNotNull; +import org.jclouds.javax.annotation.Nullable; +import org.jclouds.json.SerializedNames; -import java.beans.ConstructorProperties; +import com.google.auto.value.AutoValue; -import com.google.common.annotations.Beta; -import com.google.common.base.Objects; -import com.google.common.base.Objects.ToStringHelper; +/** Quotas assigned to a given project or region. */ +@AutoValue +public abstract class Quota { -/** - * Quotas assigned to a given project or region. - */ -@Beta -public class Quota { - private String metric; - private double usage; - private double limit; - - @ConstructorProperties({ - "metric", "usage", "limit" - }) - public Quota(String metric, Double usage, Double limit) { - this.metric = metric != null ? metric : "undefined"; - this.usage = checkNotNull(usage, "usage"); - this.limit = checkNotNull(limit, "limit"); - } - - /** - * @return name of the quota metric. - */ - public String getMetric() { - return metric; - } - - /** - * @return current usage of this metric. - */ - public Double getUsage() { - return usage; - } - - /** - * @return quota limit for this metric. - */ - public Double getLimit() { - return limit; - } + @Nullable public abstract String metric(); // Nullable?! really?! - /** - * {@inheritDoc} - */ - @Override - public int hashCode() { - return Objects.hashCode(metric); - } + public abstract double usage(); - /** - * {@inheritDoc} - */ - @Override - public boolean equals(Object obj) { - if (this == obj) return true; - if (obj == null || this.getClass() != obj.getClass()) return false; - Quota that = Quota.class.cast(obj); - return Objects.equal(this.metric, that.metric); - } + public abstract double limit(); - public ToStringHelper string() { - return Objects.toStringHelper(this) - .omitNullValues() - .add("metric", metric) - .add("usage", usage) - .add("limit", limit); + @SerializedNames({ "metric", "usage", "limit" }) + public static Quota create(String metric, double usage, double limit) { + return new AutoValue_Quota(metric, usage, limit); } - /** - * {@inheritDoc} - */ - @Override - public String toString() { - return string().toString(); - } - - public static Builder builder() { - return new Builder(); - } - - public Builder toBuilder() { - return builder().fromQuota(this); - } - - public static class Builder { - - private String metric; - private Double usage; - private Double limit; - - /** - * @see org.jclouds.googlecomputeengine.domain.Quota#getMetric() - */ - public Builder metric(String metric) { - this.metric = checkNotNull(metric, "metric"); - return this; - } - - /** - * @see org.jclouds.googlecomputeengine.domain.Quota#getUsage() - */ - public Builder usage(Double usage) { - this.usage = usage; - return this; - } - - /** - * @see org.jclouds.googlecomputeengine.domain.Quota#getLimit() - */ - public Builder limit(Double limit) { - this.limit = limit; - return this; - } - - public Quota build() { - return new Quota(metric, usage, limit); - } - - public Builder fromQuota(Quota quota) { - return new Builder().metric(quota.getMetric()).usage(quota.getUsage()).limit(quota.getLimit()); - } + Quota() { } } http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/b41b0d04/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Region.java ---------------------------------------------------------------------- diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Region.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Region.java index 60f055c..2b4a425 100644 --- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Region.java +++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Region.java @@ -16,159 +16,44 @@ */ package org.jclouds.googlecomputeengine.domain; -import static com.google.common.base.Preconditions.checkNotNull; +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.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.auto.value.AutoValue; -/** - * Represents a region resource. - */ -@Beta -public final class Region extends Resource { +@AutoValue +public abstract class Region { public enum Status { UP, DOWN } - private final Status status; - private final Set<URI> zones; - private final Set<Quota> quotas; - - @ConstructorProperties({ - "id", "creationTimestamp", "selfLink", "name", "description", "status", - "zones", "quotas" - }) - private Region(String id, Date creationTimestamp, URI selfLink, String name, String description, - Status status, Set<URI> zones, Set<Quota> quotas) { - super(Kind.REGION, id, creationTimestamp, selfLink, name, description); - this.status = checkNotNull(status, "status of %name", name); - this.zones = zones == null ? ImmutableSet.<URI>of() : ImmutableSet - .copyOf(zones); - this.quotas = quotas == null ? ImmutableSet.<Quota>of() : ImmutableSet.copyOf(quotas); - } - - /** - * @return Status of the region. "UP" or "DOWN". - */ - public Status getStatus() { - return status; - } + public abstract String id(); - /** - * @return the zones that can be used in this region. - */ - @Nullable - public Set<URI> getZones() { - return zones; - } + public abstract URI selfLink(); - /** - * @return quotas assigned to this project. - */ - public Set<Quota> getQuotas() { - return quotas; - } + public abstract String name(); + @Nullable public abstract String description(); - /** - * {@inheritDoc} - */ - @Override - protected Objects.ToStringHelper string() { - return super.string() - .add("status", status) - .add("zones", zones) - .add("quotas", quotas); - } + public abstract Status status(); - /** - * {@inheritDoc} - */ - @Override - public String toString() { - return string().toString(); - } + public abstract List<URI> zones(); - public static Builder builder() { - return new Builder(); - } + public abstract List<Quota> quotas(); - public Builder toBuilder() { - return new Builder().fromRegion(this); + @SerializedNames({ "id", "selfLink", "name", "description", "status", "zones", "quotas" }) + public static Region create(String id, URI selfLink, String name, String description, Status status, List<URI> zones, + List<Quota> quotas) { + return new AutoValue_Region(id, selfLink, name, description, status, copyOf(zones), copyOf(quotas)); } - public static final class Builder extends Resource.Builder<Builder> { - - private Status status; - private ImmutableSet.Builder<URI> zones = ImmutableSet.builder(); - private ImmutableSet.Builder<Quota> quotas = ImmutableSet.builder(); - - /** - * @see org.jclouds.googlecomputeengine.domain.Region#getStatus() - */ - public Builder status(Status status) { - this.status = status; - return this; - } - - /** - * @see Region#getZones() - */ - public Builder zone(URI zone) { - this.zones.add(checkNotNull(zone, "zone")); - return this; - } - - /** - * @see Region#getZones() - */ - public Builder zones(Set<URI> zones) { - this.zones.addAll(checkNotNull(zones, "zones")); - return this; - } - - /** - * @see Region#getQuotas() - */ - public Builder addQuota(String metric, double usage, double limit) { - this.quotas.add(Quota.builder().metric(metric).usage(usage).limit(limit).build()); - return this; - } - - /** - * @see Region#getQuotas() - */ - public Builder quotas(Set<Quota> quotas) { - this.quotas.addAll(checkNotNull(quotas)); - return this; - } - - @Override - protected Builder self() { - return this; - } - - public Region build() { - return new Region(super.id, super.creationTimestamp, super.selfLink, super.name, - super.description, status, zones.build(), quotas.build()); - } - - public Builder fromRegion(Region in) { - return super.fromResource(in) - .status(in.getStatus()) - .zones(in.getZones()) - .quotas(in.getQuotas()); - } + Region() { } - } http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/b41b0d04/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Resource.java ---------------------------------------------------------------------- diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Resource.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Resource.java deleted file mode 100644 index c321788..0000000 --- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Resource.java +++ /dev/null @@ -1,287 +0,0 @@ -/* - * 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.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 com.google.common.annotations.Beta; -import com.google.common.base.CaseFormat; -import com.google.common.base.Joiner; -import com.google.common.base.Objects; -import com.google.common.base.Optional; -import com.google.common.base.Splitter; -import com.google.common.collect.Iterables; - -import org.jclouds.javax.annotation.Nullable; - -import java.beans.ConstructorProperties; -import java.net.URI; -import java.util.Date; - -/** - * Base class for Google Compute Engine resources. - */ -@Beta -public class Resource { - - public enum Kind { - ADDRESS, - ADDRESS_LIST, - DISK, - DISK_LIST, - DISK_TYPE, - DISK_TYPE_LIST, - FIREWALL, - FIREWALL_LIST, - FORWARDING_RULE, - FORWARDING_RULE_LIST, - HTTP_HEALTH_CHECK, - HTTP_HEALTH_CHECK_LIST, - IMAGE, - IMAGE_LIST, - OPERATION, - OPERATION_LIST, - INSTANCE, - INSTANCE_LIST, - MACHINE_TYPE, - MACHINE_TYPE_LIST, - PROJECT, - NETWORK, - NETWORK_LIST, - REGION, - REGION_LIST, - ROUTE, - ROUTE_LIST, - SNAPSHOT, - SNAPSHOT_LIST, - TARGET_POOL, - TARGET_POOL_LIST, - ZONE, - ZONE_LIST; - - public String value() { - return Joiner.on("#").join("compute", CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, name())); - } - - @Override - public String toString() { - return value(); - } - - public static Kind fromValue(String kind) { - return valueOf(CaseFormat.LOWER_CAMEL.to(CaseFormat - .UPPER_UNDERSCORE, - Iterables.getLast(Splitter.on("#").split(checkNotNull(kind, - "kind"))))); - } - } - - protected final Kind kind; - protected final String id; - protected final Optional<Date> creationTimestamp; - protected final URI selfLink; - protected final String name; - protected final Optional<String> description; - - @ConstructorProperties({ - "kind", "id", "creationTimestamp", "selfLink", "name", "description" - }) - protected Resource(Kind kind, String id, Date creationTimestamp, URI selfLink, String name, - String description) { - this.kind = checkNotNull(kind, "kind"); - this.id = checkNotNull(id, "id"); - this.creationTimestamp = fromNullable(creationTimestamp); - this.selfLink = checkNotNull(selfLink, "selfLink"); - this.name = checkNotNull(name, "name"); - this.description = fromNullable(description); - } - - /** - * @return the Type of the resource - */ - public Kind getKind() { - return kind; - } - - /** - * @return unique identifier for the resource; defined by the server. - */ - public String getId() { - return id; - } - - /** - * @return creation timestamp in RFC3339 text format. - */ - public Optional<Date> getCreationTimestamp() { - return creationTimestamp; - } - - /** - * @return server defined URL for the resource. - */ - public URI getSelfLink() { - return selfLink; - } - - /** - * @return name of the resource. - */ - public String getName() { - return name; - } - - /** - * @return an optional textual description of the resource. - */ - @Nullable - public Optional<String> getDescription() { - return description; - } - - /** - * {@inheritDoc} - */ - @Override - public int hashCode() { - return Objects.hashCode(kind, name); - } - - /** - * {@inheritDoc} - */ - @Override - public boolean equals(Object obj) { - if (this == obj) return true; - if (obj == null || getClass() != obj.getClass()) return false; - Resource that = Resource.class.cast(obj); - return equal(this.kind, that.kind) - && equal(this.name, that.name); - } - - @SuppressWarnings("deprecation") - protected Objects.ToStringHelper string() { - return Objects.toStringHelper(this) - .omitNullValues() - .add("kind", kind) - .add("id", id) - .add("name", name) - .add("creationTimestamp", creationTimestamp.orNull()) - .add("selfLink", selfLink) - .add("name", name) - .add("description", description.orNull()); - } - - /** - * {@inheritDoc} - */ - @Override - public String toString() { - return string().toString(); - } - - public static Builder<?> builder() { - return new ConcreteBuilder(); - } - - public Builder<?> toBuilder() { - return new ConcreteBuilder().fromResource(this); - } - - public abstract static class Builder<T extends Builder<T>> { - - protected abstract T self(); - - protected Kind kind; - protected String id; - protected Date creationTimestamp; - protected URI selfLink; - protected String name; - protected String description; - - /** - * @see Resource#getKind() - */ - protected T kind(Kind kind) { - this.kind = kind; - return self(); - } - - /** - * @see Resource#getId() - */ - public T id(String id) { - this.id = id; - return self(); - } - - /** - * @see Resource#getCreationTimestamp() - */ - public T creationTimestamp(Date creationTimestamp) { - this.creationTimestamp = creationTimestamp; - return self(); - } - - /** - * @see Resource#getSelfLink() - */ - public T selfLink(URI selfLink) { - this.selfLink = selfLink; - return self(); - } - - /** - * @see Resource#getName() - */ - public T name(String name) { - this.name = name; - return self(); - } - - /** - * @see Resource#getDescription() - */ - public T description(String description) { - this.description = description; - return self(); - } - - public Resource build() { - return new Resource(kind, id, creationTimestamp, selfLink, name, description); - } - - public T fromResource(Resource in) { - return this - .kind(in.getKind()) - .id(in.getId()) - .creationTimestamp(in.getCreationTimestamp().orNull()) - .selfLink(in.getSelfLink()) - .name(in.getName()) - .description(in.getDescription().orNull()); - } - } - - private static class ConcreteBuilder extends Builder<ConcreteBuilder> { - @Override - protected ConcreteBuilder self() { - return this; - } - } -} http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/b41b0d04/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Route.java ---------------------------------------------------------------------- diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Route.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Route.java index 5143a5a..4af546e 100644 --- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Route.java +++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Route.java @@ -16,414 +16,85 @@ */ 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 static org.jclouds.googlecomputeengine.internal.NullSafeCopies.copyOf; -import java.beans.ConstructorProperties; import java.net.URI; -import java.util.Date; +import java.util.List; import java.util.Map; -import java.util.Set; -import com.google.common.annotations.Beta; -import com.google.common.base.Objects; -import com.google.common.base.Optional; -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.ImmutableSet; +import org.jclouds.javax.annotation.Nullable; +import org.jclouds.json.SerializedNames; -/** - * Represents a route resource. - */ -@Beta -public final class Route extends Resource { - - private final URI network; - private final Set<String> tags; - private final String destRange; - private final Integer priority; - private final Optional<URI> nextHopInstance; - private final Optional<String> nextHopIp; - private final Optional<URI> nextHopNetwork; - private final Optional<URI> nextHopGateway; - private final Set<Warning> warnings; - - @ConstructorProperties({ - "id", "creationTimestamp", "selfLink", "name", "description", "network", "tags", - "destRange", "priority", "nextHopInstance", "nextHopIp", "nextHopNetwork", - "nextHopGateway", "warnings" - }) - private Route(String id, Date creationTimestamp, URI selfLink, String name, String description, - URI network, Set<String> tags, String destRange, Integer priority, - URI nextHopInstance, String nextHopIp, URI nextHopNetwork, - URI nextHopGateway, Set<Warning> warnings) { - super(Kind.ROUTE, id, creationTimestamp, selfLink, name, description); - this.network = checkNotNull(network, "network for %name", name); - this.tags = tags == null ? ImmutableSet.<String>of() : tags; - this.destRange = checkNotNull(destRange, "destination range for %name", name); - this.priority = checkNotNull(priority, "priority of %name", name); - this.nextHopInstance = fromNullable(nextHopInstance); - this.nextHopIp = fromNullable(nextHopIp); - this.nextHopNetwork = fromNullable(nextHopNetwork); - this.nextHopGateway = fromNullable(nextHopGateway); - this.warnings = warnings == null ? ImmutableSet.<Warning>of() : warnings; - } - - /** - * @return Network for this Route. - */ - public URI getNetwork() { - return network; - } - - /** - * @return The set of instance items to which this route applies. - */ - public Set<String> getTags() { - return tags; - } +import com.google.auto.value.AutoValue; - /** - * @return The destination range of outgoing packets that this route applies to. - */ - public String getDestRange() { - return destRange; - } +@AutoValue +public abstract class Route { - /** - * @return The priority of this route. Priority is used to break ties in the case - * where there is more than one matching route of maximum length. A lower value - * is higher priority; a priority of 100 is higher than 200. - */ - public Integer getPriority() { - return priority; - } + @AutoValue + public abstract static class Warning { + public abstract String code(); // TODO: enum - /** - * @return The fully-qualified URL to an instance that should handle matching packets. - */ - public Optional<URI> getNextHopInstance() { - return nextHopInstance; - } + @Nullable public abstract String message(); - /** - * @return The network IP address of an instance that should handle matching packets. - */ - public Optional<String> getNextHopIp() { - return nextHopIp; - } + public abstract Map<String, String> data(); - /** - * @return The URL of the local network if it should handle matching packets. - */ - public Optional<URI> getNextHopNetwork() { - return nextHopNetwork; - } - - /** - * @return The URL to a gateway that should handle matching packets. Currently, this is only the internet gateway. - */ - public Optional<URI> getNextHopGateway() { - return nextHopGateway; - } - - /** - * @return If potential misconfigurations are detected for this route, this field will be populated with warning messages. - */ - public Set<Warning> getWarnings() { - return warnings; - } - - /** - * {@inheritDoc} - */ - @Override - protected Objects.ToStringHelper string() { - return super.string() - .add("network", network) - .add("tags", tags) - .add("destRange", destRange) - .add("priority", priority) - .add("nextHopInstance", nextHopInstance.orNull()) - .add("nextHopIp", nextHopIp.orNull()) - .add("nextHopNetwork", nextHopNetwork.orNull()) - .add("nextHopGateway", nextHopGateway.orNull()) - .add("warnings", warnings); - } - - /** - * {@inheritDoc} - */ - @Override - public String toString() { - return string().toString(); - } - - public static Builder builder() { - return new Builder(); - } - - public Builder toBuilder() { - return new Builder().fromRoute(this); - } - - public static final class Builder extends Resource.Builder<Builder> { - - private URI network; - private ImmutableSet.Builder<String> tags = ImmutableSet.builder(); - private String destRange; - private Integer priority; - private URI nextHopInstance; - private String nextHopIp; - private URI nextHopNetwork; - private URI nextHopGateway; - private ImmutableSet.Builder<Warning> warnings = ImmutableSet.builder(); - - - /** - * @see Route#getNetwork() - */ - public Builder network(URI network) { - this.network = network; - return this; - } - - /** - * @see Route#getTags() - */ - public Builder addTag(String tag) { - this.tags.add(tag); - return this; - } - - /** - * @see Route#getTags() - */ - public Builder tags(Set<String> tags) { - this.tags.addAll(tags); - return this; - } - - /** - * @see Route#getDestRange() - */ - public Builder destRange(String destRange) { - this.destRange = destRange; - return this; - } - - /** - * @see Route#getPriority() - */ - public Builder priority(Integer priority) { - this.priority = priority; - return this; + @SerializedNames({ "code", "message", "data" }) + public static Warning create(String code, String message, Map<String, String> data) { + return new AutoValue_Route_Warning(code, message, copyOf(data)); } - /** - * @see Route#getNextHopInstance() - */ - public Builder nextHopInstance(URI nextHopInstance) { - this.nextHopInstance = nextHopInstance; - return this; + Warning() { } + } - /** - * @see Route#getNextHopIp() - */ - public Builder nextHopIp(String nextHopIp) { - this.nextHopIp = nextHopIp; - return this; - } + public abstract String id(); - /** - * @see Route#getNextHopNetwork() - */ - public Builder nextHopNetwork(URI nextHopNetwork) { - this.nextHopNetwork = nextHopNetwork; - return this; - } + public abstract URI selfLink(); - /** - * @see Route#getNextHopGateway() - */ - public Builder nextHopGateway(URI nextHopGateway) { - this.nextHopGateway = nextHopGateway; - return this; - } + public abstract String name(); - /** - * @see Route#getWarnings() - */ - public Builder addWarning(Warning warning) { - this.warnings.add(warning); - return this; - } + @Nullable public abstract String description(); - /** - * @see Route#getWarnings() - */ - public Builder warnings(Set<Warning> warnings) { - this.warnings.addAll(warnings); - return this; - } + public abstract URI network(); + /** The set of instance items to which this route applies. */ + public abstract List<String> tags(); - @Override - protected Builder self() { - return this; - } - - public Route build() { - return new Route(super.id, super.creationTimestamp, super.selfLink, super.name, - super.description, network, tags.build(), destRange, priority, - nextHopInstance, nextHopIp, nextHopNetwork, nextHopGateway, - warnings.build()); - } - - public Builder fromRoute(Route in) { - return super.fromResource(in) - .network(in.getNetwork()) - .tags(in.getTags()) - .destRange(in.getDestRange()) - .priority(in.getPriority()) - .nextHopInstance(in.getNextHopInstance().orNull()) - .nextHopIp(in.getNextHopIp().orNull()) - .nextHopNetwork(in.getNextHopNetwork().orNull()) - .nextHopGateway(in.getNextHopGateway().orNull()) - .warnings(in.getWarnings()); - } - } + /** The destination range of outgoing packets that this route applies to. */ + public abstract String destRange(); /** - * If potential misconfigurations are detected for this route, this field will be populated with warning messages. + * The priority of this route. Priority is used to break ties in the case + * where there is more than one matching route of maximum length. A lower value + * is higher priority; a priority of 100 is higher than 200. */ - public static class Warning { - private final String code; - private final Optional<String> message; - private final Map<String, String> data; - - @ConstructorProperties({ - "code", "message", "data" - }) - public Warning(String code, String message, Map<String, String> data) { - this.code = checkNotNull(code, "code"); - this.message = fromNullable(message); - this.data = data == null ? ImmutableMap.<String, String>of() : data; - } - - /** - * @return The warning type identifier for this warning. - */ - public String getCode() { - return code; - } - - /** - * @return Optional human-readable details for this warning. - */ - public Optional<String> getMessage() { - return message; - } + public abstract int priority(); - /** - * @return Metadata for this warning - */ - public Map<String, String> getData() { - return data; - } + /** The fully-qualified URL to an instance that should handle matching packets. */ + @Nullable public abstract URI nextHopInstance(); - /** - * {@inheritDoc} - */ - @Override - public int hashCode() { - return Objects.hashCode(code, message, data); - } + /** The network IP address of an instance that should handle matching packets. */ + @Nullable public abstract String nextHopIp(); - /** - * {@inheritDoc} - */ - @Override - public boolean equals(Object obj) { - if (this == obj) return true; - if (obj == null || getClass() != obj.getClass()) return false; - Warning that = Warning.class.cast(obj); - return equal(this.code, that.code) - && equal(this.message, that.message) - && equal(this.data, that.data); - } + /** The local network if it should handle matching packets. */ + @Nullable public abstract URI nextHopNetwork(); - protected Objects.ToStringHelper string() { - return toStringHelper(this) - .add("code", code) - .add("message", message) - .add("data", data); - } + /** The gateway that should handle matching packets. Currently, this is only the internet gateway. */ + @Nullable public abstract URI nextHopGateway(); - /** - * {@inheritDoc} - */ - @Override - public String toString() { - return string().toString(); - } + /** Potential misconfigurations are detected for this route. */ + public abstract List<Warning> warnings(); - public static Builder builder() { - return new Builder(); - } - - public Builder toBuilder() { - return builder().fromWarning(this); - } - - public static final class Builder { - private String code; - private String message; - private ImmutableMap.Builder<String, String> data = ImmutableMap.builder(); - - /** - * @see Warning#getCode() - */ - public Builder code(String code) { - this.code = code; - return this; - } - - /** - * @see Warning#getMessage() - */ - public Builder message(String message) { - this.message = message; - return this; - } - - /** - * @see Warning#getData() - */ - public Builder data(Map<String, String> data) { - this.data = new ImmutableMap.Builder<String, String>().putAll(data); - return this; - } - - /** - * @see Warning#getData() - */ - public Builder addData(String key, String value) { - this.data.put(checkNotNull(key, "key"), checkNotNull(value, "value of %s", key)); - return this; - } - - public Warning build() { - return new Warning(code, message, data.build()); - } + @SerializedNames( + { "id", "selfLink", "name", "description", "network", "tags", "destRange", "priority", "nextHopInstance", + "nextHopIp", "nextHopNetwork", "nextHopGateway", "warnings" }) + public static Route create(String id, URI selfLink, String name, String description, URI network, List<String> tags, + String destRange, int priority, URI nextHopInstance, String nextHopIp, URI nextHopNetwork, URI nextHopGateway, + List<Warning> warnings) { + return new AutoValue_Route(id, selfLink, name, description, network, copyOf(tags), destRange, priority, + nextHopInstance, nextHopIp, nextHopNetwork, nextHopGateway, copyOf(warnings)); + } - public Builder fromWarning(Warning in) { - return this.code(in.getCode()) - .message(in.getMessage().orNull()) - .data(in.getData()); - } - } + Route() { } } http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/b41b0d04/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/SlashEncodedIds.java ---------------------------------------------------------------------- diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/SlashEncodedIds.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/SlashEncodedIds.java deleted file mode 100644 index 0080b29..0000000 --- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/SlashEncodedIds.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * 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.googlecomputeengine.domain; - -import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.base.Preconditions.checkNotNull; - -import com.google.common.base.Objects; -import com.google.common.base.Splitter; -import com.google.common.collect.Iterables; - -public class SlashEncodedIds { - public static SlashEncodedIds fromSlashEncoded(String id) { - Iterable<String> parts = Splitter.on('/').split(checkNotNull(id, "id")); - checkArgument(Iterables.size(parts) == 2, "id must be in format firstId/secondId"); - return new SlashEncodedIds(Iterables.get(parts, 0), Iterables.get(parts, 1)); - } - - public static SlashEncodedIds fromTwoIds(String firstId, String secondId) { - return new SlashEncodedIds(firstId, secondId); - } - - private static String slashEncodeTwoIds(String firstId, String secondId) { - return checkNotNull(firstId, "firstId") + "/" + checkNotNull(secondId, "secondId"); - } - - public String slashEncode() { - return slashEncodeTwoIds(firstId, secondId); - } - - protected final String firstId; - protected final String secondId; - - protected SlashEncodedIds(String firstId, String secondId) { - this.firstId = checkNotNull(firstId, "firstId"); - this.secondId = checkNotNull(secondId, "secondId"); - } - - @Override - public int hashCode() { - return Objects.hashCode(firstId, secondId); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - SlashEncodedIds other = (SlashEncodedIds) obj; - return Objects.equal(firstId, other.firstId) && Objects.equal(secondId, other.secondId); - } - - public String getFirstId() { - return firstId; - } - - public String getSecondId() { - return secondId; - } - - @Override - public String toString() { - return "[firstId=" + firstId + ", secondId=" + secondId + "]"; - } - -} http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/b41b0d04/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Snapshot.java ---------------------------------------------------------------------- diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Snapshot.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Snapshot.java index 0942c1e..22838ce 100644 --- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Snapshot.java +++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Snapshot.java @@ -16,119 +16,48 @@ */ 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.annotations.Beta; -import com.google.common.base.Objects; -import com.google.common.base.Optional; +import org.jclouds.javax.annotation.Nullable; +import org.jclouds.json.SerializedNames; -/** - * A Persistent Disk Snapshot resource. - */ -@Beta -public final class Snapshot extends AbstractDisk { +import com.google.auto.value.AutoValue; - private final Optional<URI> sourceDisk; - private final String sourceDiskId; +@AutoValue +public abstract class Snapshot { - @ConstructorProperties({ - "id", "creationTimestamp", "selfLink", "name", "description", "diskSizeGb", - "status", "sourceDisk", "sourceDiskId" - }) - private Snapshot(String id, Date creationTimestamp, URI selfLink, String name, String description, - Integer sizeGb, String status, URI sourceDisk, String sourceDiskId) { - super(Kind.SNAPSHOT, id, creationTimestamp, selfLink, name, description, sizeGb, status); - this.sourceDisk = fromNullable(sourceDisk); - this.sourceDiskId = checkNotNull(sourceDiskId, "sourceDiskId of %s", name); - } + public abstract String id(); - /** - * @return The source disk used to insert this snapshot. Once the source disk - * has been deleted from the system, this field will be cleared, and will - * not be set even if a disk with the same name has been re-created (output only). - */ - public Optional<URI> getSourceDisk() { - return sourceDisk; - } + public abstract URI selfLink(); - /** - * @return The ID value of the disk used to insert this snapshot. This value - * may be used to determine whether the snapshot was taken from the current - * or a previous instance of a given disk name. - */ - public String getSourceDiskId() { - return sourceDiskId; - } + public abstract String name(); + + @Nullable public abstract String description(); + + public abstract int diskSizeGb(); + + public abstract String status(); /** - * {@inheritDoc} + * The source disk used to insert this snapshot. Once the source disk + * has been deleted from the system, this field will be cleared, and will + * not be set even if a disk with the same name has been re-created (output only). */ - @Override - protected Objects.ToStringHelper string() { - return super.string() - .omitNullValues() - .add("sourceDisk", sourceDisk.orNull()) - .add("sourceDiskId", sourceDiskId); - } + @Nullable public abstract URI sourceDisk(); /** - * {@inheritDoc} + * The ID value of the disk used to insert this snapshot. This value + * may be used to determine whether the snapshot was taken from the current + * or a previous instance of a given disk name. */ - @Override - public String toString() { - return string().toString(); - } - - public static Builder builder() { - return new Builder(); - } + public abstract String sourceDiskId(); - public Builder toBuilder() { - return new Builder().fromSnapshot(this); + @SerializedNames({ "id", "selfLink", "name", "description", "diskSizeGb", "status", "sourceDisk", "sourceDiskId" }) + public static Snapshot create(String id, URI selfLink, String name, String description, int diskSizeGb, String status, + URI sourceDisk, String sourceDiskId) { + return new AutoValue_Snapshot(id, selfLink, name, description, diskSizeGb, status, sourceDisk, sourceDiskId); } - public static final class Builder extends AbstractDisk.Builder<Builder> { - - private URI sourceDisk; - private String sourceDiskId; - - /** - * @see Snapshot#getSourceDisk() - */ - public Builder sourceDisk(URI sourceDisk) { - this.sourceDisk = sourceDisk; - return this; - } - - /** - * @see Snapshot#getSourceDiskId() - */ - public Builder sourceDiskId(String sourceDiskId) { - this.sourceDiskId = sourceDiskId; - return this; - } - - @Override - protected Builder self() { - return this; - } - - public Snapshot build() { - return new Snapshot(super.id, super.creationTimestamp, super.selfLink, super.name, - super.description, super.sizeGb, super.status, sourceDisk, sourceDiskId); - } - - public Builder fromSnapshot(Snapshot in) { - return super.fromAbstractDisk(in) - .sourceDisk(in.getSourceDisk().orNull()) - .sourceDiskId(in.getSourceDiskId()); - } - + Snapshot() { } - } http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/b41b0d04/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Tags.java ---------------------------------------------------------------------- diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Tags.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Tags.java new file mode 100644 index 0000000..ec92c33 --- /dev/null +++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Tags.java @@ -0,0 +1,43 @@ +/* + * 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.googlecomputeengine.domain; + +import static org.jclouds.googlecomputeengine.internal.NullSafeCopies.copyOf; + +import java.util.List; + +import org.jclouds.javax.annotation.Nullable; +import org.jclouds.json.SerializedNames; + +import com.google.auto.value.AutoValue; + +/** Each tag must be unique, must be 1-63 characters long, and comply with RFC1035. */ +@AutoValue +public abstract class Tags { + /** The fingerprint for the items - needed for updating them. */ + public abstract String fingerprint(); + + public abstract List<String> items(); + + @SerializedNames({ "fingerprint", "items" }) + public static Tags create(String fingerprint, @Nullable List<String> items) { + return new AutoValue_Tags(fingerprint, copyOf(items)); + } + + Tags() { + } +} http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/b41b0d04/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/TargetPool.java ---------------------------------------------------------------------- diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/TargetPool.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/TargetPool.java index 923ed03..bb006dd 100644 --- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/TargetPool.java +++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/TargetPool.java @@ -16,88 +16,49 @@ */ package org.jclouds.googlecomputeengine.domain; -import com.google.common.annotations.Beta; -import com.google.common.base.Objects; -import com.google.common.base.Optional; -import com.google.common.collect.ImmutableSet; +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 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.util.List; import org.jclouds.googlecomputeengine.options.TargetPoolCreationOptions.SessionAffinityValue; import org.jclouds.javax.annotation.Nullable; +import org.jclouds.json.SerializedNames; -/** - * Represents an TargetPool resource. - */ -@Beta -public final class TargetPool extends Resource { - - private final URI region; - private final Set<URI> healthChecks; - private final Set<URI> instances; - private final Optional<SessionAffinityValue> sessionAffinity; - private final float failoverRatio; - private final Optional<URI> backupPool; - - @ConstructorProperties({ - "id", "creationTimestamp", "selfLink", "name", "description", "region", "healthChecks", "instances", - "sessionAffinity", "failoverRatio", "backupPool" - }) - private TargetPool(String id, Date creationTimestamp, URI selfLink, String name, String description, - URI region, Set<URI> healthChecks, Set<URI> instances, @Nullable SessionAffinityValue sessionAffinity, - float failoverRatio, @Nullable URI backupPool) { - super(Kind.TARGET_POOL, id, creationTimestamp, selfLink, name, description); - this.region = checkNotNull(region, "region of %s", name); - this.healthChecks = healthChecks == null ? ImmutableSet.<URI>of() : healthChecks; - this.instances = instances == null ? ImmutableSet.<URI>of() : instances; - this.sessionAffinity = fromNullable(sessionAffinity); - this.failoverRatio = failoverRatio; - this.backupPool = fromNullable(backupPool); - } +import com.google.auto.value.AutoValue; - public static Builder builder() { - return new Builder(); - } +@AutoValue +public abstract class TargetPool { - /** - * @return URL of the region where the forwarding pool resides. - */ - public URI getRegion() { - return region; - } + public abstract String id(); + + public abstract URI selfLink(); + + public abstract String name(); + + @Nullable public abstract String description(); + + public abstract URI region(); /** - * @return The A URL to one HttpHealthCheck resource. A member VM in this pool is considered healthy if and only if + * URL to HttpHealthCheck resources. A member VM in this pool is considered healthy if and only if * the specified health checks pass. An empty list means all member virtual machines will be considered healthy at * all times but the health status of this target pool will be marked as unhealthy to indicate that no health checks * are being performed. */ - public Set<URI> getHealthChecks() { - return healthChecks; - } + public abstract List<URI> healthChecks(); /** - * @return A list of resource URLs to the member VMs serving this pool. They must live in zones contained in the same + * A list of resource URLs to the member VMs serving this pool. They must live in zones contained in the same * region as this pool. */ - public Set<URI> getInstances() { - return instances; - } + public abstract List<URI> instances(); /** - * @return the session affinity option, determines the hash method that Google Compute Engine uses to + * The session affinity option, determines the hash method that Google Compute Engine uses to * distribute traffic. */ - public Optional<SessionAffinityValue> getSessionAffinity() { - return sessionAffinity; - } + @Nullable public abstract SessionAffinityValue sessionAffinity(); /** * This field is applicable only when the target pool is serving a forwarding rule as the primary pool. @@ -107,11 +68,8 @@ public final class TargetPool extends Resource { * In case where failoverRatio is not set or all the VMs in the backup pool are unhealthy, * the traffic will be directed back to the primary pool in the force mode, where traffic will be spread to the * healthy VMs with the best effort, or to all VMs when no VM is healthy. - * @return the failover ratio */ - public float getFailoverRatio() { - return failoverRatio; - } + @Nullable public abstract Float failoverRatio(); /** * This field is applicable only when the target pool is serving a forwarding rule as the primary pool. @@ -122,117 +80,18 @@ public final class TargetPool extends Resource { * not set or all the VMs in the backup pool are unhealthy, the traffic will be directed back to the primary pool * in the force mode, where traffic will be spread to the healthy VMs with the best effort, * or to all VMs when no VM is healthy. - * @return the backup pool */ - public Optional<URI> getBackupPool() { - return backupPool; + @Nullable public abstract URI backupPool(); + + @SerializedNames({ "id", "selfLink", "name", "description", "region", "healthChecks", "instances", "sessionAffinity", + "failoverRatio", "backupPool" }) + public static TargetPool create(String id, URI selfLink, String name, String description, URI region, + List<URI> healthChecks, List<URI> instances, SessionAffinityValue sessionAffinity, Float failoverRatio, + URI backupPool) { + return new AutoValue_TargetPool(id, selfLink, name, description, region, copyOf(healthChecks), copyOf(instances), + sessionAffinity, failoverRatio, backupPool); } - /** - * {@inheritDoc} - */ - @Override - public boolean equals(Object obj) { - if (this == obj) return true; - if (obj == null || getClass() != obj.getClass()) return false; - TargetPool that = TargetPool.class.cast(obj); - return equal(this.kind, that.kind) - && equal(this.name, that.name) - && equal(this.region, that.region); + TargetPool() { } - - /** - * {@inheritDoc} - */ - @Override - protected Objects.ToStringHelper string() { - return super.string() - .omitNullValues() - .add("region", region) - .add("healthChecks", healthChecks) - .add("instances", instances) - .add("sessionAffinity", sessionAffinity.orNull()) - .add("failoverRatio", failoverRatio) - .add("backupPool", backupPool.orNull()); - } - - public Builder toBuilder() { - return new Builder().fromTargetPool(this); - } - - public static final class Builder extends Resource.Builder<Builder> { - private URI region; - private ImmutableSet.Builder<URI> healthChecks = ImmutableSet.builder(); - private ImmutableSet.Builder<URI> instances = ImmutableSet.builder(); - private SessionAffinityValue sessionAffinity; - private float failoverRatio; - private URI backupPool; - - /** - * @see TargetPool#getRegion() - */ - public Builder region(URI region) { - this.region = region; - return this; - } - - /** - * @see TargetPool#getHealthChecks() - */ - public Builder healthChecks(Set<URI> healthChecks) { - this.healthChecks.addAll(healthChecks); - return this; - } - - /** - * @see TargetPool#getInstances() - */ - public Builder instances(Set<URI> instances) { - this.instances.addAll(instances); - return this; - } - - /** - * @see TargetPool#getSessionAffinity() - */ - public Builder sessionAffinity(SessionAffinityValue sessionAffinity) { - this.sessionAffinity = sessionAffinity; - return this; - } - - /** - * @see TargetPool#getFailoverRatio() - */ - public Builder failoverRatio(float failoverRatio) { - this.failoverRatio = failoverRatio; - return this; - } - - public Builder backupPool(URI backupPool) { - this.backupPool = backupPool; - return this; - } - - @Override - protected Builder self() { - return this; - } - - public TargetPool build() { - return new TargetPool(super.id, super.creationTimestamp, super.selfLink, super.name, - super.description, region, healthChecks.build(), instances.build(), - sessionAffinity, failoverRatio, backupPool); - } - - public Builder fromTargetPool(TargetPool in) { - return super.fromResource(in) - .region(in.getRegion()) - .healthChecks(in.getHealthChecks()) - .instances(in.getInstances()) - .sessionAffinity(in.getSessionAffinity().orNull()) - .failoverRatio(in.getFailoverRatio()) - .backupPool(in.getBackupPool().orNull()); - } - } - }
