killbill-memoizeit

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;