killbill-memoizeit

Details

diff --git a/invoice/src/main/java/com/ning/billing/invoice/model/DefaultInvoiceGenerator.java b/invoice/src/main/java/com/ning/billing/invoice/model/DefaultInvoiceGenerator.java
index 331372a..4ae49e9 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/model/DefaultInvoiceGenerator.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/model/DefaultInvoiceGenerator.java
@@ -92,10 +92,18 @@ public class DefaultInvoiceGenerator implements InvoiceGenerator {
         while (proposedItemIterator.hasNext()) {
             InvoiceItem proposedItem = proposedItemIterator.next();
 
-            if (existingInvoiceItems.contains(proposedItem)) {
-                existingInvoiceItems.remove(proposedItem);
-                proposedItemIterator.remove();
+            Iterator<InvoiceItem> existingItemIterator = existingInvoiceItems.iterator();
+            while (existingItemIterator.hasNext()) {
+                InvoiceItem existingItem = existingItemIterator.next();
+                if (existingItem.equals(proposedItem)) {
+                    existingItemIterator.remove();
+                    proposedItemIterator.remove();
+                }
             }
+//            if (existingInvoiceItems.contains(proposedItem)) {
+//                existingInvoiceItems.remove(proposedItem);
+//                proposedItemIterator.remove();
+//            }
         }
     }
 
diff --git a/invoice/src/main/java/com/ning/billing/invoice/model/FixedPriceInvoiceItem.java b/invoice/src/main/java/com/ning/billing/invoice/model/FixedPriceInvoiceItem.java
index 2b7c12a..2265abd 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/model/FixedPriceInvoiceItem.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/model/FixedPriceInvoiceItem.java
@@ -107,10 +107,10 @@ public class FixedPriceInvoiceItem extends InvoiceItemBase {
 
         FixedPriceInvoiceItem that = (FixedPriceInvoiceItem) o;
 
-        if (amount != null ? !amount.equals(that.amount) : that.amount != null) return false;
+        if (amount != null ? amount.compareTo(that.amount) != 0 : that.amount != null) return false;
         if (currency != that.currency) return false;
-        if (startDate != null ? !startDate.equals(that.startDate) : that.startDate != null) return false;
-        if (endDate != null ? !endDate.equals(that.endDate) : that.endDate != null) return false;
+        if (startDate != null ? startDate.compareTo(that.startDate) != 0 : that.startDate != null) return false;
+        if (endDate != null ? endDate.compareTo(that.endDate) != 0 : that.endDate != null) return false;
         if (phaseName != null ? !phaseName.equals(that.phaseName) : that.phaseName != null) return false;
         if (planName != null ? !planName.equals(that.planName) : that.planName != null) return false;
         if (subscriptionId != null ? !subscriptionId.equals(that.subscriptionId) : that.subscriptionId != null)
diff --git a/invoice/src/main/java/com/ning/billing/invoice/model/RecurringInvoiceItem.java b/invoice/src/main/java/com/ning/billing/invoice/model/RecurringInvoiceItem.java
index 55e5487..93ef474 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/model/RecurringInvoiceItem.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/model/RecurringInvoiceItem.java
@@ -114,15 +114,15 @@ public class RecurringInvoiceItem extends InvoiceItemBase {
 
         RecurringInvoiceItem that = (RecurringInvoiceItem) o;
 
-        if (!amount.equals(that.amount)) return false;
+        if (amount.compareTo(that.amount) != 0) return false;
         if (currency != that.currency) return false;
-        if (!endDate.equals(that.endDate)) return false;
+        if (startDate.compareTo(that.startDate) != 0) return false;
+        if (endDate.compareTo(that.endDate) != 0) return false;
         if (!phaseName.equals(that.phaseName)) return false;
         if (!planName.equals(that.planName)) return false;
-        if (!rate.equals(that.rate)) return false;
+        if (rate.compareTo(that.rate) != 0) return false;
         if (reversedItemId != null ? !reversedItemId.equals(that.reversedItemId) : that.reversedItemId != null)
             return false;
-        if (!startDate.equals(that.startDate)) return false;
         if (!subscriptionId.equals(that.subscriptionId)) return false;
 
         return true;