killbill-aplcache

catalog: Fix an issue when adding a simple plan when they are

7/28/2016 3:50:05 PM

Details

diff --git a/catalog/src/main/java/org/killbill/billing/catalog/DefaultMutableStaticCatalog.java b/catalog/src/main/java/org/killbill/billing/catalog/DefaultMutableStaticCatalog.java
index 8a5bc9a..14c10b4 100644
--- a/catalog/src/main/java/org/killbill/billing/catalog/DefaultMutableStaticCatalog.java
+++ b/catalog/src/main/java/org/killbill/billing/catalog/DefaultMutableStaticCatalog.java
@@ -19,6 +19,9 @@ package org.killbill.billing.catalog;
 
 import java.lang.reflect.Array;
 import java.util.Date;
+import java.util.List;
+
+import javax.annotation.Nullable;
 
 import org.killbill.billing.catalog.api.CatalogApiException;
 import org.killbill.billing.catalog.api.CatalogEntity;
@@ -76,8 +79,29 @@ public class DefaultMutableStaticCatalog extends StandaloneCatalog implements Mu
         final Plan[] newEntries = allocateNewEntries(getCurrentPlans(), plan);
         setPlans((DefaultPlan[]) newEntries);
 
+
         final DefaultPriceList priceList = getPriceLists().findPriceListFrom(plan.getPriceListName());
-        priceList.setPlans((DefaultPlan[])newEntries);
+
+        final Iterable<DefaultPlan> newPriceListPlan = Iterables.filter(ImmutableList.copyOf((DefaultPlan[]) newEntries), new Predicate<DefaultPlan>() {
+            @Override
+            public boolean apply(final DefaultPlan input) {
+                if (plan.getName().equals(input.getName())) {
+                    return true;
+                }
+                if (priceList.getPlans() != null) {
+                    for (final Plan priceListPlan : priceList.getPlans()) {
+                        if (priceListPlan.getName().equals(input.getName())) {
+                            return true;
+                        }
+                    }
+                }
+                return false;
+            }
+        });
+        final List<DefaultPlan> foo = ImmutableList.<DefaultPlan >copyOf(newPriceListPlan);
+        final Plan[] newPriceListEntries = new DefaultPlan[foo.size()];
+        final Plan[] bar = foo.toArray(newPriceListEntries);
+        priceList.setPlans((DefaultPlan[]) bar);
     }
 
     @Override