Details
diff --git a/payment/src/main/java/org/killbill/billing/payment/api/DefaultPaymentApi.java b/payment/src/main/java/org/killbill/billing/payment/api/DefaultPaymentApi.java
index 5e44397..bb40321 100644
--- a/payment/src/main/java/org/killbill/billing/payment/api/DefaultPaymentApi.java
+++ b/payment/src/main/java/org/killbill/billing/payment/api/DefaultPaymentApi.java
@@ -515,11 +515,11 @@ public class DefaultPaymentApi extends DefaultApiBase implements PaymentApi {
logEnterAPICall(log, transactionType, account, paymentMethodId, paymentId, null, amount, currency, paymentExternalKey, paymentTransactionExternalKey, null, null);
final InternalCallContext internalCallContext = internalCallContextFactory.createInternalCallContext(account.getId(), callContext);
- final UUID nonNulPaymentMethodId = (paymentMethodId != null) ?
+ final UUID nonNullPaymentMethodId = (paymentMethodId != null) ?
paymentMethodId :
paymentMethodProcessor.createOrGetExternalPaymentMethod(UUIDs.randomUUID().toString(), account, properties, callContext, internalCallContext);
- payment = paymentProcessor.createCredit(IS_API_PAYMENT, NULL_ATTEMPT_ID, account, nonNulPaymentMethodId, paymentId, amount, currency, paymentExternalKey, paymentTransactionExternalKey,
+ payment = paymentProcessor.createCredit(IS_API_PAYMENT, NULL_ATTEMPT_ID, account, nonNullPaymentMethodId, paymentId, amount, currency, paymentExternalKey, paymentTransactionExternalKey,
SHOULD_LOCK_ACCOUNT, properties, callContext, internalCallContext);
paymentTransaction = findPaymentTransaction(payment, paymentTransactionExternalKey);
diff --git a/payment/src/main/java/org/killbill/billing/payment/core/sm/PaymentAutomatonDAOHelper.java b/payment/src/main/java/org/killbill/billing/payment/core/sm/PaymentAutomatonDAOHelper.java
index fa55ff0..d0fa7bf 100644
--- a/payment/src/main/java/org/killbill/billing/payment/core/sm/PaymentAutomatonDAOHelper.java
+++ b/payment/src/main/java/org/killbill/billing/payment/core/sm/PaymentAutomatonDAOHelper.java
@@ -149,13 +149,14 @@ public class PaymentAutomatonDAOHelper {
paymentStateContext.setPaymentTransactionModelDao(paymentDao.getPaymentTransaction(paymentStateContext.getPaymentTransactionModelDao().getId(), internalCallContext));
}
- public String getPaymentProviderPluginName() throws PaymentApiException {
+ public String getPaymentProviderPluginName(final boolean includeDeteled) throws PaymentApiException {
if (pluginName != null) {
return pluginName;
}
final UUID paymentMethodId = paymentStateContext.getPaymentMethodId();
- final PaymentMethodModelDao methodDao = paymentDao.getPaymentMethodIncludedDeleted(paymentMethodId, internalCallContext);
+ final PaymentMethodModelDao methodDao = (includeDeteled) ? paymentDao.getPaymentMethodIncludedDeleted(paymentMethodId, internalCallContext) :
+ paymentDao.getPaymentMethod(paymentMethodId, internalCallContext);
if (methodDao == null) {
throw new PaymentApiException(ErrorCode.PAYMENT_NO_SUCH_PAYMENT_METHOD, paymentMethodId);
}
@@ -164,7 +165,7 @@ public class PaymentAutomatonDAOHelper {
}
public PaymentPluginApi getPaymentPluginApi() throws PaymentApiException {
- final String pluginName = getPaymentProviderPluginName();
+ final String pluginName = getPaymentProviderPluginName(true);
return getPaymentPluginApi(pluginName);
}
diff --git a/payment/src/main/java/org/killbill/billing/payment/core/sm/PaymentAutomatonRunner.java b/payment/src/main/java/org/killbill/billing/payment/core/sm/PaymentAutomatonRunner.java
index de91986..c1304a7 100644
--- a/payment/src/main/java/org/killbill/billing/payment/core/sm/PaymentAutomatonRunner.java
+++ b/payment/src/main/java/org/killbill/billing/payment/core/sm/PaymentAutomatonRunner.java
@@ -68,7 +68,6 @@ import org.killbill.billing.payment.core.sm.payments.VoidCompleted;
import org.killbill.billing.payment.core.sm.payments.VoidInitiated;
import org.killbill.billing.payment.core.sm.payments.VoidOperation;
import org.killbill.billing.payment.dao.PaymentDao;
-import org.killbill.billing.payment.dao.PaymentMethodModelDao;
import org.killbill.billing.payment.dao.PaymentModelDao;
import org.killbill.billing.payment.dao.PaymentTransactionModelDao;
import org.killbill.billing.payment.dispatcher.PluginDispatcher;
@@ -132,7 +131,6 @@ public class PaymentAutomatonRunner {
// Retrieve the payment id from the payment external key if needed
final UUID effectivePaymentId = paymentId != null ? paymentId : retrievePaymentId(paymentExternalKey, paymentTransactionExternalKey, internalCallContext);
- verifyPaymentMethodExistsForRefund(effectivePaymentId, transactionType, internalCallContext);
return new PaymentStateContext(isApiPayment,
effectivePaymentId,
@@ -168,6 +166,7 @@ public class PaymentAutomatonRunner {
final OperationCallback operationCallback;
final LeavingStateCallback leavingStateCallback;
final EnteringStateCallback enteringStateCallback;
+ Boolean includeDeletedPaymentMethod = Boolean.FALSE;
switch (transactionType) {
case PURCHASE:
operationCallback = new PurchaseOperation(daoHelper, locker, paymentPluginDispatcher, paymentConfig, paymentStateContext);
@@ -203,12 +202,13 @@ public class PaymentAutomatonRunner {
operationCallback = new ChargebackOperation(daoHelper, locker, paymentPluginDispatcher, paymentConfig, paymentStateContext);
leavingStateCallback = new ChargebackInitiated(daoHelper, paymentStateContext);
enteringStateCallback = new ChargebackCompleted(daoHelper, paymentStateContext);
+ includeDeletedPaymentMethod = Boolean.TRUE;
break;
default:
throw new IllegalStateException("Unsupported transaction type " + transactionType);
}
- runStateMachineOperation(currentStateName, transactionType, leavingStateCallback, operationCallback, enteringStateCallback, paymentStateContext, daoHelper);
+ runStateMachineOperation(currentStateName, transactionType, leavingStateCallback, operationCallback, enteringStateCallback, includeDeletedPaymentMethod, paymentStateContext, daoHelper);
return paymentStateContext.getPaymentId();
}
@@ -229,10 +229,11 @@ public class PaymentAutomatonRunner {
final LeavingStateCallback leavingStateCallback,
final OperationCallback operationCallback,
final EnteringStateCallback enteringStateCallback,
+ final Boolean includeDeletedPaymentMethod,
final PaymentStateContext paymentStateContext,
final PaymentAutomatonDAOHelper daoHelper) throws PaymentApiException {
try {
- final StateMachineConfig stateMachineConfig = paymentSMHelper.getStateMachineConfig(daoHelper.getPaymentProviderPluginName(), paymentStateContext.getInternalCallContext());
+ final StateMachineConfig stateMachineConfig = paymentSMHelper.getStateMachineConfig(daoHelper.getPaymentProviderPluginName(includeDeletedPaymentMethod), paymentStateContext.getInternalCallContext());
final StateMachine initialStateMachine = stateMachineConfig.getStateMachineForState(initialStateName);
final State initialState = initialStateMachine.getState(initialStateName);
final Operation operation = paymentSMHelper.getOperationForTransaction(stateMachineConfig, transactionType);
@@ -288,14 +289,4 @@ public class PaymentAutomatonRunner {
return paymentIdCandidate;
}
- private void verifyPaymentMethodExistsForRefund(final UUID paymentId, final TransactionType transactionType, final InternalCallContext internalCallContext) throws PaymentApiException {
- if (TransactionType.REFUND.equals(transactionType) && (paymentId != null)) {
- final PaymentModelDao payment = paymentDao.getPayment(paymentId, internalCallContext);
- final PaymentMethodModelDao paymentMethod = paymentDao.getPaymentMethod(payment.getPaymentMethodId(), internalCallContext);
- if (paymentMethod == null) {
- throw new PaymentApiException(ErrorCode.PAYMENT_NO_SUCH_PAYMENT_METHOD, payment.getPaymentMethodId());
- }
- }
- }
-
}
diff --git a/payment/src/main/java/org/killbill/billing/payment/core/sm/payments/PaymentOperation.java b/payment/src/main/java/org/killbill/billing/payment/core/sm/payments/PaymentOperation.java
index d6a1e7d..4585291 100644
--- a/payment/src/main/java/org/killbill/billing/payment/core/sm/payments/PaymentOperation.java
+++ b/payment/src/main/java/org/killbill/billing/payment/core/sm/payments/PaymentOperation.java
@@ -70,7 +70,7 @@ public abstract class PaymentOperation extends OperationCallbackBase<PaymentTran
public OperationResult doOperationCallback() throws OperationException {
final String pluginName;
try {
- pluginName = daoHelper.getPaymentProviderPluginName();
+ pluginName = daoHelper.getPaymentProviderPluginName(true);
this.plugin = daoHelper.getPaymentPluginApi();
} catch (final PaymentApiException e) {
throw convertToUnknownTransactionStatusAndErroredPaymentState(e);