killbill-memoizeit
Changes
payment/pom.xml 8(+8 -0)
payment/src/main/java/com/ning/billing/payment/provider/PaymentProviderPluginRegistry.java 27(+27 -0)
pom.xml 5(+5 -0)
Details
payment/pom.xml 8(+8 -0)
diff --git a/payment/pom.xml b/payment/pom.xml
index fae6a01..b5743e2 100644
--- a/payment/pom.xml
+++ b/payment/pom.xml
@@ -46,6 +46,14 @@
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
</dependency>
+ <dependency>
+ <groupId>commons-lang</groupId>
+ <artifactId>commons-lang</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>commons-collections</groupId>
+ <artifactId>commons-collections</artifactId>
+ </dependency>
<dependency>
<groupId>org.testng</groupId>
diff --git a/payment/src/main/java/com/ning/billing/payment/InvoiceProcessor.java b/payment/src/main/java/com/ning/billing/payment/InvoiceProcessor.java
index a0c64af..946ac83 100644
--- a/payment/src/main/java/com/ning/billing/payment/InvoiceProcessor.java
+++ b/payment/src/main/java/com/ning/billing/payment/InvoiceProcessor.java
@@ -20,22 +20,24 @@ import com.google.common.eventbus.Subscribe;
import com.google.inject.Inject;
import com.ning.billing.account.api.Account;
import com.ning.billing.invoice.model.Invoice;
-import com.ning.billing.payment.provider.PaymentProviderPlugin;
+import com.ning.billing.payment.provider.PaymentProviderPluginRegistry;
import com.ning.billing.util.eventbus.IEventBus.EventBusException;
public class InvoiceProcessor {
- private final PaymentProviderPlugin provider;
+ private final PaymentProviderPluginRegistry pluginRegistry;
@Inject
- public InvoiceProcessor(PaymentProviderPlugin provider) {
- this.provider = provider;
+ public InvoiceProcessor(PaymentProviderPluginRegistry pluginRegistry) {
+ this.pluginRegistry = pluginRegistry;
}
@Subscribe
public void receiveInvoice(Invoice invoice) throws EventBusException {
// TODO: retrieve account
final Account account = null;
+ // TODO: get provider name from account
+ final String paymentProviderName = null;
- provider.processInvoice(account, invoice);
+ pluginRegistry.getPlugin(paymentProviderName).processInvoice(account, invoice);
}
}
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
new file mode 100644
index 0000000..cee31d3
--- /dev/null
+++ b/payment/src/main/java/com/ning/billing/payment/provider/PaymentProviderPluginRegistry.java
@@ -0,0 +1,27 @@
+package com.ning.billing.payment.provider;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.apache.commons.lang.StringUtils;
+
+import com.google.inject.Inject;
+import com.ning.billing.payment.setup.PaymentConfig;
+
+public class PaymentProviderPluginRegistry {
+ private final String defaultPlugin;
+ private final Map<String, PaymentProviderPlugin> pluginsByName = new ConcurrentHashMap<String, PaymentProviderPlugin>();
+
+ @Inject
+ public PaymentProviderPluginRegistry(PaymentConfig config) {
+ this.defaultPlugin = config.getDefaultPaymentProviderPlugin();
+ }
+
+ public void register(PaymentProviderPlugin plugin, String name) {
+ pluginsByName.put(name.toLowerCase(), plugin);
+ }
+
+ public PaymentProviderPlugin getPlugin(String name) {
+ return pluginsByName.get(StringUtils.defaultIfEmpty(name, defaultPlugin).toLowerCase());
+ }
+}
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 3fc3a13..b0e4b67 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
@@ -19,9 +19,8 @@ package com.ning.billing.payment.setup;
import org.skife.config.Config;
import org.skife.config.DefaultNull;
-public interface PaymentConfig
-{
- @Config("killbill.payment.providerPluginClass")
+public interface PaymentConfig {
+ @Config("killbill.payment.provider.defaultPlugin")
@DefaultNull
- public String getProviderPluginClass();
+ public String getDefaultPaymentProviderPlugin();
}
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 77a3a9b..dc7f535 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
@@ -21,8 +21,7 @@ import java.util.Properties;
import org.skife.config.ConfigurationObjectFactory;
import com.google.inject.AbstractModule;
-import com.google.inject.Key;
-import com.ning.billing.payment.provider.PaymentProviderPlugin;
+import com.ning.billing.payment.provider.PaymentProviderPluginRegistry;
public class PaymentModule extends AbstractModule {
private final Properties props;
@@ -35,28 +34,15 @@ public class PaymentModule extends AbstractModule {
this.props = props;
}
- @SuppressWarnings("unchecked")
- protected void installPaymentProviderPlugin(PaymentConfig config) {
- String pluginClassName = config.getProviderPluginClass();
-
- if (pluginClassName == null) {
- throw new IllegalArgumentException("No payment provider plugin class configured");
- }
- Class<? extends PaymentProviderPlugin> pluginClass = null;
-
- try {
- pluginClass = (Class<? extends PaymentProviderPlugin>)Class.forName(pluginClassName);
- }
- catch (Exception ex) {
- throw new IllegalArgumentException("Illegal payment provider plugin class configured", ex);
- }
- bind(PaymentProviderPlugin.class).to(Key.get(pluginClass));
+ protected void installPaymentProviderPlugins(PaymentConfig config) {
}
@Override
protected void configure() {
final PaymentConfig config = new ConfigurationObjectFactory(props).build(PaymentConfig.class);
- installPaymentProviderPlugin(config);
+ bind(PaymentConfig.class).toInstance(config);
+ bind(PaymentProviderPluginRegistry.class).asEagerSingleton();
+ installPaymentProviderPlugins(config);
}
}
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 a300fe2..d9b59d7 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
@@ -26,11 +26,14 @@ import com.ning.billing.util.eventbus.IEventBus;
import com.ning.billing.util.eventbus.IEventBus.EventBusException;
public class MockPaymentProviderPlugin implements PaymentProviderPlugin {
+ public static final String PLUGIN_NAME = "mock";
+
private final IEventBus eventBus;
@Inject
- public MockPaymentProviderPlugin(IEventBus eventBus) {
+ public MockPaymentProviderPlugin(PaymentProviderPluginRegistry registry, IEventBus eventBus) {
this.eventBus = eventBus;
+ registry.register(this, PLUGIN_NAME);
}
@Override
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 d9f7878..6c9317f 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
@@ -16,15 +16,20 @@
package com.ning.billing.payment.setup;
+import org.apache.commons.collections.MapUtils;
+
+import com.google.common.collect.ImmutableMap;
import com.ning.billing.payment.provider.MockPaymentProviderPlugin;
-import com.ning.billing.payment.provider.PaymentProviderPlugin;
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")));
+ }
+
@Override
- protected void installPaymentProviderPlugin(PaymentConfig config) {
- bind(PaymentProviderPlugin.class).to(MockPaymentProviderPlugin.class);
+ protected void installPaymentProviderPlugins(PaymentConfig config) {
bind(MockPaymentProviderPlugin.class).asEagerSingleton();
}
pom.xml 5(+5 -0)
diff --git a/pom.xml b/pom.xml
index 9a81de4..3e0c587 100644
--- a/pom.xml
+++ b/pom.xml
@@ -167,6 +167,11 @@
<version>2.5</version>
</dependency>
<dependency>
+ <groupId>commons-collections</groupId>
+ <artifactId>commons-collections</artifactId>
+ <version>3.2.1</version>
+ </dependency>
+ <dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.0</version>