Details
diff --git a/payment/src/main/java/org/killbill/billing/payment/core/sm/OperationCallbackBase.java b/payment/src/main/java/org/killbill/billing/payment/core/sm/OperationCallbackBase.java
index d4da958..6a81f1d 100644
--- a/payment/src/main/java/org/killbill/billing/payment/core/sm/OperationCallbackBase.java
+++ b/payment/src/main/java/org/killbill/billing/payment/core/sm/OperationCallbackBase.java
@@ -32,7 +32,7 @@ import org.killbill.commons.locker.GlobalLocker;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-public abstract class OperationCallbackBase {
+public abstract class OperationCallbackBase<CallbackOperationResult, CallbackOperationException extends Exception> {
protected final Logger logger = LoggerFactory.getLogger(OperationCallbackBase.class);
@@ -60,8 +60,8 @@ public abstract class OperationCallbackBase {
try {
final Callable<PluginDispatcherReturnType<OperationResult>> task = new CallableWithAccountLock<OperationResult, ExceptionType>(locker,
- account.getExternalKey(),
- callback);
+ account.getExternalKey(),
+ callback);
final OperationResult operationResult = paymentPluginDispatcher.dispatchWithTimeout(task);
logger.debug("Successful plugin call for account {} with result {}", account.getExternalKey(), operationResult);
return operationResult;
@@ -81,8 +81,7 @@ public abstract class OperationCallbackBase {
// There is a base glue code that is common to all calls and shared in a base class and then a per call specific operation
// using the doCallSpecificOperationCallback method below.
//
- protected abstract <CallbackOperationResult, CallbackOperationException extends Exception> CallbackOperationResult doCallSpecificOperationCallback()
- throws CallbackOperationException;
+ protected abstract CallbackOperationResult doCallSpecificOperationCallback() throws CallbackOperationException;
//
// The methods below allow to convert the exceptions thrown back by the Executor into an appropriate OperationException
@@ -92,5 +91,4 @@ public abstract class OperationCallbackBase {
protected abstract OperationException wrapTimeoutException(final PaymentStateContext paymentStateContext, final TimeoutException e);
protected abstract OperationException wrapInterruptedException(final PaymentStateContext paymentStateContext, final InterruptedException e);
-
}
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 556fb42..e2b2a65 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
@@ -26,7 +26,6 @@ import org.killbill.automaton.Operation.OperationCallback;
import org.killbill.automaton.OperationException;
import org.killbill.automaton.OperationResult;
import org.killbill.billing.ErrorCode;
-import org.killbill.billing.osgi.api.OSGIServiceRegistration;
import org.killbill.billing.payment.api.PaymentApiException;
import org.killbill.billing.payment.api.TransactionStatus;
import org.killbill.billing.payment.api.TransactionType;
@@ -43,14 +42,12 @@ import org.killbill.commons.locker.GlobalLocker;
import org.killbill.commons.locker.LockFailedException;
import com.google.common.base.Objects;
-
-import com.google.common.base.Objects;
import com.google.common.base.Predicate;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables;
// Encapsulates the payment specific logic
-public abstract class PaymentOperation extends OperationCallbackBase implements OperationCallback {
+public abstract class PaymentOperation extends OperationCallbackBase<PaymentTransactionInfoPlugin, PaymentPluginApiException> implements OperationCallback {
protected final PaymentAutomatonDAOHelper daoHelper;
protected PaymentPluginApi plugin;
@@ -63,12 +60,9 @@ public abstract class PaymentOperation extends OperationCallbackBase implements
this.daoHelper = daoHelper;
}
-
@Override
public OperationResult doOperationCallback() throws OperationException {
-
try {
-
this.plugin = daoHelper.getPaymentProviderPlugin();
if (paymentStateContext.shouldLockAccountAndDispatch()) {
@@ -76,7 +70,7 @@ public abstract class PaymentOperation extends OperationCallbackBase implements
} else {
return doSimpleOperationCallback();
}
- } catch (PaymentApiException e) {
+ } catch (final PaymentApiException e) {
throw new OperationException(e, OperationResult.EXCEPTION);
}
}
@@ -126,7 +120,7 @@ public abstract class PaymentOperation extends OperationCallbackBase implements
protected BigDecimal getSumAmount(final Iterable<PaymentTransactionModelDao> transactions) {
BigDecimal result = BigDecimal.ZERO;
- Iterator<PaymentTransactionModelDao> iterator = transactions.iterator();
+ final Iterator<PaymentTransactionModelDao> iterator = transactions.iterator();
while (iterator.hasNext()) {
result = result.add(iterator.next().getAmount());
}
@@ -148,7 +142,7 @@ public abstract class PaymentOperation extends OperationCallbackBase implements
return doOperation();
} catch (final PaymentApiException e) {
throw new OperationException(e, OperationResult.FAILURE);
- } catch (RuntimeException e) {
+ } catch (final RuntimeException e) {
throw new OperationException(e, OperationResult.EXCEPTION);
}
}
diff --git a/payment/src/main/java/org/killbill/billing/payment/core/sm/RetryOperationCallback.java b/payment/src/main/java/org/killbill/billing/payment/core/sm/RetryOperationCallback.java
index d73d022..0e44d5c 100644
--- a/payment/src/main/java/org/killbill/billing/payment/core/sm/RetryOperationCallback.java
+++ b/payment/src/main/java/org/killbill/billing/payment/core/sm/RetryOperationCallback.java
@@ -32,8 +32,8 @@ import org.killbill.billing.callcontext.DefaultCallContext;
import org.killbill.billing.catalog.api.Currency;
import org.killbill.billing.osgi.api.OSGIServiceRegistration;
import org.killbill.billing.payment.api.Payment;
-import org.killbill.billing.payment.api.PaymentTransaction;
import org.killbill.billing.payment.api.PaymentApiException;
+import org.killbill.billing.payment.api.PaymentTransaction;
import org.killbill.billing.payment.api.PluginProperty;
import org.killbill.billing.payment.api.TransactionStatus;
import org.killbill.billing.payment.api.TransactionType;
@@ -52,14 +52,13 @@ import org.killbill.commons.locker.LockFailedException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-public abstract class RetryOperationCallback extends OperationCallbackBase implements OperationCallback {
+public abstract class RetryOperationCallback extends OperationCallbackBase<Payment, PaymentApiException> implements OperationCallback {
private final OSGIServiceRegistration<PaymentControlPluginApi> paymentControlPluginRegistry;
protected final PaymentProcessor paymentProcessor;
protected final RetryablePaymentStateContext retryablePaymentStateContext;
-
private final Logger logger = LoggerFactory.getLogger(RetryOperationCallback.class);
protected RetryOperationCallback(final GlobalLocker locker, final PluginDispatcher<OperationResult> paymentPluginDispatcher, final RetryablePaymentStateContext paymentStateContext, final PaymentProcessor paymentProcessor, final OSGIServiceRegistration<PaymentControlPluginApi> retryPluginRegistry) {
@@ -69,7 +68,6 @@ public abstract class RetryOperationCallback extends OperationCallbackBase imple
this.retryablePaymentStateContext = paymentStateContext;
}
-
@Override
protected abstract Payment doCallSpecificOperationCallback() throws PaymentApiException;
@@ -101,12 +99,12 @@ public abstract class RetryOperationCallback extends OperationCallbackBase imple
// Transition to ABORTED
return PluginDispatcher.createPluginDispatcherReturnType(OperationResult.EXCEPTION);
}
- } catch (PaymentControlApiException e) {
+ } catch (final PaymentControlApiException e) {
// Transition to ABORTED and throw PaymentControlApiException to caller.
throw new OperationException(e, OperationResult.EXCEPTION);
}
- boolean success;
+ final boolean success;
try {
// Adjust amount with value returned by plugin if necessary
if (paymentStateContext.getAmount() == null ||
@@ -141,10 +139,10 @@ public abstract class RetryOperationCallback extends OperationCallbackBase imple
} else {
throw new OperationException(null, getOperationResultAndSetContext(retryablePaymentStateContext, paymentControlContext));
}
- } catch (PaymentApiException e) {
+ } catch (final PaymentApiException e) {
// Wrap PaymentApiException, and throw a new OperationException with an ABORTED/FAILURE state based on the retry result.
throw new OperationException(e, getOperationResultAndSetContext(retryablePaymentStateContext, paymentControlContext));
- } catch (RuntimeException e) {
+ } catch (final RuntimeException e) {
// Attempts to set the retry date in context if needed.
getOperationResultAndSetContext(retryablePaymentStateContext, paymentControlContext);
throw e;
@@ -183,7 +181,7 @@ public abstract class RetryOperationCallback extends OperationCallbackBase imple
final PaymentControlPluginApi plugin = paymentControlPluginRegistry.getServiceForName(pluginName);
try {
plugin.onSuccessCall(paymentControlContext);
- } catch (PaymentControlApiException e) {
+ } catch (final PaymentControlApiException e) {
logger.warn("Plugin " + pluginName + " failed to complete onCompletion call for " + paymentControlContext.getPaymentExternalKey(), e);
}
}
@@ -195,7 +193,6 @@ public abstract class RetryOperationCallback extends OperationCallbackBase imple
}
private PriorPaymentControlResult getPluginResult(final String pluginName, final PaymentControlContext paymentControlContext) throws PaymentControlApiException {
-
final PaymentControlPluginApi plugin = paymentControlPluginRegistry.getServiceForName(pluginName);
final PriorPaymentControlResult result = plugin.priorCall(paymentControlContext);
return result;
@@ -216,13 +213,12 @@ public abstract class RetryOperationCallback extends OperationCallbackBase imple
final PaymentControlPluginApi plugin = paymentControlPluginRegistry.getServiceForName(pluginName);
final FailureCallResult result = plugin.onFailureCall(paymentControlContext);
return result.getNextRetryDate();
- } catch (PaymentControlApiException e) {
+ } catch (final PaymentControlApiException e) {
logger.warn("Plugin " + pluginName + " failed to return next retryDate for payment " + paymentControlContext.getPaymentExternalKey(), e);
return null;
}
}
-
public static class DefaultPaymentControlContext extends DefaultCallContext implements PaymentControlContext {
private final Account account;
@@ -324,12 +320,10 @@ public abstract class RetryOperationCallback extends OperationCallbackBase imple
return isApiPayment;
}
-
public UUID getTransactionId() {
return transactionId;
}
-
@Override
public Iterable<PluginProperty> getPluginProperties() {
return properties;