killbill-memoizeit

Details

diff --git a/api/src/main/java/com/ning/billing/payment/plugin/api/NoOpPaymentPluginApi.java b/api/src/main/java/com/ning/billing/payment/plugin/api/NoOpPaymentPluginApi.java
new file mode 100644
index 0000000..2b3620a
--- /dev/null
+++ b/api/src/main/java/com/ning/billing/payment/plugin/api/NoOpPaymentPluginApi.java
@@ -0,0 +1,27 @@
+/* 
+ * Copyright 2010-2011 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License.  You may obtain a copy of the License at:
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+package com.ning.billing.payment.plugin.api;
+
+public interface NoOpPaymentPluginApi extends PaymentPluginApi {
+
+    public void clear();
+    
+    public void makeNextPaymentFailWithError();
+    
+    public void makeNextPaymentFailWithException();
+
+    public void makeAllInvoicesFailWithError(boolean failure);
+}
diff --git a/payment/src/main/java/com/ning/billing/payment/provider/DefaultNoOpPaymentProviderPlugin.java b/payment/src/main/java/com/ning/billing/payment/provider/DefaultNoOpPaymentProviderPlugin.java
new file mode 100644
index 0000000..a4bf728
--- /dev/null
+++ b/payment/src/main/java/com/ning/billing/payment/provider/DefaultNoOpPaymentProviderPlugin.java
@@ -0,0 +1,205 @@
+/*
+ * Copyright 2010-2012 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License.  You may obtain a copy of the License at:
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.payment.provider;
+
+import java.math.BigDecimal;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import org.apache.commons.lang.RandomStringUtils;
+
+import com.google.inject.Inject;
+import com.ning.billing.account.api.Account;
+import com.ning.billing.payment.api.PaymentMethodPlugin;
+import com.ning.billing.payment.plugin.api.NoOpPaymentPluginApi;
+import com.ning.billing.payment.plugin.api.PaymentInfoPlugin;
+import com.ning.billing.payment.plugin.api.PaymentPluginApiException;
+import com.ning.billing.payment.plugin.api.PaymentProviderAccount;
+import com.ning.billing.payment.plugin.api.PaymentPluginApi;
+import com.ning.billing.payment.plugin.api.PaymentInfoPlugin.PaymentPluginStatus;
+import com.ning.billing.util.clock.Clock;
+
+public class DefaultNoOpPaymentProviderPlugin implements NoOpPaymentPluginApi {
+
+    
+    private final AtomicBoolean makeNextInvoiceFailWithError = new AtomicBoolean(false);
+    private final AtomicBoolean makeNextInvoiceFailWithException = new AtomicBoolean(false);
+    private final AtomicBoolean makeAllInvoicesFailWithError = new AtomicBoolean(false);
+    private final Map<UUID, PaymentInfoPlugin> payments = new ConcurrentHashMap<UUID, PaymentInfoPlugin>();
+
+    private final Map<String, List<PaymentMethodPlugin>> paymentMethods = new ConcurrentHashMap<String, List<PaymentMethodPlugin>>();
+
+    private final Map<String, PaymentProviderAccount> accounts = new ConcurrentHashMap<String, PaymentProviderAccount>();
+    private final Clock clock;
+
+    @Inject
+    public DefaultNoOpPaymentProviderPlugin(Clock clock) {
+        this.clock = clock;
+        clear();
+    }
+    
+    @Override
+    public void clear() {
+        makeNextInvoiceFailWithException.set(false);
+        makeAllInvoicesFailWithError.set(false);
+        makeNextInvoiceFailWithError.set(false);
+    }
+    
+    @Override
+    public void makeNextPaymentFailWithError() {
+        makeNextInvoiceFailWithError.set(true);
+    }
+
+    @Override
+    public void makeNextPaymentFailWithException() {
+        makeNextInvoiceFailWithException.set(true);
+    }
+
+    @Override
+    public void makeAllInvoicesFailWithError(boolean failure) {
+        makeAllInvoicesFailWithError.set(failure);
+    }
+
+    
+    @Override
+    public String getName() {
+        return null;
+    }
+
+
+    @Override
+    public PaymentInfoPlugin processPayment(String externalKey, UUID paymentId, BigDecimal amount) throws PaymentPluginApiException {
+        if (makeNextInvoiceFailWithException.getAndSet(false)) {
+            throw new PaymentPluginApiException("", "test error");
+        }
+
+        PaymentPluginStatus status = (makeAllInvoicesFailWithError.get() || makeNextInvoiceFailWithError.getAndSet(false)) ? PaymentPluginStatus.ERROR : PaymentPluginStatus.PROCESSED;
+        PaymentInfoPlugin result = new DefaultNoOpPaymentInfoPlugin(amount, clock.getUTCNow(), clock.getUTCNow(), status, null);
+        payments.put(paymentId, result);
+        return result;
+    }
+
+
+    @Override
+    public PaymentInfoPlugin getPaymentInfo(UUID paymentId) throws PaymentPluginApiException {
+        PaymentInfoPlugin payment = payments.get(paymentId);
+        if (payment == null) {
+            throw new PaymentPluginApiException("", "No payment found for id " + paymentId);
+        }
+        return payment;
+    }
+
+    @Override
+    public String createPaymentProviderAccount(Account account)  throws PaymentPluginApiException {
+        if (account != null) {
+            String id = String.valueOf(RandomStringUtils.randomAlphanumeric(10));
+            String paymentMethodId = String.valueOf(RandomStringUtils.randomAlphanumeric(10));            
+            accounts.put(account.getExternalKey(),
+                         new PaymentProviderAccount.Builder().setAccountKey(account.getExternalKey())
+                                                             .setId(id)
+                                                             .setDefaultPaymentMethod(paymentMethodId)
+                                                             .build());
+            return id;
+        }
+        else {
+            throw new PaymentPluginApiException("", "Did not get account to create payment provider account");
+        }
+    }
+
+    @Override
+    public String addPaymentMethod(String accountKey, PaymentMethodPlugin paymentMethodProps, boolean setDefault)  throws PaymentPluginApiException {
+        PaymentMethodPlugin realWithID = new DefaultNoOpPaymentMethodPlugin(paymentMethodProps);
+        List<PaymentMethodPlugin> pms = paymentMethods.get(accountKey);
+        if (pms == null) {
+            pms = new LinkedList<PaymentMethodPlugin>();
+            paymentMethods.put(accountKey, pms);
+        }
+        pms.add(realWithID);
+        
+        
+        return realWithID.getExternalPaymentMethodId();
+    }
+
+
+    @Override
+    public void updatePaymentMethod(String accountKey, String externalPaymentId, PaymentMethodPlugin paymentMethodProps)
+        throws PaymentPluginApiException {
+        DefaultNoOpPaymentMethodPlugin e = getPaymentMethod(accountKey, externalPaymentId);
+        if (e != null) {
+            e.setProps(paymentMethodProps.getProperties());
+        }
+    }
+
+    @Override
+    public void deletePaymentMethod(String accountKey, String paymentMethodId)  throws PaymentPluginApiException {
+
+        PaymentMethodPlugin toBeDeleted = null;
+        List<PaymentMethodPlugin> pms = paymentMethods.get(accountKey);
+        if (pms != null) {
+
+            for (PaymentMethodPlugin cur : pms) {
+                if (cur.getExternalPaymentMethodId().equals(paymentMethodId)) {
+                    toBeDeleted = cur;
+                    break;
+                }
+            }
+        }
+        if (toBeDeleted != null) {
+            pms.remove(toBeDeleted);
+        }
+    }
+
+    @Override
+    public List<PaymentMethodPlugin> getPaymentMethodDetails(String accountKey)
+            throws PaymentPluginApiException {
+        return paymentMethods.get(accountKey);
+    }
+
+    @Override
+    public PaymentMethodPlugin getPaymentMethodDetail(String accountKey, String externalPaymentId) 
+    throws PaymentPluginApiException {
+        return getPaymentMethodDetail(accountKey, externalPaymentId);
+    }
+    
+    private DefaultNoOpPaymentMethodPlugin getPaymentMethod(String accountKey, String externalPaymentId) {
+        List<PaymentMethodPlugin> pms = paymentMethods.get(accountKey);
+        if (pms == null) {
+            return null;
+        }
+        for (PaymentMethodPlugin cur : pms) {
+            if (cur.getExternalPaymentMethodId().equals(externalPaymentId)) {
+                return (DefaultNoOpPaymentMethodPlugin) cur;
+            }
+        }
+        return null;
+    }
+    
+    @Override
+    public void setDefaultPaymentMethod(String accountKey,
+            String externalPaymentId) throws PaymentPluginApiException {
+    }
+
+    @Override
+    public List<PaymentInfoPlugin> processRefund(Account account)
+            throws PaymentPluginApiException {
+        return null;
+    }
+}
diff --git a/payment/src/main/java/com/ning/billing/payment/provider/NoOpPaymentProviderPluginModule.java b/payment/src/main/java/com/ning/billing/payment/provider/NoOpPaymentProviderPluginModule.java
index a403274..2fcc512 100644
--- a/payment/src/main/java/com/ning/billing/payment/provider/NoOpPaymentProviderPluginModule.java
+++ b/payment/src/main/java/com/ning/billing/payment/provider/NoOpPaymentProviderPluginModule.java
@@ -28,7 +28,7 @@ public class NoOpPaymentProviderPluginModule extends AbstractModule {
 
     @Override
     protected void configure() {
-        bind(NoOpPaymentProviderPlugin.class)
+        bind(DefaultNoOpPaymentProviderPlugin.class)
             .annotatedWith(Names.named(instanceName))
             .toProvider(new NoOpPaymentProviderPluginProvider(instanceName))
             .asEagerSingleton();
diff --git a/payment/src/main/java/com/ning/billing/payment/provider/NoOpPaymentProviderPluginProvider.java b/payment/src/main/java/com/ning/billing/payment/provider/NoOpPaymentProviderPluginProvider.java
index ceb36f9..b219133 100644
--- a/payment/src/main/java/com/ning/billing/payment/provider/NoOpPaymentProviderPluginProvider.java
+++ b/payment/src/main/java/com/ning/billing/payment/provider/NoOpPaymentProviderPluginProvider.java
@@ -18,27 +18,31 @@ package com.ning.billing.payment.provider;
 
 import com.google.inject.Inject;
 import com.google.inject.Provider;
+import com.ning.billing.util.clock.Clock;
 
-public class NoOpPaymentProviderPluginProvider implements Provider<NoOpPaymentProviderPlugin> {
+public class NoOpPaymentProviderPluginProvider implements Provider<DefaultNoOpPaymentProviderPlugin> {
 
-    private PaymentProviderPluginRegistry registry;
     private final String instanceName;
-
+    
+    private Clock clock;
+    private PaymentProviderPluginRegistry registry;
+    
     public NoOpPaymentProviderPluginProvider(String instanceName) {
         this.instanceName = instanceName;
+
     }
 
     @Inject
-    public void setPaymentProviderPluginRegistry(PaymentProviderPluginRegistry registry) {
+    public void setPaymentProviderPluginRegistry(PaymentProviderPluginRegistry registry, Clock clock) {
+        this.clock = clock;
         this.registry = registry;
     }
 
     @Override
-    public NoOpPaymentProviderPlugin get() {
-        NoOpPaymentProviderPlugin plugin = new NoOpPaymentProviderPlugin();
+    public DefaultNoOpPaymentProviderPlugin get() {
+        DefaultNoOpPaymentProviderPlugin plugin = new DefaultNoOpPaymentProviderPlugin(clock);
 
         registry.register(plugin, instanceName);
         return plugin;
     }
-
 }
diff --git a/payment/src/test/java/com/ning/billing/payment/provider/MockPaymentProviderPlugin.java b/payment/src/test/java/com/ning/billing/payment/provider/MockPaymentProviderPlugin.java
index eeea342..6d9cc1a 100644
--- a/payment/src/test/java/com/ning/billing/payment/provider/MockPaymentProviderPlugin.java
+++ b/payment/src/test/java/com/ning/billing/payment/provider/MockPaymentProviderPlugin.java
@@ -16,217 +16,14 @@
 
 package com.ning.billing.payment.provider;
 
-import java.math.BigDecimal;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.atomic.AtomicBoolean;
-
-import org.apache.commons.lang.RandomStringUtils;
-
 import com.google.inject.Inject;
-import com.ning.billing.account.api.Account;
-import com.ning.billing.payment.api.DefaultPaymentMethodPlugin;
-import com.ning.billing.payment.api.PaymentMethodPlugin;
-import com.ning.billing.payment.plugin.api.MockPaymentInfoPlugin;
-import com.ning.billing.payment.plugin.api.PaymentInfoPlugin;
-import com.ning.billing.payment.plugin.api.PaymentPluginApiException;
-import com.ning.billing.payment.plugin.api.PaymentProviderAccount;
 import com.ning.billing.payment.plugin.api.PaymentPluginApi;
-import com.ning.billing.payment.plugin.api.PaymentInfoPlugin.PaymentPluginStatus;
 import com.ning.billing.util.clock.Clock;
 
-public class MockPaymentProviderPlugin implements PaymentPluginApi {
+public class MockPaymentProviderPlugin extends DefaultNoOpPaymentProviderPlugin implements PaymentPluginApi {
     
-    private final AtomicBoolean makeNextInvoiceFailWithError = new AtomicBoolean(false);
-    private final AtomicBoolean makeNextInvoiceFailWithException = new AtomicBoolean(false);
-    private final AtomicBoolean makeAllInvoicesFailWithError = new AtomicBoolean(false);
-    private final Map<UUID, PaymentInfoPlugin> payments = new ConcurrentHashMap<UUID, PaymentInfoPlugin>();
-
-    private final Map<String, List<PaymentMethodPlugin>> paymentMethods = new ConcurrentHashMap<String, List<PaymentMethodPlugin>>();
-
-    private final Map<String, PaymentProviderAccount> accounts = new ConcurrentHashMap<String, PaymentProviderAccount>();
-    private final Clock clock;
-
     @Inject
     public MockPaymentProviderPlugin(Clock clock) {
-        this.clock = clock;
-        clear();
-    }
-    
-    
-    public void clear() {
-        makeNextInvoiceFailWithException.set(false);
-        makeAllInvoicesFailWithError.set(false);
-        makeNextInvoiceFailWithError.set(false);
-    }
-    
-    public void makeNextPaymentFailWithError() {
-        makeNextInvoiceFailWithError.set(true);
-    }
-
-    
-    public void makeNextPaymentFailWithException() {
-        makeNextInvoiceFailWithException.set(true);
-    }
-
-    public void makeAllInvoicesFailWithError(boolean failure) {
-        makeAllInvoicesFailWithError.set(failure);
-    }
-
-    
-    @Override
-    public String getName() {
-        return null;
-    }
-
-
-    @Override
-    public PaymentInfoPlugin processPayment(String externalKey, UUID paymentId, BigDecimal amount) throws PaymentPluginApiException {
-        if (makeNextInvoiceFailWithException.getAndSet(false)) {
-            throw new PaymentPluginApiException("", "test error");
-        }
-
-        PaymentPluginStatus status = (makeAllInvoicesFailWithError.get() || makeNextInvoiceFailWithError.getAndSet(false)) ? PaymentPluginStatus.ERROR : PaymentPluginStatus.PROCESSED;
-        PaymentInfoPlugin result = new MockPaymentInfoPlugin(amount, clock.getUTCNow(), clock.getUTCNow(), status, null);
-        payments.put(paymentId, result);
-        return result;
-    }
-
-
-    @Override
-    public PaymentInfoPlugin getPaymentInfo(UUID paymentId) throws PaymentPluginApiException {
-        PaymentInfoPlugin payment = payments.get(paymentId);
-        if (payment == null) {
-            throw new PaymentPluginApiException("", "No payment found for id " + paymentId);
-        }
-        return payment;
-    }
-
-    @Override
-    public String createPaymentProviderAccount(Account account)  throws PaymentPluginApiException {
-        if (account != null) {
-            String id = String.valueOf(RandomStringUtils.randomAlphanumeric(10));
-            String paymentMethodId = String.valueOf(RandomStringUtils.randomAlphanumeric(10));            
-            accounts.put(account.getExternalKey(),
-                         new PaymentProviderAccount.Builder().setAccountKey(account.getExternalKey())
-                                                             .setId(id)
-                                                             .setDefaultPaymentMethod(paymentMethodId)
-                                                             .build());
-            return id;
-        }
-        else {
-            throw new PaymentPluginApiException("", "Did not get account to create payment provider account");
-        }
-    }
-
-    @Override
-    public String addPaymentMethod(String accountKey, PaymentMethodPlugin paymentMethodProps, boolean setDefault)  throws PaymentPluginApiException {
-        PaymentMethodPlugin realWithID = new DefaultPaymentMethodPlugin(paymentMethodProps);
-        List<PaymentMethodPlugin> pms = paymentMethods.get(accountKey);
-        if (pms == null) {
-            pms = new LinkedList<PaymentMethodPlugin>();
-            paymentMethods.put(accountKey, pms);
-        }
-        pms.add(realWithID);
-        
-        
-        return realWithID.getExternalPaymentMethodId();
-    }
-
-    /*
-    public void setDefaultPaymentMethodOnAccount(PaymentProviderAccount account, String paymentMethodId) {
-        if (paymentMethodId != null && account != null) {
-            accounts.put(account.getAccountKey(),
-                new PaymentProviderAccount.Builder()
-                                          .copyFrom(account)
-                                          .setDefaultPaymentMethod("paypal")
-                                          .build());
-            List<PaymentMethodInfo> paymentMethodsToUpdate = new ArrayList<PaymentMethodInfo>();
-            for (PaymentMethodInfo paymentMethod : paymentMethods.values()) {
-                if (account.getAccountKey().equals(paymentMethod.getAccountId()) && !paymentMethodId.equals(paymentMethod.getId())) {
-                    if (paymentMethod instanceof PaypalPaymentMethodInfo) {
-                        PaypalPaymentMethodInfo paypalPaymentMethod = (PaypalPaymentMethodInfo)paymentMethod;
-                        paymentMethodsToUpdate.add(new PaypalPaymentMethodInfo.Builder(paypalPaymentMethod).setDefaultMethod(false).build());
-                    }
-                    else if (paymentMethod instanceof CreditCardPaymentMethodInfo) {
-                        CreditCardPaymentMethodInfo ccPaymentMethod = (CreditCardPaymentMethodInfo)paymentMethod;
-                        paymentMethodsToUpdate.add(new CreditCardPaymentMethodInfo.Builder(ccPaymentMethod).setDefaultMethod(false).build());
-                    }
-                }
-            }
-            for (PaymentMethodInfo paymentMethod : paymentMethodsToUpdate) {
-                paymentMethods.put(paymentMethod.getId(), paymentMethod);
-            }
-        }
-    }
-    *
-    *
-    */
-
-    @Override
-    public void updatePaymentMethod(String accountKey, String externalPaymentId, PaymentMethodPlugin paymentMethodProps)
-        throws PaymentPluginApiException {
-        DefaultPaymentMethodPlugin e = getPaymentMethod(accountKey, externalPaymentId);
-        if (e != null) {
-            e.setProps(paymentMethodProps.getProperties());
-        }
-    }
-
-    @Override
-    public void deletePaymentMethod(String accountKey, String paymentMethodId)  throws PaymentPluginApiException {
-
-        PaymentMethodPlugin toBeDeleted = null;
-        List<PaymentMethodPlugin> pms = paymentMethods.get(accountKey);
-        if (pms != null) {
-
-            for (PaymentMethodPlugin cur : pms) {
-                if (cur.getExternalPaymentMethodId().equals(paymentMethodId)) {
-                    toBeDeleted = cur;
-                    break;
-                }
-            }
-        }
-        if (toBeDeleted != null) {
-            pms.remove(toBeDeleted);
-        }
-    }
-
-    @Override
-    public List<PaymentMethodPlugin> getPaymentMethodDetails(String accountKey)
-            throws PaymentPluginApiException {
-        return paymentMethods.get(accountKey);
-    }
-
-    @Override
-    public PaymentMethodPlugin getPaymentMethodDetail(String accountKey, String externalPaymentId) 
-    throws PaymentPluginApiException {
-        return getPaymentMethodDetail(accountKey, externalPaymentId);
-    }
-    
-    private DefaultPaymentMethodPlugin getPaymentMethod(String accountKey, String externalPaymentId) {
-        List<PaymentMethodPlugin> pms = paymentMethods.get(accountKey);
-        if (pms == null) {
-            return null;
-        }
-        for (PaymentMethodPlugin cur : pms) {
-            if (cur.getExternalPaymentMethodId().equals(externalPaymentId)) {
-                return (DefaultPaymentMethodPlugin) cur;
-            }
-        }
-        return null;
-    }
-    
-    @Override
-    public void setDefaultPaymentMethod(String accountKey,
-            String externalPaymentId) throws PaymentPluginApiException {
-    }
-
-    @Override
-    public List<PaymentInfoPlugin> processRefund(Account account)
-            throws PaymentPluginApiException {
-        return null;
+        super(clock);
     }
 }
diff --git a/payment/src/test/java/com/ning/billing/payment/TestHelper.java b/payment/src/test/java/com/ning/billing/payment/TestHelper.java
index 5f8ef23..9d04ceb 100644
--- a/payment/src/test/java/com/ning/billing/payment/TestHelper.java
+++ b/payment/src/test/java/com/ning/billing/payment/TestHelper.java
@@ -31,12 +31,12 @@ import com.ning.billing.invoice.api.InvoiceItem;
 import com.ning.billing.invoice.api.InvoicePaymentApi;
 import com.ning.billing.mock.BrainDeadProxyFactory;
 import com.ning.billing.mock.BrainDeadProxyFactory.ZombieControl;
-import com.ning.billing.payment.api.DefaultPaymentMethodPlugin;
 import com.ning.billing.payment.api.PaymentApi;
 import com.ning.billing.payment.api.PaymentMethod;
 import com.ning.billing.payment.api.PaymentMethodPlugin;
 import com.ning.billing.payment.dao.PaymentDao;
 import com.ning.billing.payment.glue.PaymentTestModuleWithMocks;
+import com.ning.billing.payment.provider.DefaultNoOpPaymentMethodPlugin;
 import com.ning.billing.util.bus.Bus;
 import com.ning.billing.util.bus.Bus.EventBusException;
 import com.ning.billing.util.callcontext.CallContext;
@@ -130,7 +130,7 @@ public class TestHelper {
         ((ZombieControl)accountUserApi).addResult("updateAccount", BrainDeadProxyFactory.ZOMBIE_VOID);        
         //updateAccount
 
-        PaymentMethodPlugin pm = new DefaultPaymentMethodPlugin(UUID.randomUUID().toString(), true, null);
+        PaymentMethodPlugin pm = new DefaultNoOpPaymentMethodPlugin(UUID.randomUUID().toString(), true, null);
         addTestPaymentMethod(account, pm);
         return account;
     }