openstack: adjusting beans in openstack-nova and openstack-keystone to use ConstructorProperties/Named annotations

This commit is contained in:
Adam Lowe 2012-07-01 20:18:41 +01:00
parent 3fd65f25ce
commit 294e405593
51 changed files with 3062 additions and 2786 deletions

View File

@ -1,9 +1,9 @@
/**
/*
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. jclouds licenses this file
* to you under the Apache License, User 2.0 (the
* 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
*
@ -18,13 +18,13 @@
*/
package org.jclouds.openstack.keystone.v2_0.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 java.beans.ConstructorProperties;
import java.util.Set;
import com.google.common.base.Objects;
import com.google.common.base.Objects.ToStringHelper;
import com.google.common.collect.ImmutableSet;
/**
@ -32,19 +32,21 @@ import com.google.common.collect.ImmutableSet;
*
* @author Adrian Cole
* @see <a href="http://docs.openstack.org/api/openstack-identity-service/2.0/content/Service_API_Client_Operations.html"
* />
/>
*/
public class Access implements Comparable<Access> {
public static Builder builder() {
return new Builder();
public static Builder<?> builder() {
return new ConcreteBuilder();
}
public Builder toBuilder() {
return builder().fromAccess(this);
public Builder<?> toBuilder() {
return new ConcreteBuilder().fromAccess(this);
}
public static class Builder {
public static abstract class Builder<T extends Builder<T>> {
protected abstract T self();
protected Token token;
protected User user;
protected Set<Service> serviceCatalog = ImmutableSet.of();
@ -52,55 +54,58 @@ public class Access implements Comparable<Access> {
/**
* @see Access#getToken()
*/
public Builder token(Token token) {
this.token = checkNotNull(token, "token");
return this;
public T token(Token token) {
this.token = token;
return self();
}
/**
* @see Access#getUser()
*/
public Builder user(User user) {
this.user = checkNotNull(user, "user");
return this;
public T user(User user) {
this.user = user;
return self();
}
/**
* @see Access#getServiceCatalog()
*/
public Builder serviceCatalog(Service... serviceCatalog) {
return serviceCatalog(ImmutableSet.copyOf(checkNotNull(serviceCatalog, "serviceCatalog")));
}
/**
* @see Access#getServiceCatalog()
*/
public Builder serviceCatalog(Set<Service> serviceCatalog) {
public T serviceCatalog(Set<Service> serviceCatalog) {
this.serviceCatalog = ImmutableSet.copyOf(checkNotNull(serviceCatalog, "serviceCatalog"));
return this;
return self();
}
public T serviceCatalog(Service... in) {
return serviceCatalog(ImmutableSet.copyOf(in));
}
public Access build() {
return new Access(token, user, serviceCatalog);
}
public Builder fromAccess(Access from) {
return token(from.getToken()).user(from.getUser()).serviceCatalog(from.getServiceCatalog());
public T fromAccess(Access in) {
return this
.token(in.getToken())
.user(in.getUser())
.serviceCatalog(in.getServiceCatalog());
}
}
protected Access() {
// we want serializers like Gson to work w/o using sun.misc.Unsafe,
// prohibited in GAE. This also implies fields are not final.
// see http://code.google.com/p/jclouds/issues/detail?id=925
private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
@Override
protected ConcreteBuilder self() {
return this;
}
}
protected Token token;
protected User user;
protected Set<Service> serviceCatalog = ImmutableSet.of();
private final Token token;
private final User user;
private final Set<Service> serviceCatalog;
public Access(Token token, User user, Set<Service> serviceCatalog) {
@ConstructorProperties({
"token", "user", "serviceCatalog"
})
protected Access(Token token, User user, Set<Service> serviceCatalog) {
this.token = checkNotNull(token, "token");
this.user = checkNotNull(user, "user");
this.serviceCatalog = ImmutableSet.copyOf(checkNotNull(serviceCatalog, "serviceCatalog"));
@ -110,34 +115,21 @@ public class Access implements Comparable<Access> {
* TODO
*/
public Token getToken() {
return token;
return this.token;
}
/**
* TODO
*/
public User getUser() {
return user;
return this.user;
}
/**
* TODO
*/
public Set<Service> getServiceCatalog() {
return serviceCatalog;
}
@Override
public boolean equals(Object object) {
if (this == object) {
return true;
}
if (object instanceof Access) {
final Access other = Access.class.cast(object);
return equal(token, other.token) && equal(user, other.user) && equal(serviceCatalog, other.serviceCatalog);
} else {
return false;
}
return this.serviceCatalog;
}
@Override
@ -145,9 +137,24 @@ public class Access implements Comparable<Access> {
return Objects.hashCode(token, user, serviceCatalog);
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Access that = Access.class.cast(obj);
return Objects.equal(this.token, that.token)
&& Objects.equal(this.user, that.user)
&& Objects.equal(this.serviceCatalog, that.serviceCatalog);
}
protected ToStringHelper string() {
return Objects.toStringHelper(this)
.add("token", token).add("user", user).add("serviceCatalog", serviceCatalog);
}
@Override
public String toString() {
return toStringHelper("").add("token", token).add("user", user).add("serviceCatalog", serviceCatalog).toString();
return string().toString();
}
@Override

View File

@ -1,4 +1,4 @@
/**
/*
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
@ -16,71 +16,86 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.jclouds.openstack.keystone.v2_0.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 java.beans.ConstructorProperties;
import org.jclouds.openstack.keystone.v2_0.config.CredentialType;
import org.jclouds.openstack.keystone.v2_0.config.CredentialTypes;
import com.google.common.base.Objects;
import com.google.common.base.Objects.ToStringHelper;
/**
* Api AccessKey Credentials
*
* @see <a href="http://docs.openstack.org/api/openstack-identity-service/2.0/content/POST_authenticate_v2.0_tokens_Service_API_Client_Operations.html#d662e583"
* />
/>
* @author Adrian Cole
*/
@CredentialType(CredentialTypes.API_ACCESS_KEY_CREDENTIALS)
public class ApiAccessKeyCredentials {
public static Builder builder() {
return new Builder();
public static Builder<?> builder() {
return new ConcreteBuilder();
}
public Builder toBuilder() {
return builder().fromSecretKeyCredentials(this);
public Builder<?> toBuilder() {
return new ConcreteBuilder().fromApiAccessKeyCredentials(this);
}
public static ApiAccessKeyCredentials createWithAccessKeyAndSecretKey(String accessKey, String secretKey) {
return builder().secretKey(secretKey).accessKey(accessKey).build();
return new ApiAccessKeyCredentials(accessKey, secretKey);
}
public static class Builder {
public static abstract class Builder<T extends Builder<T>> {
protected abstract T self();
protected String accessKey;
protected String secretKey;
/**
* @see ApiAccessKeyCredentials#getAccessKey()
*/
protected Builder secretKey(String secretKey) {
this.secretKey = secretKey;
return this;
public T accessKey(String accessKey) {
this.accessKey = accessKey;
return self();
}
/**
* @see ApiAccessKeyCredentials#getSecretKey()
*/
public Builder accessKey(String accessKey) {
this.accessKey = accessKey;
return this;
public T secretKey(String secretKey) {
this.secretKey = secretKey;
return self();
}
public ApiAccessKeyCredentials build() {
return new ApiAccessKeyCredentials(accessKey, secretKey);
}
public Builder fromSecretKeyCredentials(ApiAccessKeyCredentials from) {
return accessKey(from.getAccessKey()).secretKey(from.getSecretKey());
public T fromApiAccessKeyCredentials(ApiAccessKeyCredentials in) {
return this
.accessKey(in.getAccessKey())
.secretKey(in.getSecretKey());
}
}
protected final String accessKey;
protected final String secretKey;
private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
@Override
protected ConcreteBuilder self() {
return this;
}
}
private final String accessKey;
private final String secretKey;
@ConstructorProperties({
"accessKey", "secretKey"
})
protected ApiAccessKeyCredentials(String accessKey, String secretKey) {
this.accessKey = checkNotNull(accessKey, "accessKey");
this.secretKey = checkNotNull(secretKey, "secretKey");
@ -90,27 +105,14 @@ public class ApiAccessKeyCredentials {
* @return the accessKey
*/
public String getAccessKey() {
return accessKey;
return this.accessKey;
}
/**
* @return the secretKey
*/
public String getSecretKey() {
return secretKey;
}
@Override
public boolean equals(Object object) {
if (this == object) {
return true;
}
if (object instanceof ApiAccessKeyCredentials) {
final ApiAccessKeyCredentials other = ApiAccessKeyCredentials.class.cast(object);
return equal(accessKey, other.accessKey) && equal(secretKey, other.secretKey);
} else {
return false;
}
return this.secretKey;
}
@Override
@ -118,9 +120,23 @@ public class ApiAccessKeyCredentials {
return Objects.hashCode(accessKey, secretKey);
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
ApiAccessKeyCredentials that = ApiAccessKeyCredentials.class.cast(obj);
return Objects.equal(this.accessKey, that.accessKey)
&& Objects.equal(this.secretKey, that.secretKey);
}
protected ToStringHelper string() {
return Objects.toStringHelper(this)
.add("accessKey", accessKey).add("secretKey", secretKey);
}
@Override
public String toString() {
return toStringHelper("").add("accessKey", accessKey).add("secretKey", secretKey).toString();
return string().toString();
}
}

View File

@ -1,4 +1,4 @@
/**
/*
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
@ -20,20 +20,23 @@ package org.jclouds.openstack.keystone.v2_0.domain;
import static com.google.common.base.Preconditions.checkNotNull;
import java.util.Collections;
import java.beans.ConstructorProperties;
import java.util.Date;
import java.util.Set;
import javax.inject.Named;
import org.jclouds.javax.annotation.Nullable;
import org.jclouds.openstack.v2_0.domain.Link;
import org.jclouds.openstack.v2_0.domain.Resource;
import com.google.common.base.Objects;
import com.google.common.base.Objects.ToStringHelper;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Sets;
import com.google.gson.annotations.SerializedName;
/**
* Class ApiMetadata
*
* @author Adam Lowe
*/
public class ApiMetadata extends Resource {
@ -47,9 +50,9 @@ public class ApiMetadata extends Resource {
}
public static abstract class Builder<T extends Builder<T>> extends Resource.Builder<T> {
private String status;
private Date updated;
private Set<MediaType> mediaTypes = Sets.newLinkedHashSet();
protected String status;
protected Date updated;
protected Set<MediaType> mediaTypes = ImmutableSet.of();
/**
* @see ApiMetadata#getStatus()
@ -71,12 +74,16 @@ public class ApiMetadata extends Resource {
* @see ApiMetadata#getMediaTypes()
*/
public T mediaTypes(Set<MediaType> mediaTypes) {
this.mediaTypes = mediaTypes;
this.mediaTypes = ImmutableSet.copyOf(checkNotNull(mediaTypes, "mediaTypes"));
return self();
}
public T mediaTypes(MediaType... in) {
return mediaTypes(ImmutableSet.copyOf(in));
}
public ApiMetadata build() {
return new ApiMetadata(this);
return new ApiMetadata(id, name, links, status, updated, mediaTypes);
}
public T fromApiMetadata(ApiMetadata in) {
@ -85,7 +92,6 @@ public class ApiMetadata extends Resource {
.updated(in.getUpdated())
.mediaTypes(in.getMediaTypes());
}
}
private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
@ -95,43 +101,33 @@ public class ApiMetadata extends Resource {
}
}
protected ApiMetadata() {
// we want serializers like Gson to work w/o using sun.misc.Unsafe,
// prohibited in GAE. This also implies fields are not final.
// see http://code.google.com/p/jclouds/issues/detail?id=925
private final String status;
private final Date updated;
@Named("media-types")
private final Set<MediaType> mediaTypes;
@ConstructorProperties({
"id", "name", "links", "status", "updated", "media-types"
})
protected ApiMetadata(String id, @Nullable String name, java.util.Set<Link> links, @Nullable String status, @Nullable Date updated, Set<MediaType> mediaTypes) {
super(id, name, links);
this.status = status;
this.updated = updated;
this.mediaTypes = ImmutableSet.copyOf(checkNotNull(mediaTypes, "mediaTypes"));
}
@Nullable
private String status;
@Nullable
private Date updated;
@SerializedName(value="media-types")
private Set<MediaType> mediaTypes = Sets.newLinkedHashSet();
protected ApiMetadata(Builder<?> builder) {
super(builder);
this.status = checkNotNull(builder.status, "status");
this.updated = checkNotNull(builder.updated, "updated");
this.mediaTypes = ImmutableSet.copyOf(builder.mediaTypes);
}
/**
*/
public String getStatus() {
return this.status;
}
/**
*/
@Nullable
public Date getUpdated() {
return this.updated;
}
/**
*/
public Set<MediaType> getMediaTypes() {
return Collections.unmodifiableSet(this.mediaTypes);
return this.mediaTypes;
}
@Override
@ -151,9 +147,7 @@ public class ApiMetadata extends Resource {
protected ToStringHelper string() {
return super.string()
.add("status", status)
.add("updated", updated)
.add("mediaTypes", mediaTypes);
.add("status", status).add("updated", updated).add("mediaTypes", mediaTypes);
}
}

View File

@ -1,9 +1,9 @@
/**
/*
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. jclouds licenses this file
* to you under the Apache License, Name 2.0 (the
* 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
*
@ -16,19 +16,17 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.jclouds.openstack.keystone.v2_0.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 java.beans.ConstructorProperties;
import java.net.URI;
import org.jclouds.javax.annotation.Nullable;
import com.google.common.base.Objects;
import com.google.common.collect.ComparisonChain;
import com.google.common.base.Objects.ToStringHelper;
/**
* An network-accessible address, usually described by URL, where a service may be accessed. If
@ -37,19 +35,20 @@ import com.google.common.collect.ComparisonChain;
*
* @author AdrianCole
* @see <a href="http://docs.openstack.org/api/openstack-identity-service/2.0/content/Identity-Endpoint-Concepts-e1362.html"
* />
/>
*/
public class Endpoint implements Comparable<Endpoint> {
public class Endpoint {
public static Builder builder() {
return new Builder();
public static Builder<?> builder() {
return new ConcreteBuilder();
}
public Builder toBuilder() {
return builder().fromEndpoint(this);
public Builder<?> toBuilder() {
return new ConcreteBuilder().fromEndpoint(this);
}
public static class Builder {
public static abstract class Builder<T extends Builder<T>> {
protected abstract T self();
protected String versionId;
protected String region;
@ -63,108 +62,112 @@ public class Endpoint implements Comparable<Endpoint> {
/**
* @see Endpoint#getVersionId()
*/
public Builder versionId(String versionId) {
this.versionId = checkNotNull(versionId, "versionId");
return this;
public T versionId(String versionId) {
this.versionId = versionId;
return self();
}
/**
* @see Endpoint#getRegion()
*/
public Builder region(String region) {
this.region = checkNotNull(region, "region");
return this;
public T region(String region) {
this.region = region;
return self();
}
/**
* @see Endpoint#getPublicURL()
*/
public Builder publicURL(URI publicURL) {
this.publicURL = checkNotNull(publicURL, "publicURL");
return this;
public T publicURL(URI publicURL) {
this.publicURL = publicURL;
return self();
}
/**
* @see Endpoint#getInternalURL()
*/
public Builder internalURL(URI internalURL) {
this.internalURL = checkNotNull(internalURL, "internalURL");
return this;
public T internalURL(URI internalURL) {
this.internalURL = internalURL;
return self();
}
/**
* @see Endpoint#getInternalURL()
* @see Endpoint#getAdminURL()
*/
public Builder adminURL(URI adminURL) {
this.adminURL = checkNotNull(adminURL, "adminURL");
return this;
}
/**
* @see Endpoint#getTenantId()
*/
public Builder tenantId(@Nullable String tenantId) {
this.tenantId = tenantId;
return this;
public T adminURL(URI adminURL) {
this.adminURL = adminURL;
return self();
}
/**
* @see Endpoint#getVersionInfo()
*/
public Builder versionInfo(URI versionInfo) {
this.versionInfo = checkNotNull(versionInfo, "versionInfo");
return this;
public T versionInfo(URI versionInfo) {
this.versionInfo = versionInfo;
return self();
}
/**
* @see Endpoint#getVersionList()
*/
public Builder versionList(URI versionList) {
this.versionList = checkNotNull(versionList, "versionList");
return this;
public T versionList(URI versionList) {
this.versionList = versionList;
return self();
}
/**
* @see Endpoint#getTenantId()
*/
public T tenantId(String tenantId) {
this.tenantId = tenantId;
return self();
}
public Endpoint build() {
return new Endpoint(versionId, region, publicURL, internalURL, adminURL, tenantId, versionInfo, versionList);
return new Endpoint(null, versionId, region, publicURL, internalURL, adminURL, versionInfo, versionList, null, tenantId);
}
public Builder fromEndpoint(Endpoint from) {
return versionId(from.getVersionId()).region(from.getRegion()).publicURL(from.getPublicURL()).internalURL(
from.getInternalURL()).tenantId(from.getTenantId()).versionInfo(from.getVersionInfo()).versionList(
from.getVersionList());
public T fromEndpoint(Endpoint in) {
return this
.versionId(in.getVersionId())
.region(in.getRegion())
.publicURL(in.getPublicURL())
.internalURL(in.getInternalURL())
.adminURL(in.getAdminURL())
.versionInfo(in.getVersionInfo())
.versionList(in.getVersionList())
.tenantId(in.getTenantId());
}
}
protected Endpoint() {
// we want serializers like Gson to work w/o using sun.misc.Unsafe,
// prohibited in GAE. This also implies fields are not final.
// see http://code.google.com/p/jclouds/issues/detail?id=925
private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
@Override
protected ConcreteBuilder self() {
return this;
}
}
// renamed half-way through
@Deprecated
protected String id;
protected String versionId;
protected String region;
protected URI publicURL;
protected URI internalURL;
protected URI adminURL;
protected URI versionInfo;
protected URI versionList;
private final String versionId;
private final String region;
private final URI publicURL;
private final URI internalURL;
private final URI adminURL;
private final URI versionInfo;
private final URI versionList;
private final String tenantId;
// renamed half-way through
@Deprecated
protected String tenantName;
protected String tenantId;
protected Endpoint(@Nullable String versionId, @Nullable String region, @Nullable URI publicURL, @Nullable URI internalURL,
@Nullable URI adminURL, @Nullable String tenantId, @Nullable URI versionInfo, @Nullable URI versionList) {
this.versionId = versionId;
@ConstructorProperties({
"id", "versionId", "region", "publicURL", "internalURL", "adminURL", "versionInfo", "versionList", "tenantName", "tenantId"
})
protected Endpoint(@Nullable String id, @Nullable String versionId, @Nullable String region, @Nullable URI publicURL,
@Nullable URI internalURL, @Nullable URI adminURL, @Nullable URI versionInfo, @Nullable URI versionList,
@Nullable String tenantName, @Nullable String tenantId) {
this.versionId = versionId != null ? versionId : id;
this.tenantId = tenantId != null ? tenantId : tenantName;
this.region = region;
this.publicURL = publicURL;
this.internalURL = internalURL;
this.adminURL = adminURL;
this.tenantId = tenantId;
this.versionInfo = versionInfo;
this.versionList = versionList;
}
@ -177,7 +180,7 @@ public class Endpoint implements Comparable<Endpoint> {
*/
@Nullable
public String getVersionId() {
return versionId != null ? versionId : id;
return this.versionId;
}
/**
@ -185,7 +188,7 @@ public class Endpoint implements Comparable<Endpoint> {
*/
@Nullable
public String getRegion() {
return region;
return this.region;
}
/**
@ -193,7 +196,7 @@ public class Endpoint implements Comparable<Endpoint> {
*/
@Nullable
public URI getPublicURL() {
return publicURL;
return this.publicURL;
}
/**
@ -201,7 +204,7 @@ public class Endpoint implements Comparable<Endpoint> {
*/
@Nullable
public URI getInternalURL() {
return internalURL;
return this.internalURL;
}
/**
@ -209,7 +212,17 @@ public class Endpoint implements Comparable<Endpoint> {
*/
@Nullable
public URI getAdminURL() {
return adminURL;
return this.adminURL;
}
@Nullable
public URI getVersionInfo() {
return this.versionInfo;
}
@Nullable
public URI getVersionList() {
return this.versionList;
}
/**
@ -217,53 +230,38 @@ public class Endpoint implements Comparable<Endpoint> {
*/
@Nullable
public String getTenantId() {
return tenantId != null ? tenantId : tenantName;
}
/**
*/
@Nullable
public URI getVersionInfo() {
return versionInfo;
}
/**
*/
@Nullable
public URI getVersionList() {
return versionList;
}
@Override
public boolean equals(Object object) {
if (this == object) {
return true;
}
if (object instanceof Endpoint) {
final Endpoint other = Endpoint.class.cast(object);
return equal(getVersionId(), other.getVersionId()) && equal(region, other.region) && equal(publicURL, other.publicURL)
&& equal(internalURL, other.internalURL) && equal(adminURL, other.adminURL) && equal(getTenantId(), other.getTenantId());
} else {
return false;
}
return this.tenantId;
}
@Override
public int hashCode() {
return Objects.hashCode(getVersionId(), region, publicURL, internalURL, adminURL, getTenantId());
return Objects.hashCode(versionId, region, publicURL, internalURL, adminURL, versionInfo, versionList, tenantId);
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Endpoint that = Endpoint.class.cast(obj);
return Objects.equal(this.versionId, that.versionId)
&& Objects.equal(this.region, that.region)
&& Objects.equal(this.publicURL, that.publicURL)
&& Objects.equal(this.internalURL, that.internalURL)
&& Objects.equal(this.adminURL, that.adminURL)
&& Objects.equal(this.versionInfo, that.versionInfo)
&& Objects.equal(this.versionList, that.versionList)
&& Objects.equal(this.tenantId, that.tenantId);
}
protected ToStringHelper string() {
return Objects.toStringHelper(this)
.add("versionId", versionId).add("region", region).add("publicURL", publicURL).add("internalURL", internalURL)
.add("adminURL", adminURL).add("versionInfo", versionInfo).add("versionList", versionList).add("tenantId", tenantId);
}
@Override
public String toString() {
return toStringHelper("").add("versionId", getVersionId()).add("region", region).add("publicURL", publicURL).add(
"internalURL", internalURL).add("adminURL", adminURL).add("tenantId", getTenantId()).add("versionInfo",
versionInfo).add("versionList", versionList).toString();
}
@Override
public int compareTo(Endpoint that) {
return ComparisonChain.start().compare(this.getTenantId(), that.getTenantId()).compare(this.getVersionId(), that.getVersionId())
.compare(this.region, that.region).result();
return string().toString();
}
}

View File

@ -1,4 +1,4 @@
/**
/*
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
@ -18,6 +18,8 @@
*/
package org.jclouds.openstack.keystone.v2_0.domain;
import java.beans.ConstructorProperties;
import org.jclouds.javax.annotation.Nullable;
import com.google.common.base.Objects;
@ -28,61 +30,70 @@ import com.google.common.base.Objects.ToStringHelper;
*/
public class MediaType {
public static Builder builder() {
return new Builder();
public static Builder<?> builder() {
return new ConcreteBuilder();
}
public Builder toBuilder() {
return builder().fromMediaType(this);
public Builder<?> toBuilder() {
return new ConcreteBuilder().fromMediaType(this);
}
public static class Builder {
public static abstract class Builder<T extends Builder<T>> {
protected abstract T self();
private String base;
private String type;
protected String base;
protected String type;
public Builder base(String base) {
/**
* @see MediaType#getBase()
*/
public T base(String base) {
this.base = base;
return this;
}
public Builder type(String type) {
this.type = type;
return this;
}
public MediaType build() {
return new MediaType(this);
}
public Builder fromMediaType(MediaType in) {
return this.base(in.getBase()).type(in.getType());
}
}
protected MediaType() {
// we want serializers like Gson to work w/o using sun.misc.Unsafe,
// prohibited in GAE. This also implies fields are not final.
// see http://code.google.com/p/jclouds/issues/detail?id=925
}
private String base;
private String type;
protected MediaType(Builder builder) {
this.base = builder.base;
this.type = builder.type;
return self();
}
/**
* @see MediaType#getType()
*/
public T type(String type) {
this.type = type;
return self();
}
public MediaType build() {
return new MediaType(base, type);
}
public T fromMediaType(MediaType in) {
return this
.base(in.getBase())
.type(in.getType());
}
}
private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
@Override
protected ConcreteBuilder self() {
return this;
}
}
private final String base;
private final String type;
@ConstructorProperties({
"base", "type"
})
protected MediaType(@Nullable String base, @Nullable String type) {
this.base = base;
this.type = type;
}
@Nullable
public String getBase() {
return this.base;
}
/**
*/
@Nullable
public String getType() {
return this.type;
@ -99,14 +110,12 @@ public class MediaType {
if (obj == null || getClass() != obj.getClass()) return false;
MediaType that = MediaType.class.cast(obj);
return Objects.equal(this.base, that.base)
&& Objects.equal(this.type, that.type)
;
&& Objects.equal(this.type, that.type);
}
protected ToStringHelper string() {
return Objects.toStringHelper("")
.add("base", base)
.add("type", type);
return Objects.toStringHelper(this)
.add("base", base).add("type", type);
}
@Override

View File

@ -1,4 +1,4 @@
/**
/*
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
@ -16,71 +16,85 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.jclouds.openstack.keystone.v2_0.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 java.beans.ConstructorProperties;
import org.jclouds.openstack.keystone.v2_0.config.CredentialType;
import org.jclouds.openstack.keystone.v2_0.config.CredentialTypes;
import com.google.common.base.Objects;
import com.google.common.base.Objects.ToStringHelper;
/**
* Password Credentials
*
* @see <a href="http://docs.openstack.org/api/openstack-identity-service/2.0/content/POST_authenticate_v2.0_tokens_Service_API_Client_Operations.html#d662e583"
* />
/>
* @author Adrian Cole
*/
@CredentialType(CredentialTypes.PASSWORD_CREDENTIALS)
@CredentialType("passwordCredentials")
public class PasswordCredentials {
public static Builder builder() {
return new Builder();
public static Builder<?> builder() {
return new ConcreteBuilder();
}
public Builder toBuilder() {
return builder().fromPasswordCredentials(this);
public Builder<?> toBuilder() {
return new ConcreteBuilder().fromPasswordCredentials(this);
}
public static PasswordCredentials createWithUsernameAndPassword(String username, String password) {
return builder().password(password).username(username).build();
return new PasswordCredentials(username, password);
}
public static class Builder {
public static abstract class Builder<T extends Builder<T>> {
protected abstract T self();
protected String username;
protected String password;
/**
* @see PasswordCredentials#getUsername()
*/
protected Builder password(String password) {
this.password = password;
return this;
public T username(String username) {
this.username = username;
return self();
}
/**
* @see PasswordCredentials#getPassword()
*/
public Builder username(String username) {
this.username = username;
return this;
public T password(String password) {
this.password = password;
return self();
}
public PasswordCredentials build() {
return new PasswordCredentials(username, password);
}
public Builder fromPasswordCredentials(PasswordCredentials from) {
return username(from.getUsername()).password(from.getPassword());
public T fromPasswordCredentials(PasswordCredentials in) {
return this
.username(in.getUsername())
.password(in.getPassword());
}
}
protected final String username;
protected final String password;
private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
@Override
protected ConcreteBuilder self() {
return this;
}
}
private final String username;
private final String password;
@ConstructorProperties({
"username", "password"
})
protected PasswordCredentials(String username, String password) {
this.username = checkNotNull(username, "username");
this.password = checkNotNull(password, "password");
@ -90,27 +104,14 @@ public class PasswordCredentials {
* @return the username
*/
public String getUsername() {
return username;
return this.username;
}
/**
* @return the password
*/
public String getPassword() {
return password;
}
@Override
public boolean equals(Object object) {
if (this == object) {
return true;
}
if (object instanceof PasswordCredentials) {
final PasswordCredentials other = PasswordCredentials.class.cast(object);
return equal(username, other.username) && equal(password, other.password);
} else {
return false;
}
return this.password;
}
@Override
@ -118,9 +119,23 @@ public class PasswordCredentials {
return Objects.hashCode(username, password);
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
PasswordCredentials that = PasswordCredentials.class.cast(obj);
return Objects.equal(this.username, that.username)
&& Objects.equal(this.password, that.password);
}
protected ToStringHelper string() {
return Objects.toStringHelper(this)
.add("username", username).add("password", password);
}
@Override
public String toString() {
return toStringHelper("").add("username", username).add("password", password).toString();
return string().toString();
}
}

View File

@ -1,9 +1,9 @@
/**
/*
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. jclouds licenses this file
* to you under the Apache License, Name 2.0 (the
* 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
*
@ -16,17 +16,16 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.jclouds.openstack.keystone.v2_0.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 java.beans.ConstructorProperties;
import org.jclouds.javax.annotation.Nullable;
import com.google.common.base.Objects;
import com.google.common.collect.ComparisonChain;
import com.google.common.base.Objects.ToStringHelper;
/**
* A personality that a user assumes when performing a specific set of operations. A role includes a
@ -38,19 +37,20 @@ import com.google.common.collect.ComparisonChain;
*
* @author AdrianCole
* @see <a href="http://docs.openstack.org/api/openstack-identity-service/2.0/content/Identity-Service-Concepts-e1362.html"
* />
/>
*/
public class Role implements Comparable<Role> {
public class Role {
public static Builder builder() {
return new Builder();
public static Builder<?> builder() {
return new ConcreteBuilder();
}
public Builder toBuilder() {
return builder().fromRole(this);
public Builder<?> toBuilder() {
return new ConcreteBuilder().fromRole(this);
}
public static class Builder {
public static abstract class Builder<T extends Builder<T>> {
protected abstract T self();
protected String id;
protected String name;
protected String description;
@ -60,73 +60,80 @@ public class Role implements Comparable<Role> {
/**
* @see Role#getId()
*/
public Builder id(String id) {
this.id = checkNotNull(id, "id");
return this;
public T id(String id) {
this.id = id;
return self();
}
/**
* @see Role#getName()
*/
public Builder name(String name) {
this.name = checkNotNull(name, "name");
return this;
public T name(String name) {
this.name = name;
return self();
}
/**
* @see Role#getDescription()
*/
public Builder description(String description) {
this.description = checkNotNull(description, "description");
return this;
public T description(String description) {
this.description = description;
return self();
}
/**
* @see Role#getServiceId()
*/
public Builder serviceId(@Nullable String serviceId) {
public T serviceId(String serviceId) {
this.serviceId = serviceId;
return this;
return self();
}
/**
* @see Role#getTenantId()
*/
public Builder tenantId(@Nullable String tenantId) {
public T tenantId(String tenantId) {
this.tenantId = tenantId;
return this;
return self();
}
public Role build() {
return new Role(id, name, description, serviceId, tenantId);
return new Role(id, name, description, serviceId, tenantId, null);
}
public Builder fromRole(Role from) {
return id(from.getId()).name(from.getName()).description(from.getName()).serviceId(from.getServiceId()).tenantId(from.getTenantId());
public T fromRole(Role in) {
return this
.id(in.getId())
.name(in.getName())
.description(in.getDescription())
.serviceId(in.getServiceId())
.tenantId(in.getTenantId());
}
}
protected Role() {
// we want serializers like Gson to work w/o using sun.misc.Unsafe,
// prohibited in GAE. This also implies fields are not final.
// see http://code.google.com/p/jclouds/issues/detail?id=925
private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
@Override
protected ConcreteBuilder self() {
return this;
}
}
protected String id;
protected String name;
protected String description;
protected String serviceId;
// renamed half-way through
@Deprecated
protected String tenantName;
protected String tenantId;
private final String id;
private final String name;
private final String description;
private final String serviceId;
private final String tenantId;
protected Role(String id, String name, @Nullable String description, @Nullable String serviceId, @Nullable String tenantId) {
@ConstructorProperties({
"id", "name", "description", "serviceId", "tenantId", "tenantName"
})
protected Role(String id, String name, @Nullable String description, @Nullable String serviceId, @Nullable String tenantId,
@Nullable String tenantName) {
this.id = checkNotNull(id, "id");
this.name = checkNotNull(name, "name");
this.description = description;
this.serviceId = serviceId;
this.tenantId = tenantId;
this.tenantId = tenantId != null ? tenantId : tenantName;
}
/**
@ -135,14 +142,14 @@ public class Role implements Comparable<Role> {
* @return the id of the role in the current OpenStack deployment
*/
public String getId() {
return id;
return this.id;
}
/**
* @return the name of the role
*/
public String getName() {
return name;
return this.name;
}
/**
@ -150,7 +157,7 @@ public class Role implements Comparable<Role> {
*/
@Nullable
public String getDescription() {
return description;
return this.description;
}
/**
@ -158,7 +165,7 @@ public class Role implements Comparable<Role> {
*/
@Nullable
public String getServiceId() {
return serviceId;
return this.serviceId;
}
/**
@ -166,37 +173,34 @@ public class Role implements Comparable<Role> {
*/
@Nullable
public String getTenantId() {
return tenantId != null ? tenantId : tenantName;
}
@Override
public boolean equals(Object object) {
if (this == object) {
return true;
}
if (object instanceof Role) {
final Role other = Role.class.cast(object);
return equal(id, other.id) && equal(name, other.name) && equal(serviceId, other.serviceId)
&& equal(getTenantId(), other.getTenantId());
} else {
return false;
}
return this.tenantId;
}
@Override
public int hashCode() {
return Objects.hashCode(id, name, serviceId, getTenantId());
return Objects.hashCode(id, name, description, serviceId, tenantId);
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Role that = Role.class.cast(obj);
return Objects.equal(this.id, that.id)
&& Objects.equal(this.name, that.name)
&& Objects.equal(this.description, that.description)
&& Objects.equal(this.serviceId, that.serviceId)
&& Objects.equal(this.tenantId, that.tenantId);
}
protected ToStringHelper string() {
return Objects.toStringHelper(this)
.add("id", id).add("name", name).add("description", description).add("serviceId", serviceId).add("tenantId", tenantId);
}
@Override
public String toString() {
return toStringHelper("").add("id", id).add("name", name).add("description", description).add("serviceId", serviceId).add("tenantId", getTenantId())
.toString();
}
@Override
public int compareTo(Role that) {
return ComparisonChain.start().compare(this.id, that.id).result();
return string().toString();
}
}

View File

@ -1,9 +1,9 @@
/**
/*
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. jclouds licenses this file
* to you under the Apache License, Name 2.0 (the
* 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
*
@ -18,14 +18,13 @@
*/
package org.jclouds.openstack.keystone.v2_0.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 java.beans.ConstructorProperties;
import java.util.Set;
import com.google.common.base.Objects;
import com.google.common.base.Objects.ToStringHelper;
import com.google.common.collect.ComparisonChain;
import com.google.common.collect.ForwardingSet;
import com.google.common.collect.ImmutableSet;
@ -37,19 +36,21 @@ import com.google.common.collect.ImmutableSet;
*
* @author Adrian Cole
* @see <a href="http://docs.openstack.org/api/openstack-typeentity-service/2.0/content/Identity-Service-Concepts-e1362.html"
* />
/>
*/
public class Service extends ForwardingSet<Endpoint> implements Comparable<Service> {
public static Builder builder() {
return new Builder();
public static Builder<?> builder() {
return new ConcreteBuilder();
}
public Builder toBuilder() {
return builder().fromService(this);
public Builder<?> toBuilder() {
return new ConcreteBuilder().fromService(this);
}
public static class Builder {
public static abstract class Builder<T extends Builder<T>> {
protected abstract T self();
protected String type;
protected String name;
protected Set<Endpoint> endpoints = ImmutableSet.of();
@ -57,49 +58,57 @@ public class Service extends ForwardingSet<Endpoint> implements Comparable<Servi
/**
* @see Service#getType()
*/
public Builder type(String type) {
this.type = checkNotNull(type, "type");
return this;
public T type(String type) {
this.type = type;
return self();
}
/**
* @see Service#getName()
*/
public Builder name(String name) {
this.name = checkNotNull(name, "name");
return this;
public T name(String name) {
this.name = name;
return self();
}
/**
* @see Service#getEndpoints()
*/
public Builder endpoints(Endpoint... endpoints) {
return endpoints(ImmutableSet.copyOf(checkNotNull(endpoints, "endpoints")));
}
/**
* @see Service#getEndpoints()
*/
public Builder endpoints(Set<Endpoint> endpoints) {
public T endpoints(Set<Endpoint> endpoints) {
this.endpoints = ImmutableSet.copyOf(checkNotNull(endpoints, "endpoints"));
return this;
return self();
}
public T endpoints(Endpoint... in) {
return endpoints(ImmutableSet.copyOf(in));
}
public Service build() {
return new Service(type, name, endpoints);
}
public Builder fromService(Service from) {
return type(from.getType()).name(from.getName()).endpoints(from.getEndpoints());
public T fromService(Service in) {
return this
.type(in.getType())
.name(in.getName())
.endpoints(in.getEndpoints());
}
}
private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
@Override
protected ConcreteBuilder self() {
return this;
}
}
protected final String type;
protected final String name;
protected final Set<Endpoint> endpoints;
private final String type;
private final String name;
private final Set<Endpoint> endpoints;
@ConstructorProperties({ "type", "name", "endpoints" })
public Service(String type, String name, Set<Endpoint> endpoints) {
@ConstructorProperties({
"type", "name", "endpoints"
})
protected Service(String type, String name, Set<Endpoint> endpoints) {
this.type = checkNotNull(type, "type");
this.name = checkNotNull(name, "name");
this.endpoints = ImmutableSet.copyOf(checkNotNull(endpoints, "endpoints"));
@ -111,34 +120,21 @@ public class Service extends ForwardingSet<Endpoint> implements Comparable<Servi
* @return the type of the service in the current OpenStack deployment
*/
public String getType() {
return type;
return this.type;
}
/**
* @return the name of the service
*/
public String getName() {
return name;
return this.name;
}
/**
* @return the endpoints assigned to the service
*/
public Set<Endpoint> getEndpoints() {
return endpoints;
}
@Override
public boolean equals(Object object) {
if (this == object) {
return true;
}
if (object instanceof Service) {
final Service other = Service.class.cast(object);
return equal(type, other.type) && equal(name, other.name) && equal(endpoints, other.endpoints);
} else {
return false;
}
return this.endpoints;
}
@Override
@ -146,9 +142,24 @@ public class Service extends ForwardingSet<Endpoint> implements Comparable<Servi
return Objects.hashCode(type, name, endpoints);
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Service that = Service.class.cast(obj);
return Objects.equal(this.type, that.type)
&& Objects.equal(this.name, that.name)
&& Objects.equal(this.endpoints, that.endpoints);
}
protected ToStringHelper string() {
return Objects.toStringHelper(this)
.add("type", type).add("name", name).add("endpoints", endpoints);
}
@Override
public String toString() {
return toStringHelper("").add("type", type).add("name", name).add("endpoints", endpoints).toString();
return string().toString();
}
@Override
@ -163,5 +174,4 @@ public class Service extends ForwardingSet<Endpoint> implements Comparable<Servi
protected Set<Endpoint> delegate() {
return endpoints;
}
}

View File

@ -1,4 +1,4 @@
/**
/*
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
@ -16,16 +16,16 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.jclouds.openstack.keystone.v2_0.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 java.beans.ConstructorProperties;
import org.jclouds.javax.annotation.Nullable;
import com.google.common.base.Objects;
import com.google.common.base.Objects.ToStringHelper;
/**
* A container used to group or isolate resources and/or identity objects. Depending on the service
@ -33,19 +33,21 @@ import com.google.common.base.Objects;
*
* @author Adrian Cole
* @see <a href="http://docs.openstack.org/api/openstack-identity-service/2.0/content/Identity-Service-Concepts-e1362.html"
* />
/>
*/
public class Tenant implements Comparable<Tenant> {
public class Tenant {
public static Builder builder() {
return new Builder();
public static Builder<?> builder() {
return new ConcreteBuilder();
}
public Builder toBuilder() {
return builder().fromTenant(this);
public Builder<?> toBuilder() {
return new ConcreteBuilder().fromTenant(this);
}
public static class Builder {
public static abstract class Builder<T extends Builder<T>> {
protected abstract T self();
protected String id;
protected String name;
protected String description;
@ -53,47 +55,54 @@ public class Tenant implements Comparable<Tenant> {
/**
* @see Tenant#getId()
*/
public Builder id(String id) {
this.id = checkNotNull(id, "id");
return this;
public T id(String id) {
this.id = id;
return self();
}
/**
* @see Tenant#getName()
*/
public Builder name(String name) {
this.name = checkNotNull(name, "name");
return this;
public T name(String name) {
this.name = name;
return self();
}
/**
* @see Tenant#getDescription()
*/
public Builder description(String description) {
public T description(String description) {
this.description = description;
return this;
return self();
}
public Tenant build() {
return new Tenant(id, name, description);
}
public Builder fromTenant(Tenant from) {
return id(from.getId()).name(from.getName());
public T fromTenant(Tenant in) {
return this
.id(in.getId())
.name(in.getName())
.description(in.getDescription());
}
}
protected Tenant() {
// we want serializers like Gson to work w/o using sun.misc.Unsafe,
// prohibited in GAE. This also implies fields are not final.
// see http://code.google.com/p/jclouds/issues/detail?id=925
private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
@Override
protected ConcreteBuilder self() {
return this;
}
}
protected String id;
protected String name;
protected String description;
private final String id;
private final String name;
private final String description;
protected Tenant(String id, String name, String description) {
@ConstructorProperties({
"id", "name", "description"
})
protected Tenant(String id, String name, @Nullable String description) {
this.id = checkNotNull(id, "id");
this.name = checkNotNull(name, "name");
this.description = description;
@ -105,14 +114,14 @@ public class Tenant implements Comparable<Tenant> {
* @return the id of the tenant in the current OpenStack deployment
*/
public String getId() {
return id;
return this.id;
}
/**
* @return the name of the tenant
*/
public String getName() {
return name;
return this.name;
}
/**
@ -120,21 +129,7 @@ public class Tenant implements Comparable<Tenant> {
*/
@Nullable
public String getDescription() {
return description;
}
@Override
public boolean equals(Object object) {
if (this == object) {
return true;
}
if (object instanceof Tenant) {
final Tenant other = Tenant.class.cast(object);
return equal(id, other.id) && equal(name, other.name)
&& equal(description, other.description);
} else {
return false;
}
return this.description;
}
@Override
@ -143,17 +138,23 @@ public class Tenant implements Comparable<Tenant> {
}
@Override
public String toString() {
return toStringHelper("").add("id", id).add("name", name).add("description", description).toString();
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Tenant that = Tenant.class.cast(obj);
return Objects.equal(this.id, that.id)
&& Objects.equal(this.name, that.name)
&& Objects.equal(this.description, that.description);
}
protected ToStringHelper string() {
return Objects.toStringHelper(this)
.add("id", id).add("name", name).add("description", description);
}
@Override
public int compareTo(Tenant that) {
if (that == null)
return 1;
if (this == that)
return 0;
return this.id.compareTo(that.id);
public String toString() {
return string().toString();
}
}

View File

@ -1,9 +1,9 @@
/**
/*
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. jclouds licenses this file
* to you under the Apache License, Expires 2.0 (the
* 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
*
@ -16,16 +16,15 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.jclouds.openstack.keystone.v2_0.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 java.beans.ConstructorProperties;
import java.util.Date;
import com.google.common.base.Objects;
import com.google.common.base.Objects.ToStringHelper;
/**
* A token is an arbitrary bit of text that is used to access resources. Each token has a scope
@ -38,19 +37,21 @@ import com.google.common.base.Objects;
*
* @author Adrian Cole
* @see <a href="http://docs.openstack.org/api/openstack-identity-service/2.0/content/Identity-Service-Concepts-e1362.html"
* />
/>
*/
public class Token implements Comparable<Token> {
public static Builder builder() {
return new Builder();
public static Builder<?> builder() {
return new ConcreteBuilder();
}
public Builder toBuilder() {
return builder().fromToken(this);
public Builder<?> toBuilder() {
return new ConcreteBuilder().fromToken(this);
}
public static class Builder {
public static abstract class Builder<T extends Builder<T>> {
protected abstract T self();
protected String id;
protected Date expires;
protected Tenant tenant;
@ -58,47 +59,54 @@ public class Token implements Comparable<Token> {
/**
* @see Token#getId()
*/
public Builder id(String id) {
this.id = checkNotNull(id, "id");
return this;
public T id(String id) {
this.id = id;
return self();
}
/**
* @see Token#getExpires()
*/
public Builder expires(Date expires) {
this.expires = checkNotNull(expires, "expires");
return this;
public T expires(Date expires) {
this.expires = expires;
return self();
}
/**
* @see Token#getTenant()
*/
public Builder tenant(Tenant tenant) {
this.tenant = checkNotNull(tenant, "tenant");
return this;
public T tenant(Tenant tenant) {
this.tenant = tenant;
return self();
}
public Token build() {
return new Token(id, expires, tenant);
}
public Builder fromToken(Token from) {
return id(from.getId()).expires(from.getExpires()).tenant(from.getTenant());
public T fromToken(Token in) {
return this
.id(in.getId())
.expires(in.getExpires())
.tenant(in.getTenant());
}
}
protected Token() {
// we want serializers like Gson to work w/o using sun.misc.Unsafe,
// prohibited in GAE. This also implies fields are not final.
// see http://code.google.com/p/jclouds/issues/detail?id=925
private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
@Override
protected ConcreteBuilder self() {
return this;
}
}
protected String id;
protected Date expires;
protected Tenant tenant;
private final String id;
private final Date expires;
private final Tenant tenant;
public Token(String id, Date expires, Tenant tenant) {
@ConstructorProperties({
"id", "expires", "tenant"
})
protected Token(String id, Date expires, Tenant tenant) {
this.id = checkNotNull(id, "id");
this.expires = checkNotNull(expires, "expires");
this.tenant = checkNotNull(tenant, "tenant");
@ -110,34 +118,21 @@ public class Token implements Comparable<Token> {
* @return the id of the token in the current OpenStack deployment
*/
public String getId() {
return id;
return this.id;
}
/**
* @return the expires of the token
*/
public Date getExpires() {
return expires;
return this.expires;
}
/**
* @return the tenant assigned to the token
*/
public Tenant getTenant() {
return tenant;
}
@Override
public boolean equals(Object object) {
if (this == object) {
return true;
}
if (object instanceof Token) {
final Token other = Token.class.cast(object);
return equal(id, other.id) && equal(expires, other.expires) && equal(tenant, other.tenant);
} else {
return false;
}
return this.tenant;
}
@Override
@ -145,9 +140,24 @@ public class Token implements Comparable<Token> {
return Objects.hashCode(id, expires, tenant);
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Token that = Token.class.cast(obj);
return Objects.equal(this.id, that.id)
&& Objects.equal(this.expires, that.expires)
&& Objects.equal(this.tenant, that.tenant);
}
protected ToStringHelper string() {
return Objects.toStringHelper(this)
.add("id", id).add("expires", expires).add("tenant", tenant);
}
@Override
public String toString() {
return toStringHelper("").add("id", id).add("expires", expires).add("tenant", tenant).toString();
return string().toString();
}
@Override
@ -158,5 +168,4 @@ public class Token implements Comparable<Token> {
return 0;
return this.id.compareTo(that.id);
}
}

View File

@ -1,9 +1,9 @@
/**
/*
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. jclouds licenses this file
* to you under the Apache License, Name 2.0 (the
* 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
*
@ -16,16 +16,17 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.jclouds.openstack.keystone.v2_0.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 java.beans.ConstructorProperties;
import java.util.Set;
import org.jclouds.javax.annotation.Nullable;
import com.google.common.base.Objects;
import com.google.common.base.Objects.ToStringHelper;
import com.google.common.collect.ImmutableSet;
/**
@ -39,17 +40,19 @@ import com.google.common.collect.ImmutableSet;
* @see <a href="http://docs.openstack.org/api/openstack-identity-service/2.0/content/Identity-Service-Concepts-e1362.html"
* />
*/
public class User implements Comparable<User> {
public class User {
public static Builder builder() {
return new Builder();
public static Builder<?> builder() {
return new ConcreteBuilder();
}
public Builder toBuilder() {
return builder().fromUser(this);
public Builder<?> toBuilder() {
return new ConcreteBuilder().fromUser(this);
}
public static class Builder {
public static abstract class Builder<T extends Builder<T>> {
protected abstract T self();
protected String id;
protected String name;
protected Set<Role> roles = ImmutableSet.of();
@ -57,57 +60,61 @@ public class User implements Comparable<User> {
/**
* @see User#getId()
*/
public Builder id(String id) {
this.id = checkNotNull(id, "id");
return this;
public T id(String id) {
this.id = id;
return self();
}
/**
* @see User#getName()
*/
public Builder name(String name) {
this.name = checkNotNull(name, "name");
return this;
public T name(String name) {
this.name = name;
return self();
}
/**
* @see User#getRoles()
*/
public Builder roles(Role... roles) {
return roles(ImmutableSet.copyOf(checkNotNull(roles, "roles")));
}
/**
* @see User#getRoles()
*/
public Builder roles(Set<Role> roles) {
public T roles(Set<Role> roles) {
this.roles = ImmutableSet.copyOf(checkNotNull(roles, "roles"));
return this;
return self();
}
public T roles(Role... in) {
return roles(ImmutableSet.copyOf(in));
}
public User build() {
return new User(id, name, roles);
}
public Builder fromUser(User from) {
return id(from.getId()).name(from.getName()).roles(from.getRoles());
public T fromUser(User in) {
return this
.id(in.getId())
.name(in.getName())
.roles(in.getRoles());
}
}
protected User() {
// we want serializers like Gson to work w/o using sun.misc.Unsafe,
// prohibited in GAE. This also implies fields are not final.
// see http://code.google.com/p/jclouds/issues/detail?id=925
private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
@Override
protected ConcreteBuilder self() {
return this;
}
}
protected String id;
protected String name;
protected Set<Role> roles = ImmutableSet.of();
private final String id;
private final String name;
private final Set<Role> roles;
protected User(String id, String name, Set<Role> roles) {
@ConstructorProperties({
"id", "name", "roles"
})
protected User(String id, String name, @Nullable Set<Role> roles) {
this.id = checkNotNull(id, "id");
this.name = checkNotNull(name, "name");
this.roles = ImmutableSet.copyOf(checkNotNull(roles, "roles"));
this.roles = roles == null ? ImmutableSet.<Role>of() : ImmutableSet.copyOf(checkNotNull(roles, "roles"));
}
/**
@ -116,34 +123,21 @@ public class User implements Comparable<User> {
* @return the id of the user in the current OpenStack deployment
*/
public String getId() {
return id;
return this.id;
}
/**
* @return the name of the user
*/
public String getName() {
return name;
return this.name;
}
/**
* @return the roles assigned to the user
*/
public Set<Role> getRoles() {
return roles;
}
@Override
public boolean equals(Object object) {
if (this == object) {
return true;
}
if (object instanceof User) {
final User other = User.class.cast(object);
return equal(id, other.id) && equal(name, other.name) && equal(roles, other.roles);
} else {
return false;
}
return this.roles;
}
@Override
@ -152,17 +146,23 @@ public class User implements Comparable<User> {
}
@Override
public String toString() {
return toStringHelper("").add("id", id).add("name", name).add("roles", roles).toString();
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
User that = User.class.cast(obj);
return Objects.equal(this.id, that.id)
&& Objects.equal(this.name, that.name)
&& Objects.equal(this.roles, that.roles);
}
protected ToStringHelper string() {
return Objects.toStringHelper(this)
.add("id", id).add("name", name).add("roles", roles);
}
@Override
public int compareTo(User that) {
if (that == null)
return 1;
if (this == that)
return 0;
return this.id.compareTo(that.id);
public String toString() {
return string().toString();
}
}

View File

@ -1,9 +1,9 @@
/**
/*
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. jclouds licenses this file
* to you under the Apache License, Href 2.0 (the
* 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
*
@ -16,19 +16,19 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.jclouds.openstack.v2_0.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 java.beans.ConstructorProperties;
import java.net.URI;
import javax.inject.Named;
import org.jclouds.javax.annotation.Nullable;
import com.google.common.base.Objects;
import com.google.gson.annotations.SerializedName;
import com.google.common.base.Objects.ToStringHelper;
/**
* For convenience, resources contain links to themselves. This allows a client to easily obtain a
@ -36,7 +36,7 @@ import com.google.gson.annotations.SerializedName;
*
* @author AdrianCole
* @see <a href= "http://docs.openstack.org/api/openstack-compute/1.1/content/LinksReferences.html"
* />
/>
*/
public class Link {
/**
@ -77,7 +77,6 @@ public class Link {
return UNRECOGNIZED;
}
}
}
public static Link create(Relation relation, URI href) {
@ -88,64 +87,73 @@ public class Link {
return new Link(relation, type, href);
}
public static Builder builder() {
return new Builder();
public static Builder<?> builder() {
return new ConcreteBuilder();
}
public Builder toBuilder() {
return builder().fromLink(this);
public Builder<?> toBuilder() {
return new ConcreteBuilder().fromLink(this);
}
public static class Builder {
protected Relation relation;
public static abstract class Builder<T extends Builder<T>> {
protected abstract T self();
protected Link.Relation relation;
protected String type;
protected URI href;
/**
* @see Link#getRelation()
*/
public Builder relation(Relation relation) {
this.relation = checkNotNull(relation, "relation");
return this;
public T relation(Link.Relation relation) {
this.relation = relation;
return self();
}
/**
* @see Link#getType()
*/
public Builder type(String type) {
public T type(String type) {
this.type = type;
return this;
return self();
}
/**
* @see Link#getHref()
*/
public Builder href(URI href) {
this.href = checkNotNull(href, "href");
return this;
public T href(URI href) {
this.href = href;
return self();
}
public Link build(){
public Link build() {
return new Link(relation, type, href);
}
public Builder fromLink(Link from) {
return relation(from.getRelation()).type(from.getType()).href(from.getHref());
public T fromLink(Link in) {
return this
.relation(in.getRelation())
.type(in.getType())
.href(in.getHref());
}
}
protected Link() {
// we want serializers like Gson to work w/o using sun.misc.Unsafe,
// prohibited in GAE. This also implies fields are not final.
// see http://code.google.com/p/jclouds/issues/detail?id=925
private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
@Override
protected ConcreteBuilder self() {
return this;
}
}
@SerializedName("rel")
protected Relation relation;
protected String type;
protected URI href;
@Named("rel")
private final Link.Relation relation;
private final String type;
private final URI href;
protected Link(Relation relation, @Nullable String type, URI href) {
@ConstructorProperties({
"rel", "type", "href"
})
protected Link(Link.Relation relation, @Nullable String type, URI href) {
this.relation = checkNotNull(relation, "relation");
this.type = type;
this.href = checkNotNull(href, "href");
@ -162,8 +170,8 @@ public class Link {
*
* @return the relation of the resource in the current OpenStack deployment
*/
public Relation getRelation() {
return relation;
public Link.Relation getRelation() {
return this.relation;
}
/**
@ -171,27 +179,14 @@ public class Link {
*/
@Nullable
public String getType() {
return type;
return this.type;
}
/**
* @return the href of the resource
*/
public URI getHref() {
return href;
}
@Override
public boolean equals(Object object) {
if (this == object) {
return true;
}
if (object instanceof Link) {
final Link other = Link.class.cast(object);
return equal(relation, other.relation) && equal(type, other.type) && equal(href, other.href);
} else {
return false;
}
return this.href;
}
@Override
@ -199,9 +194,24 @@ public class Link {
return Objects.hashCode(relation, type, href);
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Link that = Link.class.cast(obj);
return Objects.equal(this.relation, that.relation)
&& Objects.equal(this.type, that.type)
&& Objects.equal(this.href, that.href);
}
protected ToStringHelper string() {
return Objects.toStringHelper(this)
.add("relation", relation).add("type", type).add("href", href);
}
@Override
public String toString() {
return toStringHelper("").add("relation", relation).add("type", type).add("href", href).toString();
return string().toString();
}
}

View File

@ -1,9 +1,9 @@
/**
/*
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. jclouds licenses this file
* to you under the Apache License, Name 2.0 (the
* 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
*
@ -16,12 +16,11 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.jclouds.openstack.v2_0.domain;
import static com.google.common.base.Preconditions.checkNotNull;
import java.util.Collections;
import java.beans.ConstructorProperties;
import java.util.Set;
import org.jclouds.javax.annotation.Nullable;
@ -35,8 +34,8 @@ import com.google.common.collect.ImmutableSet;
*
* @author AdrianCole
* @see <a href=
* "http://docs.openstack.org/api/openstack-compute/1.1/content/Paginated_Collections-d1e664.html"
* />
"http://docs.openstack.org/api/openstack-compute/1.1/content/Paginated_Collections-d1e664.html"
/>
*/
public class Resource implements Comparable<Resource> {
@ -51,9 +50,9 @@ public class Resource implements Comparable<Resource> {
public static abstract class Builder<T extends Builder<T>> {
protected abstract T self();
private String id;
private String name;
private Set<Link> links = ImmutableSet.of();
protected String id;
protected String name;
protected Set<Link> links = ImmutableSet.of();
/**
* @see Resource#getId()
@ -71,31 +70,27 @@ public class Resource implements Comparable<Resource> {
return self();
}
/**
* @see Resource#getLinks()
*/
public T links(Link... links) {
return links(ImmutableSet.copyOf(checkNotNull(links, "links")));
}
/**
* @see Resource#getLinks()
*/
public T links(Set<Link> links) {
this.links = links;
this.links = ImmutableSet.copyOf(checkNotNull(links, "links"));
return self();
}
public T links(Link... in) {
return links(ImmutableSet.copyOf(in));
}
public Resource build() {
return new Resource(this);
return new Resource(id, name, links);
}
public T fromResource(Resource in) {
return this
.id(in.getId())
.name(in.getName())
.links(in.getLinks())
;
.links(in.getLinks());
}
}
@ -106,20 +101,28 @@ public class Resource implements Comparable<Resource> {
}
}
protected Resource() {
// we want serializers like Gson to work w/o using sun.misc.Unsafe,
// prohibited in GAE. This also implies fields are not final.
// see http://code.google.com/p/jclouds/issues/detail?id=925
private final String id;
private final String name;
private final Set<Link> links;
@ConstructorProperties({
"id", "name", "links"
})
protected Resource(String id, @Nullable String name, Set<Link> links) {
this.id = checkNotNull(id, "id");
this.name = name;
this.links = ImmutableSet.copyOf(checkNotNull(links, "links"));
}
private String id;
private String name;
private Set<Link> links = ImmutableSet.of();
// leaving till beans in other openstack projects are updated
@Deprecated
protected Resource(Builder<?> builder) {
this.id = checkNotNull(builder.id, "id");
this.name = builder.name;
this.links = ImmutableSet.copyOf(checkNotNull(builder.links, "links"));
this(builder.id, builder.name, builder.links);
}
@Deprecated
protected Resource() {
id = null; name = null; links = ImmutableSet.of();
}
/**
@ -129,7 +132,7 @@ public class Resource implements Comparable<Resource> {
* @return the id of the resource in the current OpenStack deployment
*/
public String getId() {
return id;
return this.id;
}
/**
@ -137,14 +140,14 @@ public class Resource implements Comparable<Resource> {
*/
@Nullable
public String getName() {
return name;
return this.name;
}
/**
* @return the links of the id address allocated to the new server
*/
public Set<Link> getLinks() {
return Collections.unmodifiableSet(this.links);
return this.links;
}
@Override
@ -157,22 +160,21 @@ public class Resource implements Comparable<Resource> {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Resource that = Resource.class.cast(obj);
return Objects.equal(this.getId(), that.getId())
return Objects.equal(this.id, that.id)
&& Objects.equal(this.name, that.name)
&& Objects.equal(this.links, that.links);
}
protected ToStringHelper string() {
return Objects.toStringHelper("")
.add("id", getId())
.add("name", name)
.add("links", links);
return Objects.toStringHelper(this)
.add("id", id).add("name", name).add("links", links);
}
@Override
public String toString() {
return string().toString();
}
@Override
public int compareTo(Resource that) {
if (that == null)

View File

@ -18,19 +18,20 @@
*/
package org.jclouds.openstack.nova.v2_0.config;
import java.beans.ConstructorProperties;
import java.lang.reflect.Type;
import java.util.Date;
import java.util.Map;
import java.util.Set;
import javax.inject.Singleton;
import org.jclouds.javax.annotation.Nullable;
import org.jclouds.json.config.GsonModule;
import org.jclouds.json.config.GsonModule.DateAdapter;
import org.jclouds.openstack.nova.v2_0.domain.HostResourceUsage;
import org.jclouds.openstack.nova.v2_0.domain.Server;
import org.jclouds.openstack.nova.v2_0.domain.ServerExtendedAttributes;
import org.jclouds.openstack.nova.v2_0.domain.ServerExtendedStatus;
import org.jclouds.openstack.nova.v2_0.domain.ServerWithSecurityGroups;
import org.jclouds.openstack.nova.v2_0.domain.*;
import org.jclouds.openstack.v2_0.domain.Link;
import org.jclouds.openstack.v2_0.domain.Resource;
import com.google.common.base.Objects;
import com.google.common.collect.ImmutableMap;
@ -57,7 +58,8 @@ public class NovaParserModule extends AbstractModule {
return ImmutableMap.<Type, Object>of(
HostResourceUsage.class, new HostResourceUsageAdapter(),
ServerWithSecurityGroups.class, new ServerWithSecurityGroupsAdapter(),
Server.class, new ServerAdapter()
Server.class, new ServerAdapter(),
SecurityGroupRule.class, new SecurityGroupRuleAdapter()
);
}
@ -85,9 +87,14 @@ public class NovaParserModule extends AbstractModule {
private static class HostResourceUsageView {
protected HostResourceUsageInternal resource;
}
private static class HostResourceUsageInternal extends HostResourceUsage {
protected HostResourceUsageInternal(Builder<?> builder) {
super(builder);
@ConstructorProperties({
"host", "project", "memory_mb", "cpu", "disk_gb"
})
protected HostResourceUsageInternal(String host, @Nullable String project, int memoryMb, int cpu, int diskGb) {
super(host, project, memoryMb, cpu, diskGb);
}
}
}
@ -124,7 +131,7 @@ public class NovaParserModule extends AbstractModule {
}
ServerExtendedAttributes extraAttributes = context.deserialize(jsonElement, ServerExtendedAttributes.class);
if (!Objects.equal(extraAttributes, ServerExtendedAttributes.builder().build())) {
result.extraAttributes(extraAttributes);
result.extendedAttributes(extraAttributes);
}
return result.build();
}
@ -134,9 +141,47 @@ public class NovaParserModule extends AbstractModule {
}
private static class ServerInternal extends Server {
protected ServerInternal() {
@ConstructorProperties({
"id", "name", "links", "uuid", "tenant_id", "user_id", "updated", "created", "hostId", "accessIPv4", "accessIPv6", "status", "image", "flavor", "key_name", "config_drive", "addresses", "metadata", "extendedStatus", "extendedAttributes", "OS-DCF:diskConfig"
})
protected ServerInternal(String id, @Nullable String name, java.util.Set<Link> links, @Nullable String uuid, String tenantId,
String userId, Date updated, Date created, @Nullable String hostId, @Nullable String accessIPv4,
@Nullable String accessIPv6, Server.Status status, Resource image, Resource flavor, @Nullable String keyName,
@Nullable String configDrive, Map<String, Set<Address>> addresses, Map<String, String> metadata,
@Nullable ServerExtendedStatus extendedStatus, @Nullable ServerExtendedAttributes extendedAttributes, @Nullable String diskConfig) {
super(id, name, links, uuid, tenantId, userId, updated, created, hostId, accessIPv4, accessIPv6, status, image, flavor, keyName, configDrive, addresses, metadata, extendedStatus, extendedAttributes, diskConfig);
}
}
}
/* trying to cope with group { } to signify no group! */
@Singleton
public static class SecurityGroupRuleAdapter implements JsonDeserializer<SecurityGroupRule> {
@Override
public SecurityGroupRule deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext context)
throws JsonParseException {
SecurityGroupRule ruleBase = apply((SecurityGroupRuleInternal) context.deserialize(jsonElement, SecurityGroupRuleInternal.class));
if (jsonElement.getAsJsonObject().has("group")) {
try {
TenantIdAndName group = context.deserialize(jsonElement.getAsJsonObject().getAsJsonObject("group"), TenantIdAndName.class);
ruleBase = ruleBase.toBuilder().group(group).build();
} catch (NullPointerException ex) {
}
}
return ruleBase;
}
public SecurityGroupRule apply(SecurityGroupRuleInternal in) {
return in.toBuilder().build();
}
private static class SecurityGroupRuleInternal extends SecurityGroupRule {
@ConstructorProperties({
"ip_protocol", "from_port", "to_port", "id", "parent_group_id", "ip_range"
})
protected SecurityGroupRuleInternal(IpProtocol ipProtocol, int fromPort, int toPort, String id, String parentGroupId, @Nullable Cidr ipRange) {
super(ipProtocol, fromPort, toPort, id, null, parentGroupId, ipRange);
}
}
}
}

View File

@ -1,4 +1,4 @@
/**
/*
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
@ -16,27 +16,28 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.jclouds.openstack.nova.v2_0.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 java.beans.ConstructorProperties;
import com.google.common.base.Objects;
import com.google.common.base.Objects.ToStringHelper;
/**
* IP address
*
* @author AdrianCole
*/
*/
public class Address {
public static Builder builder() {
return new Builder();
public static Builder<?> builder() {
return new ConcreteBuilder();
}
public Builder toBuilder() {
return builder().fromAddress(this);
public Builder<?> toBuilder() {
return new ConcreteBuilder().fromAddress(this);
}
public static Address createV4(String addr) {
@ -47,46 +48,54 @@ public class Address {
return builder().version(6).addr(addr).build();
}
public static class Builder {
public static abstract class Builder<T extends Builder<T>> {
protected abstract T self();
protected String addr;
protected int version;
/**
* @see Address#getVersion()
* @see Address#getAddr()
*/
protected Builder version(int version) {
this.version = version;
return this;
public T addr(String addr) {
this.addr = addr;
return self();
}
/**
* @see Address#getAddr()
* @see Address#getVersion()
*/
public Builder addr(String addr) {
this.addr = addr;
return this;
public T version(int version) {
this.version = version;
return self();
}
public Address build() {
return new Address(addr, version);
}
public Builder fromAddress(Address from) {
return addr(from.getAddr()).version(from.getVersion());
public T fromAddress(Address in) {
return this
.addr(in.getAddr())
.version(in.getVersion());
}
}
protected Address() {
// we want serializers like Gson to work w/o using sun.misc.Unsafe,
// prohibited in GAE. This also implies fields are not final.
// see http://code.google.com/p/jclouds/issues/detail?id=925
private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
@Override
protected ConcreteBuilder self() {
return this;
}
}
protected String addr;
protected int version;
private final String addr;
private final int version;
public Address(String addr, int version) {
this.addr = addr;
@ConstructorProperties({
"addr", "version"
})
protected Address(String addr, int version) {
this.addr = checkNotNull(addr, "addr");
this.version = version;
}
@ -94,27 +103,14 @@ public class Address {
* @return the ip address
*/
public String getAddr() {
return addr;
return this.addr;
}
/**
* @return the IP version, ex. 4
*/
public int getVersion() {
return version;
}
@Override
public boolean equals(Object object) {
if (this == object) {
return true;
}
if (object instanceof Address) {
final Address other = Address.class.cast(object);
return equal(addr, other.addr) && equal(version, other.version);
} else {
return false;
}
return this.version;
}
@Override
@ -122,9 +118,23 @@ public class Address {
return Objects.hashCode(addr, version);
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Address that = Address.class.cast(obj);
return Objects.equal(this.addr, that.addr)
&& Objects.equal(this.version, that.version);
}
protected ToStringHelper string() {
return Objects.toStringHelper(this)
.add("addr", addr).add("version", version);
}
@Override
public String toString() {
return toStringHelper("").add("addr", addr).add("version", version).toString();
return string().toString();
}
}

View File

@ -1,9 +1,9 @@
/**
/*
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. jclouds licenses this file
* to you under the Apache License, Name 2.0 (the
* 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
*
@ -18,12 +18,19 @@
*/
package org.jclouds.openstack.nova.v2_0.domain;
import static com.google.common.base.Preconditions.checkNotNull;
import java.beans.ConstructorProperties;
import java.net.URI;
import java.util.Date;
import java.util.Set;
import org.jclouds.javax.annotation.Nullable;
import org.jclouds.openstack.v2_0.domain.Link;
import org.jclouds.openstack.v2_0.domain.Resource;
import com.google.common.base.Objects;
import com.google.common.base.Objects.ToStringHelper;
/**
* The OpenStack Compute API is extensible. Extensions serve two purposes: They
@ -33,10 +40,11 @@ import com.google.common.base.Objects;
*
* @author Adrian Cole
* @see <a href=
* "http://docs.openstack.org/api/openstack-compute/2/content/Extensions-d1e1444.html"
* />
*/
"http://docs.openstack.org/api/openstack-compute/2/content/Extensions-d1e1444.html"
/>
*/
public class Extension extends Resource {
public static Builder<?> builder() {
return new ConcreteBuilder();
}
@ -46,10 +54,10 @@ public class Extension extends Resource {
}
public static abstract class Builder<T extends Builder<T>> extends Resource.Builder<T> {
private URI namespace;
private String alias;
private Date updated;
private String description;
protected URI namespace;
protected String alias;
protected Date updated;
protected String description;
/**
* @see Extension#getNamespace()
@ -63,11 +71,18 @@ public class Extension extends Resource {
* @see Extension#getAlias()
*/
public T alias(String alias) {
id(alias);
this.alias = alias;
return self();
}
/**
* @see Extension#getAlias()
*/
@Override
public T id(String id) {
return alias(id);
}
/**
* @see Extension#getUpdated()
*/
@ -85,7 +100,7 @@ public class Extension extends Resource {
}
public Extension build() {
return new Extension(this);
return new Extension(name, links, namespace, alias, updated, description);
}
public T fromExtension(Extension in) {
@ -93,10 +108,8 @@ public class Extension extends Resource {
.namespace(in.getNamespace())
.alias(in.getAlias())
.updated(in.getUpdated())
.description(in.getDescription())
;
.description(in.getDescription());
}
}
private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
@ -106,38 +119,31 @@ public class Extension extends Resource {
}
}
protected Extension() {
// we want serializers like Gson to work w/o using sun.misc.Unsafe,
// prohibited in GAE. This also implies fields are not final.
// see http://code.google.com/p/jclouds/issues/detail?id=925
}
private final URI namespace;
private final String alias;
private final Date updated;
private final String description;
private URI namespace;
private String alias;
private Date updated;
private String description;
protected Extension(Builder<?> builder) {
super(builder);
this.namespace = builder.namespace;
this.alias = builder.alias;
this.updated = builder.updated;
this.description = builder.description;
@ConstructorProperties({
"name", "links", "namespace", "alias", "updated", "description"
})
protected Extension(@Nullable String name, Set<Link> links, URI namespace, String alias, @Nullable Date updated, String description) {
super(alias, name, links);
this.namespace = checkNotNull(namespace, "namespace");
this.alias = checkNotNull(alias, "alias");
this.updated = updated;
this.description = checkNotNull(description, "description");
}
public URI getNamespace() {
return this.namespace;
}
@Override
public String getId() {
return this.alias;
}
public String getAlias() {
return this.alias;
}
@Nullable
public Date getUpdated() {
return this.updated;
}
@ -147,11 +153,24 @@ public class Extension extends Resource {
}
@Override
public Objects.ToStringHelper string() {
return super.string()
.add("namespace", namespace)
.add("alias", alias)
.add("updated", updated)
.add("description", description);
public int hashCode() {
return Objects.hashCode(namespace, alias, updated, description);
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Extension that = Extension.class.cast(obj);
return super.equals(that) && Objects.equal(this.namespace, that.namespace)
&& Objects.equal(this.alias, that.alias)
&& Objects.equal(this.updated, that.updated)
&& Objects.equal(this.description, that.description);
}
protected ToStringHelper string() {
return super.string()
.add("namespace", namespace).add("alias", alias).add("updated", updated).add("description", description);
}
}

View File

@ -1,4 +1,4 @@
/**
/*
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
@ -18,11 +18,17 @@
*/
package org.jclouds.openstack.nova.v2_0.domain;
import java.beans.ConstructorProperties;
import javax.inject.Named;
import org.jclouds.javax.annotation.Nullable;
import org.jclouds.openstack.v2_0.domain.Link;
import org.jclouds.openstack.v2_0.domain.Resource;
import com.google.common.base.Objects;
import com.google.common.base.Objects.ToStringHelper;
import com.google.common.base.Optional;
import com.google.gson.annotations.SerializedName;
/**
* A flavor is an available hardware configuration for a server. Each flavor has
@ -30,10 +36,11 @@ import com.google.gson.annotations.SerializedName;
*
* @author Jeremy Daggett
* @see <a href=
* "http://docs.openstack.org/api/openstack-compute/1.1/content/Flavors-d1e4180.html"
* />
*/
"http://docs.openstack.org/api/openstack-compute/1.1/content/Flavors-d1e4180.html"
/>
*/
public class Flavor extends Resource {
public static Builder<?> builder() {
return new ConcreteBuilder();
}
@ -43,13 +50,12 @@ public class Flavor extends Resource {
}
public static abstract class Builder<T extends Builder<T>> extends Resource.Builder<T> {
private int ram;
private int disk;
private int vcpus;
private String swap;
private Double rxtxFactor;
private Integer ephemeral;
protected int ram;
protected int disk;
protected int vcpus;
protected String swap;
protected Double rxtxFactor;
protected Integer ephemeral;
/**
* @see Flavor#getRam()
@ -76,7 +82,7 @@ public class Flavor extends Resource {
}
/**
* @see Flavor#getVcpus()
* @see Flavor#getSwap()
*/
public T swap(String swap) {
this.swap = swap;
@ -84,7 +90,7 @@ public class Flavor extends Resource {
}
/**
* @see Flavor#getVcpus()
* @see Flavor#getRxtxFactor()
*/
public T rxtxFactor(Double rxtxFactor) {
this.rxtxFactor = rxtxFactor;
@ -92,16 +98,15 @@ public class Flavor extends Resource {
}
/**
* @see Flavor#getVcpus()
* @see Flavor#getEphemeral()
*/
public T ephemeral(Integer ephemeral) {
this.ephemeral = ephemeral;
return self();
}
public Flavor build() {
return new Flavor(this);
return new Flavor(id, name, links, ram, disk, vcpus, swap, rxtxFactor, ephemeral);
}
public T fromFlavor(Flavor in) {
@ -113,7 +118,6 @@ public class Flavor extends Resource {
.rxtxFactor(in.getRxtxFactor().orNull())
.ephemeral(in.getEphemeral().orNull());
}
}
private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
@ -123,29 +127,27 @@ public class Flavor extends Resource {
}
}
protected Flavor() {
// we want serializers like Gson to work w/o using sun.misc.Unsafe,
// prohibited in GAE. This also implies fields are not final.
// see http://code.google.com/p/jclouds/issues/detail?id=925
}
private final int ram;
private final int disk;
private final int vcpus;
private final Optional<String> swap;
@Named("rxtx_factor")
private final Optional<Double> rxtxFactor;
@Named("OS-FLV-EXT-DATA:ephemeral")
private final Optional<Integer> ephemeral;
private int ram;
private int disk;
private int vcpus;
private Optional<String> swap = Optional.absent();
@SerializedName("rxtx_factor")
private Optional<Double> rxtxFactor = Optional.absent();
@SerializedName("OS-FLV-EXT-DATA:ephemeral")
private Optional<Integer> ephemeral = Optional.absent();
protected Flavor(Builder<?> builder) {
super(builder);
this.ram = builder.ram;
this.disk = builder.disk;
this.vcpus = builder.vcpus;
this.swap = Optional.fromNullable(builder.swap);
this.rxtxFactor = Optional.fromNullable(builder.rxtxFactor);
this.ephemeral = Optional.fromNullable(builder.ephemeral);
@ConstructorProperties({
"id", "name", "links", "ram", "disk", "vcpus", "swap", "rxtx_factor", "OS-FLV-EXT-DATA:ephemeral"
})
protected Flavor(String id, @Nullable String name, java.util.Set<Link> links, int ram, int disk, int vcpus,
@Nullable String swap, @Nullable Double rxtxFactor, @Nullable Integer ephemeral) {
super(id, name, links);
this.ram = ram;
this.disk = disk;
this.vcpus = vcpus;
this.swap = Optional.fromNullable(swap);
this.rxtxFactor = Optional.fromNullable(rxtxFactor);
this.ephemeral = Optional.fromNullable(ephemeral);
}
public int getRam() {
@ -161,11 +163,11 @@ public class Flavor extends Resource {
}
public Optional<String> getSwap() {
return swap;
return this.swap;
}
public Optional<Double> getRxtxFactor() {
return rxtxFactor;
return this.rxtxFactor;
}
/**
@ -177,17 +179,30 @@ public class Flavor extends Resource {
* @see org.jclouds.openstack.nova.v2_0.extensions.ExtensionNamespaces#FLAVOR_EXTRA_DATA
*/
public Optional<Integer> getEphemeral() {
return ephemeral;
return this.ephemeral;
}
@Override
protected Objects.ToStringHelper string() {
return super.string()
.add("ram", ram)
.add("disk", disk)
.add("vcpus", vcpus)
.add("swap", swap)
.add("rxtxFactor", rxtxFactor)
.add("ephemeral", ephemeral);
public int hashCode() {
return Objects.hashCode(ram, disk, vcpus, swap, rxtxFactor, ephemeral);
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Flavor that = Flavor.class.cast(obj);
return super.equals(that) && Objects.equal(this.ram, that.ram)
&& Objects.equal(this.disk, that.disk)
&& Objects.equal(this.vcpus, that.vcpus)
&& Objects.equal(this.swap, that.swap)
&& Objects.equal(this.rxtxFactor, that.rxtxFactor)
&& Objects.equal(this.ephemeral, that.ephemeral);
}
protected ToStringHelper string() {
return super.string()
.add("ram", ram).add("disk", disk).add("vcpus", vcpus).add("swap", swap).add("rxtxFactor", rxtxFactor).add("ephemeral", ephemeral);
}
}

View File

@ -1,4 +1,4 @@
/**
/*
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
@ -18,11 +18,16 @@
*/
package org.jclouds.openstack.nova.v2_0.domain;
import static com.google.common.base.Objects.toStringHelper;
import static com.google.common.base.Preconditions.checkNotNull;
import java.beans.ConstructorProperties;
import javax.inject.Named;
import org.jclouds.javax.annotation.Nullable;
import com.google.gson.annotations.SerializedName;
import com.google.common.base.Objects;
import com.google.common.base.Objects.ToStringHelper;
/**
* A Floating IP is an IP address that can be created and associated with a
@ -31,68 +36,90 @@ import com.google.gson.annotations.SerializedName;
*
* @author Jeremy Daggett
* @author chamerling
*/
*/
public class FloatingIP implements Comparable<FloatingIP> {
public static Builder builder() {
return new Builder();
public static Builder<?> builder() {
return new ConcreteBuilder();
}
public Builder toBuilder() {
return builder().fromFloatingIp(this);
public Builder<?> toBuilder() {
return new ConcreteBuilder().fromFloatingIP(this);
}
public static class Builder {
private String id;
private String ip;
private String fixedIp;
private String instanceId;
public static abstract class Builder<T extends Builder<T>> {
protected abstract T self();
public Builder id(String id) {
protected String id;
protected String ip;
protected String fixedIp;
protected String instanceId;
/**
* @see FloatingIP#getId()
*/
public T id(String id) {
this.id = id;
return this;
return self();
}
public Builder ip(String ip) {
/**
* @see FloatingIP#getIp()
*/
public T ip(String ip) {
this.ip = ip;
return this;
return self();
}
public Builder fixedIp(String fixedIp) {
/**
* @see FloatingIP#getFixedIp()
*/
public T fixedIp(String fixedIp) {
this.fixedIp = fixedIp;
return this;
return self();
}
public Builder instanceId(String instanceId) {
/**
* @see FloatingIP#getInstanceId()
*/
public T instanceId(String instanceId) {
this.instanceId = instanceId;
return this;
return self();
}
public FloatingIP build() {
return new FloatingIP(id, ip, fixedIp, instanceId);
}
public Builder fromFloatingIp(FloatingIP in) {
return id(in.getId()).ip(in.getIp()).fixedIp(in.getFixedIp()).instanceId(in.getInstanceId());
public T fromFloatingIP(FloatingIP in) {
return this
.id(in.getId())
.ip(in.getIp())
.fixedIp(in.getFixedIp())
.instanceId(in.getInstanceId());
}
}
private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
@Override
protected ConcreteBuilder self() {
return this;
}
}
protected FloatingIP() {
// we want serializers like Gson to work w/o using sun.misc.Unsafe,
// prohibited in GAE. This also implies fields are not final.
// see http://code.google.com/p/jclouds/issues/detail?id=925
}
private String id;
private String ip;
@SerializedName("fixed_ip")
private String fixedIp;
@SerializedName("instance_id")
private String instanceId;
private final String id;
private final String ip;
@Named("fixed_ip")
private final String fixedIp;
@Named("instance_id")
private final String instanceId;
@ConstructorProperties({
"id", "ip", "fixed_ip", "instance_id"
})
protected FloatingIP(String id, String ip, @Nullable String fixedIp, @Nullable String instanceId) {
this.id = id;
this.ip = ip;
this.id = checkNotNull(id, "id");
this.ip = checkNotNull(ip, "ip");
this.fixedIp = fixedIp;
this.instanceId = instanceId;
}
@ -105,66 +132,44 @@ public class FloatingIP implements Comparable<FloatingIP> {
return this.ip;
}
@Nullable
public String getFixedIp() {
return this.fixedIp;
}
@Nullable
public String getInstanceId() {
return this.instanceId;
}
@Override
public int hashCode() {
return Objects.hashCode(id, ip, fixedIp, instanceId);
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
FloatingIP that = FloatingIP.class.cast(obj);
return Objects.equal(this.id, that.id)
&& Objects.equal(this.ip, that.ip)
&& Objects.equal(this.fixedIp, that.fixedIp)
&& Objects.equal(this.instanceId, that.instanceId);
}
protected ToStringHelper string() {
return Objects.toStringHelper(this)
.add("id", id).add("ip", ip).add("fixedIp", fixedIp).add("instanceId", instanceId);
}
@Override
public String toString() {
return string().toString();
}
@Override
public int compareTo(FloatingIP o) {
return this.id.compareTo(o.getId());
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((fixedIp == null) ? 0 : fixedIp.hashCode());
result = prime * result + ((id == null) ? 0 : id.hashCode());
result = prime * result + ((instanceId == null) ? 0 : instanceId.hashCode());
result = prime * result + ((ip == null) ? 0 : ip.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
FloatingIP other = (FloatingIP) obj;
if (fixedIp == null) {
if (other.fixedIp != null)
return false;
} else if (!fixedIp.equals(other.fixedIp))
return false;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
if (instanceId == null) {
if (other.instanceId != null)
return false;
} else if (!instanceId.equals(other.instanceId))
return false;
if (ip == null) {
if (other.ip != null)
return false;
} else if (!ip.equals(other.ip))
return false;
return true;
}
@Override
public String toString() {
return toStringHelper("").add("id", id).add("ip", ip).add("fixedIp", fixedIp).add("instanceId", instanceId)
.toString();
}
}

View File

@ -1,4 +1,4 @@
/**
/*
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
@ -18,15 +18,18 @@
*/
package org.jclouds.openstack.nova.v2_0.domain;
import java.beans.ConstructorProperties;
import javax.inject.Named;
import org.jclouds.javax.annotation.Nullable;
import com.google.common.base.Objects;
import com.google.common.base.Objects.ToStringHelper;
import com.google.gson.annotations.SerializedName;
/**
* Class Host
*/
*/
public class Host {
public static Builder<?> builder() {
@ -40,30 +43,34 @@ public class Host {
public static abstract class Builder<T extends Builder<T>> {
protected abstract T self();
private String name;
private String service;
protected String name;
protected String service;
/**
* @see Host#getName()
*/
public T name(String name) {
this.name = name;
return self();
}
/**
* @see Host#getService()
*/
public T service(String service) {
this.service = service;
return self();
}
public Host build() {
return new Host(this);
return new Host(name, service);
}
public T fromHost(Host in) {
return this
.name(in.getName())
.service(in.getService())
;
.service(in.getService());
}
}
private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
@ -73,30 +80,23 @@ public class Host {
}
}
protected Host() {
// we want serializers like Gson to work w/o using sun.misc.Unsafe,
// prohibited in GAE. This also implies fields are not final.
// see http://code.google.com/p/jclouds/issues/detail?id=925
@Named("host_name")
private final String name;
private final String service;
@ConstructorProperties({
"host_name", "service"
})
protected Host(@Nullable String name, @Nullable String service) {
this.name = name;
this.service = service;
}
@SerializedName(value="host_name")
private String name;
private String service;
protected Host(Builder<?> builder) {
this.name = builder.name;
this.service = builder.service;
}
/**
*/
@Nullable
public String getName() {
return this.name;
}
/**
*/
@Nullable
public String getService() {
return this.service;
@ -113,15 +113,12 @@ public class Host {
if (obj == null || getClass() != obj.getClass()) return false;
Host that = Host.class.cast(obj);
return Objects.equal(this.name, that.name)
&& Objects.equal(this.service, that.service)
;
&& Objects.equal(this.service, that.service);
}
protected ToStringHelper string() {
return Objects.toStringHelper("")
.add("name", name)
.add("service", service)
;
return Objects.toStringHelper(this)
.add("name", name).add("service", service);
}
@Override

View File

@ -1,4 +1,4 @@
/**
/*
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
@ -20,23 +20,26 @@ package org.jclouds.openstack.nova.v2_0.domain;
import static com.google.common.base.Preconditions.checkNotNull;
import java.util.Collections;
import java.beans.ConstructorProperties;
import java.util.Date;
import java.util.Map;
import java.util.Set;
import javax.inject.Named;
import org.jclouds.javax.annotation.Nullable;
import com.google.common.base.Objects;
import com.google.common.base.Optional;
import com.google.common.base.Objects.ToStringHelper;
import com.google.common.base.Optional;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.gson.annotations.SerializedName;
/**
* Aggregates can be manipulated using the Aggregate Extension to Nova (alias "OS-AGGREGATES")
*
* @see org.jclouds.openstack.nova.v2_0.extensions.HostAggregateClient
*/
*/
public class HostAggregate {
public static Builder<?> builder() {
@ -44,20 +47,20 @@ public class HostAggregate {
}
public Builder<?> toBuilder() {
return new ConcreteBuilder().fromAggregate(this);
return new ConcreteBuilder().fromHostAggregate(this);
}
public static abstract class Builder<T extends Builder<T>> {
protected abstract T self();
private String id;
private String name;
private String availabilityZone;
private Set<String> hosts = ImmutableSet.of();
private String state;
private Date created = new Date();
private Date updated;
private Map<String, String> metadata = ImmutableMap.of();
protected String id;
protected String name;
protected String availabilityZone;
protected Set<String> hosts = ImmutableSet.of();
protected String state;
protected Date created;
protected Date updated;
protected Map<String, String> metadata = ImmutableMap.of();
/**
* @see HostAggregate#getId()
@ -86,16 +89,13 @@ public class HostAggregate {
/**
* @see HostAggregate#getHosts()
*/
public T hosts(String... hosts) {
return hosts(ImmutableSet.copyOf(hosts));
public T hosts(Set<String> hosts) {
this.hosts = ImmutableSet.copyOf(checkNotNull(hosts, "hosts"));
return self();
}
/**
* @see HostAggregate#getHosts()
*/
public T hosts(Set<String> hosts) {
this.hosts = hosts;
return self();
public T hosts(String... in) {
return hosts(ImmutableSet.copyOf(in));
}
/**
@ -126,15 +126,15 @@ public class HostAggregate {
* @see HostAggregate#getMetadata()
*/
public T metadata(Map<String, String> metadata) {
this.metadata = metadata;
this.metadata = ImmutableMap.copyOf(checkNotNull(metadata, "metadata"));
return self();
}
public HostAggregate build() {
return new HostAggregate(this);
return new HostAggregate(id, name, availabilityZone, hosts, state, created, updated, metadata);
}
public T fromAggregate(HostAggregate in) {
public T fromHostAggregate(HostAggregate in) {
return this
.id(in.getId())
.name(in.getName())
@ -142,10 +142,9 @@ public class HostAggregate {
.hosts(in.getHosts())
.state(in.getState())
.created(in.getCreated())
.updated(in.getUpdated().orNull())
.updated(in.getUpdated().get())
.metadata(in.getMetadata());
}
}
private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
@ -155,34 +154,32 @@ public class HostAggregate {
}
}
protected HostAggregate() {
// we want serializers like Gson to work w/o using sun.misc.Unsafe,
// prohibited in GAE. This also implies fields are not final.
// see http://code.google.com/p/jclouds/issues/detail?id=925
}
private final String id;
private final String name;
@Named("availability_zone")
private final String availabilityZone;
private final Set<String> hosts;
@Named("operational_state")
private final String state;
@Named("created_at")
private final Date created;
@Named("updated_at")
private final Optional<Date> updated;
private final Map<String, String> metadata;
private String id;
private String name;
@SerializedName(value = "availability_zone")
private String availabilityZone;
private Set<String> hosts = ImmutableSet.of();
@SerializedName(value = "operational_state")
private String state;
@SerializedName(value = "created_at")
private Date created;
@SerializedName(value = "updated_at")
private Optional<Date> updated = Optional.absent();
private Map<String, String> metadata = ImmutableMap.of();
protected HostAggregate(Builder<?> builder) {
this.id = checkNotNull(builder.id, "id");
this.name = checkNotNull(builder.name, "name");
this.availabilityZone = checkNotNull(builder.availabilityZone, "availabilityZone");
this.hosts = ImmutableSet.copyOf(checkNotNull(builder.hosts, "hosts"));
this.state = checkNotNull(builder.state, "state");
this.created = checkNotNull(builder.created, "created");
this.updated = Optional.fromNullable(builder.updated);
this.metadata = ImmutableMap.copyOf(checkNotNull(builder.metadata, "metadata"));
@ConstructorProperties({
"id", "name", "availability_zone", "hosts", "operational_state", "created_at", "updated_at", "metadata"
})
protected HostAggregate(String id, String name, String availabilityZone, Set<String> hosts, String state, Date created,
@Nullable Date updated, Map<String, String> metadata) {
this.id = checkNotNull(id, "id");
this.name = checkNotNull(name, "name");
this.availabilityZone = checkNotNull(availabilityZone, "availabilityZone");
this.hosts = ImmutableSet.copyOf(checkNotNull(hosts, "hosts"));
this.state = checkNotNull(state, "state");
this.created = checkNotNull(created, "created");
this.updated = Optional.fromNullable(updated);
this.metadata = ImmutableMap.copyOf(checkNotNull(metadata, "metadata"));
}
public String getId() {
@ -203,7 +200,7 @@ public class HostAggregate {
}
public Set<String> getHosts() {
return Collections.unmodifiableSet(this.hosts);
return this.hosts;
}
public String getState() {
@ -239,20 +236,12 @@ public class HostAggregate {
&& Objects.equal(this.state, that.state)
&& Objects.equal(this.created, that.created)
&& Objects.equal(this.updated, that.updated)
&& Objects.equal(this.metadata, that.metadata)
;
&& Objects.equal(this.metadata, that.metadata);
}
protected ToStringHelper string() {
return Objects.toStringHelper("")
.add("id", id)
.add("name", name)
.add("availabilityZone", availabilityZone)
.add("hosts", hosts)
.add("state", state)
.add("created", created)
.add("updated", updated)
.add("metadata", metadata);
return Objects.toStringHelper(this)
.add("id", id).add("name", name).add("availabilityZone", availabilityZone).add("hosts", hosts).add("state", state).add("created", created).add("updated", updated).add("metadata", metadata);
}
@Override

View File

@ -1,4 +1,4 @@
/**
/*
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
@ -20,15 +20,18 @@ package org.jclouds.openstack.nova.v2_0.domain;
import static com.google.common.base.Preconditions.checkNotNull;
import java.beans.ConstructorProperties;
import javax.inject.Named;
import org.jclouds.javax.annotation.Nullable;
import com.google.common.base.Objects;
import com.google.common.base.Objects.ToStringHelper;
import com.google.gson.annotations.SerializedName;
/**
* Class HostResourceUsage
*/
*/
public class HostResourceUsage {
public static Builder<?> builder() {
@ -42,39 +45,54 @@ public class HostResourceUsage {
public static abstract class Builder<T extends Builder<T>> {
protected abstract T self();
private String host;
private String project;
private int memoryMb;
private int cpu;
private int diskGb;
protected String host;
protected String project;
protected int memoryMb;
protected int cpu;
protected int diskGb;
/**
* @see HostResourceUsage#getHost()
*/
public T host(String host) {
this.host = host;
return self();
}
/**
* @see HostResourceUsage#getProject()
*/
public T project(String project) {
this.project = project;
return self();
}
/**
* @see HostResourceUsage#getMemoryMb()
*/
public T memoryMb(int memoryMb) {
this.memoryMb = memoryMb;
return self();
}
/**
* @see HostResourceUsage#getCpu()
*/
public T cpu(int cpu) {
this.cpu = cpu;
return self();
}
/**
* @see HostResourceUsage#getDiskGb()
*/
public T diskGb(int diskGb) {
this.diskGb = diskGb;
return self();
}
public HostResourceUsage build() {
return new HostResourceUsage(this);
return new HostResourceUsage(host, project, memoryMb, cpu, diskGb);
}
public T fromHostResourceUsage(HostResourceUsage in) {
@ -83,10 +101,8 @@ public class HostResourceUsage {
.project(in.getProject())
.memoryMb(in.getMemoryMb())
.cpu(in.getCpu())
.diskGb(in.getDiskGb())
;
.diskGb(in.getDiskGb());
}
}
private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
@ -96,55 +112,42 @@ public class HostResourceUsage {
}
}
protected HostResourceUsage() {
// we want serializers like Gson to work w/o using sun.misc.Unsafe,
// prohibited in GAE. This also implies fields are not final.
// see http://code.google.com/p/jclouds/issues/detail?id=925
private final String host;
private final String project;
@Named("memory_mb")
private final int memoryMb;
private final int cpu;
@Named("disk_gb")
private final int diskGb;
@ConstructorProperties({
"host", "project", "memory_mb", "cpu", "disk_gb"
})
protected HostResourceUsage(String host, @Nullable String project, int memoryMb, int cpu, int diskGb) {
this.host = checkNotNull(host, "host");
this.project = project;
this.memoryMb = memoryMb;
this.cpu = cpu;
this.diskGb = diskGb;
}
private String host;
private String project;
@SerializedName(value="memory_mb")
private int memoryMb;
private int cpu;
@SerializedName(value="disk_gb")
private int diskGb;
protected HostResourceUsage(Builder<?> builder) {
this.host = checkNotNull(builder.host, "host");
this.project = builder.project;
this.memoryMb = checkNotNull(builder.memoryMb, "memoryMb");
this.cpu = checkNotNull(builder.cpu, "cpu");
this.diskGb = checkNotNull(builder.diskGb, "diskGb");
}
/**
*/
public String getHost() {
return this.host;
}
/**
*/
@Nullable
public String getProject() {
return this.project;
}
/**
*/
public int getMemoryMb() {
return this.memoryMb;
}
/**
*/
public int getCpu() {
return this.cpu;
}
/**
*/
public int getDiskGb() {
return this.diskGb;
}
@ -167,12 +170,8 @@ public class HostResourceUsage {
}
protected ToStringHelper string() {
return Objects.toStringHelper("")
.add("host", host)
.add("project", project)
.add("memoryMb", memoryMb)
.add("cpu", cpu)
.add("diskGb", diskGb);
return Objects.toStringHelper(this)
.add("host", host).add("project", project).add("memoryMb", memoryMb).add("cpu", cpu).add("diskGb", diskGb);
}
@Override

View File

@ -1,4 +1,4 @@
/**
/*
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
@ -18,16 +18,23 @@
*/
package org.jclouds.openstack.nova.v2_0.domain;
import static com.google.common.base.Preconditions.checkNotNull;
import java.beans.ConstructorProperties;
import java.util.Date;
import java.util.Map;
import javax.inject.Named;
import org.jclouds.javax.annotation.Nullable;
import org.jclouds.openstack.v2_0.domain.Link;
import org.jclouds.openstack.v2_0.domain.Resource;
import com.google.common.base.Objects;
import com.google.common.base.Objects.ToStringHelper;
import com.google.common.base.Predicates;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Maps;
import com.google.gson.annotations.SerializedName;
/**
* An image is a collection of files you use to create or rebuild a server. Operators provide
@ -35,9 +42,10 @@ import com.google.gson.annotations.SerializedName;
*
* @author Jeremy Daggett
* @see <a href= "http://docs.openstack.org/api/openstack-compute/1.1/content/Images-d1e4427.html"
* />
*/
/>
*/
public class Image extends Resource {
/**
* In-flight images will have the status attribute set to SAVING and the conditional progress
* element (0-100% completion) will also be returned. Other possible values for the status
@ -74,16 +82,16 @@ public class Image extends Resource {
}
public static abstract class Builder<T extends Builder<T>> extends Resource.Builder<T> {
private Date updated;
private Date created;
private String tenantId;
private String userId;
private Image.Status status;
private int progress;
private int minDisk;
private int minRam;
private Resource server;
private Map<String, String> metadata = ImmutableMap.of();
protected Date updated;
protected Date created;
protected String tenantId;
protected String userId;
protected Image.Status status;
protected int progress;
protected int minDisk;
protected int minRam;
protected Resource server;
protected Map<String, String> metadata = ImmutableMap.of();
/**
* @see Image#getUpdated()
@ -161,12 +169,12 @@ public class Image extends Resource {
* @see Image#getMetadata()
*/
public T metadata(Map<String, String> metadata) {
this.metadata = metadata;
this.metadata = ImmutableMap.copyOf(checkNotNull(metadata, "metadata"));
return self();
}
public Image build() {
return new Image(this);
return new Image(id, name, links, updated, created, tenantId, userId, status, progress, minDisk, minRam, server, metadata);
}
public T fromImage(Image in) {
@ -182,7 +190,6 @@ public class Image extends Resource {
.server(in.getServer())
.metadata(in.getMetadata());
}
}
private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
@ -192,55 +199,59 @@ public class Image extends Resource {
}
}
protected Image() {
// we want serializers like Gson to work w/o using sun.misc.Unsafe,
// prohibited in GAE. This also implies fields are not final.
// see http://code.google.com/p/jclouds/issues/detail?id=925
}
private Date updated;
private Date created;
@SerializedName("tenant_id")
private String tenantId;
@SerializedName("user_id")
private String userId;
private Status status;
private int progress;
private int minDisk;
private int minRam;
private Resource server;
private Map<String, String> metadata = ImmutableMap.of();
protected Image(Builder<?> builder) {
super(builder);
this.updated = builder.updated;
this.created = builder.created;
this.tenantId = builder.tenantId;
this.userId = builder.userId;
this.status = builder.status;
this.progress = builder.progress;
this.minDisk = builder.minDisk;
this.minRam = builder.minRam;
this.server = builder.server;
this.metadata = ImmutableMap.copyOf(builder.metadata);
private final Date updated;
private final Date created;
@Named("tenant_id")
private final String tenantId;
@Named("user_id")
private final String userId;
private final Image.Status status;
private final int progress;
private final int minDisk;
private final int minRam;
private final Resource server;
private final Map<String, String> metadata;
@ConstructorProperties({
"id", "name", "links", "updated", "created", "tenant_id", "user_id", "status", "progress", "minDisk", "minRam", "server", "metadata"
})
protected Image(String id, @Nullable String name, java.util.Set<Link> links, @Nullable Date updated, @Nullable Date created,
String tenantId, @Nullable String userId, @Nullable Status status, int progress, int minDisk, int minRam,
@Nullable Resource server, @Nullable Map<String, String> metadata) {
super(id, name, links);
this.updated = updated;
this.created = created;
this.tenantId = tenantId;
this.userId = userId;
this.status = status;
this.progress = progress;
this.minDisk = minDisk;
this.minRam = minRam;
this.server = server;
this.metadata = metadata == null ? ImmutableMap.<String, String>of() : ImmutableMap.copyOf(Maps.filterValues(metadata, Predicates.notNull()));
}
@Nullable
public Date getUpdated() {
return this.updated;
}
@Nullable
public Date getCreated() {
return this.created;
}
@Nullable
public String getTenantId() {
return this.tenantId;
}
@Nullable
public String getUserId() {
return this.userId;
}
@Nullable
public Status getStatus() {
return this.status;
}
@ -257,28 +268,40 @@ public class Image extends Resource {
return this.minRam;
}
@Nullable
public Resource getServer() {
return this.server;
}
public Map<String, String> getMetadata() {
// in case this was assigned in gson
return ImmutableMap.copyOf(Maps.filterValues(this.metadata, Predicates.notNull()));
return this.metadata;
}
@Override
protected Objects.ToStringHelper string() {
public int hashCode() {
return Objects.hashCode(updated, created, tenantId, userId, status, progress, minDisk, minRam, server, metadata);
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Image that = Image.class.cast(obj);
return super.equals(that) && Objects.equal(this.updated, that.updated)
&& Objects.equal(this.created, that.created)
&& Objects.equal(this.tenantId, that.tenantId)
&& Objects.equal(this.userId, that.userId)
&& Objects.equal(this.status, that.status)
&& Objects.equal(this.progress, that.progress)
&& Objects.equal(this.minDisk, that.minDisk)
&& Objects.equal(this.minRam, that.minRam)
&& Objects.equal(this.server, that.server)
&& Objects.equal(this.metadata, that.metadata);
}
protected ToStringHelper string() {
return super.string()
.add("updated", updated)
.add("created", created)
.add("tenantId", tenantId)
.add("userId", userId)
.add("status", status)
.add("progress", progress)
.add("minDisk", minDisk)
.add("minRam", minRam)
.add("server", server)
.add("metadata", metadata);
.add("updated", updated).add("created", created).add("tenantId", tenantId).add("userId", userId).add("status", status).add("progress", progress).add("minDisk", minDisk).add("minRam", minRam).add("server", server).add("metadata", metadata);
}
}

View File

@ -1,4 +1,4 @@
/**
/*
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
@ -18,86 +18,103 @@
*/
package org.jclouds.openstack.nova.v2_0.domain;
import static com.google.common.base.Objects.equal;
import static com.google.common.base.Preconditions.checkNotNull;
import java.beans.ConstructorProperties;
import javax.inject.Named;
import com.google.common.annotations.Beta;
import com.google.common.base.Objects;
import com.google.common.base.Objects.ToStringHelper;
import com.google.gson.annotations.SerializedName;
/**
* Ingress access to a destination protocol on particular ports
*
* @author Adrian Cole
*/
*/
@Beta
public class Ingress {
public static Builder builder() {
return new Builder();
public static Builder<?> builder() {
return new ConcreteBuilder();
}
public static class Builder {
public Builder<?> toBuilder() {
return new ConcreteBuilder().fromIngress(this);
}
public static abstract class Builder<T extends Builder<T>> {
protected abstract T self();
protected IpProtocol ipProtocol;
protected int fromPort;
protected int toPort;
/**
*
* @see Ingress#getIpProtocol()
*/
public Builder ipProtocol(IpProtocol ipProtocol) {
public T ipProtocol(IpProtocol ipProtocol) {
this.ipProtocol = ipProtocol;
return this;
return self();
}
/**
*
* @see Ingress#getFromPort()
*/
public Builder fromPort(int fromPort) {
public T fromPort(int fromPort) {
this.fromPort = fromPort;
return this;
return self();
}
/**
*
* @see Ingress#getToPort()
*/
public Builder toPort(int toPort) {
public T toPort(int toPort) {
this.toPort = toPort;
return this;
return self();
}
public Ingress build() {
return new Ingress(ipProtocol, fromPort, toPort);
}
public T fromIngress(Ingress in) {
return this
.ipProtocol(in.getIpProtocol())
.fromPort(in.getFromPort())
.toPort(in.getToPort());
}
}
protected Ingress() {
// we want serializers like Gson to work w/o using sun.misc.Unsafe,
// prohibited in GAE. This also implies fields are not final.
// see http://code.google.com/p/jclouds/issues/detail?id=925
private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
@Override
protected ConcreteBuilder self() {
return this;
}
}
@SerializedName(value = "ip_protocol")
protected IpProtocol ipProtocol;
@SerializedName(value = "from_port")
protected int fromPort;
@SerializedName(value = "to_port")
protected int toPort;
@Named("ip_protocol")
private final IpProtocol ipProtocol;
@Named("from_port")
private final int fromPort;
@Named("to_port")
private final int toPort;
@ConstructorProperties({
"ip_protocol", "from_port", "to_port"
})
protected Ingress(IpProtocol ipProtocol, int fromPort, int toPort) {
this.ipProtocol = checkNotNull(ipProtocol, "ipProtocol");
this.fromPort = fromPort;
this.toPort = toPort;
this.ipProtocol = checkNotNull(ipProtocol, "ipProtocol");
}
/**
* destination IP protocol
*/
public IpProtocol getIpProtocol() {
return ipProtocol;
return this.ipProtocol;
}
/**
@ -105,7 +122,7 @@ public class Ingress {
* type number of -1 indicates a wildcard (i.e., any ICMP type number).
*/
public int getFromPort() {
return fromPort;
return this.fromPort;
}
/**
@ -113,19 +130,7 @@ public class Ingress {
* -1 indicates a wildcard (i.e., any ICMP code).
*/
public int getToPort() {
return toPort;
}
@Override
public boolean equals(Object o) {
if (this == o)
return true;
// allow subtypes
if (o == null || !(o instanceof Ingress))
return false;
Ingress that = Ingress.class.cast(o);
return equal(this.ipProtocol, that.ipProtocol) && equal(this.fromPort, that.fromPort)
&& equal(this.toPort, that.toPort);
return this.toPort;
}
@Override
@ -133,13 +138,24 @@ public class Ingress {
return Objects.hashCode(ipProtocol, fromPort, toPort);
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Ingress that = Ingress.class.cast(obj);
return Objects.equal(this.ipProtocol, that.ipProtocol)
&& Objects.equal(this.fromPort, that.fromPort)
&& Objects.equal(this.toPort, that.toPort);
}
protected ToStringHelper string() {
return Objects.toStringHelper(this)
.add("ipProtocol", ipProtocol).add("fromPort", fromPort).add("toPort", toPort);
}
@Override
public String toString() {
return string().toString();
}
protected ToStringHelper string() {
return Objects.toStringHelper("").add("ipProtocol", ipProtocol).add("fromPort", fromPort).add("toPort", toPort);
}
}

View File

@ -1,4 +1,4 @@
/**
/*
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
@ -18,158 +18,169 @@
*/
package org.jclouds.openstack.nova.v2_0.domain;
import static com.google.common.base.Objects.toStringHelper;
import static com.google.common.base.Preconditions.checkNotNull;
import java.beans.ConstructorProperties;
import javax.inject.Named;
import org.jclouds.javax.annotation.Nullable;
import com.google.gson.annotations.SerializedName;
import com.google.common.base.Objects;
import com.google.common.base.Objects.ToStringHelper;
public class KeyPair implements Comparable<KeyPair> {
public static Builder builder() {
return new Builder();
/**
* Class KeyPair
*/
public class KeyPair {
public static Builder<?> builder() {
return new ConcreteBuilder();
}
public Builder toBuilder() {
return builder().fromKeyPair(this);
public Builder<?> toBuilder() {
return new ConcreteBuilder().fromKeyPair(this);
}
public static class Builder {
public static abstract class Builder<T extends Builder<T>> {
protected abstract T self();
private String publicKey;
private String privateKey;
private String userId;
private String name;
private String fingerprint;
protected String publicKey;
protected String privateKey;
protected String userId;
protected String name;
protected String fingerprint;
public Builder publicKey(String publicKey) {
/**
* @see KeyPair#getPublicKey()
*/
public T publicKey(String publicKey) {
this.publicKey = publicKey;
return this;
return self();
}
public Builder privateKey(String privateKey) {
/**
* @see KeyPair#getPrivateKey()
*/
public T privateKey(String privateKey) {
this.privateKey = privateKey;
return this;
return self();
}
public Builder userId(String userId) {
/**
* @see KeyPair#getUserId()
*/
public T userId(String userId) {
this.userId = userId;
return this;
return self();
}
public Builder name(String name) {
/**
* @see KeyPair#getName()
*/
public T name(String name) {
this.name = name;
return this;
return self();
}
public Builder fingerprint(String fingerprint) {
/**
* @see KeyPair#getFingerprint()
*/
public T fingerprint(String fingerprint) {
this.fingerprint = fingerprint;
return this;
return self();
}
public KeyPair build() {
return new KeyPair(publicKey, privateKey, userId, name, fingerprint);
}
public Builder fromKeyPair(KeyPair in) {
return publicKey(in.getPublicKey()).privateKey(in.getPrivateKey()).userId(in.getUserId()).name(in.getName())
public T fromKeyPair(KeyPair in) {
return this
.publicKey(in.getPublicKey())
.privateKey(in.getPrivateKey())
.userId(in.getUserId())
.name(in.getName())
.fingerprint(in.getFingerprint());
}
}
protected KeyPair() {
// we want serializers like Gson to work w/o using sun.misc.Unsafe,
// prohibited in GAE. This also implies fields are not final.
// see http://code.google.com/p/jclouds/issues/detail?id=925
private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
@Override
protected ConcreteBuilder self() {
return this;
}
}
@SerializedName("public_key")
private String publicKey;
@SerializedName("private_key")
private String privateKey;
@SerializedName("user_id")
private String userId;
private String name;
private String fingerprint;
@Named("public_key")
private final String publicKey;
@Named("private_key")
private final String privateKey;
@Named("user_id")
private final String userId;
private final String name;
private final String fingerprint;
protected KeyPair(String publicKey, String privateKey, @Nullable String userId, String name, String fingerprint) {
@ConstructorProperties({
"public_key", "private_key", "user_id", "name", "fingerprint"
})
protected KeyPair(@Nullable String publicKey, @Nullable String privateKey, @Nullable String userId, String name, @Nullable String fingerprint) {
this.publicKey = publicKey;
this.privateKey = privateKey;
this.userId = userId;
this.name = name;
this.name = checkNotNull(name, "name");
this.fingerprint = fingerprint;
}
@Nullable
public String getPublicKey() {
return this.publicKey;
}
@Nullable
public String getPrivateKey() {
return this.privateKey;
}
@Nullable
public String getUserId() {
return this.privateKey;
return this.userId;
}
public String getName() {
return this.name;
}
@Nullable
public String getFingerprint() {
return this.fingerprint;
}
@Override
public int compareTo(KeyPair o) {
return this.fingerprint.compareTo(o.getFingerprint());
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((publicKey == null) ? 0 : publicKey.hashCode());
result = prime * result + ((privateKey == null) ? 0 : privateKey.hashCode());
result = prime * result + ((name == null) ? 0 : name.hashCode());
result = prime * result + ((fingerprint == null) ? 0 : fingerprint.hashCode());
return result;
return Objects.hashCode(publicKey, privateKey, userId, name, fingerprint);
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
KeyPair other = (KeyPair) obj;
if (publicKey == null) {
if (other.publicKey != null)
return false;
} else if (!publicKey.equals(other.publicKey))
return false;
if (privateKey == null) {
if (other.privateKey != null)
return false;
} else if (!privateKey.equals(other.privateKey))
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
if (fingerprint == null) {
if (other.fingerprint != null)
return false;
} else if (!fingerprint.equals(other.fingerprint))
return false;
return true;
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
KeyPair that = KeyPair.class.cast(obj);
return Objects.equal(this.publicKey, that.publicKey)
&& Objects.equal(this.privateKey, that.privateKey)
&& Objects.equal(this.userId, that.userId)
&& Objects.equal(this.name, that.name)
&& Objects.equal(this.fingerprint, that.fingerprint);
}
protected ToStringHelper string() {
return Objects.toStringHelper(this)
.add("publicKey", publicKey).add("privateKey", privateKey).add("userId", userId).add("name", name).add("fingerprint", fingerprint);
}
@Override
public String toString() {
return toStringHelper("").add("userId", userId).add("name", name).add("fingerprint", fingerprint).toString();
return string().toString();
}
}

View File

@ -1,4 +1,4 @@
/**
/*
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
@ -18,11 +18,13 @@
*/
package org.jclouds.openstack.nova.v2_0.domain;
import java.beans.ConstructorProperties;
/**
* Represents the set of limits (quota class) returned by the Quota Class Extension
*
* @see org.jclouds.openstack.nova.v2_0.extensions.QuotaClassClient
*/
*/
public class QuotaClass extends Quotas {
public static Builder<?> builder() {
@ -30,21 +32,18 @@ public class QuotaClass extends Quotas {
}
public Builder<?> toBuilder() {
return new ConcreteBuilder().fromQuotas(this);
return new ConcreteBuilder().fromQuotaClass(this);
}
public static abstract class Builder<T extends Builder<T>> extends Quotas.Builder<T> {
/**
* @see QuotaClass#getId()
*/
@Override
public T id(String id) {
return super.id(id);
}
public QuotaClass build() {
return new QuotaClass(this);
return new QuotaClass(id, metadataItems, injectedFileContentBytes, volumes, gigabytes, ram, floatingIps, instances, injectedFiles, cores, securityGroups, securityGroupRules, keyPairs);
}
public T fromQuotaClass(QuotaClass in) {
return super.fromQuotas(in);
}
}
private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
@ -54,15 +53,12 @@ public class QuotaClass extends Quotas {
}
}
protected QuotaClass(Builder<?> builder) {
super(builder);
@ConstructorProperties({
"id", "metadata_items", "injected_file_content_bytes", "volumes", "gigabytes", "ram", "floating_ips", "instances", "injected_files", "cores", "security_groups", "security_group_rules", "key_pairs"
})
protected QuotaClass(String id, int metadataItems, int injectedFileContentBytes, int volumes, int gigabytes, int ram, int floatingIps, int instances, int injectedFiles, int cores, int securityGroups, int securityGroupRules, int keyPairs) {
super(id, metadataItems, injectedFileContentBytes, volumes, gigabytes, ram, floatingIps, instances, injectedFiles, cores, securityGroups, securityGroupRules, keyPairs);
}
/**
* The id of this Quota Class.
*/
@Override
public String getId() {
return super.getId();
}
}

View File

@ -1,4 +1,4 @@
/**
/*
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
@ -20,15 +20,18 @@ package org.jclouds.openstack.nova.v2_0.domain;
import static com.google.common.base.Preconditions.checkNotNull;
import java.beans.ConstructorProperties;
import javax.inject.Named;
import com.google.common.base.Objects;
import com.google.common.base.Objects.ToStringHelper;
import com.google.gson.annotations.SerializedName;
/**
* Represents the set of limits (quotas) returned by the Quota Extension
*
* @see org.jclouds.openstack.nova.v2_0.extensions.QuotaClient
*/
*/
public class Quotas {
public static Builder<?> builder() {
@ -42,19 +45,19 @@ public class Quotas {
public static abstract class Builder<T extends Builder<T>> {
protected abstract T self();
private String id;
private int metadataItems;
private int injectedFileContentBytes;
private int volumes;
private int gigabytes;
private int ram;
private int floatingIps;
private int instances;
private int injectedFiles;
private int cores;
private int securityGroups;
private int securityGroupRules;
private int keyPairs;
protected String id;
protected int metadataItems;
protected int injectedFileContentBytes;
protected int volumes;
protected int gigabytes;
protected int ram;
protected int floatingIps;
protected int instances;
protected int injectedFiles;
protected int cores;
protected int securityGroups;
protected int securityGroupRules;
protected int keyPairs;
/**
* @see Quotas#getId()
@ -161,11 +164,12 @@ public class Quotas {
}
public Quotas build() {
return new Quotas(this);
return new Quotas(id, metadataItems, injectedFileContentBytes, volumes, gigabytes, ram, floatingIps, instances, injectedFiles, cores, securityGroups, securityGroupRules, keyPairs);
}
public T fromQuotas(Quotas in) {
return this.id(in.getId())
return this
.id(in.getId())
.metadataItems(in.getMetadataItems())
.injectedFileContentBytes(in.getInjectedFileContentBytes())
.volumes(in.getVolumes())
@ -188,48 +192,44 @@ public class Quotas {
}
}
protected Quotas() {
// we want serializers like Gson to work w/o using sun.misc.Unsafe,
// prohibited in GAE. This also implies fields are not final.
// see http://code.google.com/p/jclouds/issues/detail?id=925
}
private final String id;
@Named("metadata_items")
private final int metadataItems;
@Named("injected_file_content_bytes")
private final int injectedFileContentBytes;
private final int volumes;
private final int gigabytes;
private final int ram;
@Named("floating_ips")
private final int floatingIps;
private final int instances;
@Named("injected_files")
private final int injectedFiles;
private final int cores;
@Named("security_groups")
private final int securityGroups;
@Named("security_group_rules")
private final int securityGroupRules;
@Named("key_pairs")
private final int keyPairs;
@SerializedName("id")
private String id;
@SerializedName("metadata_items")
private int metadataItems;
@SerializedName("injected_file_content_bytes")
private int injectedFileContentBytes;
private int volumes;
private int gigabytes;
private int ram;
@SerializedName("floating_ips")
private int floatingIps;
private int instances;
@SerializedName("injected_files")
private int injectedFiles;
private int cores;
@SerializedName("security_groups")
private int securityGroups;
@SerializedName("security_group_rules")
private int securityGroupRules;
@SerializedName("key_pairs")
private int keyPairs;
protected Quotas(Builder<?> builder) {
this.id = checkNotNull(builder.id, "id");
this.metadataItems = checkNotNull(builder.metadataItems, "metadataItems");
this.injectedFileContentBytes = checkNotNull(builder.injectedFileContentBytes, "injectedFileContentBytes");
this.volumes = checkNotNull(builder.volumes, "volumes");
this.gigabytes = checkNotNull(builder.gigabytes, "gigabytes");
this.ram = checkNotNull(builder.ram, "ram");
this.floatingIps = checkNotNull(builder.floatingIps, "floatingIps");
this.instances = checkNotNull(builder.instances, "instances");
this.injectedFiles = checkNotNull(builder.injectedFiles, "injectedFiles");
this.cores = checkNotNull(builder.cores, "cores");
this.securityGroups = checkNotNull(builder.securityGroups, "securityGroups");
this.securityGroupRules = checkNotNull(builder.securityGroupRules, "securityGroupRules");
this.keyPairs = checkNotNull(builder.keyPairs, "keyPairs");
@ConstructorProperties({
"id", "metadata_items", "injected_file_content_bytes", "volumes", "gigabytes", "ram", "floating_ips", "instances", "injected_files", "cores", "security_groups", "security_group_rules", "key_pairs"
})
protected Quotas(String id, int metadataItems, int injectedFileContentBytes, int volumes, int gigabytes, int ram, int floatingIps, int instances, int injectedFiles, int cores, int securityGroups, int securityGroupRules, int keyPairs) {
this.id = checkNotNull(id, "id");
this.metadataItems = metadataItems;
this.injectedFileContentBytes = injectedFileContentBytes;
this.volumes = volumes;
this.gigabytes = gigabytes;
this.ram = ram;
this.floatingIps = floatingIps;
this.instances = instances;
this.injectedFiles = injectedFiles;
this.cores = cores;
this.securityGroups = securityGroups;
this.securityGroupRules = securityGroupRules;
this.keyPairs = keyPairs;
}
/**
@ -298,7 +298,6 @@ public class Quotas {
/**
* @return the limit of the number of security groups that can be created for the tenant
*
* @see org.jclouds.openstack.nova.v2_0.extensions.SecurityGroupClient
*/
public int getSecurityGroups() {
@ -307,7 +306,6 @@ public class Quotas {
/**
* @return the limit of the number of security group rules that can be created for the tenant
*
* @see org.jclouds.openstack.nova.v2_0.extensions.SecurityGroupClient
*/
public int getSecurityGroupRules() {
@ -316,7 +314,6 @@ public class Quotas {
/**
* @return the limit of the number of key pairs that can be created for the tenant
*
* @see org.jclouds.openstack.nova.v2_0.extensions.KeyPairClient
*/
public int getKeyPairs() {
@ -349,20 +346,8 @@ public class Quotas {
}
protected ToStringHelper string() {
return Objects.toStringHelper("")
.add("id", id)
.add("metadataItems", metadataItems)
.add("injectedFileContentBytes", injectedFileContentBytes)
.add("volumes", volumes)
.add("gigabytes", gigabytes)
.add("ram", ram)
.add("floatingIps", floatingIps)
.add("instances", instances)
.add("injectedFiles", injectedFiles)
.add("cores", cores)
.add("securityGroups", securityGroups)
.add("securityGroupRules", securityGroupRules)
.add("keyPairs", keyPairs);
return Objects.toStringHelper(this)
.add("id", id).add("metadataItems", metadataItems).add("injectedFileContentBytes", injectedFileContentBytes).add("volumes", volumes).add("gigabytes", gigabytes).add("ram", ram).add("floatingIps", floatingIps).add("instances", instances).add("injectedFiles", injectedFiles).add("cores", cores).add("securityGroups", securityGroups).add("securityGroupRules", securityGroupRules).add("keyPairs", keyPairs);
}
@Override

View File

@ -1,4 +1,4 @@
/**
/*
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
@ -18,107 +18,118 @@
*/
package org.jclouds.openstack.nova.v2_0.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 java.beans.ConstructorProperties;
import java.util.Set;
import javax.inject.Named;
import org.jclouds.javax.annotation.Nullable;
import com.google.common.base.Objects;
import com.google.common.base.Objects.ToStringHelper;
import com.google.common.collect.ImmutableSet;
import com.google.gson.annotations.SerializedName;
/**
* Defines a security group
*
*/
*/
public class SecurityGroup {
public static Builder builder() {
return new Builder();
public static Builder<?> builder() {
return new ConcreteBuilder();
}
public Builder toBuilder() {
return builder().fromSecurityGroup(this);
public Builder<?> toBuilder() {
return new ConcreteBuilder().fromSecurityGroup(this);
}
public static class Builder {
public static abstract class Builder<T extends Builder<T>> {
protected abstract T self();
private String id;
private String tenantId;
private String name;
private String description;
private Set<SecurityGroupRule> rules = ImmutableSet.<SecurityGroupRule> of();
protected String id;
protected String tenantId;
protected String name;
protected String description;
protected Set<SecurityGroupRule> rules = ImmutableSet.of();
public Builder id(String id) {
/**
* @see SecurityGroup#getId()
*/
public T id(String id) {
this.id = id;
return this;
return self();
}
public Builder tenantId(String tenantId) {
/**
* @see SecurityGroup#getTenantId()
*/
public T tenantId(String tenantId) {
this.tenantId = tenantId;
return this;
return self();
}
public Builder name(String name) {
/**
* @see SecurityGroup#getName()
*/
public T name(String name) {
this.name = name;
return this;
return self();
}
public Builder description(String description) {
/**
* @see SecurityGroup#getDescription()
*/
public T description(String description) {
this.description = description;
return this;
return self();
}
/**
*
* @see #getSecurityGroupNames
* @see SecurityGroup#getRules()
*/
public Builder rules(SecurityGroupRule... rules) {
return rules(ImmutableSet.copyOf(checkNotNull(rules, "rules")));
}
/**
* @see #getSecurityGroupNames
*/
public Builder rules(Iterable<SecurityGroupRule> rules) {
public T rules(Set<SecurityGroupRule> rules) {
this.rules = ImmutableSet.copyOf(checkNotNull(rules, "rules"));
return this;
return self();
}
public Builder rules(Set<SecurityGroupRule> rules) {
this.rules = rules;
return this;
public T rules(SecurityGroupRule... in) {
return rules(ImmutableSet.copyOf(in));
}
public SecurityGroup build() {
return new SecurityGroup(id, tenantId, name, description, rules);
}
public Builder fromSecurityGroup(SecurityGroup in) {
return id(in.getId()).tenantId(in.getTenantId()).name(in.getName()).description(in.getDescription()).rules(
in.getRules());
public T fromSecurityGroup(SecurityGroup in) {
return this
.id(in.getId())
.tenantId(in.getTenantId())
.name(in.getName())
.description(in.getDescription())
.rules(in.getRules());
}
}
private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
@Override
protected ConcreteBuilder self() {
return this;
}
}
protected SecurityGroup() {
// we want serializers like Gson to work w/o using sun.misc.Unsafe,
// prohibited in GAE. This also implies fields are not final.
// see http://code.google.com/p/jclouds/issues/detail?id=925
}
private final String id;
@Named("tenant_id")
private final String tenantId;
private final String name;
private final String description;
private final Set<SecurityGroupRule> rules;
protected String id;
@SerializedName("tenant_id")
protected String tenantId;
protected String name;
protected String description;
protected Set<SecurityGroupRule> rules = ImmutableSet.of();
protected SecurityGroup(String id, String tenantId, @Nullable String name, @Nullable String description,
Set<SecurityGroupRule> rules) {
this.id = id;
@ConstructorProperties({
"id", "tenant_id", "name", "description", "rules"
})
protected SecurityGroup(String id, @Nullable String tenantId, @Nullable String name, @Nullable String description, Set<SecurityGroupRule> rules) {
this.id = checkNotNull(id, "id");
this.tenantId = tenantId;
this.name = name;
this.description = description;
@ -130,44 +141,50 @@ public class SecurityGroup {
return this.id;
}
@Nullable
public String getTenantId() {
return this.tenantId;
}
@Nullable
public String getName() {
return this.name;
}
@Nullable
public String getDescription() {
return this.description;
}
public Set<SecurityGroupRule> getRules() {
return this.rules == null ? ImmutableSet.<SecurityGroupRule> of() : rules;
}
@Override
public boolean equals(Object object) {
if (this == object) {
return true;
}
if (object instanceof SecurityGroup) {
final SecurityGroup other = SecurityGroup.class.cast(object);
return equal(tenantId, other.tenantId) && equal(id, other.id) && equal(name, other.name);
} else {
return false;
}
return this.rules;
}
@Override
public int hashCode() {
return Objects.hashCode(tenantId, id, name);
return Objects.hashCode(id, tenantId, name, description, rules);
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
SecurityGroup that = SecurityGroup.class.cast(obj);
return Objects.equal(this.id, that.id)
&& Objects.equal(this.tenantId, that.tenantId)
&& Objects.equal(this.name, that.name)
&& Objects.equal(this.description, that.description)
&& Objects.equal(this.rules, that.rules);
}
protected ToStringHelper string() {
return Objects.toStringHelper(this)
.add("id", id).add("tenantId", tenantId).add("name", name).add("description", description).add("rules", rules);
}
@Override
public String toString() {
return toStringHelper("").add("tenantId", getTenantId()).add("id", getId()).add("name", getName()).add(
"description", description).add("rules", getRules()).toString();
return string().toString();
}
}

View File

@ -1,4 +1,4 @@
/**
/*
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
@ -18,99 +18,24 @@
*/
package org.jclouds.openstack.nova.v2_0.domain;
import static com.google.common.base.Objects.toStringHelper;
import static com.google.common.base.Preconditions.checkNotNull;
import java.beans.ConstructorProperties;
import javax.inject.Named;
import org.jclouds.javax.annotation.Nullable;
import com.google.common.base.Objects;
import com.google.common.base.Objects.ToStringHelper;
import com.google.common.collect.ForwardingObject;
import com.google.gson.annotations.SerializedName;
/**
* Defines a security group rule
*
*/
public class SecurityGroupRule extends Ingress {
public static Builder builder() {
return new Builder();
}
public Builder toBuilder() {
return builder().fromSecurityGroupRule(this);
}
public static class Builder extends Ingress.Builder {
private String id;
private String parentGroupId;
private TenantIdAndName group;
private String ipRange;
public Builder id(String id) {
this.id = id;
return this;
}
public Builder group(TenantIdAndName group) {
this.group = group;
return this;
}
public Builder parentGroupId(String parentGroupId) {
this.parentGroupId = parentGroupId;
return this;
}
public Builder ipRange(String ipRange) {
this.ipRange = ipRange;
return this;
}
@Override
public SecurityGroupRule build() {
return new SecurityGroupRule(ipProtocol, fromPort, toPort, id, parentGroupId, group, ipRange);
}
public Builder fromSecurityGroupRule(SecurityGroupRule in) {
return id(in.getId()).fromPort(in.getFromPort()).group(in.getGroup()).ipProtocol(in.getIpProtocol()).toPort(
in.getToPort()).parentGroupId(in.getParentGroupId()).ipRange(in.getIpRange());
}
@Override
public Builder ipProtocol(IpProtocol ipProtocol) {
super.ipProtocol(ipProtocol);
return this;
}
@Override
public Builder fromPort(int fromPort) {
super.fromPort(fromPort);
return this;
}
@Override
public Builder toPort(int toPort) {
super.toPort(toPort);
return this;
}
}
protected SecurityGroupRule() {
// we want serializers like Gson to work w/o using sun.misc.Unsafe,
// prohibited in GAE. This also implies fields are not final.
// see http://code.google.com/p/jclouds/issues/detail?id=925
}
protected String id;
protected TenantIdAndName group;
@SerializedName(value = "parent_group_id")
protected String parentGroupId;
@SerializedName(value = "ip_range")
protected Cidr ipRange;
// type to get around unnecessary structure
private static class Cidr extends ForwardingObject {
public static class Cidr extends ForwardingObject {
private String cidr;
private Cidr(String cidr) {
@ -123,18 +48,88 @@ public class SecurityGroupRule extends Ingress {
}
}
protected SecurityGroupRule(IpProtocol ipProtocol, int fromPort, int toPort, String id, String parentGroupId,
@Nullable TenantIdAndName group, @Nullable String ipRange) {
super(ipProtocol, fromPort, toPort);
this.parentGroupId = checkNotNull(parentGroupId, "parentGroupId");
this.id = checkNotNull(id, "id");
this.group = group;
this.ipRange = ipRange != null ? new Cidr(ipRange) : null;
public static Builder<?> builder() {
return new ConcreteBuilder();
}
public String getParentGroupId() {
return this.parentGroupId;
public Builder<?> toBuilder() {
return new ConcreteBuilder().fromSecurityGroupRule(this);
}
public static abstract class Builder<T extends Builder<T>> extends Ingress.Builder<T> {
protected String id;
protected TenantIdAndName group;
protected String parentGroupId;
protected String ipRange;
/**
* @see SecurityGroupRule#getId()
*/
public T id(String id) {
this.id = id;
return self();
}
/**
* @see SecurityGroupRule#getGroup()
*/
public T group(TenantIdAndName group) {
this.group = group;
return self();
}
/**
* @see SecurityGroupRule#getParentGroupId()
*/
public T parentGroupId(String parentGroupId) {
this.parentGroupId = parentGroupId;
return self();
}
/**
* @see SecurityGroupRule#getIpRange()
*/
public T ipRange(String ipRange) {
this.ipRange = ipRange;
return self();
}
public SecurityGroupRule build() {
return new SecurityGroupRule(ipProtocol, fromPort, toPort, id, group, parentGroupId, ipRange == null ? null : new Cidr(ipRange));
}
public T fromSecurityGroupRule(SecurityGroupRule in) {
return super.fromIngress(in)
.id(in.getId())
.group(in.getGroup())
.parentGroupId(in.getParentGroupId())
.ipRange(in.getIpRange());
}
}
private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
@Override
protected ConcreteBuilder self() {
return this;
}
}
private final String id;
private final TenantIdAndName group;
@Named("parent_group_id")
private final String parentGroupId;
@Named("ip_range")
private final SecurityGroupRule.Cidr ipRange;
@ConstructorProperties({
"ip_protocol", "from_port", "to_port", "id", "group", "parent_group_id", "ip_range"
})
protected SecurityGroupRule(IpProtocol ipProtocol, int fromPort, int toPort, String id, @Nullable TenantIdAndName group, String parentGroupId, @Nullable Cidr ipRange) {
super(ipProtocol, fromPort, toPort);
this.id = checkNotNull(id, "id");
this.group = group;
this.parentGroupId = checkNotNull(parentGroupId, "parentGroupId");
this.ipRange = ipRange;
}
public String getId() {
@ -143,73 +138,37 @@ public class SecurityGroupRule extends Ingress {
@Nullable
public TenantIdAndName getGroup() {
if (this.group == null || this.group.getName() == null)
return null;
return this.group;
}
public String getParentGroupId() {
return this.parentGroupId;
}
@Nullable
public String getIpRange() {
return this.ipRange == null ? null : ipRange.cidr;
return ipRange == null ? null : ipRange.cidr;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + fromPort;
result = prime * result + ((group == null) ? 0 : group.hashCode());
result = prime * result + ((id == null) ? 0 : id.hashCode());
result = prime * result + ((ipProtocol == null) ? 0 : ipProtocol.hashCode());
result = prime * result + ((ipRange == null) ? 0 : ipRange.hashCode());
result = prime * result + ((parentGroupId == null) ? 0 : parentGroupId.hashCode());
result = prime * result + toPort;
return result;
return Objects.hashCode(id, group, parentGroupId, ipRange);
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
SecurityGroupRule other = (SecurityGroupRule) obj;
if (fromPort != other.fromPort)
return false;
if (group == null) {
if (other.group != null)
return false;
} else if (!group.equals(other.group))
return false;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
if (ipProtocol != other.ipProtocol)
return false;
if (ipRange == null) {
if (other.ipRange != null)
return false;
} else if (!ipRange.equals(other.ipRange))
return false;
if (parentGroupId == null) {
if (other.parentGroupId != null)
return false;
} else if (!parentGroupId.equals(other.parentGroupId))
return false;
if (toPort != other.toPort)
return false;
return true;
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
SecurityGroupRule that = SecurityGroupRule.class.cast(obj);
return super.equals(that) && Objects.equal(this.id, that.id)
&& Objects.equal(this.group, that.group)
&& Objects.equal(this.parentGroupId, that.parentGroupId)
&& Objects.equal(this.ipRange, that.ipRange);
}
@Override
public String toString() {
return toStringHelper("").add("id", id).add("fromPort", fromPort).add("group", getGroup()).add("ipProtocol",
ipProtocol).add("toPort", toPort).add("parentGroupId", parentGroupId).add("ipRange", getIpRange())
.toString();
protected ToStringHelper string() {
return super.string()
.add("id", id).add("group", group).add("parentGroupId", parentGroupId).add("ipRange", ipRange);
}
}

View File

@ -1,4 +1,4 @@
/**
/*
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
@ -20,24 +20,28 @@ package org.jclouds.openstack.nova.v2_0.domain;
import static com.google.common.base.Preconditions.checkNotNull;
import java.beans.ConstructorProperties;
import java.util.Date;
import java.util.Map;
import java.util.Set;
import javax.inject.Named;
import org.jclouds.javax.annotation.Nullable;
import org.jclouds.openstack.nova.v2_0.extensions.KeyPairClient;
import org.jclouds.openstack.v2_0.domain.Link;
import org.jclouds.openstack.v2_0.domain.Resource;
import org.jclouds.util.Multimaps2;
import com.google.common.base.Objects;
import com.google.common.base.Objects.ToStringHelper;
import com.google.common.base.Optional;
import com.google.common.base.Predicates;
import com.google.common.base.Strings;
import com.google.common.base.Objects.ToStringHelper;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableMultimap;
import com.google.common.collect.Maps;
import com.google.common.collect.Multimap;
import com.google.gson.annotations.SerializedName;
/**
* A server is a virtual machine instance in the compute system. Flavor and image are requisite
@ -53,7 +57,7 @@ public class Server extends Resource {
/**
* Servers contain a status attribute that can be used as an indication of the current server
* state. Servers with an ACTIVE status are available for use.
*
* <p/>
* Other possible values for the status attribute include: BUILD, REBUILD, SUSPENDED, RESIZE,
* VERIFY_RESIZE, REVERT_RESIZE, PASSWORD, REBOOT, HARD_REBOOT, DELETED, UNKNOWN, and ERROR.
*
@ -76,7 +80,6 @@ public class Server extends Resource {
}
}
public static Builder<?> builder() {
return new ConcreteBuilder();
}
@ -86,27 +89,24 @@ public class Server extends Resource {
}
public static abstract class Builder<T extends Builder<T>> extends Resource.Builder<T> {
private String uuid;
private String tenantId;
private String userId;
private Date updated;
private Date created;
private String hostId;
private String accessIPv4;
private String accessIPv6;
private Server.Status status;
private Resource image;
private Resource flavor;
private String keyName;
private String configDrive;
private Multimap<String, Address> addresses = ImmutableMultimap.of();
private Map<String, String> metadata = ImmutableMap.of();
// Extended status extension
private ServerExtendedStatus extendedStatus;
// Extended server attributes extension
private ServerExtendedAttributes extendedAttributes;
// Disk Config extension
private String diskConfig;
protected String uuid;
protected String tenantId;
protected String userId;
protected Date updated;
protected Date created;
protected String hostId;
protected String accessIPv4;
protected String accessIPv6;
protected Server.Status status;
protected Resource image;
protected Resource flavor;
protected String keyName;
protected String configDrive;
protected Multimap<String, Address> addresses = ImmutableMultimap.of();
protected Map<String, String> metadata = ImmutableMap.of();
protected ServerExtendedStatus extendedStatus;
protected ServerExtendedAttributes extendedAttributes;
protected String diskConfig;
/**
* @see Server#getUuid()
@ -224,7 +224,7 @@ public class Server extends Resource {
* @see Server#getMetadata()
*/
public T metadata(Map<String, String> metadata) {
this.metadata = metadata;
this.metadata = ImmutableMap.copyOf(checkNotNull(metadata, "metadata"));
return self();
}
@ -239,7 +239,7 @@ public class Server extends Resource {
/**
* @see Server#getExtendedAttributes()
*/
public T extraAttributes(ServerExtendedAttributes extendedAttributes) {
public T extendedAttributes(ServerExtendedAttributes extendedAttributes) {
this.extendedAttributes = extendedAttributes;
return self();
}
@ -253,7 +253,9 @@ public class Server extends Resource {
}
public Server build() {
return new Server(this);
return new Server(id, name, links, uuid, tenantId, userId, updated, created, hostId, accessIPv4, accessIPv6,
status, image, flavor, keyName, configDrive, Multimaps2.toOldSchool(addresses), metadata, extendedStatus,
extendedAttributes, diskConfig);
}
public T fromServer(Server in) {
@ -274,7 +276,7 @@ public class Server extends Resource {
.addresses(in.getAddresses())
.metadata(in.getMetadata())
.extendedStatus(in.getExtendedStatus().orNull())
.extraAttributes(in.getExtendedAttributes().orNull())
.extendedAttributes(in.getExtendedAttributes().orNull())
.diskConfig(in.getDiskConfig().orNull());
}
}
@ -286,62 +288,58 @@ public class Server extends Resource {
}
}
protected Server() {
// we want serializers like Gson to work w/o using sun.misc.Unsafe,
// prohibited in GAE. This also implies fields are not final.
// see http://code.google.com/p/jclouds/issues/detail?id=925
}
private final String uuid;
@Named("tenant_id")
private final String tenantId;
@Named("user_id")
private final String userId;
private final Date updated;
private final Date created;
private final String hostId;
private final String accessIPv4;
private final String accessIPv6;
private final Server.Status status;
private final Resource image;
private final Resource flavor;
@Named("key_name")
private final String keyName;
@Named("config_drive")
private final String configDrive;
private final Map<String, Set<Address>> addresses;
private final Map<String, String> metadata;
private final Optional<ServerExtendedStatus> extendedStatus;
private final Optional<ServerExtendedAttributes> extendedAttributes;
@Named("OS-DCF:diskConfig")
private final Optional<String> diskConfig;
private String uuid;
@SerializedName("tenant_id")
private String tenantId;
@SerializedName("user_id")
private String userId;
private Date updated;
private Date created;
private String hostId;
private String accessIPv4;
private String accessIPv6;
private Status status;
private Resource image;
private Resource flavor;
@SerializedName("key_name")
private String keyName;
@SerializedName("config_drive")
private String configDrive;
// TODO: get gson multimap adapter!
private Map<String, Set<Address>> addresses = ImmutableMap.of();
private Map<String, String> metadata = ImmutableMap.of();
// Extended status extension
// @Prefixed("OS-EXT-STS:")
private Optional<ServerExtendedStatus> extendedStatus = Optional.absent();
// Extended server attributes extension
// @Prefixed("OS-EXT-SRV-ATTR:")
private Optional<ServerExtendedAttributes> extendedAttributes = Optional.absent();
// Disk Config extension
@SerializedName("OS-DCF:diskConfig")
private Optional<String> diskConfig = Optional.absent();
protected Server(Builder<?> builder) {
super(builder);
this.uuid = builder.uuid; // TODO: see what version this came up in
this.tenantId = checkNotNull(builder.tenantId, "tenantId");
this.userId = checkNotNull(builder.userId, "userId");
this.updated = checkNotNull(builder.updated, "updated");
this.created = checkNotNull(builder.created, "created");
this.hostId = builder.hostId;
this.accessIPv4 = builder.accessIPv4;
this.accessIPv6 = builder.accessIPv6;
this.status = checkNotNull(builder.status, "status");
this.configDrive = builder.configDrive;
this.image = checkNotNull(builder.image, "image");
this.flavor = checkNotNull(builder.flavor, "flavor");
this.metadata = Maps.newHashMap(builder.metadata);
this.addresses = Multimaps2.toOldSchool(ImmutableMultimap.copyOf(checkNotNull(builder.addresses, "addresses")));
this.keyName = builder.keyName;
this.extendedStatus = Optional.fromNullable(builder.extendedStatus);
this.extendedAttributes = Optional.fromNullable(builder.extendedAttributes);
this.diskConfig = builder.diskConfig == null ? Optional.<String>absent() : Optional.of(builder.diskConfig);
@ConstructorProperties({
"id", "name", "links", "uuid", "tenant_id", "user_id", "updated", "created", "hostId", "accessIPv4", "accessIPv6", "status", "image", "flavor", "key_name", "config_drive", "addresses", "metadata", "extendedStatus", "extendedAttributes", "OS-DCF:diskConfig"
})
protected Server(String id, @Nullable String name, java.util.Set<Link> links, @Nullable String uuid, String tenantId,
String userId, @Nullable Date updated, Date created, @Nullable String hostId, @Nullable String accessIPv4,
@Nullable String accessIPv6, Server.Status status, Resource image, Resource flavor, @Nullable String keyName,
@Nullable String configDrive, Map<String, Set<Address>> addresses, Map<String, String> metadata,
@Nullable ServerExtendedStatus extendedStatus, @Nullable ServerExtendedAttributes extendedAttributes,
@Nullable String diskConfig) {
super(id, name, links);
this.uuid = uuid;
this.tenantId = checkNotNull(tenantId, "tenantId");
this.userId = checkNotNull(userId, "userId");
this.updated = updated;
this.created = checkNotNull(created, "created");
this.hostId = Strings.emptyToNull(hostId);
this.accessIPv4 = Strings.emptyToNull(accessIPv4);
this.accessIPv6 = Strings.emptyToNull(accessIPv6);
this.status = checkNotNull(status, "status");
this.image = checkNotNull(image, "image");
this.flavor = checkNotNull(flavor, "flavor");
this.keyName = Strings.emptyToNull(keyName);
this.configDrive = Strings.emptyToNull(configDrive);
this.addresses = ImmutableMap.copyOf(checkNotNull(addresses, "addresses"));
this.metadata = ImmutableMap.copyOf(checkNotNull(metadata, "metadata"));
this.extendedStatus = Optional.fromNullable(extendedStatus);
this.extendedAttributes = Optional.fromNullable(extendedAttributes);
this.diskConfig = Optional.fromNullable(diskConfig);
}
/**
@ -362,6 +360,7 @@ public class Server extends Resource {
return this.userId;
}
@Nullable
public Date getUpdated() {
return this.updated;
}
@ -375,17 +374,17 @@ public class Server extends Resource {
*/
@Nullable
public String getHostId() {
return Strings.emptyToNull(this.hostId);
return this.hostId;
}
@Nullable
public String getAccessIPv4() {
return Strings.emptyToNull(this.accessIPv4);
return this.accessIPv4;
}
@Nullable
public String getAccessIPv6() {
return Strings.emptyToNull(this.accessIPv6);
return this.accessIPv6;
}
public Status getStatus() {
@ -394,7 +393,7 @@ public class Server extends Resource {
@Nullable
public String getConfigDrive() {
return Strings.emptyToNull(this.configDrive);
return this.configDrive;
}
public Resource getImage() {
@ -426,7 +425,6 @@ public class Server extends Resource {
return keyName;
}
/**
* Retrieves the extended server status fields (alias "OS-EXT-STS")
* <p/>
@ -468,11 +466,12 @@ public class Server extends Resource {
@Override
protected ToStringHelper string() {
return super.string().add("uuid", uuid).add("tenantId", tenantId).add(
"userId", userId).add("hostId", getHostId()).add("updated", updated).add("created", created).add(
"accessIPv4", getAccessIPv4()).add("accessIPv6", getAccessIPv6()).add("status", status).add(
"configDrive", getConfigDrive()).add("image", image).add("flavor", flavor).add("metadata", metadata)
.add("addresses", getAddresses()).add("diskConfig", diskConfig)
.add("extendedStatus", extendedStatus).add("extendedAttributes", extendedAttributes);
return super.string()
.add("uuid", uuid).add("tenantId", tenantId).add("userId", userId).add("updated", updated).add("created", created)
.add("hostId", hostId).add("accessIPv4", accessIPv4).add("accessIPv6", accessIPv6).add("status", status).add("image", image)
.add("flavor", flavor).add("keyName", keyName).add("configDrive", configDrive).add("addresses", addresses)
.add("metadata", metadata).add("extendedStatus", extendedStatus).add("extendedAttributes", extendedAttributes)
.add("diskConfig", diskConfig);
}
}

View File

@ -1,4 +1,4 @@
/**
/*
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
@ -18,8 +18,16 @@
*/
package org.jclouds.openstack.nova.v2_0.domain;
import static com.google.common.base.Preconditions.checkNotNull;
import java.beans.ConstructorProperties;
import java.util.Set;
import org.jclouds.javax.annotation.Nullable;
import org.jclouds.openstack.v2_0.domain.Link;
import org.jclouds.openstack.v2_0.domain.Resource;
import com.google.common.base.Objects;
import com.google.common.base.Objects.ToStringHelper;
/**
@ -27,9 +35,9 @@ import com.google.common.base.Objects.ToStringHelper;
*
* @author Adam Lowe
* @see <a href=
* "http://docs.openstack.org/api/openstack-compute/1.1/content/Get_Server_Details-d1e2623.html"
* />
*/
"http://docs.openstack.org/api/openstack-compute/1.1/content/Get_Server_Details-d1e2623.html"
/>
*/
public class ServerCreated extends Resource {
public static Builder<?> builder() {
@ -41,7 +49,7 @@ public class ServerCreated extends Resource {
}
public static abstract class Builder<T extends Builder<T>> extends Resource.Builder<T> {
private String adminPass;
protected String adminPass;
/**
* @see ServerCreated#getAdminPass()
@ -51,12 +59,13 @@ public class ServerCreated extends Resource {
return self();
}
public T fromServerCreated(ServerCreated in) {
return super.fromResource(in).adminPass(in.getAdminPass());
public ServerCreated build() {
return new ServerCreated(id, name, links, adminPass);
}
public ServerCreated build() {
return new ServerCreated(this);
public T fromServerCreated(ServerCreated in) {
return super.fromResource(in)
.adminPass(in.getAdminPass());
}
}
@ -67,30 +76,39 @@ public class ServerCreated extends Resource {
}
}
protected ServerCreated() {
// we want serializers like Gson to work w/o using sun.misc.Unsafe,
// prohibited in GAE. This also implies fields are not final.
// see http://code.google.com/p/jclouds/issues/detail?id=925
}
private final String adminPass;
private String adminPass;
protected ServerCreated(Builder<?> builder) {
super(builder);
this.adminPass = builder.adminPass;
@ConstructorProperties({
"id", "name", "links", "adminPass"
})
protected ServerCreated(String id, @Nullable String name, Set<Link> links, String adminPass) {
super(id, name, links);
this.adminPass = checkNotNull(adminPass, "adminPass");
}
/**
* @return the administrative password for this server. Note: this is not available in Server responses.
*/
public String getAdminPass() {
return adminPass;
return this.adminPass;
}
// hashCode/equals from super is ok
@Override
protected ToStringHelper string() {
return super.string().add("adminPass", adminPass);
public int hashCode() {
return Objects.hashCode(adminPass);
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
ServerCreated that = ServerCreated.class.cast(obj);
return super.equals(that) && Objects.equal(this.adminPass, that.adminPass);
}
protected ToStringHelper string() {
return super.string()
.add("adminPass", adminPass);
}
}

View File

@ -1,4 +1,4 @@
/**
/*
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
@ -18,37 +18,43 @@
*/
package org.jclouds.openstack.nova.v2_0.domain;
import java.beans.ConstructorProperties;
import javax.inject.Named;
import org.jclouds.javax.annotation.Nullable;
import com.google.common.base.Objects;
import com.google.common.base.Objects.ToStringHelper;
import com.google.gson.annotations.SerializedName;
/**
* Additional attributes delivered by Extended Server Attributes extension (alias "OS-EXT-SRV-ATTR")
*
* @author Adam Lowe
* @see <a href=
* "http://nova.openstack.org/api/nova.api.openstack.compute.contrib.extended_server_attributes.html"
* />
"http://nova.openstack.org/api/nova.api.openstack.compute.contrib.extended_server_attributes.html"
/>
* @see org.jclouds.openstack.nova.v2_0.features.ExtensionClient#getExtensionByAlias
* @see org.jclouds.openstack.nova.v1_1.extensions.ExtensionNamespaces#EXTENDED_STATUS (extended status?)
*/
* @see org.jclouds.openstack.nova.v2_0.extensions.ExtensionNamespaces#EXTENDED_STATUS
*/
public class ServerExtendedAttributes {
public static final String PREFIX = "OS-EXT-SRV-ATTR:";
public static String PREFIX;
public static Builder<?> builder() {
return new ConcreteBuilder();
}
public Builder<?> toBuilder() {
return new ConcreteBuilder().fromServerExtraAttributes(this);
return new ConcreteBuilder().fromServerExtendedAttributes(this);
}
public static abstract class Builder<T extends Builder<T>> {
protected abstract T self();
private String instanceName;
private String hostName;
private String hypervisorHostName;
protected String instanceName;
protected String hostName;
protected String hypervisorHostName;
/**
* @see ServerExtendedAttributes#getInstanceName()
@ -69,20 +75,20 @@ public class ServerExtendedAttributes {
/**
* @see ServerExtendedAttributes#getHypervisorHostName()
*/
public T hypervisorHostame(String hypervisorHostName) {
public T hypervisorHostName(String hypervisorHostName) {
this.hypervisorHostName = hypervisorHostName;
return self();
}
public ServerExtendedAttributes build() {
return new ServerExtendedAttributes(this);
return new ServerExtendedAttributes(instanceName, hostName, hypervisorHostName);
}
public T fromServerExtraAttributes(ServerExtendedAttributes in) {
public T fromServerExtendedAttributes(ServerExtendedAttributes in) {
return this
.instanceName(in.getInstanceName())
.hostName(in.getHostName())
.hypervisorHostame(in.getHypervisorHostName());
.hypervisorHostName(in.getHypervisorHostName());
}
}
@ -93,33 +99,33 @@ public class ServerExtendedAttributes {
}
}
protected ServerExtendedAttributes() {
// we want serializers like Gson to work w/o using sun.misc.Unsafe,
// prohibited in GAE. This also implies fields are not final.
// see http://code.google.com/p/jclouds/issues/detail?id=925
}
@SerializedName(value=PREFIX + "instance_name")
private String instanceName;
@SerializedName(value=PREFIX + "host")
private String hostName;
@SerializedName(value=PREFIX + "hypervisor_hostname")
private String hypervisorHostName;
protected ServerExtendedAttributes(Builder<?> builder) {
this.instanceName = builder.instanceName;
this.hostName = builder.hostName;
this.hypervisorHostName = builder.hypervisorHostName;
@Named("OS-EXT-SRV-ATTR:instance_name")
private final String instanceName;
@Named("OS-EXT-SRV-ATTR:host")
private final String hostName;
@Named("OS-EXT-SRV-ATTR:hypervisor_hostname")
private final String hypervisorHostName;
@ConstructorProperties({
"OS-EXT-SRV-ATTR:instance_name", "OS-EXT-SRV-ATTR:host", "OS-EXT-SRV-ATTR:hypervisor_hostname"
})
protected ServerExtendedAttributes(@Nullable String instanceName, @Nullable String hostName, @Nullable String hypervisorHostName) {
this.instanceName = instanceName;
this.hostName = hostName;
this.hypervisorHostName = hypervisorHostName;
}
@Nullable
public String getInstanceName() {
return this.instanceName;
}
@Nullable
public String getHostName() {
return this.hostName;
}
@Nullable
public String getHypervisorHostName() {
return this.hypervisorHostName;
}
@ -140,10 +146,8 @@ public class ServerExtendedAttributes {
}
protected ToStringHelper string() {
return Objects.toStringHelper("")
.add("instanceName", instanceName)
.add("hostName", hostName)
.add("hypervisorHostName", hypervisorHostName);
return Objects.toStringHelper(this)
.add("instanceName", instanceName).add("hostName", hostName).add("hypervisorHostName", hypervisorHostName);
}
@Override

View File

@ -1,4 +1,4 @@
/**
/*
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
@ -18,24 +18,28 @@
*/
package org.jclouds.openstack.nova.v2_0.domain;
import java.beans.ConstructorProperties;
import javax.inject.Named;
import org.jclouds.javax.annotation.Nullable;
import com.google.common.base.Objects;
import com.google.common.base.Objects.ToStringHelper;
import com.google.gson.annotations.SerializedName;
/**
* Additional attributes delivered by Extended Server Status extension (alias "OS-EXT-STS")
*
* @author Adam Lowe
* @see <a href=
* "http://nova.openstack.org/api/nova.api.openstack.compute.contrib.extended_status.html"
* />
"http://nova.openstack.org/api/nova.api.openstack.compute.contrib.extended_status.html"
/>
* @see org.jclouds.openstack.nova.v2_0.features.ExtensionClient#getExtensionByAlias
* @see org.jclouds.openstack.nova.v1_1.extensions.ExtensionNamespaces#EXTENDED_STATUS (extended status?)
*/
*/
public class ServerExtendedStatus {
public static final String PREFIX = "OS-EXT-STS:";
public static String PREFIX;
public static Builder<?> builder() {
return new ConcreteBuilder();
@ -48,9 +52,9 @@ public class ServerExtendedStatus {
public static abstract class Builder<T extends Builder<T>> {
protected abstract T self();
private String taskState;
private String vmState;
private int powerState = Integer.MIN_VALUE;
protected String taskState;
protected String vmState;
protected int powerState;
/**
* @see ServerExtendedStatus#getTaskState()
@ -77,7 +81,7 @@ public class ServerExtendedStatus {
}
public ServerExtendedStatus build() {
return new ServerExtendedStatus(this);
return new ServerExtendedStatus(taskState, vmState, powerState);
}
public T fromServerExtendedStatus(ServerExtendedStatus in) {
@ -95,23 +99,20 @@ public class ServerExtendedStatus {
}
}
protected ServerExtendedStatus() {
// we want serializers like Gson to work w/o using sun.misc.Unsafe,
// prohibited in GAE. This also implies fields are not final.
// see http://code.google.com/p/jclouds/issues/detail?id=925
}
@Named("OS-EXT-STS:task_state")
private final String taskState;
@Named("OS-EXT-STS:vm_state")
private final String vmState;
@Named("OS-EXT-STS:power_state")
private final int powerState;
@SerializedName(value=PREFIX + "task_state")
private String taskState;
@SerializedName(value=PREFIX + "vm_state")
private String vmState;
@SerializedName(value=PREFIX + "power_state")
private int powerState = Integer.MIN_VALUE;
protected ServerExtendedStatus(Builder<?> builder) {
this.taskState = builder.taskState;
this.vmState = builder.vmState;
this.powerState = builder.powerState;
@ConstructorProperties({
"OS-EXT-STS:task_state", "OS-EXT-STS:vm_state", "OS-EXT-STS:power_state"
})
protected ServerExtendedStatus(@Nullable String taskState, @Nullable String vmState, int powerState) {
this.taskState = taskState;
this.vmState = vmState;
this.powerState = powerState;
}
@Nullable
@ -140,16 +141,12 @@ public class ServerExtendedStatus {
ServerExtendedStatus that = ServerExtendedStatus.class.cast(obj);
return Objects.equal(this.taskState, that.taskState)
&& Objects.equal(this.vmState, that.vmState)
&& Objects.equal(this.powerState, that.powerState)
;
&& Objects.equal(this.powerState, that.powerState);
}
protected ToStringHelper string() {
return Objects.toStringHelper("")
.add("taskState", taskState)
.add("vmState", vmState)
.add("powerState", powerState)
;
return Objects.toStringHelper(this)
.add("taskState", taskState).add("vmState", vmState).add("powerState", powerState);
}
@Override

View File

@ -1,4 +1,4 @@
/**
/*
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
@ -20,13 +20,21 @@ package org.jclouds.openstack.nova.v2_0.domain;
import static com.google.common.base.Preconditions.checkNotNull;
import java.util.Collections;
import java.beans.ConstructorProperties;
import java.util.Date;
import java.util.Map;
import java.util.Set;
import javax.inject.Named;
import org.jclouds.javax.annotation.Nullable;
import org.jclouds.openstack.v2_0.domain.Link;
import org.jclouds.openstack.v2_0.domain.Resource;
import org.jclouds.util.Multimaps2;
import com.google.common.base.Objects;
import com.google.common.base.Objects.ToStringHelper;
import com.google.common.collect.ImmutableSet;
import com.google.gson.annotations.SerializedName;
/**
* Extended server returned by ServerWithSecurityGroupsClient
@ -35,7 +43,7 @@ import com.google.gson.annotations.SerializedName;
* @see <a href=
"http://docs.openstack.org/api/openstack-compute/1.1/content/Get_Server_Details-d1e2623.html"
/>
*/
*/
public class ServerWithSecurityGroups extends Server {
public static Builder<?> builder() {
@ -47,24 +55,30 @@ public class ServerWithSecurityGroups extends Server {
}
public static abstract class Builder<T extends Builder<T>> extends Server.Builder<T> {
private Set<String> securityGroupNames = ImmutableSet.of();
protected Set<String> securityGroupNames = ImmutableSet.of();
/**
* @see ServerWithSecurityGroups#getSecurityGroupNames()
*/
public T securityGroupNames(Set<String> securityGroupNames) {
this.securityGroupNames = securityGroupNames;
this.securityGroupNames = ImmutableSet.copyOf(checkNotNull(securityGroupNames, "securityGroupNames"));
return self();
}
public T securityGroupNames(String... in) {
return securityGroupNames(ImmutableSet.copyOf(in));
}
public ServerWithSecurityGroups build() {
return new ServerWithSecurityGroups(this);
return new ServerWithSecurityGroups(id, name, links, uuid, tenantId, userId, updated, created, hostId,
accessIPv4, accessIPv6, status, image, flavor, keyName, configDrive, Multimaps2.toOldSchool(addresses),
metadata, extendedStatus, extendedAttributes, diskConfig, securityGroupNames);
}
public T fromServerWithSecurityGroups(ServerWithSecurityGroups in) {
return super.fromServer(in).securityGroupNames(in.getSecurityGroupNames());
return super.fromServer(in)
.securityGroupNames(in.getSecurityGroupNames());
}
}
private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
@ -74,24 +88,25 @@ public class ServerWithSecurityGroups extends Server {
}
}
protected ServerWithSecurityGroups() {
// we want serializers like Gson to work w/o using sun.misc.Unsafe,
// prohibited in GAE. This also implies fields are not final.
// see http://code.google.com/p/jclouds/issues/detail?id=925
@Named("security_groups")
private final Set<String> securityGroupNames;
@ConstructorProperties({
"id", "name", "links", "uuid", "tenant_id", "user_id", "updated", "created", "hostId", "accessIPv4", "accessIPv6", "status", "image", "flavor", "key_name", "config_drive", "addresses", "metadata", "extendedStatus", "extendedAttributes", "OS-DCF:diskConfig", "security_groups"
})
protected ServerWithSecurityGroups(String id, @Nullable String name, Set<Link> links, @Nullable String uuid,
String tenantId, String userId, Date updated, Date created, @Nullable String hostId,
@Nullable String accessIPv4, @Nullable String accessIPv6, Server.Status status, Resource image,
Resource flavor, @Nullable String keyName, @Nullable String configDrive,
Map<String, Set<Address>> addresses, Map<String, String> metadata,
@Nullable ServerExtendedStatus extendedStatus, @Nullable ServerExtendedAttributes extendedAttributes,
@Nullable String diskConfig, Set<String> securityGroupNames) {
super(id, name, links, uuid, tenantId, userId, updated, created, hostId, accessIPv4, accessIPv6, status, image, flavor, keyName, configDrive, addresses, metadata, extendedStatus, extendedAttributes, diskConfig);
this.securityGroupNames = ImmutableSet.copyOf(checkNotNull(securityGroupNames, "securityGroupNames"));
}
@SerializedName(value="security_groups")
private Set<String> securityGroupNames = ImmutableSet.of();
protected ServerWithSecurityGroups(Builder<?> builder) {
super(builder);
this.securityGroupNames = ImmutableSet.copyOf(checkNotNull(builder.securityGroupNames, "securityGroupNames"));
}
/**
*/
public Set<String> getSecurityGroupNames() {
return Collections.unmodifiableSet(this.securityGroupNames);
return this.securityGroupNames;
}
@Override

View File

@ -1,4 +1,4 @@
/**
/*
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
@ -20,21 +20,25 @@ package org.jclouds.openstack.nova.v2_0.domain;
import static com.google.common.base.Preconditions.checkNotNull;
import java.beans.ConstructorProperties;
import java.util.Date;
import javax.inject.Named;
import org.jclouds.javax.annotation.Nullable;
import com.google.common.base.Objects;
import com.google.common.base.Objects.ToStringHelper;
import com.google.gson.annotations.SerializedName;
/**
* Information the SimpleTenantUsage extension return data about each Server
*
* @author Adam Lowe
*/
*/
public class SimpleServerUsage {
/**
*/
public static enum Status {
UNRECOGNIZED, ACTIVE;
@ -62,83 +66,116 @@ public class SimpleServerUsage {
}
public static abstract class Builder<T extends Builder<T>> {
private String instanceName;
private double hours;
private double flavorMemoryMb;
private double flavorLocalGb;
private double flavorVcpus;
private String tenantId;
private String flavorName;
private Date instanceCreated;
private Date instanceTerminiated;
private Status instanceStatus;
private long uptime;
protected abstract T self();
protected String instanceName;
protected double hours;
protected double flavorMemoryMb;
protected double flavorLocalGb;
protected double flavorVcpus;
protected String tenantId;
protected String flavorName;
protected Date instanceCreated;
protected Date instanceTerminiated;
protected SimpleServerUsage.Status instanceStatus;
protected long uptime;
/**
* @see SimpleServerUsage#getInstanceName()
*/
public T instanceName(String instanceName) {
this.instanceName = instanceName;
return self();
}
/**
* @see SimpleServerUsage#getHours()
*/
public T hours(double hours) {
this.hours = hours;
return self();
}
/**
* @see SimpleServerUsage#getFlavorMemoryMb()
*/
public T flavorMemoryMb(double flavorMemoryMb) {
this.flavorMemoryMb = flavorMemoryMb;
return self();
}
/**
* @see SimpleServerUsage#getFlavorLocalGb()
*/
public T flavorLocalGb(double flavorLocalGb) {
this.flavorLocalGb = flavorLocalGb;
return self();
}
/**
* @see SimpleServerUsage#getFlavorVcpus()
*/
public T flavorVcpus(double flavorVcpus) {
this.flavorVcpus = flavorVcpus;
return self();
}
/**
* @see SimpleServerUsage#getTenantId()
*/
public T tenantId(String tenantId) {
this.tenantId = tenantId;
return self();
}
/**
* @see SimpleServerUsage#getFlavorName()
*/
public T flavorName(String flavorName) {
this.flavorName = flavorName;
return self();
}
/**
* @see SimpleServerUsage#getInstanceCreated()
*/
public T instanceCreated(Date instanceCreated) {
this.instanceCreated = instanceCreated;
return self();
}
/**
* @see SimpleServerUsage#getInstanceTerminiated()
*/
public T instanceTerminiated(Date instanceTerminiated) {
this.instanceTerminiated = instanceTerminiated;
return self();
}
public T instanceStatus(Status instanceStatus) {
/**
* @see SimpleServerUsage#getInstanceStatus()
*/
public T instanceStatus(SimpleServerUsage.Status instanceStatus) {
this.instanceStatus = instanceStatus;
return self();
}
/**
* @see SimpleServerUsage#getUptime()
*/
public T uptime(long uptime) {
this.uptime = uptime;
return self();
}
public SimpleServerUsage build() {
return new SimpleServerUsage(this);
return new SimpleServerUsage(instanceName, hours, flavorMemoryMb, flavorLocalGb, flavorVcpus, tenantId, flavorName, instanceCreated, instanceTerminiated, instanceStatus, uptime);
}
public T fromSimpleServerUsage(SimpleServerUsage in) {
return this
.instanceName(in.getInstanceName())
.hours(in.getHours())
.flavorMemoryMb(in.getFlavorMemoryMb())
.flavorLocalGb(in.getFlavorLocalGb())
.flavorVcpus(in.getFlavorVcpus())
@ -147,10 +184,8 @@ public class SimpleServerUsage {
.instanceCreated(in.getInstanceCreated())
.instanceTerminiated(in.getInstanceTerminiated())
.instanceStatus(in.getInstanceStatus())
.uptime(in.getUptime())
;
.uptime(in.getUptime());
}
}
private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
@ -160,111 +195,92 @@ public class SimpleServerUsage {
}
}
protected SimpleServerUsage() {
// we want serializers like Gson to work w/o using sun.misc.Unsafe,
// prohibited in GAE. This also implies fields are not final.
// see http://code.google.com/p/jclouds/issues/detail?id=925
@Named("name")
private final String instanceName;
private final double hours;
@Named("memory_mb")
private final double flavorMemoryMb;
@Named("local_gb")
private final double flavorLocalGb;
@Named("vcpus")
private final double flavorVcpus;
@Named("tenant_id")
private final String tenantId;
@Named("flavor")
private final String flavorName;
@Named("started_at")
private final Date instanceCreated;
@Named("ended_at")
private final Date instanceTerminiated;
@Named("state")
private final SimpleServerUsage.Status instanceStatus;
private final long uptime;
@ConstructorProperties({
"name", "hours", "memory_mb", "local_gb", "vcpus", "tenant_id", "flavor", "started_at", "ended_at", "state", "uptime"
})
protected SimpleServerUsage(String instanceName, double hours, double flavorMemoryMb, double flavorLocalGb, double flavorVcpus, String tenantId, String flavorName, Date instanceCreated, @Nullable Date instanceTerminiated, SimpleServerUsage.Status instanceStatus, long uptime) {
this.instanceName = checkNotNull(instanceName, "instanceName");
this.hours = hours;
this.flavorMemoryMb = flavorMemoryMb;
this.flavorLocalGb = flavorLocalGb;
this.flavorVcpus = flavorVcpus;
this.tenantId = checkNotNull(tenantId, "tenantId");
this.flavorName = checkNotNull(flavorName, "flavorName");
this.instanceCreated = checkNotNull(instanceCreated, "instanceCreated");
this.instanceTerminiated = instanceTerminiated;
this.instanceStatus = checkNotNull(instanceStatus, "instanceStatus");
this.uptime = uptime;
}
@SerializedName("name")
private String instanceName;
private double hours;
@SerializedName("memory_mb")
private double flavorMemoryMb;
@SerializedName("local_gb")
private double flavorLocalGb;
@SerializedName("vcpus")
private double flavorVcpus;
@SerializedName("tenant_id")
private String tenantId;
@SerializedName("flavor")
private String flavorName;
@SerializedName("started_at")
private Date instanceCreated;
@SerializedName("ended_at")
private Date instanceTerminiated;
@SerializedName("state")
private Status instanceStatus;
private long uptime;
private SimpleServerUsage(Builder<?> builder) {
this.instanceName = checkNotNull(builder.instanceName, "instanceName");
this.hours = builder.hours;
this.flavorMemoryMb = builder.flavorMemoryMb;
this.flavorLocalGb = builder.flavorLocalGb;
this.flavorVcpus = builder.flavorVcpus;
this.tenantId = checkNotNull(builder.tenantId, "tenantId");
this.flavorName = checkNotNull(builder.flavorName, "flavorName");
this.instanceCreated = builder.instanceCreated; //checkNotNull(builder.instanceCreated, "instanceCreated");
this.instanceTerminiated = builder.instanceTerminiated;
this.instanceStatus = checkNotNull(builder.instanceStatus, "instanceStatus");
this.uptime = checkNotNull(builder.uptime, "uptime");
}
/**
*/
public String getInstanceName() {
return this.instanceName;
}
/**
*/
public double getHours() {
return this.hours;
}
public double getFlavorMemoryMb() {
return this.flavorMemoryMb;
}
/**
*/
public double getFlavorLocalGb() {
return this.flavorLocalGb;
}
/**
*/
public double getFlavorVcpus() {
return this.flavorVcpus;
}
/**
*/
public String getTenantId() {
return this.tenantId;
}
/**
*/
public String getFlavorName() {
return this.flavorName;
}
/**
*/
public Date getInstanceCreated() {
return this.instanceCreated;
}
/**
*/
@Nullable
public Date getInstanceTerminiated() {
return this.instanceTerminiated;
}
/**
*/
public Status getInstanceStatus() {
public SimpleServerUsage.Status getInstanceStatus() {
return this.instanceStatus;
}
/**
*/
public long getUptime() {
return this.uptime;
}
@Override
public int hashCode() {
return Objects.hashCode(instanceName, flavorMemoryMb, flavorLocalGb, flavorVcpus, tenantId, flavorName, instanceCreated, instanceTerminiated, instanceStatus, uptime);
return Objects.hashCode(instanceName, hours, flavorMemoryMb, flavorLocalGb, flavorVcpus, tenantId, flavorName, instanceCreated, instanceTerminiated, instanceStatus, uptime);
}
@Override
@ -273,6 +289,7 @@ public class SimpleServerUsage {
if (obj == null || getClass() != obj.getClass()) return false;
SimpleServerUsage that = SimpleServerUsage.class.cast(obj);
return Objects.equal(this.instanceName, that.instanceName)
&& Objects.equal(this.hours, that.hours)
&& Objects.equal(this.flavorMemoryMb, that.flavorMemoryMb)
&& Objects.equal(this.flavorLocalGb, that.flavorLocalGb)
&& Objects.equal(this.flavorVcpus, that.flavorVcpus)
@ -281,23 +298,12 @@ public class SimpleServerUsage {
&& Objects.equal(this.instanceCreated, that.instanceCreated)
&& Objects.equal(this.instanceTerminiated, that.instanceTerminiated)
&& Objects.equal(this.instanceStatus, that.instanceStatus)
&& Objects.equal(this.uptime, that.uptime)
;
&& Objects.equal(this.uptime, that.uptime);
}
protected ToStringHelper string() {
return Objects.toStringHelper("")
.add("instanceName", instanceName)
.add("flavorMemoryMb", flavorMemoryMb)
.add("flavorLocalGb", flavorLocalGb)
.add("flavorVcpus", flavorVcpus)
.add("tenantId", tenantId)
.add("flavorName", flavorName)
.add("instanceCreated", instanceCreated)
.add("instanceTerminiated", instanceTerminiated)
.add("instanceStatus", instanceStatus)
.add("uptime", uptime)
;
return Objects.toStringHelper(this)
.add("instanceName", instanceName).add("hours", hours).add("flavorMemoryMb", flavorMemoryMb).add("flavorLocalGb", flavorLocalGb).add("flavorVcpus", flavorVcpus).add("tenantId", tenantId).add("flavorName", flavorName).add("instanceCreated", instanceCreated).add("instanceTerminiated", instanceTerminiated).add("instanceStatus", instanceStatus).add("uptime", uptime);
}
@Override

View File

@ -1,4 +1,4 @@
/**
/*
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
@ -20,24 +20,25 @@ package org.jclouds.openstack.nova.v2_0.domain;
import static com.google.common.base.Preconditions.checkNotNull;
import java.util.Collections;
import java.beans.ConstructorProperties;
import java.util.Date;
import java.util.Set;
import javax.inject.Named;
import org.jclouds.javax.annotation.Nullable;
import com.google.common.base.Objects;
import com.google.common.base.Objects.ToStringHelper;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Sets;
import com.google.gson.annotations.SerializedName;
/**
* Information the SimpleTenantUsage extension returns data about each tenant
*
* @author Adam Lowe
*/
*/
public class SimpleTenantUsage {
public static Builder<?> builder() {
return new ConcreteBuilder();
}
@ -47,74 +48,100 @@ public class SimpleTenantUsage {
}
public static abstract class Builder<T extends Builder<T>> {
private String tenantId;
private double totalLocalGbUsage;
private double totalVcpusUsage;
private double totalMemoryMbUsage;
private double totalHours;
private Date start;
private Date stop;
private Set<SimpleServerUsage> serverUsages = Sets.newLinkedHashSet();
protected abstract T self();
protected String tenantId;
protected double totalLocalGbUsage;
protected double totalVcpusUsage;
protected double totalMemoryMbUsage;
protected double totalHours;
protected Date start;
protected Date stop;
protected Set<SimpleServerUsage> serverUsages = ImmutableSet.of();
/**
* @see SimpleTenantUsage#getTenantId()
*/
public T tenantId(String tenantId) {
this.tenantId = tenantId;
return self();
}
public T totalLocalGbUsage(double total_local_gb_usage) {
this.totalLocalGbUsage = total_local_gb_usage;
/**
* @see SimpleTenantUsage#getTotalLocalGbUsage()
*/
public T totalLocalGbUsage(double totalLocalGbUsage) {
this.totalLocalGbUsage = totalLocalGbUsage;
return self();
}
public T totalVcpusUsage(double total_vcpus_usage) {
this.totalVcpusUsage = total_vcpus_usage;
/**
* @see SimpleTenantUsage#getTotalVcpusUsage()
*/
public T totalVcpusUsage(double totalVcpusUsage) {
this.totalVcpusUsage = totalVcpusUsage;
return self();
}
public T totalMemoryMbUsage(double total_memory_mb_usage) {
this.totalMemoryMbUsage = total_memory_mb_usage;
/**
* @see SimpleTenantUsage#getTotalMemoryMbUsage()
*/
public T totalMemoryMbUsage(double totalMemoryMbUsage) {
this.totalMemoryMbUsage = totalMemoryMbUsage;
return self();
}
public T totalHours(double total_hours) {
this.totalHours = total_hours;
/**
* @see SimpleTenantUsage#getTotalHours()
*/
public T totalHours(double totalHours) {
this.totalHours = totalHours;
return self();
}
/**
* @see SimpleTenantUsage#getStart()
*/
public T start(Date start) {
this.start = start;
return self();
}
/**
* @see SimpleTenantUsage#getStop()
*/
public T stop(Date stop) {
this.stop = stop;
return self();
}
/**
* @see SimpleTenantUsage#getServerUsages()
*/
public T serverUsages(Set<SimpleServerUsage> serverUsages) {
this.serverUsages = serverUsages;
this.serverUsages = ImmutableSet.copyOf(checkNotNull(serverUsages, "serverUsages"));
return self();
}
public SimpleTenantUsage build() {
return new SimpleTenantUsage(this);
public T serverUsages(SimpleServerUsage... in) {
return serverUsages(ImmutableSet.copyOf(in));
}
public SimpleTenantUsage build() {
return new SimpleTenantUsage(tenantId, totalLocalGbUsage, totalVcpusUsage, totalMemoryMbUsage, totalHours, start, stop, serverUsages);
}
public T fromSimpleTenantUsage(SimpleTenantUsage in) {
return this
.tenantId(in.getTenantId())
.totalLocalGbUsage(in.getTotalLocalGbUsage())
.totalVcpusUsage(in.getTotalVcpusUsage())
.totalMemoryMbUsage(in.getTotalMemoryMbUsage())
.totalHours(in.getTotalHours())
.start(in.getStart())
.stop(in.getStop())
.serverUsages(in.getServerUsages())
;
.serverUsages(in.getServerUsages());
}
}
private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
@ -124,90 +151,72 @@ public class SimpleTenantUsage {
}
}
protected SimpleTenantUsage() {
// we want serializers like Gson to work w/o using sun.misc.Unsafe,
// prohibited in GAE. This also implies fields are not final.
// see http://code.google.com/p/jclouds/issues/detail?id=925
}
@Named("tenant_id")
private final String tenantId;
@Named("total_local_gb_usage")
private final double totalLocalGbUsage;
@Named("total_vcpus_usage")
private final double totalVcpusUsage;
@Named("total_memory_mb_usage")
private final double totalMemoryMbUsage;
@Named("total_hours")
private final double totalHours;
private final Date start;
private final Date stop;
@Named("server_usages")
private final Set<SimpleServerUsage> serverUsages;
@SerializedName("tenant_id")
private String tenantId;
@SerializedName("total_local_gb_usage")
private double totalLocalGbUsage;
@SerializedName("total_vcpus_usage")
private double totalVcpusUsage;
@SerializedName("total_memory_mb_usage")
private double totalMemoryMbUsage;
@SerializedName("total_hours")
private double totalHours;
private Date start;
private Date stop;
@SerializedName("server_usages")
private Set<SimpleServerUsage> serverUsages = ImmutableSet.of();
private SimpleTenantUsage(Builder<?> builder) {
this.tenantId = builder.tenantId;
this.totalLocalGbUsage = builder.totalLocalGbUsage;
this.totalVcpusUsage = builder.totalVcpusUsage;
this.totalMemoryMbUsage = builder.totalMemoryMbUsage;
this.totalHours = builder.totalHours;
this.start = builder.start;
this.stop = builder.stop;
this.serverUsages = ImmutableSet.copyOf(checkNotNull(builder.serverUsages, "serverUsages"));
@ConstructorProperties({
"tenant_id", "total_local_gb_usage", "total_vcpus_usage", "total_memory_mb_usage", "total_hours", "start", "stop", "server_usages"
})
protected SimpleTenantUsage(String tenantId, double totalLocalGbUsage, double totalVcpusUsage, double totalMemoryMbUsage, double totalHours, @Nullable Date start, @Nullable Date stop, @Nullable Set<SimpleServerUsage> serverUsages) {
this.tenantId = checkNotNull(tenantId, "tenantId");
this.totalLocalGbUsage = totalLocalGbUsage;
this.totalVcpusUsage = totalVcpusUsage;
this.totalMemoryMbUsage = totalMemoryMbUsage;
this.totalHours = totalHours;
this.start = start;
this.stop = stop;
this.serverUsages = serverUsages == null ? ImmutableSet.<SimpleServerUsage>of() : ImmutableSet.copyOf(serverUsages);
}
public String getTenantId() {
return tenantId;
return this.tenantId;
}
/**
*/
public double getTotalLocalGbUsage() {
return this.totalLocalGbUsage;
}
/**
*/
public double getTotalVcpusUsage() {
return this.totalVcpusUsage;
}
/**
*/
public double getTotalMemoryMbUsage() {
return this.totalMemoryMbUsage;
}
/**
*/
public double getTotalHours() {
return this.totalHours;
}
/**
*/
@Nullable
public Date getStart() {
return this.start;
}
/**
*/
@Nullable
public Date getStop() {
return this.stop;
}
/**
*/
@Nullable
public Set<SimpleServerUsage> getServerUsages() {
return serverUsages == null ? ImmutableSet.<SimpleServerUsage>of() : Collections.unmodifiableSet(this.serverUsages);
return this.serverUsages;
}
@Override
public int hashCode() {
return Objects.hashCode(totalLocalGbUsage, totalVcpusUsage, totalMemoryMbUsage, totalHours, start, stop, serverUsages);
return Objects.hashCode(tenantId, totalLocalGbUsage, totalVcpusUsage, totalMemoryMbUsage, totalHours, start, stop, serverUsages);
}
@Override
@ -215,26 +224,19 @@ public class SimpleTenantUsage {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
SimpleTenantUsage that = SimpleTenantUsage.class.cast(obj);
return Objects.equal(this.totalLocalGbUsage, that.totalLocalGbUsage)
return Objects.equal(this.tenantId, that.tenantId)
&& Objects.equal(this.totalLocalGbUsage, that.totalLocalGbUsage)
&& Objects.equal(this.totalVcpusUsage, that.totalVcpusUsage)
&& Objects.equal(this.totalMemoryMbUsage, that.totalMemoryMbUsage)
&& Objects.equal(this.totalHours, that.totalHours)
&& Objects.equal(this.start, that.start)
&& Objects.equal(this.stop, that.stop)
&& Objects.equal(this.serverUsages, that.serverUsages)
;
&& Objects.equal(this.serverUsages, that.serverUsages);
}
protected ToStringHelper string() {
return Objects.toStringHelper("")
.add("totalLocalGbUsage", totalLocalGbUsage)
.add("totalVcpusUsage", totalVcpusUsage)
.add("totalMemoryMbUsage", totalMemoryMbUsage)
.add("totalHours", totalHours)
.add("start", start)
.add("stop", stop)
.add("serverUsages", serverUsages)
;
return Objects.toStringHelper(this)
.add("tenantId", tenantId).add("totalLocalGbUsage", totalLocalGbUsage).add("totalVcpusUsage", totalVcpusUsage).add("totalMemoryMbUsage", totalMemoryMbUsage).add("totalHours", totalHours).add("start", start).add("stop", stop).add("serverUsages", serverUsages);
}
@Override

View File

@ -1,4 +1,4 @@
/**
/*
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
@ -18,50 +18,88 @@
*/
package org.jclouds.openstack.nova.v2_0.domain;
import static com.google.common.base.Objects.equal;
import static com.google.common.base.Preconditions.checkNotNull;
import java.beans.ConstructorProperties;
import javax.inject.Named;
import com.google.common.base.Objects;
import com.google.common.base.Objects.ToStringHelper;
import com.google.gson.annotations.SerializedName;
/**
* Class TenantIdAndName
*
* @author Adrian Cole
*/
*/
public class TenantIdAndName {
protected TenantIdAndName() {
// we want serializers like Gson to work w/o using sun.misc.Unsafe,
// prohibited in GAE. This also implies fields are not final.
// see http://code.google.com/p/jclouds/issues/detail?id=925
public static Builder<?> builder() {
return new ConcreteBuilder();
}
@SerializedName("tenant_id")
public Builder<?> toBuilder() {
return new ConcreteBuilder().fromTenantIdAndName(this);
}
public static abstract class Builder<T extends Builder<T>> {
protected abstract T self();
protected String tenantId;
protected String name;
public TenantIdAndName(String tenantId, String name) {
/**
* @see TenantIdAndName#getTenantId()
*/
public T tenantId(String tenantId) {
this.tenantId = tenantId;
return self();
}
/**
* @see TenantIdAndName#getName()
*/
public T name(String name) {
this.name = name;
return self();
}
public TenantIdAndName build() {
return new TenantIdAndName(tenantId, name);
}
public T fromTenantIdAndName(TenantIdAndName in) {
return this
.tenantId(in.getTenantId())
.name(in.getName());
}
}
private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
@Override
protected ConcreteBuilder self() {
return this;
}
}
@Named("tenant_id")
private final String tenantId;
private final String name;
@ConstructorProperties({
"tenant_id", "name"
})
protected TenantIdAndName(String tenantId, String name) {
this.tenantId = checkNotNull(tenantId, "tenantId");
this.name = checkNotNull(name, "name");
}
public String getTenantId() {
return tenantId;
return this.tenantId;
}
public String getName() {
return name;
}
@Override
public boolean equals(Object o) {
if (this == o)
return true;
if (o == null || getClass() != o.getClass())
return false;
TenantIdAndName that = TenantIdAndName.class.cast(o);
return equal(this.tenantId, that.tenantId) && equal(this.name, that.name);
return this.name;
}
@Override
@ -69,12 +107,23 @@ public class TenantIdAndName {
return Objects.hashCode(tenantId, name);
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
TenantIdAndName that = TenantIdAndName.class.cast(obj);
return Objects.equal(this.tenantId, that.tenantId)
&& Objects.equal(this.name, that.name);
}
protected ToStringHelper string() {
return Objects.toStringHelper(this)
.add("tenantId", tenantId).add("name", name);
}
@Override
public String toString() {
return string().toString();
}
protected ToStringHelper string() {
return Objects.toStringHelper("").add("tenantId", tenantId).add("name", name);
}
}

View File

@ -1,4 +1,4 @@
/**
/*
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
@ -20,16 +20,19 @@ package org.jclouds.openstack.nova.v2_0.domain;
import static com.google.common.base.Preconditions.checkNotNull;
import java.beans.ConstructorProperties;
import javax.inject.Named;
import com.google.common.base.Objects;
import com.google.common.base.Objects.ToStringHelper;
import com.google.gson.annotations.SerializedName;
/**
* Represents a Virtual Interface (VIF)
*
* @author Adam Lowe
* @see org.jclouds.openstack.nova.v2_0.extensions.VirtualInterfaceClient
*/
*/
public class VirtualInterface {
public static Builder<?> builder() {
@ -43,8 +46,8 @@ public class VirtualInterface {
public static abstract class Builder<T extends Builder<T>> {
protected abstract T self();
private String id;
private String macAddress;
protected String id;
protected String macAddress;
/**
* @see VirtualInterface#getId()
@ -63,16 +66,14 @@ public class VirtualInterface {
}
public VirtualInterface build() {
return new VirtualInterface(this);
return new VirtualInterface(id, macAddress);
}
public T fromVirtualInterface(VirtualInterface in) {
return this
.id(in.getId())
.macAddress(in.getMacAddress())
;
.macAddress(in.getMacAddress());
}
}
private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
@ -82,19 +83,16 @@ public class VirtualInterface {
}
}
protected VirtualInterface() {
// we want serializers like Gson to work w/o using sun.misc.Unsafe,
// prohibited in GAE. This also implies fields are not final.
// see http://code.google.com/p/jclouds/issues/detail?id=925
}
private final String id;
@Named("mac_address")
private final String macAddress;
private String id;
@SerializedName(value="mac_address")
private String macAddress;
protected VirtualInterface(Builder<?> builder) {
this.id = checkNotNull(builder.id, "id");
this.macAddress = checkNotNull(builder.macAddress, "macAddress");
@ConstructorProperties({
"id", "mac_address"
})
protected VirtualInterface(String id, String macAddress) {
this.id = checkNotNull(id, "id");
this.macAddress = checkNotNull(macAddress, "macAddress");
}
public String getId() {
@ -116,15 +114,12 @@ public class VirtualInterface {
if (obj == null || getClass() != obj.getClass()) return false;
VirtualInterface that = VirtualInterface.class.cast(obj);
return Objects.equal(this.id, that.id)
&& Objects.equal(this.macAddress, that.macAddress)
;
&& Objects.equal(this.macAddress, that.macAddress);
}
protected ToStringHelper string() {
return Objects.toStringHelper("")
.add("id", id)
.add("macAddress", macAddress)
;
return Objects.toStringHelper(this)
.add("id", id).add("macAddress", macAddress);
}
@Override

View File

@ -1,4 +1,4 @@
/**
/*
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
@ -20,11 +20,13 @@ package org.jclouds.openstack.nova.v2_0.domain;
import static com.google.common.base.Preconditions.checkNotNull;
import java.util.Collections;
import java.beans.ConstructorProperties;
import java.util.Date;
import java.util.Map;
import java.util.Set;
import javax.inject.Named;
import org.jclouds.javax.annotation.Nullable;
import com.google.common.base.CaseFormat;
@ -32,15 +34,14 @@ import com.google.common.base.Objects;
import com.google.common.base.Objects.ToStringHelper;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import com.google.gson.annotations.SerializedName;
/**
* An Openstack Nova Volume
*/
*/
public class Volume {
/**
*/
public static enum Status {
CREATING, AVAILABLE, IN_USE, DELETING, ERROR, UNRECOGNIZED;
public String value() {
@ -72,86 +73,112 @@ public class Volume {
public static abstract class Builder<T extends Builder<T>> {
protected abstract T self();
private String id;
private Status status;
private int size;
private String zone;
private Date created;
private Set<VolumeAttachment> attachments = Sets.newLinkedHashSet();
private String volumeType;
private String snapshotId;
private String name;
private String description;
private Map<String, String> metadata = Maps.newHashMap();
protected String id;
protected Volume.Status status;
protected int size;
protected String zone;
protected Date created;
protected Set<VolumeAttachment> attachments = ImmutableSet.of();
protected String volumeType;
protected String snapshotId;
protected String name;
protected String description;
protected Map<String, String> metadata = ImmutableMap.of();
/** @see Volume#getId() */
/**
* @see Volume#getId()
*/
public T id(String id) {
this.id = id;
return self();
}
/** @see Volume#getStatus() */
public T status(Status status) {
/**
* @see Volume#getStatus()
*/
public T status(Volume.Status status) {
this.status = status;
return self();
}
/** @see Volume#getSize() */
/**
* @see Volume#getSize()
*/
public T size(int size) {
this.size = size;
return self();
}
/** @see Volume#getZone() */
/**
* @see Volume#getZone()
*/
public T zone(String zone) {
this.zone = zone;
return self();
}
/** @see Volume#getCreated() */
/**
* @see Volume#getCreated()
*/
public T created(Date created) {
this.created = created;
return self();
}
/** @see Volume#getAttachments() */
/**
* @see Volume#getAttachments()
*/
public T attachments(Set<VolumeAttachment> attachments) {
this.attachments = attachments;
this.attachments = ImmutableSet.copyOf(checkNotNull(attachments, "attachments"));
return self();
}
/** @see Volume#getVolumeType() */
public T attachments(VolumeAttachment... in) {
return attachments(ImmutableSet.copyOf(in));
}
/**
* @see Volume#getVolumeType()
*/
public T volumeType(String volumeType) {
this.volumeType = volumeType;
return self();
}
/** @see Volume#getSnapshotId() */
/**
* @see Volume#getSnapshotId()
*/
public T snapshotId(String snapshotId) {
this.snapshotId = snapshotId;
return self();
}
/** @see Volume#getMetadata() */
public T metadata(Map<String, String> metadata) {
this.metadata = metadata;
return self();
}
/** @see Volume#getName() */
/**
* @see Volume#getName()
*/
public T name(String name) {
this.name = name;
return self();
}
/** @see Volume#getDescription() */
/**
* @see Volume#getDescription()
*/
public T description(String description) {
this.description = description;
return self();
}
/**
* @see Volume#getMetadata()
*/
public T metadata(Map<String, String> metadata) {
this.metadata = ImmutableMap.copyOf(checkNotNull(metadata, "metadata"));
return self();
}
public Volume build() {
return new Volume(this);
return new Volume(id, status, size, zone, created, attachments, volumeType, snapshotId, name, description, metadata);
}
public T fromVolume(Volume in) {
@ -164,10 +191,10 @@ public class Volume {
.attachments(in.getAttachments())
.volumeType(in.getVolumeType())
.snapshotId(in.getSnapshotId())
.metadata(in.getMetadata())
;
.name(in.getName())
.description(in.getDescription())
.metadata(in.getMetadata());
}
}
private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
@ -177,40 +204,37 @@ public class Volume {
}
}
protected Volume() {
// we want serializers like Gson to work w/o using sun.misc.Unsafe,
// prohibited in GAE. This also implies fields are not final.
// see http://code.google.com/p/jclouds/issues/detail?id=925
}
private final String id;
private final Volume.Status status;
private final int size;
@Named("availabilityZone")
private final String zone;
@Named("createdAt")
private final Date created;
private final Set<VolumeAttachment> attachments;
private final String volumeType;
private final String snapshotId;
@Named("displayName")
private final String name;
@Named("displayDescription")
private final String description;
private final Map<String, String> metadata;
private String id;
private Status status;
private int size;
@SerializedName(value="availabilityZone")
private String zone;
@SerializedName(value="createdAt")
private Date created;
private Set<VolumeAttachment> attachments = ImmutableSet.of();
private String volumeType;
private String snapshotId;
@SerializedName(value="displayName")
private String name;
@SerializedName(value="displayDescription")
private String description;
private Map<String, String> metadata = ImmutableMap.of();
protected Volume(Builder<?> builder) {
this.id = builder.id;
this.status = builder.status;
this.size = builder.size;
this.zone = builder.zone;
this.created = builder.created;
this.attachments = ImmutableSet.copyOf(checkNotNull(builder.attachments, "attachments"));
this.volumeType = builder.volumeType;
this.snapshotId = builder.snapshotId;
this.name = builder.name;
this.description = builder.description;
this.metadata = ImmutableMap.copyOf(checkNotNull(builder.metadata, "metadata"));
@ConstructorProperties({
"id", "status", "size", "availabilityZone", "createdAt", "attachments", "volumeType", "snapshotId", "displayName", "displayDescription", "metadata"
})
protected Volume(String id, Volume.Status status, int size, String zone, Date created, @Nullable Set<VolumeAttachment> attachments, @Nullable String volumeType, @Nullable String snapshotId, @Nullable String name, @Nullable String description, @Nullable Map<String, String> metadata) {
this.id = checkNotNull(id, "id");
this.status = checkNotNull(status, "status");
this.size = size;
this.zone = checkNotNull(zone, "zone");
this.created = checkNotNull(created, "created");
this.attachments = attachments == null ? ImmutableSet.<VolumeAttachment>of() : ImmutableSet.copyOf(attachments);
this.volumeType = volumeType;
this.snapshotId = snapshotId;
this.name = name;
this.description = description;
this.metadata = metadata == null ? ImmutableMap.<String, String>of() : ImmutableMap.copyOf(metadata);
}
/**
@ -223,7 +247,7 @@ public class Volume {
/**
* @return the status of this volume
*/
public Status getStatus() {
public Volume.Status getStatus() {
return this.status;
}
@ -251,9 +275,8 @@ public class Volume {
/**
* @return the set of attachments (to Servers)
*/
@Nullable
public Set<VolumeAttachment> getAttachments() {
return Collections.unmodifiableSet(this.attachments);
return this.attachments;
}
/**
@ -285,41 +308,36 @@ public class Volume {
return this.description;
}
@Nullable
public Map<String, String> getMetadata() {
return Collections.unmodifiableMap(this.metadata);
return this.metadata;
}
// keeping fields short in eq/hashCode so that minor state differences don't affect collection membership
@Override
public int hashCode() {
return Objects.hashCode(id, zone);
return Objects.hashCode(id, status, size, zone, created, attachments, volumeType, snapshotId, name, description, metadata);
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null || getClass() != obj.getClass())
return false;
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Volume that = Volume.class.cast(obj);
return Objects.equal(this.id, that.id) && Objects.equal(this.zone, that.zone);
return Objects.equal(this.id, that.id)
&& Objects.equal(this.status, that.status)
&& Objects.equal(this.size, that.size)
&& Objects.equal(this.zone, that.zone)
&& Objects.equal(this.created, that.created)
&& Objects.equal(this.attachments, that.attachments)
&& Objects.equal(this.volumeType, that.volumeType)
&& Objects.equal(this.snapshotId, that.snapshotId)
&& Objects.equal(this.name, that.name)
&& Objects.equal(this.description, that.description)
&& Objects.equal(this.metadata, that.metadata);
}
protected ToStringHelper string() {
return Objects.toStringHelper("")
.add("id", id)
.add("status", status)
.add("size", size)
.add("zone", zone)
.add("created", created)
.add("attachments", attachments)
.add("volumeType", volumeType)
.add("snapshotId", snapshotId)
.add("name", name)
.add("description", description)
.add("metadata", metadata)
;
return Objects.toStringHelper(this)
.add("id", id).add("status", status).add("size", size).add("zone", zone).add("created", created).add("attachments", attachments).add("volumeType", volumeType).add("snapshotId", snapshotId).add("name", name).add("description", description).add("metadata", metadata);
}
@Override

View File

@ -1,4 +1,4 @@
/**
/*
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
@ -20,6 +20,8 @@ package org.jclouds.openstack.nova.v2_0.domain;
import static com.google.common.base.Preconditions.checkNotNull;
import java.beans.ConstructorProperties;
import org.jclouds.javax.annotation.Nullable;
import com.google.common.base.Objects;
@ -27,7 +29,7 @@ import com.google.common.base.Objects.ToStringHelper;
/**
* An Openstack Nova Volume Attachment (describes how Volumes are attached to Servers)
*/
*/
public class VolumeAttachment {
public static Builder<?> builder() {
@ -35,54 +37,60 @@ public class VolumeAttachment {
}
public Builder<?> toBuilder() {
return new ConcreteBuilder().fromAttachment(this);
return new ConcreteBuilder().fromVolumeAttachment(this);
}
public static abstract class Builder<T extends Builder<T>> {
protected abstract T self();
private String id;
private String volumeId;
private String serverId;
private String device;
protected String id;
protected String volumeId;
protected String serverId;
protected String device;
/** @see VolumeAttachment#getId() */
/**
* @see VolumeAttachment#getId()
*/
public T id(String id) {
this.id = id;
return self();
}
/** @see VolumeAttachment#getVolumeId() */
/**
* @see VolumeAttachment#getVolumeId()
*/
public T volumeId(String volumeId) {
this.volumeId = volumeId;
return self();
}
/** @see VolumeAttachment#getServerId() */
/**
* @see VolumeAttachment#getServerId()
*/
public T serverId(String serverId) {
this.serverId = serverId;
return self();
}
/** @see VolumeAttachment#getDevice() */
/**
* @see VolumeAttachment#getDevice()
*/
public T device(String device) {
this.device = device;
return self();
}
public VolumeAttachment build() {
return new VolumeAttachment(this);
return new VolumeAttachment(id, volumeId, serverId, device);
}
public T fromAttachment(VolumeAttachment in) {
public T fromVolumeAttachment(VolumeAttachment in) {
return this
.id(in.getId())
.volumeId(in.getVolumeId())
.serverId(in.getServerId())
.device(in.getDevice())
;
.device(in.getDevice());
}
}
private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
@ -92,22 +100,19 @@ public class VolumeAttachment {
}
}
protected VolumeAttachment() {
// we want serializers like Gson to work w/o using sun.misc.Unsafe,
// prohibited in GAE. This also implies fields are not final.
// see http://code.google.com/p/jclouds/issues/detail?id=925
}
private final String id;
private final String volumeId;
private final String serverId;
private final String device;
private String id;
private String volumeId;
private String serverId;
private String device;
protected VolumeAttachment(Builder<?> builder) {
this.id = checkNotNull(builder.id, "id");
this.volumeId = checkNotNull(builder.volumeId, "volumeId");
this.serverId = builder.serverId;
this.device = builder.device;
@ConstructorProperties({
"id", "volumeId", "serverId", "device"
})
protected VolumeAttachment(String id, String volumeId, @Nullable String serverId, @Nullable String device) {
this.id = checkNotNull(id, "id");
this.volumeId = checkNotNull(volumeId, "volumeId");
this.serverId = serverId;
this.device = device;
}
/**
@ -153,17 +158,12 @@ public class VolumeAttachment {
return Objects.equal(this.id, that.id)
&& Objects.equal(this.volumeId, that.volumeId)
&& Objects.equal(this.serverId, that.serverId)
&& Objects.equal(this.device, that.device)
;
&& Objects.equal(this.device, that.device);
}
protected ToStringHelper string() {
return Objects.toStringHelper("")
.add("id", id)
.add("volumeId", volumeId)
.add("serverId", serverId)
.add("device", device)
;
return Objects.toStringHelper(this)
.add("id", id).add("volumeId", volumeId).add("serverId", serverId).add("device", device);
}
@Override

View File

@ -1,4 +1,4 @@
/**
/*
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
@ -20,17 +20,19 @@ package org.jclouds.openstack.nova.v2_0.domain;
import static com.google.common.base.Preconditions.checkNotNull;
import java.beans.ConstructorProperties;
import java.util.Date;
import javax.inject.Named;
import org.jclouds.javax.annotation.Nullable;
import com.google.common.base.Objects;
import com.google.common.base.Objects.ToStringHelper;
import com.google.gson.annotations.SerializedName;
/**
* An Openstack Nova Volume Snapshot
*/
*/
public class VolumeSnapshot {
public static Builder<?> builder() {
@ -38,67 +40,81 @@ public class VolumeSnapshot {
}
public Builder<?> toBuilder() {
return new ConcreteBuilder().fromSnapshot(this);
return new ConcreteBuilder().fromVolumeSnapshot(this);
}
public static abstract class Builder<T extends Builder<T>> {
protected abstract T self();
private String id;
private String volumeId;
private Volume.Status status;
private int size;
private Date created;
private String name;
private String description;
protected String id;
protected String volumeId;
protected Volume.Status status;
protected int size;
protected Date created;
protected String name;
protected String description;
/** @see VolumeSnapshot#getId() */
/**
* @see VolumeSnapshot#getId()
*/
public T id(String id) {
this.id = id;
return self();
}
/** @see VolumeSnapshot#getVolumeId() */
/**
* @see VolumeSnapshot#getVolumeId()
*/
public T volumeId(String volumeId) {
this.volumeId = volumeId;
return self();
}
/** @see VolumeSnapshot#getStatus() */
/**
* @see VolumeSnapshot#getStatus()
*/
public T status(Volume.Status status) {
this.status = status;
return self();
}
/** @see VolumeSnapshot#getSize() */
/**
* @see VolumeSnapshot#getSize()
*/
public T size(int size) {
this.size = size;
return self();
}
/** @see VolumeSnapshot#getCreated() */
/**
* @see VolumeSnapshot#getCreated()
*/
public T created(Date created) {
this.created = created;
return self();
}
/** @see VolumeSnapshot#getName() */
/**
* @see VolumeSnapshot#getName()
*/
public T name(String name) {
this.name = name;
return self();
}
/** @see VolumeSnapshot#getDescription() */
/**
* @see VolumeSnapshot#getDescription()
*/
public T description(String description) {
this.description = description;
return self();
}
public VolumeSnapshot build() {
return new VolumeSnapshot(this);
return new VolumeSnapshot(id, volumeId, status, size, created, name, description);
}
public T fromSnapshot(VolumeSnapshot in) {
public T fromVolumeSnapshot(VolumeSnapshot in) {
return this
.id(in.getId())
.volumeId(in.getVolumeId())
@ -106,10 +122,8 @@ public class VolumeSnapshot {
.size(in.getSize())
.created(in.getCreated())
.name(in.getName())
.description(in.getDescription())
;
.description(in.getDescription());
}
}
private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
@ -119,31 +133,28 @@ public class VolumeSnapshot {
}
}
protected VolumeSnapshot() {
// we want serializers like Gson to work w/o using sun.misc.Unsafe,
// prohibited in GAE. This also implies fields are not final.
// see http://code.google.com/p/jclouds/issues/detail?id=925
}
private final String id;
private final String volumeId;
private final Volume.Status status;
private final int size;
@Named("createdAt")
private final Date created;
@Named("displayName")
private final String name;
@Named("displayDescription")
private final String description;
private String id;
private String volumeId;
private Volume.Status status;
private int size;
@SerializedName(value="createdAt")
private Date created;
@SerializedName(value="displayName")
private String name;
@SerializedName(value="displayDescription")
private String description;
protected VolumeSnapshot(Builder<?> builder) {
this.id = checkNotNull(builder.id, "id");
this.volumeId = checkNotNull(builder.volumeId, "volumeId");
this.status = checkNotNull(builder.status, "status");
this.size = builder.size;
this.created = builder.created;
this.name = builder.name;
this.description = builder.description;
@ConstructorProperties({
"id", "volumeId", "status", "size", "createdAt", "displayName", "displayDescription"
})
protected VolumeSnapshot(String id, String volumeId, Volume.Status status, int size, @Nullable Date created, @Nullable String name, @Nullable String description) {
this.id = checkNotNull(id, "id");
this.volumeId = checkNotNull(volumeId, "volumeId");
this.status = checkNotNull(status, "status");
this.size = size;
this.created = created;
this.name = name;
this.description = description;
}
/**
@ -190,7 +201,6 @@ public class VolumeSnapshot {
return this.name;
}
/**
* @return the description of this snapshot - as displayed in the openstack console
*/
@ -215,20 +225,12 @@ public class VolumeSnapshot {
&& Objects.equal(this.size, that.size)
&& Objects.equal(this.created, that.created)
&& Objects.equal(this.name, that.name)
&& Objects.equal(this.description, that.description)
;
&& Objects.equal(this.description, that.description);
}
protected ToStringHelper string() {
return Objects.toStringHelper("")
.add("id", id)
.add("volumeId", volumeId)
.add("status", status)
.add("size", size)
.add("created", created)
.add("name", name)
.add("description", description)
;
return Objects.toStringHelper(this)
.add("id", id).add("volumeId", volumeId).add("status", status).add("size", size).add("created", created).add("name", name).add("description", description);
}
@Override

View File

@ -1,4 +1,4 @@
/**
/*
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
@ -20,21 +20,24 @@ package org.jclouds.openstack.nova.v2_0.domain;
import static com.google.common.base.Preconditions.checkNotNull;
import java.util.Collections;
import java.beans.ConstructorProperties;
import java.util.Date;
import java.util.Map;
import javax.inject.Named;
import org.jclouds.javax.annotation.Nullable;
import com.google.common.base.Objects;
import com.google.common.base.Optional;
import com.google.common.base.Objects.ToStringHelper;
import com.google.common.base.Optional;
import com.google.common.collect.ImmutableMap;
import com.google.gson.annotations.SerializedName;
/**
* Volume Type used in the Volume Type Extension for Nova
*
* @see org.jclouds.openstack.nova.v2_0.extensions.VolumeTypeClient
*/
*/
public class VolumeType {
public static Builder<?> builder() {
@ -48,11 +51,11 @@ public class VolumeType {
public static abstract class Builder<T extends Builder<T>> {
protected abstract T self();
private String id;
private String name;
private Date created = new Date();
private Date updated;
private Map<String, String> extraSpecs;
protected String id;
protected String name;
protected Date created;
protected Date updated;
protected Map<String, String> extraSpecs = ImmutableMap.of();
/**
* @see VolumeType#getId()
@ -90,23 +93,22 @@ public class VolumeType {
* @see VolumeType#getExtraSpecs()
*/
public T extraSpecs(Map<String, String> extraSpecs) {
this.extraSpecs = ImmutableMap.copyOf(extraSpecs);
this.extraSpecs = ImmutableMap.copyOf(checkNotNull(extraSpecs, "extraSpecs"));
return self();
}
public VolumeType build() {
return new VolumeType(this);
return new VolumeType(id, name, created, updated, extraSpecs);
}
public T fromVolumeType(VolumeType in) {
return this
.id(in.getId())
.name(in.getName())
.extraSpecs(in.getExtraSpecs())
.created(in.getCreated())
.updated(in.getUpdated().orNull());
.updated(in.getUpdated().orNull())
.extraSpecs(in.getExtraSpecs());
}
}
private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
@ -116,27 +118,24 @@ public class VolumeType {
}
}
protected VolumeType() {
// we want serializers like Gson to work w/o using sun.misc.Unsafe,
// prohibited in GAE. This also implies fields are not final.
// see http://code.google.com/p/jclouds/issues/detail?id=925
}
private final String id;
private final String name;
@Named("created_at")
private final Date created;
@Named("updated_at")
private final Optional<Date> updated;
@Named("extra_specs")
private final Map<String, String> extraSpecs;
private String id;
private String name;
@SerializedName("created_at")
private Date created;
@SerializedName("updated_at")
private Optional<Date> updated = Optional.absent();
@SerializedName(value = "extra_specs")
private Map<String, String> extraSpecs = ImmutableMap.of();
protected VolumeType(Builder<?> builder) {
this.id = checkNotNull(builder.id, "id");
this.name = checkNotNull(builder.name, "name");
this.extraSpecs = checkNotNull(builder.extraSpecs, "extraSpecs");
this.created = checkNotNull(builder.created, "created");
this.updated = Optional.fromNullable(builder.updated);
@ConstructorProperties({
"id", "name", "created_at", "updated_at", "extra_specs"
})
protected VolumeType(String id, String name, Date created, @Nullable Date updated, Map<String, String> extraSpecs) {
this.id = checkNotNull(id, "id");
this.name = checkNotNull(name, "name");
this.created = checkNotNull(created, "created");
this.updated = Optional.fromNullable(updated);
this.extraSpecs = ImmutableMap.copyOf(checkNotNull(extraSpecs, "extraSpecs"));
}
public String getId() {
@ -147,18 +146,22 @@ public class VolumeType {
return this.name;
}
/** The Date the VolumeType was created */
/**
* The Date the VolumeType was created
*/
public Date getCreated() {
return created;
return this.created;
}
/** The Date the VolumeType as last updated - absent if no updates have taken place */
/**
* The Date the VolumeType as last updated - absent if no updates have taken place
*/
public Optional<Date> getUpdated() {
return updated;
return this.updated;
}
public Map<String, String> getExtraSpecs() {
return Collections.unmodifiableMap(this.extraSpecs);
return this.extraSpecs;
}
@Override
@ -179,12 +182,8 @@ public class VolumeType {
}
protected ToStringHelper string() {
return Objects.toStringHelper("")
.add("id", id)
.add("name", name)
.add("created", created)
.add("updated", updated)
.add("extraSpecs", extraSpecs);
return Objects.toStringHelper(this)
.add("id", id).add("name", name).add("created", created).add("updated", updated).add("extraSpecs", extraSpecs);
}
@Override

View File

@ -34,7 +34,6 @@ import javax.inject.Inject;
import org.jclouds.encryption.internal.Base64;
import org.jclouds.http.HttpRequest;
import org.jclouds.openstack.nova.v2_0.NovaClient;
import org.jclouds.openstack.nova.v2_0.domain.SecurityGroup;
import org.jclouds.rest.MapBinder;
import org.jclouds.rest.binders.BindToJsonPayload;
import org.jclouds.util.Preconditions2;
@ -42,6 +41,7 @@ import org.jclouds.util.Preconditions2;
import com.google.common.base.Objects;
import com.google.common.base.Objects.ToStringHelper;
import com.google.common.base.Optional;
import com.google.common.collect.ForwardingObject;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Lists;
@ -162,7 +162,7 @@ public class CreateServerOptions implements MapBinder {
List<File> personality;
String key_name;
@SerializedName(value = "security_groups")
Set<SecurityGroup> securityGroupNames;
Set<NamedThingy> securityGroupNames;
String user_data;
private ServerRequest(String name, String imageRef, String flavorRef) {
@ -187,10 +187,9 @@ public class CreateServerOptions implements MapBinder {
if (userData != null)
server.user_data = Base64.encodeBytes(userData);
if (securityGroupNames.size() > 0) {
server.securityGroupNames = Sets.newHashSet();
server.securityGroupNames = Sets.newLinkedHashSet();
for (String groupName : securityGroupNames) {
SecurityGroup group = SecurityGroup.builder().name(groupName).build();
server.securityGroupNames.add(group);
server.securityGroupNames.add(new NamedThingy(groupName));
}
}
if (adminPass != null) {
@ -200,6 +199,20 @@ public class CreateServerOptions implements MapBinder {
return bindToRequest(request, ImmutableMap.of("server", server));
}
private static class NamedThingy extends ForwardingObject {
private String name;
private NamedThingy(String name) {
this.name = name;
}
@Override
protected Object delegate() {
return name;
}
}
/**
* You may further customize a cloud server by injecting data into the file
* system of the cloud server itself. This is useful, for example, for

View File

@ -64,7 +64,7 @@ public class NovaComputeServiceAdapterExpectTest extends BaseNovaComputeServiceC
ImmutableMultimap.<String, String> builder().put("Accept", "application/json")
.put("X-Auth-Token", authToken).build())
.payload(payloadFromStringWithContentType(
"{\"server\":{\"name\":\"test-e92\",\"imageRef\":\"1241\",\"flavorRef\":\"100\",\"security_groups\":[{\"name\":\"group2\"},{\"name\":\"group1\"}]}}","application/json"))
"{\"server\":{\"name\":\"test-e92\",\"imageRef\":\"1241\",\"flavorRef\":\"100\",\"security_groups\":[{\"name\":\"group1\"}, {\"name\":\"group2\"}]}}","application/json"))
.build();
HttpResponse createServerResponse = HttpResponse.builder().statusCode(202).message("HTTP/1.1 202 Accepted")

View File

@ -87,7 +87,7 @@ public class SimpleTenantUsageClientExpectTest extends BaseNovaClientExpectTest
SimpleTenantUsage usage = client.getTenantUsage("test-1234");
assertEquals(usage.getTenantId(), "f8535069c3fb404cb61c873b1a0b4921");
SimpleTenantUsage expected = SimpleTenantUsage.builder().totalHours(4.833333333333333E-7).totalLocalGbUsage(1.933333333333333E-05)
SimpleTenantUsage expected = SimpleTenantUsage.builder().tenantId("f8535069c3fb404cb61c873b1a0b4921").totalHours(4.833333333333333E-7).totalLocalGbUsage(1.933333333333333E-05)
.start(dateService.iso8601DateParse("2012-04-18 13:32:07.255743")).stop(dateService.iso8601DateParse("2012-04-18 13:32:07.255743"))
.totalMemoryMbUsage(0.0014847999999999999).totalVcpusUsage(7.249999999999999E-07).serverUsages(
ImmutableSet.of(

View File

@ -115,7 +115,7 @@ public class ServerClientExpectTest extends BaseNovaClientExpectTest {
ImmutableMultimap.<String, String> builder().put("Accept", "application/json")
.put("X-Auth-Token", authToken).build())
.payload(payloadFromStringWithContentType(
"{\"server\":{\"name\":\"test-e92\",\"imageRef\":\"1241\",\"flavorRef\":\"100\",\"security_groups\":[{\"name\":\"group2\"},{\"name\":\"group1\"}]}}","application/json"))
"{\"server\":{\"name\":\"test-e92\",\"imageRef\":\"1241\",\"flavorRef\":\"100\",\"security_groups\":[{\"name\":\"group1\"},{\"name\":\"group2\"}]}}","application/json"))
.build();

View File

@ -54,17 +54,17 @@ public class ParseComputeServiceTypicalSecurityGroupTest extends BaseItemParserT
@Consumes(MediaType.APPLICATION_JSON)
public SecurityGroup expected() {
Set<SecurityGroupRule> securityGroupRules = ImmutableSet.<SecurityGroupRule> of(
Set<SecurityGroupRule> securityGroupRules = ImmutableSet.of(
SecurityGroupRule.builder().fromPort(22)
.ipProtocol(IpProtocol.TCP).toPort(22).parentGroupId("2769")
.ipRange("0.0.0.0/0").id("10331").build(),
SecurityGroupRule.builder().fromPort(22).group(new TenantIdAndName("37936628937291", "jclouds_mygroup"))
SecurityGroupRule.builder().fromPort(22).group(TenantIdAndName.builder().tenantId("37936628937291").name("jclouds_mygroup").build())
.ipProtocol(IpProtocol.TCP).toPort(22).parentGroupId("2769")
.id("10332").build(),
SecurityGroupRule.builder().fromPort(8080)
.ipProtocol(IpProtocol.TCP).toPort(8080).parentGroupId("2769")
.ipRange("0.0.0.0/0").id("10333").build(),
SecurityGroupRule.builder().fromPort(8080).group(new TenantIdAndName("37936628937291", "jclouds_mygroup"))
SecurityGroupRule.builder().fromPort(8080).group(TenantIdAndName.builder().tenantId("37936628937291").name("jclouds_mygroup").build())
.ipProtocol(IpProtocol.TCP).toPort(8080).parentGroupId("2769")
.id("10334").build()
);

View File

@ -57,7 +57,7 @@ public class ParseSecurityGroupTest extends BaseItemParserTest<SecurityGroup> {
SecurityGroupRule.builder().fromPort(22)
.ipProtocol(IpProtocol.TCP).toPort(22).parentGroupId("28")
.ipRange("10.2.6.0/24").id("108").build(),
SecurityGroupRule.builder().fromPort(22).group(new TenantIdAndName("admin", "11111"))
SecurityGroupRule.builder().fromPort(22).group(TenantIdAndName.builder().name("11111").tenantId("admin").build())
.ipProtocol(IpProtocol.TCP).toPort(22).parentGroupId("28")
.id("109").build());

View File

@ -95,7 +95,7 @@ public class ParseServerWithAllExtensionsTest extends BaseItemParserTest<Server>
.addresses(ImmutableMultimap.of("private", Address.createV4("10.0.0.8")))
.diskConfig("MANUAL")
.extendedStatus(ServerExtendedStatus.builder().vmState("paused").powerState(3).build())
.extraAttributes(ServerExtendedAttributes.builder().instanceName("instance-00000014").hostName("ubuntu").build())
.extendedAttributes(ServerExtendedAttributes.builder().instanceName("instance-00000014").hostName("ubuntu").build())
.build();
}

View File

@ -29,7 +29,7 @@ import org.testng.annotations.Test;
*/
@Test(groups = "unit", testName = "SecurityGroupPredicatesTest")
public class SecurityGroupPredicatesTest {
SecurityGroup ref = SecurityGroup.builder().name("jclouds").description("description").build();
SecurityGroup ref = SecurityGroup.builder().id("12345").name("jclouds").description("description").build();
@Test
public void testnameEqualsWhenEqual() {

View File

@ -23,8 +23,11 @@ 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 java.beans.ConstructorProperties;
import java.net.URI;
import javax.inject.Named;
import org.jclouds.javax.annotation.Nullable;
import com.google.common.base.Objects;
@ -134,17 +137,12 @@ public class Link {
}
}
protected Link() {
// we want serializers like Gson to work w/o using sun.misc.Unsafe,
// prohibited in GAE. This also implies fields are not final.
// see http://code.google.com/p/jclouds/issues/detail?id=925
}
@SerializedName("rel")
@Named("rel")
protected Relation relation;
protected String type;
protected URI href;
@ConstructorProperties({"rel", "type", "href"})
protected Link(Relation relation, @Nullable String type, URI href) {
this.relation = checkNotNull(relation, "relation");
this.type = type;

View File

@ -94,8 +94,7 @@ public class Resource implements Comparable<Resource> {
return this
.id(in.getId())
.name(in.getName())
.links(in.getLinks())
;
.links(in.getLinks());
}
}
@ -106,16 +105,17 @@ public class Resource implements Comparable<Resource> {
}
}
protected Resource() {
// we want serializers like Gson to work w/o using sun.misc.Unsafe,
// prohibited in GAE. This also implies fields are not final.
// see http://code.google.com/p/jclouds/issues/detail?id=925
}
private String id;
private String name;
private Set<Link> links = ImmutableSet.of();
protected Resource(String id, @Nullable String name, @Nullable Set<Link> links) {
this.id = checkNotNull(id);
this.name = name;
this.links = links == null ? ImmutableSet.<Link>of() : ImmutableSet.copyOf(links);
}
@Deprecated
protected Resource(Builder<?> builder) {
this.id = checkNotNull(builder.id, "id");
this.name = builder.name;