diff --git a/osgi-bundles/bundles/jruby/src/main/java/com/ning/billing/osgi/bundles/jruby/JRubyPaymentPlugin.java b/osgi-bundles/bundles/jruby/src/main/java/com/ning/billing/osgi/bundles/jruby/JRubyPaymentPlugin.java
index 6e88dcb..007847b 100644
--- a/osgi-bundles/bundles/jruby/src/main/java/com/ning/billing/osgi/bundles/jruby/JRubyPaymentPlugin.java
+++ b/osgi-bundles/bundles/jruby/src/main/java/com/ning/billing/osgi/bundles/jruby/JRubyPaymentPlugin.java
@@ -25,6 +25,7 @@ import java.util.UUID;
import org.jruby.Ruby;
import org.jruby.embed.ScriptingContainer;
import org.jruby.javasupport.JavaEmbedUtils;
+import org.jruby.runtime.builtin.IRubyObject;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceRegistration;
import org.osgi.service.log.LogService;
@@ -69,103 +70,159 @@ public class JRubyPaymentPlugin extends JRubyPlugin implements PaymentPluginApi
return pluginMainClass;
}
+
@Override
public PaymentInfoPlugin processPayment(final UUID kbPaymentId, final UUID kbPaymentMethodId, final BigDecimal amount, final CallContext context) throws PaymentPluginApiException {
- checkValidPaymentPlugin();
- checkPluginIsRunning();
-
- final Ruby runtime = getRuntime();
- pluginInstance.callMethod("charge",
- JavaEmbedUtils.javaToRuby(runtime, kbPaymentId.toString()),
- JavaEmbedUtils.javaToRuby(runtime, kbPaymentMethodId.toString()),
- JavaEmbedUtils.javaToRuby(runtime, amount.longValue() * 100));
- // TODO
- return null;
+ return callWithRuntimeAndChecking(new PluginCallback() {
+ @Override
+ public PaymentInfoPlugin doCall(final Ruby runtime) {
+ final IRubyObject res = pluginInstance.callMethod("charge",
+ JavaEmbedUtils.javaToRuby(runtime, kbPaymentId.toString()),
+ JavaEmbedUtils.javaToRuby(runtime, kbPaymentMethodId.toString()),
+ JavaEmbedUtils.javaToRuby(runtime, amount.longValue() * 100));
+ return null;
+ }
+ });
}
@Override
public PaymentInfoPlugin getPaymentInfo(final UUID kbPaymentId, final TenantContext context) throws PaymentPluginApiException {
- checkValidPaymentPlugin();
- checkPluginIsRunning();
-
- pluginInstance.callMethod("get_payment_info", JavaEmbedUtils.javaToRuby(getRuntime(), kbPaymentId.toString()));
- // TODO
- return null;
+ return callWithRuntimeAndChecking(new PluginCallback() {
+ @Override
+ public PaymentInfoPlugin doCall(final Ruby runtime) {
+ final IRubyObject res = pluginInstance.callMethod("get_payment_info", JavaEmbedUtils.javaToRuby(getRuntime(), kbPaymentId.toString()));
+ return null;
+ }
+ });
}
@Override
public RefundInfoPlugin processRefund(final UUID kbPaymentId, final BigDecimal refundAmount, final CallContext context) throws PaymentPluginApiException {
- checkValidPaymentPlugin();
- checkPluginIsRunning();
- final Ruby runtime = getRuntime();
- pluginInstance.callMethod("refund",
- JavaEmbedUtils.javaToRuby(runtime, kbPaymentId.toString()),
- JavaEmbedUtils.javaToRuby(runtime, refundAmount.longValue() * 100));
+ return callWithRuntimeAndChecking(new PluginCallback() {
+ @Override
+ public RefundInfoPlugin doCall(final Ruby runtime) {
+ final IRubyObject res = pluginInstance.callMethod("refund",
+ JavaEmbedUtils.javaToRuby(runtime, kbPaymentId.toString()),
+ JavaEmbedUtils.javaToRuby(runtime, refundAmount.longValue() * 100));
+
+ return null;
+ }
+ });
- // TODO
- return null;
}
@Override
public void addPaymentMethod(final UUID kbAccountId, final UUID kbPaymentMethodId, final PaymentMethodPlugin paymentMethodProps, final boolean setDefault, final CallContext context) throws PaymentPluginApiException {
- checkValidPaymentPlugin();
- checkPluginIsRunning();
-
- final Ruby runtime = getRuntime();
- pluginInstance.callMethod("add_payment_method",
- JavaEmbedUtils.javaToRuby(runtime, kbPaymentMethodId.toString()),
- JavaEmbedUtils.javaToRuby(runtime, paymentMethodProps));
- if (setDefault) {
- setDefaultPaymentMethod(kbPaymentMethodId, context);
- }
+
+ callWithRuntimeAndChecking(new PluginCallback() {
+ @Override
+ public Void doCall(final Ruby runtime) {
+ final IRubyObject res = pluginInstance.callMethod("add_payment_method",
+ JavaEmbedUtils.javaToRuby(runtime, kbAccountId.toString()),
+ JavaEmbedUtils.javaToRuby(runtime, kbPaymentMethodId.toString()),
+ JavaEmbedUtils.javaToRuby(runtime, paymentMethodProps));
+
+ return null;
+ }
+ });
}
@Override
public void deletePaymentMethod(final UUID kbPaymentMethodId, final CallContext context) throws PaymentPluginApiException {
- checkValidPaymentPlugin();
- checkPluginIsRunning();
- final Ruby runtime = getRuntime();
- pluginInstance.callMethod("delete_payment_method",
- JavaEmbedUtils.javaToRuby(runtime, kbPaymentMethodId.toString()));
+ callWithRuntimeAndChecking(new PluginCallback() {
+ @Override
+ public Void doCall(final Ruby runtime) {
+ final IRubyObject res = pluginInstance.callMethod("delete_payment_method",
+ JavaEmbedUtils.javaToRuby(runtime, kbPaymentMethodId.toString()));
+
+ return null;
+ }
+ });
}
@Override
public PaymentMethodPlugin getPaymentMethodDetail(final UUID kbAccountId, final UUID kbPaymentMethodId, final TenantContext context) throws PaymentPluginApiException {
- // TODO
- return null;
+
+ return callWithRuntimeAndChecking(new PluginCallback() {
+ @Override
+ public PaymentMethodPlugin doCall(final Ruby runtime) {
+ final IRubyObject res = pluginInstance.callMethod("get_payment_method_detail",
+ JavaEmbedUtils.javaToRuby(runtime, kbAccountId.toString()),
+ JavaEmbedUtils.javaToRuby(runtime, kbPaymentMethodId.toString()));
+
+ return null;
+ }
+ });
}
@Override
public void setDefaultPaymentMethod(final UUID kbPaymentMethodId, final CallContext context) throws PaymentPluginApiException {
- checkValidPaymentPlugin();
- checkPluginIsRunning();
- final Ruby runtime = getRuntime();
- pluginInstance.callMethod("set_default_payment_method",
- JavaEmbedUtils.javaToRuby(runtime, kbPaymentMethodId.toString()));
+ callWithRuntimeAndChecking(new PluginCallback() {
+ @Override
+ public Void doCall(final Ruby runtime) {
+ final IRubyObject res = pluginInstance.callMethod("set_default_payment_method",
+ JavaEmbedUtils.javaToRuby(runtime, kbPaymentMethodId.toString()));
+
+ return null;
+ }
+ });
}
@Override
public List<PaymentMethodInfoPlugin> getPaymentMethods(final UUID kbAccountId, final boolean refreshFromGateway, final CallContext context) throws PaymentPluginApiException {
- checkPluginIsRunning();
- final Ruby runtime = getRuntime();
- pluginInstance.callMethod("get_payment_methods",
- JavaEmbedUtils.javaToRuby(runtime, kbAccountId.toString()));
- // TODO
- return null;
+ return callWithRuntimeAndChecking(new PluginCallback() {
+ @Override
+ public List<PaymentMethodInfoPlugin> doCall(final Ruby runtime) {
+ final IRubyObject res = pluginInstance.callMethod("get_payment_methods",
+ JavaEmbedUtils.javaToRuby(runtime, kbAccountId.toString()));
+
+ return null;
+ }
+ });
}
@Override
public void resetPaymentMethods(final List<PaymentMethodInfoPlugin> paymentMethods) throws PaymentPluginApiException {
- checkPluginIsRunning();
- final Ruby runtime = getRuntime();
- pluginInstance.callMethod("reset_payment_methods",
- JavaEmbedUtils.javaToRuby(runtime, paymentMethods));
+ callWithRuntimeAndChecking(new PluginCallback() {
+ @Override
+ public Void doCall(final Ruby runtime) {
+ final IRubyObject res = pluginInstance.callMethod("reset_payment_methods",
+ JavaEmbedUtils.javaToRuby(runtime, paymentMethods));
+ return null;
+ }
+ });
+ }
+
+ private abstract class PluginCallback {
+
+ public abstract <T> T doCall(final Ruby runtime);
+
+ public boolean checkValidPaymentPlugin() {
+ return true;
+ }
+ }
+
+ private <T> T callWithRuntimeAndChecking(PluginCallback cb) {
+ try {
+ checkPluginIsRunning();
+
+ if (cb.checkValidPaymentPlugin()) {
+ checkValidPaymentPlugin();
+ }
+
+ final Ruby runtime = getRuntime();
+ return cb.doCall(runtime);
+
+ } catch (RuntimeException e) {
+ // TODO STEPH not sure what ruby can throw
+ throw e;
+ }
}
}