killbill-memoizeit

Details

payment/pom.xml 5(+5 -0)

diff --git a/payment/pom.xml b/payment/pom.xml
index 8be82aa..ba9988b 100644
--- a/payment/pom.xml
+++ b/payment/pom.xml
@@ -47,6 +47,11 @@
             <scope>provided</scope>
         </dependency>
         <dependency>
+            <groupId>com.google.inject.extensions</groupId>
+            <artifactId>guice-multibindings</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
             <groupId>joda-time</groupId>
             <artifactId>joda-time</artifactId>
         </dependency>
diff --git a/payment/src/main/java/com/ning/billing/payment/provider/PaymentProviderPluginRegistry.java b/payment/src/main/java/com/ning/billing/payment/provider/PaymentProviderPluginRegistry.java
index cee31d3..4aa942c 100644
--- a/payment/src/main/java/com/ning/billing/payment/provider/PaymentProviderPluginRegistry.java
+++ b/payment/src/main/java/com/ning/billing/payment/provider/PaymentProviderPluginRegistry.java
@@ -14,7 +14,7 @@ public class PaymentProviderPluginRegistry {
 
     @Inject
     public PaymentProviderPluginRegistry(PaymentConfig config) {
-        this.defaultPlugin = config.getDefaultPaymentProviderPlugin();
+        this.defaultPlugin = config.getDefaultPaymentProvider();
     }
 
     public void register(PaymentProviderPlugin plugin, String name) {
diff --git a/payment/src/main/java/com/ning/billing/payment/setup/PaymentConfig.java b/payment/src/main/java/com/ning/billing/payment/setup/PaymentConfig.java
index b0e4b67..cdc5384 100644
--- a/payment/src/main/java/com/ning/billing/payment/setup/PaymentConfig.java
+++ b/payment/src/main/java/com/ning/billing/payment/setup/PaymentConfig.java
@@ -20,7 +20,7 @@ import org.skife.config.Config;
 import org.skife.config.DefaultNull;
 
 public interface PaymentConfig {
-    @Config("killbill.payment.provider.defaultPlugin")
+    @Config("killbill.payment.provider.default")
     @DefaultNull
-    public String getDefaultPaymentProviderPlugin();
+    public String getDefaultPaymentProvider();
 }
diff --git a/payment/src/main/java/com/ning/billing/payment/setup/PaymentModule.java b/payment/src/main/java/com/ning/billing/payment/setup/PaymentModule.java
index dc7f535..81649af 100644
--- a/payment/src/main/java/com/ning/billing/payment/setup/PaymentModule.java
+++ b/payment/src/main/java/com/ning/billing/payment/setup/PaymentModule.java
@@ -39,7 +39,8 @@ public class PaymentModule extends AbstractModule {
 
     @Override
     protected void configure() {
-        final PaymentConfig config = new ConfigurationObjectFactory(props).build(PaymentConfig.class);
+        final ConfigurationObjectFactory factory = new ConfigurationObjectFactory(props);
+        final PaymentConfig config = factory.build(PaymentConfig.class);
 
         bind(PaymentConfig.class).toInstance(config);
         bind(PaymentProviderPluginRegistry.class).asEagerSingleton();
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 86f1129..eaf36f2 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
@@ -20,7 +20,6 @@ import java.util.Map;
 import java.util.UUID;
 import java.util.concurrent.ConcurrentHashMap;
 
-import com.google.inject.Inject;
 import com.ning.billing.account.api.IAccount;
 import com.ning.billing.invoice.model.Invoice;
 import com.ning.billing.payment.PaymentError;
@@ -30,14 +29,8 @@ import com.ning.billing.payment.PaymentProviderAccount;
 import com.ning.billing.util.Either;
 
 public class MockPaymentProviderPlugin implements PaymentProviderPlugin {
-    public static final String PLUGIN_NAME = "mock";
     private final Map<String, PaymentInfo> payments = new ConcurrentHashMap<String, PaymentInfo>();
 
-    @Inject
-    public MockPaymentProviderPlugin(PaymentProviderPluginRegistry registry) {
-        registry.register(this, PLUGIN_NAME);
-    }
-
     @Override
     public Either<PaymentError, PaymentInfo> processInvoice(IAccount account, Invoice invoice) {
         PaymentInfo payment = new PaymentInfo.Builder().setId(UUID.randomUUID().toString()).build();
diff --git a/payment/src/test/java/com/ning/billing/payment/provider/MockPaymentProviderPluginModule.java b/payment/src/test/java/com/ning/billing/payment/provider/MockPaymentProviderPluginModule.java
new file mode 100644
index 0000000..88b6f7c
--- /dev/null
+++ b/payment/src/test/java/com/ning/billing/payment/provider/MockPaymentProviderPluginModule.java
@@ -0,0 +1,20 @@
+package com.ning.billing.payment.provider;
+
+import com.google.inject.AbstractModule;
+import com.google.inject.name.Names;
+
+public class MockPaymentProviderPluginModule extends AbstractModule {
+    private final String instanceName;
+
+    public MockPaymentProviderPluginModule(String instanceName) {
+        this.instanceName = instanceName;
+    }
+
+    @Override
+    protected void configure() {
+        bind(MockPaymentProviderPlugin.class)
+            .annotatedWith(Names.named(instanceName))
+            .toProvider(new MockPaymentProviderPluginProvider(instanceName))
+            .asEagerSingleton();
+    }
+}
diff --git a/payment/src/test/java/com/ning/billing/payment/provider/MockPaymentProviderPluginProvider.java b/payment/src/test/java/com/ning/billing/payment/provider/MockPaymentProviderPluginProvider.java
new file mode 100644
index 0000000..6a6c289
--- /dev/null
+++ b/payment/src/test/java/com/ning/billing/payment/provider/MockPaymentProviderPluginProvider.java
@@ -0,0 +1,26 @@
+package com.ning.billing.payment.provider;
+
+import com.google.inject.Inject;
+import com.google.inject.Provider;
+
+public class MockPaymentProviderPluginProvider implements Provider<MockPaymentProviderPlugin> {
+    private PaymentProviderPluginRegistry registry;
+    private final String instanceName;
+
+    public MockPaymentProviderPluginProvider(String instanceName) {
+        this.instanceName = instanceName;
+    }
+
+    @Inject
+    public void setPaymentProviderPluginRegistry(PaymentProviderPluginRegistry registry) {
+        this.registry = registry;
+    }
+
+    @Override
+    public MockPaymentProviderPlugin get() {
+        MockPaymentProviderPlugin plugin = new MockPaymentProviderPlugin();
+
+        registry.register(plugin, instanceName);
+        return plugin;
+    }
+}
diff --git a/payment/src/test/java/com/ning/billing/payment/setup/PaymentTestModule.java b/payment/src/test/java/com/ning/billing/payment/setup/PaymentTestModule.java
index 2aa3c61..16cfdbd 100644
--- a/payment/src/test/java/com/ning/billing/payment/setup/PaymentTestModule.java
+++ b/payment/src/test/java/com/ning/billing/payment/setup/PaymentTestModule.java
@@ -21,18 +21,18 @@ import org.apache.commons.collections.MapUtils;
 import com.google.common.collect.ImmutableMap;
 import com.ning.billing.account.api.IAccountUserApi;
 import com.ning.billing.account.api.MockAccountUserApi;
-import com.ning.billing.payment.provider.MockPaymentProviderPlugin;
+import com.ning.billing.payment.provider.MockPaymentProviderPluginModule;
 import com.ning.billing.util.eventbus.IEventBus;
 import com.ning.billing.util.eventbus.MemoryEventBus;
 
 public class PaymentTestModule extends PaymentModule {
     public PaymentTestModule() {
-        super(MapUtils.toProperties(ImmutableMap.of("killbill.payment.provider.defaultPlugin", "mock")));
+        super(MapUtils.toProperties(ImmutableMap.of("killbill.payment.provider.default", "my-mock")));
     }
 
     @Override
     protected void installPaymentProviderPlugins(PaymentConfig config) {
-        bind(MockPaymentProviderPlugin.class).asEagerSingleton();
+        install(new MockPaymentProviderPluginModule("my-mock"));
     }
 
     @Override

pom.xml 8(+7 -1)

diff --git a/pom.xml b/pom.xml
index bd1fb22..d7aed1c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -131,9 +131,15 @@
                 <scope>provided</scope>
             </dependency>
             <dependency>
+                <groupId>com.google.inject.extensions</groupId>
+                <artifactId>guice-multibindings</artifactId>
+                <version>3.0</version>
+                <scope>provided</scope>
+            </dependency>
+            <dependency>
                 <groupId>com.mogwee</groupId>
                 <artifactId>mogwee-executors</artifactId>
-                <version>1.1.0</version>
+                <version>1.2.0</version>
             </dependency>
             <dependency>
                 <groupId>com.mysql</groupId>