diff --git a/catalog/src/main/java/org/killbill/billing/catalog/plugin/StandaloneCatalogMapper.java b/catalog/src/main/java/org/killbill/billing/catalog/plugin/StandaloneCatalogMapper.java
index 6f52dc1..9f4d4d1 100644
--- a/catalog/src/main/java/org/killbill/billing/catalog/plugin/StandaloneCatalogMapper.java
+++ b/catalog/src/main/java/org/killbill/billing/catalog/plugin/StandaloneCatalogMapper.java
@@ -76,6 +76,7 @@ import org.killbill.billing.catalog.rules.DefaultPlanRules;
import com.google.common.base.Function;
import com.google.common.base.Predicate;
import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Iterables;
public class StandaloneCatalogMapper {
@@ -83,8 +84,8 @@ public class StandaloneCatalogMapper {
private final String catalogName;
private final BillingMode recurringBillingMode;
- private Iterable<Product> tmpDefaultProducts;
- private Iterable<Plan> tmpDefaultPlans;
+ private Map<String, Product> tmpDefaultProducts;
+ private Map<String, Plan> tmpDefaultPlans;
private DefaultPriceListSet tmpDefaultPriceListSet;
private Map<String, DefaultPriceList> tmpDefaultPriceListMap;
@@ -110,19 +111,16 @@ public class StandaloneCatalogMapper {
result.setUnits(toDefaultUnits(pluginCatalog.getUnits()));
result.setPlanRules(toDefaultPlanRules(pluginCatalog.getPlanRules()));
for (final Product cur : pluginCatalog.getProducts()) {
- for (Product target : result.getCurrentProducts()) {
- if (target.getName().equals(cur.getName())) {
- ((DefaultProduct) target).setAvailable(toFilteredDefaultProduct(cur.getAvailable()));
- ((DefaultProduct) target).setIncluded(toFilteredDefaultProduct(cur.getIncluded()));
- break;
- }
+ final Product target = result.getCatalogEntityCollectionProduct().findByName(cur.getName());
+ if (target != null) {
+ ((DefaultProduct) target).setAvailable(toFilteredDefaultProduct(cur.getAvailable()));
+ ((DefaultProduct) target).setIncluded(toFilteredDefaultProduct(cur.getIncluded()));
}
}
result.initialize(result, catalogURI);
return result;
}
-
private DefaultPlanRules toDefaultPlanRules(final PlanRules input) {
final DefaultPlanRules result = new DefaultPlanRules();
result.setBillingAlignmentCase(toDefaultCaseBillingAlignments(input.getCaseBillingAlignment()));
@@ -257,15 +255,11 @@ public class StandaloneCatalogMapper {
private Iterable<Product> toDefaultProducts(final Iterable<Product> input) {
if (tmpDefaultProducts == null) {
- final Function<Product, Product> productTransformer = new Function<Product, Product>() {
- @Override
- public Product apply(final Product input) {
- return toDefaultProduct(input);
- }
- };
- tmpDefaultProducts = ImmutableList.copyOf(Iterables.transform(input, productTransformer));
+ final Map<String, Product> map = new HashMap<String, Product>();
+ for (final Product product : input) map.put(product.getName(), toDefaultProduct(product));
+ tmpDefaultProducts = ImmutableMap.copyOf(map);
}
- return tmpDefaultProducts;
+ return tmpDefaultProducts.values();
}
private Collection<Product> toFilteredDefaultProduct(final Collection<Product> input) {
@@ -280,12 +274,8 @@ public class StandaloneCatalogMapper {
});
final Collection<Product> filteredAndOrdered = new ArrayList<Product>(input.size());
for (final String cur : inputProductNames) {
- final Product found = findOrIllegalState(tmpDefaultProducts, new Predicate<Product>() {
- @Override
- public boolean apply(final Product inputPredicate) {
- return inputPredicate.getName().equals(cur);
- }
- }, "Failed to find product " + cur);
+ final Product found = tmpDefaultProducts.get(cur);
+ if (found == null) throw new IllegalStateException("Failed to find product " + cur);
filteredAndOrdered.add(found);
}
return filteredAndOrdered;
@@ -293,22 +283,18 @@ public class StandaloneCatalogMapper {
private Iterable<Plan> toDefaultPlans(final Iterable<Plan> input) {
if (tmpDefaultPlans == null) {
- final Function<Plan, Plan> planTransformer = new Function<Plan, Plan>() {
- @Override
- public Plan apply(final Plan input) {
- return toDefaultPlan(input);
- }
- };
- tmpDefaultPlans = ImmutableList.copyOf(Iterables.transform(input, planTransformer));
+ final Map<String, Plan> map = new HashMap<String, Plan>();
+ for (final Plan plan : input) map.put(plan.getName(), toDefaultPlan(plan));
+ tmpDefaultPlans = ImmutableMap.copyOf(map);
}
- return tmpDefaultPlans;
+ return tmpDefaultPlans.values();
}
private Iterable<Plan> toFilterDefaultPlans(final String priceListName) {
if (tmpDefaultPlans == null) {
throw new IllegalStateException("Cannot filter on uninitialized plans");
}
- return Iterables.filter(tmpDefaultPlans, new Predicate<Plan>() {
+ return Iterables.filter(tmpDefaultPlans.values(), new Predicate<Plan>() {
@Override
public boolean apply(final Plan input) {
return input.getPriceListName().equals(priceListName);
@@ -390,12 +376,8 @@ public class StandaloneCatalogMapper {
return null;
}
if (tmpDefaultProducts != null) {
- final Product existingProduct = findOrIllegalState(tmpDefaultProducts, new Predicate<Product>() {
- @Override
- public boolean apply(final Product predicateInput) {
- return predicateInput.getName().equals(input.getName());
- }
- }, "Unknown product " + input.getName());
+ final Product existingProduct = tmpDefaultProducts.get(input.getName());
+ if (existingProduct == null) throw new IllegalStateException("Unknown product " + input.getName());
return existingProduct;
}
final DefaultProduct result = new DefaultProduct();
@@ -407,12 +389,8 @@ public class StandaloneCatalogMapper {
private Plan toDefaultPlan(final Plan input) {
if (tmpDefaultPlans != null) {
- final Plan existingPlan = findOrIllegalState(tmpDefaultPlans, new Predicate<Plan>() {
- @Override
- public boolean apply(final Plan predicateInput) {
- return predicateInput.getName().equals(input.getName());
- }
- }, "Unknown plan " + input.getName());
+ final Plan existingPlan = tmpDefaultPlans.get(input.getName());
+ if (existingPlan == null) throw new IllegalStateException("Unknown plan " + input.getName());
return existingPlan;
}
final DefaultPlan result = new DefaultPlan();
@@ -497,11 +475,4 @@ public class StandaloneCatalogMapper {
return ImmutableList.<C>copyOf(input).toArray(foo);
}
- private <T> T findOrIllegalState(final Iterable<T> input, final Predicate<T> predicate, final String msg) {
- T result = Iterables.<T> tryFind(input, predicate).orNull();
- if (result == null) {
- throw new IllegalStateException(msg);
- }
- return result;
- }
}
\ No newline at end of file