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();
+
+ }
}