diff --git a/core/src/main/java/org/jclouds/collect/TransformingSetSupplier.java b/core/src/main/java/org/jclouds/collect/TransformingSetSupplier.java index 899b07c294..2010e8beaf 100644 --- a/core/src/main/java/org/jclouds/collect/TransformingSetSupplier.java +++ b/core/src/main/java/org/jclouds/collect/TransformingSetSupplier.java @@ -19,13 +19,15 @@ package org.jclouds.collect; import static com.google.common.base.Preconditions.checkNotNull; +import static com.google.common.base.Predicates.notNull; +import static com.google.common.collect.Iterables.filter; import static com.google.common.collect.Iterables.transform; -import static com.google.common.collect.Sets.newLinkedHashSet; import java.util.Set; import com.google.common.base.Function; import com.google.common.base.Supplier; +import com.google.common.collect.ImmutableSet; /** * @@ -42,7 +44,7 @@ public class TransformingSetSupplier implements Supplier> @Override public Set get() { - return newLinkedHashSet(transform(backingSupplier.get(), converter)); + return ImmutableSet.copyOf(filter(transform(filter(backingSupplier.get(), notNull()), converter), notNull())); } } diff --git a/core/src/test/java/org/jclouds/collect/TransformingSetSupplierTest.java b/core/src/test/java/org/jclouds/collect/TransformingSetSupplierTest.java new file mode 100644 index 0000000000..3b01670d3f --- /dev/null +++ b/core/src/test/java/org/jclouds/collect/TransformingSetSupplierTest.java @@ -0,0 +1,65 @@ +/** + * 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.collect; + +import static org.testng.Assert.assertEquals; + +import java.util.List; + +import org.testng.annotations.Test; + +import com.google.common.base.Function; +import com.google.common.base.Functions; +import com.google.common.base.Suppliers; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Lists; + +/** + * + * @author Adrian Cole + */ +@Test(groups = "unit", singleThreaded = true, testName = "TransformingSetSupplierTest") +public class TransformingSetSupplierTest { + @Test + public void testTransform() { + TransformingSetSupplier supplier = new TransformingSetSupplier(Suppliers + .> ofInstance(ImmutableSet.of("foo")), Functions.forMap(ImmutableMap.of("foo", "bar"))); + assertEquals(supplier.get(), ImmutableSet. of("bar")); + } + + @Test + public void testNullsNotReturnedFromSourceSupplier() { + List ofNull = Lists.newArrayList(); + ofNull.add(null); + + TransformingSetSupplier supplier = new TransformingSetSupplier(Suppliers + .> ofInstance(ofNull), Functions.forMap(ImmutableMap.of("foo", "bar"))); + assertEquals(supplier.get(), ImmutableSet. of()); + } + + @SuppressWarnings("unchecked") + @Test + public void testNullsNotReturnedFromFunction() { + TransformingSetSupplier supplier = new TransformingSetSupplier(Suppliers + .> ofInstance(ImmutableSet.of("foo")), (Function) Functions.constant(null)); + assertEquals(supplier.get(), ImmutableSet. of()); + } + +}