diff --git a/sandbox-providers/softlayer/src/main/java/org/jclouds/softlayer/SoftLayerAsyncClient.java b/sandbox-providers/softlayer/src/main/java/org/jclouds/softlayer/SoftLayerAsyncClient.java index b1e022b6a2..c301977b7a 100644 --- a/sandbox-providers/softlayer/src/main/java/org/jclouds/softlayer/SoftLayerAsyncClient.java +++ b/sandbox-providers/softlayer/src/main/java/org/jclouds/softlayer/SoftLayerAsyncClient.java @@ -29,7 +29,7 @@ import org.jclouds.softlayer.features.VirtualGuestAsyncClient; *

* * @see SoftLayerClient - * @see + * @see * @author Adrian Cole */ public interface SoftLayerAsyncClient { diff --git a/sandbox-providers/softlayer/src/main/java/org/jclouds/softlayer/SoftLayerClient.java b/sandbox-providers/softlayer/src/main/java/org/jclouds/softlayer/SoftLayerClient.java index adc64ec552..1656ff1c8e 100644 --- a/sandbox-providers/softlayer/src/main/java/org/jclouds/softlayer/SoftLayerClient.java +++ b/sandbox-providers/softlayer/src/main/java/org/jclouds/softlayer/SoftLayerClient.java @@ -32,7 +32,7 @@ import org.jclouds.softlayer.features.VirtualGuestClient; *

* * @see SoftLayerAsyncClient - * @see + * @see * @author Adrian Cole */ @Timeout(duration = 60, timeUnit = TimeUnit.SECONDS) diff --git a/sandbox-providers/softlayer/src/main/java/org/jclouds/softlayer/domain/Datacenter.java b/sandbox-providers/softlayer/src/main/java/org/jclouds/softlayer/domain/Datacenter.java index fe105fc989..be58688ac3 100644 --- a/sandbox-providers/softlayer/src/main/java/org/jclouds/softlayer/domain/Datacenter.java +++ b/sandbox-providers/softlayer/src/main/java/org/jclouds/softlayer/domain/Datacenter.java @@ -21,7 +21,7 @@ package org.jclouds.softlayer.domain; /** * * @author Adrian Cole - * @see */ public class Datacenter implements Comparable { diff --git a/sandbox-providers/softlayer/src/main/java/org/jclouds/softlayer/domain/ProductPackage.java b/sandbox-providers/softlayer/src/main/java/org/jclouds/softlayer/domain/ProductPackage.java index cb9ce12223..c8c43ab0cc 100644 --- a/sandbox-providers/softlayer/src/main/java/org/jclouds/softlayer/domain/ProductPackage.java +++ b/sandbox-providers/softlayer/src/main/java/org/jclouds/softlayer/domain/ProductPackage.java @@ -18,19 +18,19 @@ */ package org.jclouds.softlayer.domain; -import static com.google.common.base.Preconditions.checkNotNull; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Sets; import java.util.Set; -import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Sets; +import static com.google.common.base.Preconditions.checkNotNull; /** * The SoftLayer_Product_Package data type contains information about packages * from which orders can be generated. Packages contain general information * regarding what is in them, where they are currently sold, availability, and * pricing. - * + * * @author Adrian Cole * @see { private String name; private String description; private Set items = Sets.newLinkedHashSet(); + private Set datacenters = Sets.newLinkedHashSet(); public Builder id(long id) { this.id = id; @@ -65,23 +66,26 @@ public class ProductPackage implements Comparable { return this; } - public Builder productItem(ProductItem items) { - this.items.add(checkNotNull(items, "items")); - return this; - } - public Builder items(Iterable items) { this.items = ImmutableSet. copyOf(checkNotNull(items, "items")); return this; } + public Builder datacenters(Iterable datacenters) { + this.datacenters = ImmutableSet. copyOf(checkNotNull(datacenters, "datacenters")); + return this; + } + public ProductPackage build() { - return new ProductPackage(id, name, description, items); + return new ProductPackage(id, name, description, items, datacenters); } public static Builder fromProductPackage(ProductPackage in) { - return ProductPackage.builder().id(in.getId()).name(in.getName()).description(in.getDescription()) - .items(in.getItems()); + return ProductPackage.builder().id(in.getId()) + .name(in.getName()) + .description(in.getDescription()) + .items(in.getItems()) + .datacenters(in.getDatacenters()); } } @@ -89,17 +93,19 @@ public class ProductPackage implements Comparable { private String name; private String description; private Set items = Sets.newLinkedHashSet(); + private Set locations = Sets.newLinkedHashSet(); // for deserializer ProductPackage() { } - public ProductPackage(long id, String name, String description, Iterable items) { + public ProductPackage(long id, String name, String description, Iterable items, Iterable datacenters) { this.id = id; this.name = name; this.description = description; this.items = ImmutableSet. copyOf(checkNotNull(items, "items")); + this.locations = ImmutableSet. copyOf(checkNotNull(datacenters, "datacenters")); } @Override @@ -133,7 +139,7 @@ public class ProductPackage implements Comparable { } /** - * + * * @return A collection of valid items available for purchase in this * package. */ @@ -141,6 +147,14 @@ public class ProductPackage implements Comparable { return items; } + /** + * + * @return A collection of valid locations for this package. + */ + public Set getDatacenters() { + return locations; + } + public Builder toBuilder() { return Builder.fromProductPackage(this); } @@ -169,6 +183,6 @@ public class ProductPackage implements Comparable { @Override public String toString() { - return "ProductPackage [id=" + id + ", name=" + name + ", description=" + description + ", items=" + items + "]"; + return "ProductPackage [id=" + id + ", name=" + name + ", description=" + description + ", items=" + items + ", datacenters=" + locations + "]"; } } diff --git a/sandbox-providers/softlayer/src/main/java/org/jclouds/softlayer/domain/VirtualGuest.java b/sandbox-providers/softlayer/src/main/java/org/jclouds/softlayer/domain/VirtualGuest.java index 8c080da7be..7823d95f0a 100644 --- a/sandbox-providers/softlayer/src/main/java/org/jclouds/softlayer/domain/VirtualGuest.java +++ b/sandbox-providers/softlayer/src/main/java/org/jclouds/softlayer/domain/VirtualGuest.java @@ -34,7 +34,7 @@ import com.google.gson.annotations.SerializedName; * * @author Adrian Cole * @see */ public class VirtualGuest implements Comparable { diff --git a/sandbox-providers/softlayer/src/main/java/org/jclouds/softlayer/features/DatacenterAsyncClient.java b/sandbox-providers/softlayer/src/main/java/org/jclouds/softlayer/features/DatacenterAsyncClient.java index 5abb61e874..37efa6a48f 100644 --- a/sandbox-providers/softlayer/src/main/java/org/jclouds/softlayer/features/DatacenterAsyncClient.java +++ b/sandbox-providers/softlayer/src/main/java/org/jclouds/softlayer/features/DatacenterAsyncClient.java @@ -41,7 +41,7 @@ import com.google.common.util.concurrent.ListenableFuture; *

* * @see DatacenterClient - * @see + * @see * @author Adrian Cole */ @RequestFilters(BasicAuthentication.class) diff --git a/sandbox-providers/softlayer/src/main/java/org/jclouds/softlayer/features/DatacenterClient.java b/sandbox-providers/softlayer/src/main/java/org/jclouds/softlayer/features/DatacenterClient.java index b8ca23ac25..33fbf75111 100644 --- a/sandbox-providers/softlayer/src/main/java/org/jclouds/softlayer/features/DatacenterClient.java +++ b/sandbox-providers/softlayer/src/main/java/org/jclouds/softlayer/features/DatacenterClient.java @@ -29,7 +29,7 @@ import org.jclouds.softlayer.domain.Datacenter; *

* * @see DatacenterAsyncClient - * @see + * @see * @author Adrian Cole */ @Timeout(duration = 4, timeUnit = TimeUnit.SECONDS) diff --git a/sandbox-providers/softlayer/src/main/java/org/jclouds/softlayer/features/ProductPackageAsyncClient.java b/sandbox-providers/softlayer/src/main/java/org/jclouds/softlayer/features/ProductPackageAsyncClient.java index e7805cda98..f060993a5c 100644 --- a/sandbox-providers/softlayer/src/main/java/org/jclouds/softlayer/features/ProductPackageAsyncClient.java +++ b/sandbox-providers/softlayer/src/main/java/org/jclouds/softlayer/features/ProductPackageAsyncClient.java @@ -18,12 +18,7 @@ */ package org.jclouds.softlayer.features; -import javax.ws.rs.Consumes; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.core.MediaType; - +import com.google.common.util.concurrent.ListenableFuture; import org.jclouds.http.filters.BasicAuthentication; import org.jclouds.rest.annotations.ExceptionParser; import org.jclouds.rest.annotations.QueryParams; @@ -31,20 +26,24 @@ import org.jclouds.rest.annotations.RequestFilters; import org.jclouds.rest.functions.ReturnNullOnNotFoundOr404; import org.jclouds.softlayer.domain.ProductPackage; -import com.google.common.util.concurrent.ListenableFuture; +import javax.ws.rs.Consumes; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.core.MediaType; /** * Provides asynchronous access to ProductPackage via their REST API. *

- * + * * @see ProductPackageClient - * @see + * @see * @author Adrian Cole */ @RequestFilters(BasicAuthentication.class) @Path("/v{jclouds.api-version}") public interface ProductPackageAsyncClient { - public static String PRODUCT_MASK = "items"; + public static String PRODUCT_MASK = "items;locations"; /** * @see ProductPackageClient#getProductPackage diff --git a/sandbox-providers/softlayer/src/main/java/org/jclouds/softlayer/features/ProductPackageClient.java b/sandbox-providers/softlayer/src/main/java/org/jclouds/softlayer/features/ProductPackageClient.java index dbc6af02a3..09339ba18b 100644 --- a/sandbox-providers/softlayer/src/main/java/org/jclouds/softlayer/features/ProductPackageClient.java +++ b/sandbox-providers/softlayer/src/main/java/org/jclouds/softlayer/features/ProductPackageClient.java @@ -28,7 +28,7 @@ import org.jclouds.softlayer.domain.ProductPackage; *

* * @see ProductPackageAsyncClient - * @see + * @see * @author Adrian Cole */ @Timeout(duration = 30, timeUnit = TimeUnit.SECONDS) diff --git a/sandbox-providers/softlayer/src/main/java/org/jclouds/softlayer/features/VirtualGuestAsyncClient.java b/sandbox-providers/softlayer/src/main/java/org/jclouds/softlayer/features/VirtualGuestAsyncClient.java index c7d7ded984..78f327b97b 100644 --- a/sandbox-providers/softlayer/src/main/java/org/jclouds/softlayer/features/VirtualGuestAsyncClient.java +++ b/sandbox-providers/softlayer/src/main/java/org/jclouds/softlayer/features/VirtualGuestAsyncClient.java @@ -42,7 +42,7 @@ import com.google.common.util.concurrent.ListenableFuture; *

* * @see VirtualGuestClient - * @see + * @see * @author Adrian Cole */ @RequestFilters(BasicAuthentication.class) diff --git a/sandbox-providers/softlayer/src/main/java/org/jclouds/softlayer/features/VirtualGuestClient.java b/sandbox-providers/softlayer/src/main/java/org/jclouds/softlayer/features/VirtualGuestClient.java index 8d969355c6..7554e40984 100644 --- a/sandbox-providers/softlayer/src/main/java/org/jclouds/softlayer/features/VirtualGuestClient.java +++ b/sandbox-providers/softlayer/src/main/java/org/jclouds/softlayer/features/VirtualGuestClient.java @@ -29,7 +29,7 @@ import org.jclouds.softlayer.domain.VirtualGuest; *

* * @see VirtualGuestAsyncClient - * @see + * @see * @author Adrian Cole */ @Timeout(duration = 4, timeUnit = TimeUnit.SECONDS) diff --git a/sandbox-providers/softlayer/src/test/java/org/jclouds/softlayer/features/ProductPackageAsyncClientTest.java b/sandbox-providers/softlayer/src/test/java/org/jclouds/softlayer/features/ProductPackageAsyncClientTest.java index 90dd1fa6a7..faae225fba 100644 --- a/sandbox-providers/softlayer/src/test/java/org/jclouds/softlayer/features/ProductPackageAsyncClientTest.java +++ b/sandbox-providers/softlayer/src/test/java/org/jclouds/softlayer/features/ProductPackageAsyncClientTest.java @@ -43,7 +43,7 @@ public class ProductPackageAsyncClientTest extends BaseSoftLayerAsyncClientTest< assertRequestLineEquals( httpRequest, - "GET https://api.softlayer.com/rest/v3/SoftLayer_Product_Package/1234.json?objectMask=items HTTP/1.1"); + "GET https://api.softlayer.com/rest/v3/SoftLayer_Product_Package/1234.json?objectMask=items%3Blocations HTTP/1.1"); assertNonPayloadHeadersEqual(httpRequest, "Accept: application/json\n"); assertPayloadEquals(httpRequest, null, null, false); diff --git a/sandbox-providers/softlayer/src/test/java/org/jclouds/softlayer/features/ProductPackageClientLiveTest.java b/sandbox-providers/softlayer/src/test/java/org/jclouds/softlayer/features/ProductPackageClientLiveTest.java index 353d479b13..32ded9be2c 100644 --- a/sandbox-providers/softlayer/src/test/java/org/jclouds/softlayer/features/ProductPackageClientLiveTest.java +++ b/sandbox-providers/softlayer/src/test/java/org/jclouds/softlayer/features/ProductPackageClientLiveTest.java @@ -20,6 +20,7 @@ package org.jclouds.softlayer.features; import static org.testng.Assert.assertTrue; +import org.jclouds.softlayer.domain.Datacenter; import org.jclouds.softlayer.domain.ProductItem; import org.jclouds.softlayer.domain.ProductItemPrice; import org.jclouds.softlayer.domain.ProductPackage; @@ -57,6 +58,11 @@ public class ProductPackageClientLiveTest extends BaseSoftLayerClientLiveTest { // assertEquals(item.getId(), newDetails.getId()); checkProductItem(item); } + + assertTrue(response.getDatacenters().size() > 0); + for (Datacenter datacenter : response.getDatacenters()) { + checkDatacenter(datacenter); + } } } @@ -81,4 +87,10 @@ public class ProductPackageClientLiveTest extends BaseSoftLayerClientLiveTest { assert price.getRecurringFee() != null || price.getHourlyRecurringFee() != null : price; } + private void checkDatacenter(Datacenter datacenter) { + assert datacenter.getId() > 0 : datacenter; + assert datacenter.getName() != null : datacenter; + assert datacenter.getLongName() != null : datacenter; + } + }