killbill-aplcache

Adding invoice API call to trigger an invoice generation (Bill

2/14/2012 9:01:27 PM

Details

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 641afa6..89313bc 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
@@ -40,4 +40,6 @@ public interface InvoicePaymentApi {
 
     public void notifyOfPaymentAttempt(UUID invoiceId, UUID paymentAttemptId, DateTime paymentAttemptDate);
 
+	void triggerInvoiceGeneration(UUID accountId, DateTime targetDate) throws InvoiceApiException;
+
 }
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 340e682..537201e 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
@@ -17,25 +17,30 @@
 
 package com.ning.billing.invoice.api.invoice;
 
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.UUID;
+
+import org.joda.time.DateTime;
+
 import com.google.inject.Inject;
 import com.ning.billing.catalog.api.Currency;
+import com.ning.billing.invoice.InvoiceListener;
 import com.ning.billing.invoice.api.Invoice;
+import com.ning.billing.invoice.api.InvoiceApiException;
 import com.ning.billing.invoice.api.InvoicePayment;
 import com.ning.billing.invoice.api.InvoicePaymentApi;
 import com.ning.billing.invoice.dao.InvoiceDao;
 import com.ning.billing.invoice.model.DefaultInvoicePayment;
-import org.joda.time.DateTime;
-
-import java.math.BigDecimal;
-import java.util.List;
-import java.util.UUID;
 
 public class DefaultInvoicePaymentApi implements InvoicePaymentApi {
     private final InvoiceDao dao;
+	private final InvoiceListener listener;
 
     @Inject
-    public DefaultInvoicePaymentApi(final InvoiceDao dao) {
+    public DefaultInvoicePaymentApi(final InvoiceDao dao, final InvoiceListener listener) {
         this.dao = dao;
+        this.listener = listener;
     }
 
     @Override
@@ -80,4 +85,9 @@ public class DefaultInvoicePaymentApi implements InvoicePaymentApi {
         InvoicePayment invoicePayment = new DefaultInvoicePayment(paymentAttemptId, invoiceId, paymentAttemptDate);
         dao.notifyOfPaymentAttempt(invoicePayment);
     }
+    
+    @Override 
+    public void triggerInvoiceGeneration(UUID accountId, DateTime targetDate) throws InvoiceApiException {
+    	listener.processAccount(accountId, targetDate);
+    }
 }
\ No newline at end of file
diff --git a/invoice/src/main/java/com/ning/billing/invoice/InvoiceListener.java b/invoice/src/main/java/com/ning/billing/invoice/InvoiceListener.java
index ea1fc12..6806d69 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/InvoiceListener.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/InvoiceListener.java
@@ -117,21 +117,25 @@ public class InvoiceListener {
             return;
         }
 
-        GlobalLock lock = null;
-        try {
-            lock = locker.lockWithNumberOfTries(LockerService.INVOICE, accountId.toString(), NB_LOCK_TRY);
-
-            processAccountWithLock(accountId, targetDate);
-
-        } catch (LockFailedException e) {
-            // Not good!
-            log.error(String.format("Failed to process invoice for account %s, subscription %s, targetDate %s",
-                    accountId.toString(), subscriptionId.toString(), targetDate), e);
-        } finally {
-            if (lock != null) {
-                lock.release();
-            }
-        }
+        processAccount(accountId, targetDate);
+    }
+    
+    public void processAccount(final UUID accountId, final DateTime targetDate) throws InvoiceApiException {
+    	  GlobalLock lock = null;
+          try {
+              lock = locker.lockWithNumberOfTries(LockerService.INVOICE, accountId.toString(), NB_LOCK_TRY);
+
+              processAccountWithLock(accountId, targetDate);
+
+          } catch (LockFailedException e) {
+              // Not good!
+              log.error(String.format("Failed to process invoice for account %s, targetDate %s",
+                      accountId.toString(), targetDate), e);
+          } finally {
+              if (lock != null) {
+                  lock.release();
+              }
+          }
     }
 
     private void processAccountWithLock(final UUID accountId, final DateTime targetDate) throws InvoiceApiException {
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 e8f66b1..3a40785 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
@@ -22,6 +22,8 @@ import java.util.List;
 import java.util.UUID;
 import java.util.concurrent.CopyOnWriteArrayList;
 
+import javax.naming.OperationNotSupportedException;
+
 import com.ning.billing.invoice.model.DefaultInvoicePayment;
 import org.joda.time.DateTime;
 
@@ -99,4 +101,11 @@ public class MockInvoicePaymentApi implements InvoicePaymentApi
         InvoicePayment invoicePayment = new DefaultInvoicePayment(paymentAttemptId, invoiceId, paymentAttemptDate);
         notifyOfPaymentAttempt(invoicePayment);
     }
+
+	@Override
+	public void triggerInvoiceGeneration(UUID accountId, DateTime targetDate)
+			throws InvoiceApiException {
+		throw new UnsupportedOperationException();	
+		
+	}
 }