killbill-memoizeit

Fix getInvoicePayment to return a list of InvoicePayment and

8/17/2012 6:58:04 PM

Details

diff --git a/analytics/src/main/java/com/ning/billing/analytics/BusinessInvoicePaymentRecorder.java b/analytics/src/main/java/com/ning/billing/analytics/BusinessInvoicePaymentRecorder.java
index aa5bb1b..fa66c97 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/BusinessInvoicePaymentRecorder.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/BusinessInvoicePaymentRecorder.java
@@ -84,8 +84,7 @@ public class BusinessInvoicePaymentRecorder {
             return;
         }
 
-        final InvoicePayment invoicePayment = invoicePaymentApi.getInvoicePayment(paymentId);
-
+        final InvoicePayment invoicePayment = invoicePaymentApi.getInvoicePaymentForAttempt(paymentId);
         final PaymentMethod paymentMethod;
         try {
             paymentMethod = paymentApi.getPaymentMethod(account, payment.getPaymentMethodId(), true);
diff --git a/api/src/main/java/com/ning/billing/invoice/api/InvoicePaymentApi.java b/api/src/main/java/com/ning/billing/invoice/api/InvoicePaymentApi.java
index fa0e738..545e04d 100644
--- a/api/src/main/java/com/ning/billing/invoice/api/InvoicePaymentApi.java
+++ b/api/src/main/java/com/ning/billing/invoice/api/InvoicePaymentApi.java
@@ -38,7 +38,9 @@ public interface InvoicePaymentApi {
 
     public Invoice getInvoiceForPaymentId(UUID paymentId);
 
-    public InvoicePayment getInvoicePayment(UUID paymentId);
+    public List<InvoicePayment> getInvoicePayments(UUID paymentId);
+
+    public InvoicePayment getInvoicePaymentForAttempt(UUID paymentId);
 
     public void notifyOfPayment(InvoicePayment invoicePayment, CallContext context);
 
diff --git a/invoice/src/main/java/com/ning/billing/invoice/api/invoice/DefaultInvoicePaymentApi.java b/invoice/src/main/java/com/ning/billing/invoice/api/invoice/DefaultInvoicePaymentApi.java
index 0bd3a5c..e6bb878 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/api/invoice/DefaultInvoicePaymentApi.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/api/invoice/DefaultInvoicePaymentApi.java
@@ -18,6 +18,7 @@
 package com.ning.billing.invoice.api.invoice;
 
 import java.math.BigDecimal;
+import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 import java.util.UUID;
@@ -36,6 +37,8 @@ import com.ning.billing.invoice.dao.InvoiceDao;
 import com.ning.billing.invoice.model.DefaultInvoicePayment;
 import com.ning.billing.util.callcontext.CallContext;
 
+import com.google.common.base.Predicate;
+import com.google.common.collect.Collections2;
 import com.google.inject.Inject;
 
 public class DefaultInvoicePaymentApi implements InvoicePaymentApi {
@@ -71,10 +74,26 @@ public class DefaultInvoicePaymentApi implements InvoicePaymentApi {
     }
 
     @Override
-    public InvoicePayment getInvoicePayment(final UUID paymentId) {
-        return dao.getInvoicePayment(paymentId);
+    public List<InvoicePayment> getInvoicePayments(final UUID paymentId) {
+        return dao.getInvoicePayments(paymentId);
     }
 
+
+    @Override
+    public InvoicePayment getInvoicePaymentForAttempt(UUID paymentId) {
+        List<InvoicePayment> invoicePayments = dao.getInvoicePayments(paymentId);
+        if (invoicePayments.size() == 0) {
+            return null;
+        }
+        return Collections2.filter(invoicePayments, new Predicate<InvoicePayment>() {
+            @Override
+            public boolean apply(InvoicePayment input) {
+                return input.getType() == InvoicePaymentType.ATTEMPT;
+            }
+        }).iterator().next();
+    }
+
+
     @Override
     public void notifyOfPayment(final UUID invoiceId, final BigDecimal amount, final Currency currency, final UUID paymentId, final DateTime paymentDate, final CallContext context) {
         final InvoicePayment invoicePayment = new DefaultInvoicePayment(InvoicePaymentType.ATTEMPT, paymentId, invoiceId, paymentDate, amount, currency);
diff --git a/invoice/src/main/java/com/ning/billing/invoice/dao/AuditedInvoiceDao.java b/invoice/src/main/java/com/ning/billing/invoice/dao/AuditedInvoiceDao.java
index 5f7b71f..1abfe3d 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/dao/AuditedInvoiceDao.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/dao/AuditedInvoiceDao.java
@@ -295,8 +295,8 @@ public class AuditedInvoiceDao implements InvoiceDao {
     }
 
     @Override
-    public InvoicePayment getInvoicePayment(final UUID paymentId) {
-        return invoicePaymentSqlDao.getInvoicePayment(paymentId.toString());
+    public List<InvoicePayment> getInvoicePayments(final UUID paymentId) {
+        return invoicePaymentSqlDao.getInvoicePayments(paymentId.toString());
     }
 
     @Override
diff --git a/invoice/src/main/java/com/ning/billing/invoice/dao/InvoiceDao.java b/invoice/src/main/java/com/ning/billing/invoice/dao/InvoiceDao.java
index ecbda77..dbf2edb 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/dao/InvoiceDao.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/dao/InvoiceDao.java
@@ -51,7 +51,7 @@ public interface InvoiceDao {
 
     UUID getInvoiceIdByPaymentId(final UUID paymentId);
 
-    InvoicePayment getInvoicePayment(final UUID paymentId);
+    List<InvoicePayment> getInvoicePayments(final UUID paymentId);
 
     void notifyOfPayment(final InvoicePayment invoicePayment, final CallContext context);
 
diff --git a/invoice/src/main/java/com/ning/billing/invoice/dao/InvoicePaymentSqlDao.java b/invoice/src/main/java/com/ning/billing/invoice/dao/InvoicePaymentSqlDao.java
index 31e85cd..1ea5cb3 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/dao/InvoicePaymentSqlDao.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/dao/InvoicePaymentSqlDao.java
@@ -80,7 +80,7 @@ public interface InvoicePaymentSqlDao extends EntitySqlDao<InvoicePayment>, Tran
     public List<InvoicePayment> getPaymentsForInvoice(@Bind("invoiceId") final String invoiceId);
 
     @SqlQuery
-    InvoicePayment getInvoicePayment(@Bind("paymentId") final String paymentId);
+    List<InvoicePayment> getInvoicePayments(@Bind("paymentId") final String paymentId);
 
     @SqlQuery
     InvoicePayment getPaymentsForCookieId(@Bind("paymentCookieId") final String paymentCookieId);
diff --git a/invoice/src/main/resources/com/ning/billing/invoice/dao/InvoicePaymentSqlDao.sql.stg b/invoice/src/main/resources/com/ning/billing/invoice/dao/InvoicePaymentSqlDao.sql.stg
index a4ee86c..0ba9369 100644
--- a/invoice/src/main/resources/com/ning/billing/invoice/dao/InvoicePaymentSqlDao.sql.stg
+++ b/invoice/src/main/resources/com/ning/billing/invoice/dao/InvoicePaymentSqlDao.sql.stg
@@ -61,7 +61,7 @@ notifyOfPayment() ::= <<
         :paymentCookieId, :linkedInvoicePaymentId, :userName, :createdDate);
 >>
 
-getInvoicePayment() ::= <<
+getInvoicePayments() ::= <<
     SELECT <invoicePaymentFields()>
     FROM invoice_payments
     WHERE payment_id = :paymentId;
diff --git a/invoice/src/test/java/com/ning/billing/invoice/api/MockInvoicePaymentApi.java b/invoice/src/test/java/com/ning/billing/invoice/api/MockInvoicePaymentApi.java
index f229e4a..18a4ce9 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/api/MockInvoicePaymentApi.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/api/MockInvoicePaymentApi.java
@@ -18,6 +18,7 @@ package com.ning.billing.invoice.api;
 
 import java.math.BigDecimal;
 import java.util.ArrayList;
+import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.UUID;
@@ -82,15 +83,27 @@ public class MockInvoicePaymentApi implements InvoicePaymentApi {
     }
 
     @Override
-    public InvoicePayment getInvoicePayment(final UUID paymentId) {
+    public List<InvoicePayment> getInvoicePayments(final UUID paymentId) {
+        List<InvoicePayment> result = new LinkedList<InvoicePayment>();
         for (final InvoicePayment invoicePayment : invoicePayments) {
             if (paymentId.equals(invoicePayment.getPaymentId())) {
+                result.add(invoicePayment);
+            }
+        }
+        return result;
+    }
+
+    @Override
+    public InvoicePayment getInvoicePaymentForAttempt(UUID paymentId) {
+        for (final InvoicePayment invoicePayment : invoicePayments) {
+            if (paymentId.equals(invoicePayment.getPaymentId()) && invoicePayment.getType() == InvoicePaymentType.ATTEMPT) {
                 return invoicePayment;
             }
         }
         return null;
     }
 
+
     @Override
     public void notifyOfPayment(final UUID invoiceId, final BigDecimal amountOutstanding, final Currency currency, final UUID paymentId, final DateTime paymentDate, final CallContext context) {
         final InvoicePayment invoicePayment = new DefaultInvoicePayment(InvoicePaymentType.ATTEMPT, paymentId, invoiceId, paymentDate, amountOutstanding, currency);
diff --git a/invoice/src/test/java/com/ning/billing/invoice/dao/MockInvoiceDao.java b/invoice/src/test/java/com/ning/billing/invoice/dao/MockInvoiceDao.java
index 8ea4553..5a6b3a4 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/dao/MockInvoiceDao.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/dao/MockInvoiceDao.java
@@ -19,6 +19,7 @@ package com.ning.billing.invoice.dao;
 import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.LinkedHashMap;
+import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.UUID;
@@ -155,18 +156,18 @@ public class MockInvoiceDao implements InvoiceDao {
     }
 
     @Override
-    public InvoicePayment getInvoicePayment(final UUID paymentId) {
+    public List<InvoicePayment> getInvoicePayments(final UUID paymentId) {
+        List<InvoicePayment> result = new LinkedList<InvoicePayment>();
         synchronized (monitor) {
             for (final Invoice invoice : invoices.values()) {
                 for (final InvoicePayment payment : invoice.getPayments()) {
                     if (paymentId.equals(payment.getPaymentId())) {
-                        return payment;
+                        result.add(payment);
                     }
                 }
             }
         }
-
-        return null;
+        return result;
     }
 
     @Override
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/ChargebackResource.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/ChargebackResource.java
index 4fac93c..9deb48d 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/ChargebackResource.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/ChargebackResource.java
@@ -109,7 +109,7 @@ public class ChargebackResource extends JaxRsResourceBase {
                                      @HeaderParam(HDR_CREATED_BY) final String createdBy,
                                      @HeaderParam(HDR_REASON) final String reason,
                                      @HeaderParam(HDR_COMMENT) final String comment) throws InvoiceApiException {
-        final InvoicePayment invoicePayment = invoicePaymentApi.getInvoicePayment(UUID.fromString(json.getPaymentId()));
+        final InvoicePayment invoicePayment = invoicePaymentApi.getInvoicePaymentForAttempt(UUID.fromString(json.getPaymentId()));
         if (invoicePayment == null) {
             throw new InvoiceApiException(ErrorCode.INVOICE_PAYMENT_NOT_FOUND, json.getPaymentId());
         }