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 a2c230f..38cd7a7 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
@@ -20,13 +20,11 @@ import java.math.BigDecimal;
import java.util.List;
import java.util.UUID;
-import org.skife.jdbi.v2.exceptions.TransactionFailedException;
-
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.InvoicePaymentType;
import com.ning.billing.invoice.api.InvoicePaymentApi;
+import com.ning.billing.invoice.api.InvoicePaymentType;
import com.ning.billing.invoice.dao.InvoiceDao;
import com.ning.billing.invoice.dao.InvoiceModelDao;
import com.ning.billing.invoice.dao.InvoicePaymentModelDao;
@@ -44,8 +42,6 @@ import com.google.inject.Inject;
public class DefaultInvoicePaymentApi implements InvoicePaymentApi {
- private static final WithInvoiceApiException<InvoicePayment> invoicePaymentWithException = new WithInvoiceApiException<InvoicePayment>();
-
private final InvoiceDao dao;
private final InternalCallContextFactory internalCallContextFactory;
@@ -140,38 +136,8 @@ public class DefaultInvoicePaymentApi implements InvoicePaymentApi {
@Override
public InvoicePayment createChargeback(final UUID invoicePaymentId, final BigDecimal amount, final CallContext context) throws InvoiceApiException {
- return invoicePaymentWithException.executeAndThrow(new WithInvoiceApiExceptionCallback<InvoicePayment>() {
-
- @Override
- public InvoicePayment doHandle() throws InvoiceApiException {
- // Retrieve the account id for the internal call context
- final UUID accountId = dao.getAccountIdFromInvoicePaymentId(invoicePaymentId, internalCallContextFactory.createInternalTenantContext(context));
- return new DefaultInvoicePayment(dao.postChargeback(invoicePaymentId, amount, internalCallContextFactory.createInternalCallContext(accountId, context)));
- }
- });
- }
-
- //
- // Allow to safely catch TransactionFailedException exceptions and rethrow the correct InvoiceApiException exception
- //
- private interface WithInvoiceApiExceptionCallback<T> {
-
- public T doHandle() throws InvoiceApiException;
- }
-
- private static final class WithInvoiceApiException<T> {
-
- public T executeAndThrow(final WithInvoiceApiExceptionCallback<T> callback) throws InvoiceApiException {
-
- try {
- return callback.doHandle();
- } catch (TransactionFailedException e) {
- if (e.getCause() instanceof InvoiceApiException) {
- throw (InvoiceApiException) e.getCause();
- } else {
- throw e;
- }
- }
- }
+ // Retrieve the account id for the internal call context
+ final UUID accountId = dao.getAccountIdFromInvoicePaymentId(invoicePaymentId, internalCallContextFactory.createInternalTenantContext(context));
+ return new DefaultInvoicePayment(dao.postChargeback(invoicePaymentId, amount, internalCallContextFactory.createInternalCallContext(accountId, context)));
}
}
diff --git a/invoice/src/main/java/com/ning/billing/invoice/dao/DefaultInvoiceDao.java b/invoice/src/main/java/com/ning/billing/invoice/dao/DefaultInvoiceDao.java
index ef2512c..4de3475 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/dao/DefaultInvoiceDao.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/dao/DefaultInvoiceDao.java
@@ -72,7 +72,7 @@ public class DefaultInvoiceDao extends EntityDaoBase<InvoiceModelDao, Invoice, I
this.nextBillingDatePoster = nextBillingDatePoster;
this.eventBus = eventBus;
this.invoiceDaoHelper = new InvoiceDaoHelper();
- this.cbaDao = new CBADao();
+ this.cbaDao = new CBADao();
}
@Override
@@ -308,9 +308,9 @@ public class DefaultInvoiceDao extends EntityDaoBase<InvoiceModelDao, Invoice, I
// Retrieve the amounts to adjust, if needed
final Map<UUID, BigDecimal> invoiceItemIdsWithAmounts = invoiceDaoHelper.computeItemAdjustments(payment.getInvoiceId().toString(),
- entitySqlDaoWrapperFactory,
- invoiceItemIdsWithNullAmounts,
- context);
+ entitySqlDaoWrapperFactory,
+ invoiceItemIdsWithNullAmounts,
+ context);
// Compute the actual amount to refund
final BigDecimal requestedPositiveAmount = invoiceDaoHelper.computePositiveRefundAmount(payment, requestedRefundAmount, invoiceItemIdsWithAmounts);
@@ -357,8 +357,8 @@ public class DefaultInvoiceDao extends EntityDaoBase<InvoiceModelDao, Invoice, I
for (final UUID invoiceItemId : invoiceItemIdsWithAmounts.keySet()) {
final BigDecimal adjAmount = invoiceItemIdsWithAmounts.get(invoiceItemId);
final InvoiceItemModelDao item = invoiceDaoHelper.createAdjustmentItem(entitySqlDaoWrapperFactory, invoice.getId(), invoiceItemId, adjAmount,
- invoice.getCurrency(), context.getCreatedDate().toLocalDate(),
- context);
+ invoice.getCurrency(), context.getCreatedDate().toLocalDate(),
+ context);
transInvoiceItemDao.create(item, context);
}
}
@@ -373,23 +373,20 @@ public class DefaultInvoiceDao extends EntityDaoBase<InvoiceModelDao, Invoice, I
});
}
-
-
@Override
public InvoicePaymentModelDao postChargeback(final UUID invoicePaymentId, final BigDecimal amount, final InternalCallContext context) throws InvoiceApiException {
-
- return transactionalSqlDao.execute(new EntitySqlDaoTransactionWrapper<InvoicePaymentModelDao>() {
+ return transactionalSqlDao.execute(InvoiceApiException.class, new EntitySqlDaoTransactionWrapper<InvoicePaymentModelDao>() {
@Override
public InvoicePaymentModelDao inTransaction(final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory) throws Exception {
final InvoicePaymentSqlDao transactional = entitySqlDaoWrapperFactory.become(InvoicePaymentSqlDao.class);
final BigDecimal maxChargedBackAmount = invoiceDaoHelper.getRemainingAmountPaidFromTransaction(invoicePaymentId, entitySqlDaoWrapperFactory, context);
- final BigDecimal requestedChargedBackAmout = (amount == null) ? maxChargedBackAmount : amount;
- if (requestedChargedBackAmout.compareTo(BigDecimal.ZERO) <= 0) {
+ final BigDecimal requestedChargedBackAmount = (amount == null) ? maxChargedBackAmount : amount;
+ if (requestedChargedBackAmount.compareTo(BigDecimal.ZERO) <= 0) {
throw new InvoiceApiException(ErrorCode.CHARGE_BACK_AMOUNT_IS_NEGATIVE);
}
- if (requestedChargedBackAmout.compareTo(maxChargedBackAmount) > 0) {
- throw new InvoiceApiException(ErrorCode.CHARGE_BACK_AMOUNT_TOO_HIGH, requestedChargedBackAmout, maxChargedBackAmount);
+ if (requestedChargedBackAmount.compareTo(maxChargedBackAmount) > 0) {
+ throw new InvoiceApiException(ErrorCode.CHARGE_BACK_AMOUNT_TOO_HIGH, requestedChargedBackAmount, maxChargedBackAmount);
}
final InvoicePaymentModelDao payment = entitySqlDaoWrapperFactory.become(InvoicePaymentSqlDao.class).getById(invoicePaymentId.toString(), context);
@@ -398,7 +395,7 @@ public class DefaultInvoiceDao extends EntityDaoBase<InvoiceModelDao, Invoice, I
}
final InvoicePaymentModelDao chargeBack = new InvoicePaymentModelDao(UUID.randomUUID(), context.getCreatedDate(), InvoicePaymentType.CHARGED_BACK,
payment.getInvoiceId(), payment.getPaymentId(), context.getCreatedDate(),
- requestedChargedBackAmout.negate(), payment.getCurrency(), null, payment.getId());
+ requestedChargedBackAmount.negate(), payment.getCurrency(), null, payment.getId());
transactional.create(chargeBack, context);
// Notify the bus since the balance of the invoice changed
@@ -425,7 +422,7 @@ public class DefaultInvoiceDao extends EntityDaoBase<InvoiceModelDao, Invoice, I
@Override
public UUID getAccountIdFromInvoicePaymentId(final UUID invoicePaymentId, final InternalTenantContext context) throws InvoiceApiException {
- return transactionalSqlDao.execute(new EntitySqlDaoTransactionWrapper<UUID>() {
+ return transactionalSqlDao.execute(InvoiceApiException.class, new EntitySqlDaoTransactionWrapper<UUID>() {
@Override
public UUID inTransaction(final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory) throws Exception {
final UUID accountId = entitySqlDaoWrapperFactory.become(InvoicePaymentSqlDao.class).getAccountIdFromInvoicePaymentId(invoicePaymentId.toString(), context);
@@ -582,7 +579,7 @@ public class DefaultInvoiceDao extends EntityDaoBase<InvoiceModelDao, Invoice, I
@Override
public InvoiceItemModelDao inTransaction(final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory) throws Exception {
final InvoiceItemModelDao invoiceItemAdjustment = invoiceDaoHelper.createAdjustmentItem(entitySqlDaoWrapperFactory, invoiceId, invoiceItemId, positiveAdjAmount,
- currency, effectiveDate, context);
+ currency, effectiveDate, context);
invoiceDaoHelper.insertItem(entitySqlDaoWrapperFactory, invoiceItemAdjustment, context);
cbaDao.doCBAComplexity(accountId, entitySqlDaoWrapperFactory, context);
diff --git a/invoice/src/test/java/com/ning/billing/invoice/tests/TestChargeBacks.java b/invoice/src/test/java/com/ning/billing/invoice/tests/TestChargeBacks.java
index 55a181a..4f24e46 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/tests/TestChargeBacks.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/tests/TestChargeBacks.java
@@ -20,7 +20,6 @@ import java.math.BigDecimal;
import java.util.List;
import java.util.UUID;
-import org.skife.jdbi.v2.exceptions.TransactionFailedException;
import org.testng.annotations.Test;
import com.ning.billing.ErrorCode;
@@ -73,29 +72,21 @@ public class TestChargeBacks extends InvoiceTestSuiteWithEmbeddedDB {
@Test(groups = "slow", expectedExceptions = InvoiceApiException.class)
public void testChargeBackLargerThanPaymentAmount() throws InvoiceApiException {
- try {
- final Invoice invoice = createAndPersistInvoice(invoiceDao, clock, THIRTY, CURRENCY, internalCallContext);
- final InvoicePayment payment = createAndPersistPayment(invoiceInternalApi, clock, invoice.getId(), THIRTY, CURRENCY, internalCallContext);
-
- // create a large charge back
- invoicePaymentApi.createChargeback(payment.getId(), ONE_MILLION, callContext);
- fail("Expected a failure...");
- } catch (TransactionFailedException expected) {
- throw (InvoiceApiException) expected.getCause();
- }
+ final Invoice invoice = createAndPersistInvoice(invoiceDao, clock, THIRTY, CURRENCY, internalCallContext);
+ final InvoicePayment payment = createAndPersistPayment(invoiceInternalApi, clock, invoice.getId(), THIRTY, CURRENCY, internalCallContext);
+
+ // create a large charge back
+ invoicePaymentApi.createChargeback(payment.getId(), ONE_MILLION, callContext);
+ fail("Expected a failure...");
}
@Test(groups = "slow", expectedExceptions = InvoiceApiException.class)
public void testNegativeChargeBackAmount() throws InvoiceApiException {
- try {
- final Invoice invoice = createAndPersistInvoice(invoiceDao, clock, THIRTY, CURRENCY, internalCallContext);
- final InvoicePayment payment = createAndPersistPayment(invoiceInternalApi, clock, invoice.getId(), THIRTY, CURRENCY, internalCallContext);
+ final Invoice invoice = createAndPersistInvoice(invoiceDao, clock, THIRTY, CURRENCY, internalCallContext);
+ final InvoicePayment payment = createAndPersistPayment(invoiceInternalApi, clock, invoice.getId(), THIRTY, CURRENCY, internalCallContext);
- // create a partial charge back
- invoicePaymentApi.createChargeback(payment.getId(), BigDecimal.ONE.negate(), callContext);
- } catch (TransactionFailedException expected) {
- throw (InvoiceApiException) expected.getCause();
- }
+ // create a partial charge back
+ invoicePaymentApi.createChargeback(payment.getId(), BigDecimal.ONE.negate(), callContext);
}
@Test(groups = "slow")
@@ -111,9 +102,8 @@ public class TestChargeBacks extends InvoiceTestSuiteWithEmbeddedDB {
try {
invoicePaymentApi.getAccountIdFromInvoicePaymentId(UUID.randomUUID(), callContext);
fail();
- } catch (TransactionFailedException e) {
- assertTrue(e.getCause() instanceof InvoiceApiException);
- assertEquals(((InvoiceApiException) e.getCause()).getCode(), ErrorCode.CHARGE_BACK_COULD_NOT_FIND_ACCOUNT_ID.getCode());
+ } catch (InvoiceApiException e) {
+ assertEquals(e.getCode(), ErrorCode.CHARGE_BACK_COULD_NOT_FIND_ACCOUNT_ID.getCode());
}
}