killbill-memoizeit

payment: fix state machine flow when overriding the operation

12/5/2014 8:13:14 PM

Details

diff --git a/payment/src/main/java/org/killbill/billing/payment/core/sm/PaymentOperation.java b/payment/src/main/java/org/killbill/billing/payment/core/sm/PaymentOperation.java
index 1a44ca5..daf9c67 100644
--- a/payment/src/main/java/org/killbill/billing/payment/core/sm/PaymentOperation.java
+++ b/payment/src/main/java/org/killbill/billing/payment/core/sm/PaymentOperation.java
@@ -180,7 +180,7 @@ public abstract class PaymentOperation extends OperationCallbackBase<PaymentTran
                                                                                                         paymentStateContext.getPaymentTransactionModelDao().getProcessedCurrency(),
                                                                                                         paymentStateContext.getPaymentTransactionModelDao().getEffectiveDate(),
                                                                                                         paymentStateContext.getPaymentTransactionModelDao().getCreatedDate(),
-                                                                                                        PaymentPluginStatus.PROCESSED,
+                                                                                                        buildPaymentPluginStatusFromOperationResult(paymentStateContext.getOverridePluginOperationResult()),
                                                                                                         null);
                 paymentStateContext.setPaymentInfoPlugin(paymentInfoPlugin);
                 return paymentStateContext.getOverridePluginOperationResult();
@@ -190,6 +190,20 @@ public abstract class PaymentOperation extends OperationCallbackBase<PaymentTran
         }
     }
 
+    private PaymentPluginStatus buildPaymentPluginStatusFromOperationResult(final OperationResult operationResult) {
+        switch (operationResult) {
+            case PENDING:
+                return PaymentPluginStatus.PENDING;
+            case SUCCESS:
+                return PaymentPluginStatus.PROCESSED;
+            case FAILURE:
+                return PaymentPluginStatus.ERROR;
+            case EXCEPTION:
+            default:
+                return PaymentPluginStatus.UNDEFINED;
+        }
+    }
+
     private OperationResult processPaymentInfoPlugin() {
         if (paymentStateContext.getPaymentInfoPlugin() == null) {
             return OperationResult.FAILURE;