diff --git a/sandbox-providers/softlayer/src/main/java/org/jclouds/softlayer/compute/functions/DescriptionFromProductItem.java b/sandbox-providers/softlayer/src/main/java/org/jclouds/softlayer/compute/functions/DescriptionFromProductItem.java deleted file mode 100644 index ee3f6a1e5d..0000000000 --- a/sandbox-providers/softlayer/src/main/java/org/jclouds/softlayer/compute/functions/DescriptionFromProductItem.java +++ /dev/null @@ -1,44 +0,0 @@ -/** - * 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, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.jclouds.softlayer.compute.functions; - -import com.google.common.base.Function; -import org.jclouds.softlayer.domain.ProductItem; - -import java.util.NoSuchElementException; - -/** - * Returns the description of the ProductItem. - * @author Jason King - */ -public class DescriptionFromProductItem implements Function { - - /** - * - * @param productItem the productItem to use - * @return the description. - * @throws java.util.NoSuchElementException if the description is missing - */ - @Override - public String apply(ProductItem productItem) { - String result = productItem.getDescription(); - if(result==null) throw new NoSuchElementException(); - return result; - } -} diff --git a/sandbox-providers/softlayer/src/main/java/org/jclouds/softlayer/compute/functions/CapacityFromProductItem.java b/sandbox-providers/softlayer/src/main/java/org/jclouds/softlayer/compute/functions/ProductItems.java similarity index 56% rename from sandbox-providers/softlayer/src/main/java/org/jclouds/softlayer/compute/functions/CapacityFromProductItem.java rename to sandbox-providers/softlayer/src/main/java/org/jclouds/softlayer/compute/functions/ProductItems.java index cf5e77b314..7ba9344dfb 100644 --- a/sandbox-providers/softlayer/src/main/java/org/jclouds/softlayer/compute/functions/CapacityFromProductItem.java +++ b/sandbox-providers/softlayer/src/main/java/org/jclouds/softlayer/compute/functions/ProductItems.java @@ -21,24 +21,29 @@ package org.jclouds.softlayer.compute.functions; import com.google.common.base.Function; import org.jclouds.softlayer.domain.ProductItem; -import java.util.NoSuchElementException; - -/** - * Returns the capacity of the ProductItem. - * @author Jason King - */ -public class CapacityFromProductItem implements Function { +public class ProductItems { /** - * - * @param productItem the productItem to use - * @return the capacity - * @throws NoSuchElementException if the capacity is missing + * Creates a function to get the capacity from a product item. */ - @Override - public Float apply(ProductItem productItem) { - Float result = productItem.getCapacity(); - if(result==null) throw new NoSuchElementException(); - return result; + public static Function capacity() { + return new Function() { + @Override + public Float apply(ProductItem productItem) { + return productItem.getCapacity(); + } + }; + } + + /** + * Creates a function to get the description from a product item. + */ + public static Function description() { + return new Function() { + @Override + public String apply(ProductItem productItem) { + return productItem.getDescription(); + } + }; } } diff --git a/sandbox-providers/softlayer/src/main/java/org/jclouds/softlayer/predicates/ProductItemPredicates.java b/sandbox-providers/softlayer/src/main/java/org/jclouds/softlayer/predicates/ProductItemPredicates.java index 3b291a93a9..d8f540e83c 100644 --- a/sandbox-providers/softlayer/src/main/java/org/jclouds/softlayer/predicates/ProductItemPredicates.java +++ b/sandbox-providers/softlayer/src/main/java/org/jclouds/softlayer/predicates/ProductItemPredicates.java @@ -22,6 +22,8 @@ import com.google.common.base.Predicate; import org.jclouds.softlayer.domain.ProductItem; import org.jclouds.softlayer.domain.ProductItemCategory; +import static com.google.common.base.Preconditions.checkNotNull; + public class ProductItemPredicates { /** @@ -30,9 +32,11 @@ public class ProductItemPredicates { * @return true if it does, otherwise false. */ public static Predicate categoryCode(final String category) { + checkNotNull(category, "category cannot be null"); return new Predicate() { @Override public boolean apply(ProductItem productItem) { + checkNotNull(productItem, "productItem cannot ne null"); for(ProductItemCategory productItemCategory: productItem.getCategories()) { if(category.equals(productItemCategory.getCategoryCode())) return true; } @@ -52,12 +56,14 @@ public class ProductItemPredicates { * @return true if it does, otherwise false. */ public static Predicate capacity(final Float capacity) { + checkNotNull(capacity, "capacity cannot be null"); return new Predicate() { @Override public boolean apply(ProductItem productItem) { + checkNotNull(productItem, "productItem cannot ne null"); Float productItemCapacity = productItem.getCapacity(); if (productItemCapacity == null) return false; - return productItemCapacity.equals(capacity); + return capacity.equals(productItemCapacity); } @Override @@ -74,12 +80,12 @@ public class ProductItemPredicates { * @return true if it does, otherwise false. */ public static Predicate units(final String units) { + checkNotNull(units, "units cannot be null"); return new Predicate() { @Override public boolean apply(ProductItem productItem) { - String productItemUnits = productItem.getUnits(); - if (productItemUnits == null) return false; - return productItemUnits.equals(units); + checkNotNull(productItem, "productItem cannot ne null"); + return units.equals(productItem.getUnits()); } @Override diff --git a/sandbox-providers/softlayer/src/main/java/org/jclouds/softlayer/predicates/ProductPackagePredicates.java b/sandbox-providers/softlayer/src/main/java/org/jclouds/softlayer/predicates/ProductPackagePredicates.java index 67481f3154..e97a3b2df9 100644 --- a/sandbox-providers/softlayer/src/main/java/org/jclouds/softlayer/predicates/ProductPackagePredicates.java +++ b/sandbox-providers/softlayer/src/main/java/org/jclouds/softlayer/predicates/ProductPackagePredicates.java @@ -18,9 +18,10 @@ */ package org.jclouds.softlayer.predicates; +import com.google.common.base.Predicate; import org.jclouds.softlayer.domain.ProductPackage; -import com.google.common.base.Predicate; +import static com.google.common.base.Preconditions.checkNotNull; public class ProductPackagePredicates { @@ -32,7 +33,8 @@ public class ProductPackagePredicates { public static Predicate named(final String packageName) { return new Predicate() { public boolean apply(ProductPackage productPackage) { - return productPackage.getName().equals(packageName); + checkNotNull(productPackage, "productPackage cannot be null"); + return productPackage.getName().equals(packageName); } }; } diff --git a/sandbox-providers/softlayer/src/test/java/org/jclouds/softlayer/compute/functions/CapacityFromProductItemTest.java b/sandbox-providers/softlayer/src/test/java/org/jclouds/softlayer/compute/functions/CapacityFromProductItemTest.java deleted file mode 100644 index 492c7f7d8b..0000000000 --- a/sandbox-providers/softlayer/src/test/java/org/jclouds/softlayer/compute/functions/CapacityFromProductItemTest.java +++ /dev/null @@ -1,58 +0,0 @@ -/** - * 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, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.jclouds.softlayer.compute.functions; - -import org.jclouds.softlayer.domain.ProductItem; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.Test; - -import java.util.NoSuchElementException; - -import static org.testng.Assert.assertEquals; - -/** - * Tests {@code DescriptionFromProductItem} - * - * @author Jason King - */ -@Test(groups = "unit") -public class CapacityFromProductItemTest { - - private CapacityFromProductItem function; - - @BeforeMethod - public void setup() { - function = new CapacityFromProductItem(); - } - - @Test - public void testCapacity() { - ProductItem item = ProductItem.builder() - .id(1).capacity(2.0f) - .build(); - assertEquals(function.apply(item),2.0f); - } - - @Test(expectedExceptions = NoSuchElementException.class) - public void testCapacityMissing() { - ProductItem item = ProductItem.builder() - .id(1).build(); - function.apply(item); - } -} diff --git a/sandbox-providers/softlayer/src/test/java/org/jclouds/softlayer/compute/functions/DescriptionFromProductItemTest.java b/sandbox-providers/softlayer/src/test/java/org/jclouds/softlayer/compute/functions/ProductItemsTest.java similarity index 60% rename from sandbox-providers/softlayer/src/test/java/org/jclouds/softlayer/compute/functions/DescriptionFromProductItemTest.java rename to sandbox-providers/softlayer/src/test/java/org/jclouds/softlayer/compute/functions/ProductItemsTest.java index d8279dda70..a1f2cb5906 100644 --- a/sandbox-providers/softlayer/src/test/java/org/jclouds/softlayer/compute/functions/DescriptionFromProductItemTest.java +++ b/sandbox-providers/softlayer/src/test/java/org/jclouds/softlayer/compute/functions/ProductItemsTest.java @@ -22,36 +22,43 @@ import org.jclouds.softlayer.domain.ProductItem; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; -import java.util.NoSuchElementException; - +import static org.jclouds.softlayer.compute.functions.ProductItems.capacity; +import static org.jclouds.softlayer.compute.functions.ProductItems.description; import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertNull; /** - * Tests {@code DescriptionFromProductItem} + * Tests {@code ProductItems} + * * @author Jason King */ @Test(groups = "unit") -public class DescriptionFromProductItemTest { +public class ProductItemsTest { - private DescriptionFromProductItem function; + private ProductItem item; @BeforeMethod public void setup() { - function = new DescriptionFromProductItem(); + item = ProductItem.builder().id(1).capacity(2.0f).description("an item").build(); + } + @Test + public void testCapacity() { + assertEquals(capacity().apply(item), 2.0f); + } + + @Test + public void testCapacityMissing() { + ProductItem item = ProductItem.builder().id(1).build(); + assertNull(capacity().apply(item)); } @Test public void testDescription() { - ProductItem item = ProductItem.builder() - .id(1).description("an item") - .build(); - assertEquals(function.apply(item),"an item"); + assertEquals(description().apply(item),"an item"); } - @Test(expectedExceptions = NoSuchElementException.class) public void testDescriptionMissing() { - ProductItem item = ProductItem.builder() - .id(1).build(); - function.apply(item); + ProductItem item = ProductItem.builder().id(1).build(); + assertNull(description().apply(item)); } } 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 1355cb50d7..a9338e5c17 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 @@ -23,9 +23,8 @@ import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; import com.google.common.collect.Maps; import com.google.common.collect.Sets; -import org.jclouds.softlayer.compute.functions.CapacityFromProductItem; -import org.jclouds.softlayer.compute.functions.DescriptionFromProductItem; import org.jclouds.softlayer.compute.functions.ProductItemPriceFromProductItem; +import org.jclouds.softlayer.compute.functions.ProductItems; import org.jclouds.softlayer.domain.*; import org.jclouds.softlayer.reference.SoftLayerConstants; import org.testng.annotations.BeforeGroups; @@ -118,7 +117,7 @@ public class ProductPackageClientLiveTest extends BaseSoftLayerClientLiveTest { Predicates.and(categoryCode("ram"), capacity(1.0f))); // capacity is key in GB (1Gb = 1.0f) - Map ramToProductItem = Maps.uniqueIndex(ramItems, new CapacityFromProductItem()); + Map ramToProductItem = Maps.uniqueIndex(ramItems, ProductItems.capacity()); ProductItemPrice price = new ProductItemPriceFromProductItem().apply(ramToProductItem.get(1.0f)); assert new Long(1644L).equals(price.getId()); @@ -130,7 +129,7 @@ public class ProductPackageClientLiveTest extends BaseSoftLayerClientLiveTest { Iterable cpuItems = Iterables.filter(cloudServerProductPackage.getItems(), Predicates.and(units("PRIVATE_CORE"), capacity(2.0f))); // number of cores is the key - Map coresToProductItem = Maps.uniqueIndex(cpuItems, new CapacityFromProductItem()); + Map coresToProductItem = Maps.uniqueIndex(cpuItems, ProductItems.capacity()); ProductItemPrice price = new ProductItemPriceFromProductItem().apply(coresToProductItem.get(2.0f)); assert new Long(1963L).equals(price.getId()); @@ -140,7 +139,7 @@ public class ProductPackageClientLiveTest extends BaseSoftLayerClientLiveTest { public void testGetUbuntuPrice() { Iterable operatingSystems = Iterables.filter(cloudServerProductPackage.getItems(), categoryCode("os")); - Map osToProductItem = Maps.uniqueIndex(operatingSystems, new DescriptionFromProductItem()); + Map osToProductItem = Maps.uniqueIndex(operatingSystems, ProductItems.description()); ProductItemPrice price = new ProductItemPriceFromProductItem().apply(osToProductItem.get("Ubuntu Linux 8 LTS Hardy Heron - Minimal Install (64 bit)")); assert new Long(1693L).equals(price.getId()); @@ -151,17 +150,17 @@ public class ProductPackageClientLiveTest extends BaseSoftLayerClientLiveTest { Iterable ramItems = Iterables.filter(cloudServerProductPackage.getItems(), Predicates.and(categoryCode("ram"), capacity(1.0f))); - Map ramToProductItem = Maps.uniqueIndex(ramItems, new CapacityFromProductItem()); + Map ramToProductItem = Maps.uniqueIndex(ramItems, ProductItems.capacity()); ProductItemPrice ramPrice = new ProductItemPriceFromProductItem().apply(ramToProductItem.get(1.0f)); Iterable cpuItems = Iterables.filter(cloudServerProductPackage.getItems(), Predicates.and(units("PRIVATE_CORE"), capacity(2.0f))); - Map coresToProductItem = Maps.uniqueIndex(cpuItems, new CapacityFromProductItem()); + Map coresToProductItem = Maps.uniqueIndex(cpuItems, ProductItems.capacity()); ProductItemPrice cpuPrice = new ProductItemPriceFromProductItem().apply(coresToProductItem.get(2.0f)); Iterable operatingSystems = Iterables.filter(cloudServerProductPackage.getItems(), categoryCode("os")); - Map osToProductItem = Maps.uniqueIndex(operatingSystems, new DescriptionFromProductItem()); + Map osToProductItem = Maps.uniqueIndex(operatingSystems, ProductItems.description()); ProductItemPrice osPrice = new ProductItemPriceFromProductItem().apply(osToProductItem.get("Ubuntu Linux 8 LTS Hardy Heron - Minimal Install (64 bit)")); Set prices = Sets.newLinkedHashSet(); diff --git a/sandbox-providers/softlayer/src/test/java/org/jclouds/softlayer/predicates/ProductItemPredicatesTest.java b/sandbox-providers/softlayer/src/test/java/org/jclouds/softlayer/predicates/ProductItemPredicatesTest.java index 42a7b4de75..dfee60da70 100644 --- a/sandbox-providers/softlayer/src/test/java/org/jclouds/softlayer/predicates/ProductItemPredicatesTest.java +++ b/sandbox-providers/softlayer/src/test/java/org/jclouds/softlayer/predicates/ProductItemPredicatesTest.java @@ -21,6 +21,7 @@ package org.jclouds.softlayer.predicates; import com.google.common.collect.ImmutableSet; import org.jclouds.softlayer.domain.ProductItem; import org.jclouds.softlayer.domain.ProductItemCategory; +import org.testng.annotations.BeforeGroups; import org.testng.annotations.Test; import static org.testng.Assert.assertFalse; @@ -28,31 +29,36 @@ import static org.testng.Assert.assertFalse; @Test(sequential = true,groups = "unit") public class ProductItemPredicatesTest { + private ProductItemCategory ramCategory; + private ProductItem item; + private ProductItem emptyItem; + + @BeforeGroups(groups = { "unit" }) + public void setupClient() { + ramCategory = ProductItemCategory.builder().id(1).categoryCode("ram").build(); + + item = ProductItem.builder().id(1) + .categories(ImmutableSet.of(ramCategory)) + .capacity(2.0f) + .units("GB") + .build(); + + emptyItem = ProductItem.builder().id(1).build(); + } + @Test public void testCategoryCodePresent() { - ProductItemCategory category = ProductItemCategory.builder() - .id(1).categoryCode("ram") - .build(); - - ProductItem item = ProductItem.builder() - .categories(ImmutableSet.of(category)) - .build(); - assert ProductItemPredicates.categoryCode("ram").apply(item); } @Test public void testCategoryCodePresentTwoCategories() { - ProductItemCategory category1 = ProductItemCategory.builder() - .id(1).categoryCode("os") - .build(); - - ProductItemCategory category2 = ProductItemCategory.builder() - .id(2).categoryCode("ram") + ProductItemCategory osCategory = ProductItemCategory.builder() + .id(2).categoryCode("os") .build(); ProductItem item = ProductItem.builder() - .categories(ImmutableSet.of(category1, category2)) + .categories(ImmutableSet.of(ramCategory, osCategory)) .build(); assert ProductItemPredicates.categoryCode("ram").apply(item); @@ -60,36 +66,26 @@ public class ProductItemPredicatesTest { @Test public void testCategoryCodeMissing() { - ProductItem item = ProductItem.builder() - .categories(ImmutableSet.of()) - .build(); - - assertFalse(ProductItemPredicates.categoryCode("ram").apply(item)); + assertFalse(ProductItemPredicates.categoryCode("missing").apply(emptyItem)); } @Test - public void testCapacity() { - ProductItem item = ProductItem.builder() - .id(1).capacity(2.0f) - .build(); - + public void testCapacityPresent() { assert ProductItemPredicates.capacity(2.0f).apply(item); } @Test - public void testCapacityDifferent() { - ProductItem item = ProductItem.builder() - .id(1).capacity(2.0f) - .build(); - + public void testCapacityMissing() { assertFalse(ProductItemPredicates.capacity(1.0f).apply(item)); } @Test - public void testCapacityMissing() { - ProductItem item = ProductItem.builder() - .id(1).build(); - - assertFalse(ProductItemPredicates.capacity(2.0f).apply(item)); + public void testUnitsPresent() { + assert ProductItemPredicates.units("GB").apply(item); } -} + + @Test + public void testUnitsMissing() { + assertFalse(ProductItemPredicates.units("Kg").apply(item)); + } +} \ No newline at end of file