killbill-memoizeit
Changes
osgi-bundles/bundles/jruby/src/main/java/com/ning/billing/osgi/bundles/jruby/JRubyPaymentPlugin.java 6(+6 -0)
osgi-bundles/tests/beatrix/src/test/java/com/ning/billing/osgi/bundles/test/TestPaymentPluginApi.java 5(+5 -0)
osgi-bundles/tests/payment/src/test/java/com/ning/billing/osgi/bundles/test/TestPaymentPluginApi.java 5(+5 -0)
Details
diff --git a/analytics/src/main/java/com/ning/billing/analytics/BusinessInvoicePaymentDao.java b/analytics/src/main/java/com/ning/billing/analytics/BusinessInvoicePaymentDao.java
index def7d53..57af16e 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/BusinessInvoicePaymentDao.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/BusinessInvoicePaymentDao.java
@@ -96,7 +96,7 @@ public class BusinessInvoicePaymentDao {
PaymentMethod paymentMethod = null;
try {
- paymentMethod = paymentApi.getPaymentMethod(account, payment.getPaymentMethodId(), context);
+ paymentMethod = paymentApi.getPaymentMethodById(payment.getPaymentMethodId(), context);
} catch (PaymentApiException e) {
log.info("For payment {}: payment method {} does not exist", paymentId, payment.getPaymentMethodId());
}
diff --git a/api/src/main/java/com/ning/billing/payment/api/PaymentApi.java b/api/src/main/java/com/ning/billing/payment/api/PaymentApi.java
index a2b2e5b..833b4d4 100644
--- a/api/src/main/java/com/ning/billing/payment/api/PaymentApi.java
+++ b/api/src/main/java/com/ning/billing/payment/api/PaymentApi.java
@@ -117,10 +117,7 @@ public interface PaymentApi {
public List<PaymentMethod> getPaymentMethods(Account account, TenantContext context)
throws PaymentApiException;
- public PaymentMethod getPaymentMethodById(UUID paymentMethodId, TenantContext context)
- throws PaymentApiException;
-
- public PaymentMethod getPaymentMethod(Account account, UUID paymentMethodId, TenantContext context)
+ public PaymentMethod getPaymentMethodById(UUID paymentMethodId, final boolean withPluginInfo, TenantContext context)
throws PaymentApiException;
public void deletedPaymentMethod(Account account, UUID paymentMethodId, boolean deleteDefaultPaymentMethodWithAutoPayOff, CallContext context)
diff --git a/api/src/main/java/com/ning/billing/payment/plugin/api/PaymentPluginApi.java b/api/src/main/java/com/ning/billing/payment/plugin/api/PaymentPluginApi.java
index 537ebca..0a0815b 100644
--- a/api/src/main/java/com/ning/billing/payment/plugin/api/PaymentPluginApi.java
+++ b/api/src/main/java/com/ning/billing/payment/plugin/api/PaymentPluginApi.java
@@ -95,6 +95,18 @@ public interface PaymentPluginApi {
throws PaymentPluginApiException;
/**
+ * Get payment method details for a given payment method. Optional.
+ *
+ * @param kbAccountId killbill account id
+ * @param kbPaymentMethodId killbill payment method id.
+ * @param context call context
+ * @return PaymentMethodPlugin info for the payment method
+ * @throws PaymentPluginApiException
+ */
+ public PaymentMethodPlugin getPaymentMethodDetail(UUID kbAccountId, UUID kbPaymentMethodId, TenantContext context)
+ throws PaymentPluginApiException;
+
+ /**
* Set a payment method as default in the gateway. Optional.
*
* @param kbPaymentMethodId killbill payment method id
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/JaxrsResource.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/JaxrsResource.java
index 71b62fa..74b20ab 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/JaxrsResource.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/JaxrsResource.java
@@ -65,6 +65,7 @@ public interface JaxrsResource {
public static final String QUERY_TAGS = "tagList";
public static final String QUERY_CUSTOM_FIELDS = "customFieldList";
+ public static final String QUERY_PAYMENT_METHOD_PLUGIN_INFO = "withPluginInfo";
public static final String QUERY_PAYMENT_METHOD_IS_DEFAULT = "isDefault";
public static final String QUERY_BUNDLE_TRANSFER_ADDON = "transferAddOn";
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/PaymentMethodResource.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/PaymentMethodResource.java
index dc28fed..e421fbb 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/PaymentMethodResource.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/PaymentMethodResource.java
@@ -19,12 +19,10 @@ package com.ning.billing.jaxrs.resources;
import java.util.UUID;
import javax.servlet.http.HttpServletRequest;
-import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.DefaultValue;
import javax.ws.rs.GET;
import javax.ws.rs.HeaderParam;
-import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
@@ -77,38 +75,17 @@ public class PaymentMethodResource extends JaxRsResourceBase {
@Path("/{paymentMethodId:" + UUID_PATTERN + "}")
@Produces(APPLICATION_JSON)
public Response getPaymentMethod(@PathParam("paymentMethodId") final String paymentMethodId,
+ @QueryParam(QUERY_PAYMENT_METHOD_PLUGIN_INFO) @DefaultValue("false") final Boolean withPluginInfo,
@javax.ws.rs.core.Context final HttpServletRequest request) throws AccountApiException, PaymentApiException {
final TenantContext tenantContext = context.createContext(request);
- final PaymentMethod paymentMethod = paymentApi.getPaymentMethodById(UUID.fromString(paymentMethodId), tenantContext);
+ final PaymentMethod paymentMethod = paymentApi.getPaymentMethodById(UUID.fromString(paymentMethodId), withPluginInfo, tenantContext);
final Account account = accountApi.getAccountById(paymentMethod.getAccountId(), tenantContext);
final PaymentMethodJson json = PaymentMethodJson.toPaymentMethodJson(account, paymentMethod);
return Response.status(Status.OK).entity(json).build();
}
- @PUT
- @Consumes(APPLICATION_JSON)
- @Produces(APPLICATION_JSON)
- @Path("/{paymentMethodId:" + UUID_PATTERN + "}")
- public Response updatePaymentMethod(final PaymentMethodJson json,
- @PathParam("paymentMethodId") final String paymentMethodId,
- @HeaderParam(HDR_CREATED_BY) final String createdBy,
- @HeaderParam(HDR_REASON) final String reason,
- @HeaderParam(HDR_COMMENT) final String comment,
- @javax.ws.rs.core.Context final HttpServletRequest request) throws PaymentApiException, AccountApiException {
- final CallContext callContext = context.createContext(createdBy, reason, comment, request);
-
- final PaymentMethod paymentMethod = paymentApi.getPaymentMethodById(UUID.fromString(paymentMethodId), callContext);
- final Account account = accountApi.getAccountById(paymentMethod.getAccountId(), callContext);
-
- if (json.isDefault()) {
- paymentApi.setDefaultPaymentMethod(account, paymentMethod.getId(), callContext);
- }
-
- return getPaymentMethod(paymentMethod.getId().toString(), request);
- }
-
@DELETE
@Produces(APPLICATION_JSON)
@Path("/{paymentMethodId:" + UUID_PATTERN + "}")
@@ -120,7 +97,7 @@ public class PaymentMethodResource extends JaxRsResourceBase {
@javax.ws.rs.core.Context final HttpServletRequest request) throws PaymentApiException, AccountApiException {
final CallContext callContext = context.createContext(createdBy, reason, comment, request);
- final PaymentMethod paymentMethod = paymentApi.getPaymentMethodById(UUID.fromString(paymentMethodId), callContext);
+ final PaymentMethod paymentMethod = paymentApi.getPaymentMethodById(UUID.fromString(paymentMethodId), false, callContext);
final Account account = accountApi.getAccountById(paymentMethod.getAccountId(), callContext);
paymentApi.deletedPaymentMethod(account, UUID.fromString(paymentMethodId), deleteDefaultPaymentMethodWithAutoPayOff, callContext);
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 28e804e..5b7f1c7 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
@@ -136,6 +136,12 @@ public class JRubyPaymentPlugin extends JRubyPlugin implements PaymentPluginApi
}
@Override
+ public PaymentMethodPlugin getPaymentMethodDetail(final UUID kbAccountId, final UUID kbPaymentMethodId, final TenantContext context) throws PaymentPluginApiException {
+ // TODO
+ return null;
+ }
+
+ @Override
public void setDefaultPaymentMethod(final UUID kbPaymentMethodId, final CallContext context) throws PaymentPluginApiException {
checkValidPaymentPlugin();
checkPluginIsRunning();
diff --git a/osgi-bundles/tests/beatrix/src/test/java/com/ning/billing/osgi/bundles/test/TestPaymentPluginApi.java b/osgi-bundles/tests/beatrix/src/test/java/com/ning/billing/osgi/bundles/test/TestPaymentPluginApi.java
index 5f7ea6a..2b05d87 100644
--- a/osgi-bundles/tests/beatrix/src/test/java/com/ning/billing/osgi/bundles/test/TestPaymentPluginApi.java
+++ b/osgi-bundles/tests/beatrix/src/test/java/com/ning/billing/osgi/bundles/test/TestPaymentPluginApi.java
@@ -97,6 +97,11 @@ public class TestPaymentPluginApi implements PaymentPluginApi {
}
@Override
+ public PaymentMethodPlugin getPaymentMethodDetail(final UUID kbAccountId, final UUID kbPaymentMethodId, final TenantContext context) throws PaymentPluginApiException {
+ return null;
+ }
+
+ @Override
public void setDefaultPaymentMethod(final UUID kbPaymentMethodId, final CallContext context) throws PaymentPluginApiException {
}
diff --git a/osgi-bundles/tests/payment/src/test/java/com/ning/billing/osgi/bundles/test/TestPaymentPluginApi.java b/osgi-bundles/tests/payment/src/test/java/com/ning/billing/osgi/bundles/test/TestPaymentPluginApi.java
index 0182f98..0c77cf2 100644
--- a/osgi-bundles/tests/payment/src/test/java/com/ning/billing/osgi/bundles/test/TestPaymentPluginApi.java
+++ b/osgi-bundles/tests/payment/src/test/java/com/ning/billing/osgi/bundles/test/TestPaymentPluginApi.java
@@ -151,6 +151,11 @@ public class TestPaymentPluginApi implements PaymentPluginApiWithTestControl {
}
@Override
+ public PaymentMethodPlugin getPaymentMethodDetail(final UUID kbAccountId, final UUID kbPaymentMethodId, final TenantContext context) throws PaymentPluginApiException {
+ return null;
+ }
+
+ @Override
public void setDefaultPaymentMethod(final UUID kbPaymentMethodId, final CallContext context) throws PaymentPluginApiException {
}
diff --git a/payment/src/main/java/com/ning/billing/payment/api/DefaultPaymentApi.java b/payment/src/main/java/com/ning/billing/payment/api/DefaultPaymentApi.java
index e27edac..1f1ba8d 100644
--- a/payment/src/main/java/com/ning/billing/payment/api/DefaultPaymentApi.java
+++ b/payment/src/main/java/com/ning/billing/payment/api/DefaultPaymentApi.java
@@ -158,15 +158,9 @@ public class DefaultPaymentApi implements PaymentApi {
}
@Override
- public PaymentMethod getPaymentMethodById(final UUID paymentMethodId, final TenantContext context)
+ public PaymentMethod getPaymentMethodById(final UUID paymentMethodId, final boolean withPluginInfo, final TenantContext context)
throws PaymentApiException {
- return methodProcessor.getPaymentMethodById(paymentMethodId, internalCallContextFactory.createInternalTenantContext(context));
- }
-
- @Override
- public PaymentMethod getPaymentMethod(final Account account, final UUID paymentMethod, final TenantContext context)
- throws PaymentApiException {
- return methodProcessor.getPaymentMethod(account, paymentMethod, internalCallContextFactory.createInternalTenantContext(context));
+ return methodProcessor.getPaymentMethodById(paymentMethodId, withPluginInfo, internalCallContextFactory.createInternalTenantContext(context));
}
@Override
diff --git a/payment/src/main/java/com/ning/billing/payment/api/svcs/DefaultPaymentInternalApi.java b/payment/src/main/java/com/ning/billing/payment/api/svcs/DefaultPaymentInternalApi.java
index 7aa99da..acad7e0 100644
--- a/payment/src/main/java/com/ning/billing/payment/api/svcs/DefaultPaymentInternalApi.java
+++ b/payment/src/main/java/com/ning/billing/payment/api/svcs/DefaultPaymentInternalApi.java
@@ -52,8 +52,8 @@ public class DefaultPaymentInternalApi implements PaymentInternalApi {
}
@Override
- public PaymentMethod getPaymentMethod(final Account account, final UUID paymentMethodId, final InternalTenantContext context) throws PaymentApiException {
- return methodProcessor.getPaymentMethod(account, paymentMethodId, context);
+ public PaymentMethod getPaymentMethodById(final UUID paymentMethodId, final InternalTenantContext context) throws PaymentApiException {
+ return methodProcessor.getPaymentMethodById(paymentMethodId, false, context);
}
@Override
diff --git a/payment/src/main/java/com/ning/billing/payment/core/PaymentMethodProcessor.java b/payment/src/main/java/com/ning/billing/payment/core/PaymentMethodProcessor.java
index 5fa7600..f916e7c 100644
--- a/payment/src/main/java/com/ning/billing/payment/core/PaymentMethodProcessor.java
+++ b/payment/src/main/java/com/ning/billing/payment/core/PaymentMethodProcessor.java
@@ -118,27 +118,29 @@ public class PaymentMethodProcessor extends ProcessorBase {
if (paymentMethodModels.size() == 0) {
return Collections.emptyList();
}
- return getPaymentMethodInternal(paymentMethodModels, account.getId(), account.getExternalKey(), context);
+ return getPaymentMethodInternal(paymentMethodModels);
}
- public PaymentMethod getPaymentMethodById(final UUID paymentMethodId, final InternalTenantContext context)
+ public PaymentMethod getPaymentMethodById(final UUID paymentMethodId, final boolean withPluginInfo, final InternalTenantContext context)
throws PaymentApiException {
final PaymentMethodModelDao paymentMethodModel = paymentDao.getPaymentMethod(paymentMethodId, context);
if (paymentMethodModel == null) {
throw new PaymentApiException(ErrorCode.PAYMENT_NO_SUCH_PAYMENT_METHOD, paymentMethodId);
}
- return new DefaultPaymentMethod(paymentMethodModel, null);
- }
- public PaymentMethod getPaymentMethod(final Account account, final UUID paymentMethodId, final InternalTenantContext context)
- throws PaymentApiException {
- final PaymentMethodModelDao paymentMethodModel = paymentDao.getPaymentMethod(paymentMethodId, context);
- if (paymentMethodModel == null) {
- throw new PaymentApiException(ErrorCode.PAYMENT_NO_SUCH_PAYMENT_METHOD, paymentMethodId);
+ final PaymentMethodPlugin paymentMethodPlugin;
+ if (withPluginInfo) {
+ try {
+ final PaymentPluginApi pluginApi = pluginRegistry.getServiceForName(paymentMethodModel.getPluginName());
+ paymentMethodPlugin = pluginApi.getPaymentMethodDetail(paymentMethodModel.getAccountId(), paymentMethodId, context.toTenantContext());
+ } catch (PaymentPluginApiException e) {
+ throw new PaymentApiException(ErrorCode.PAYMENT_GET_PAYMENT_METHODS, paymentMethodModel.getAccountId(), paymentMethodId);
+ }
+ } else {
+ paymentMethodPlugin = null;
}
- final List<PaymentMethod> result = getPaymentMethodInternal(Collections.singletonList(paymentMethodModel), account.getId(),
- account.getExternalKey(), context);
- return (result.size() == 0) ? null : result.get(0);
+
+ return new DefaultPaymentMethod(paymentMethodModel, paymentMethodPlugin);
}
public PaymentMethod getExternalPaymentMethod(final Account account, final InternalTenantContext context) throws PaymentApiException {
@@ -163,8 +165,7 @@ public class PaymentMethodProcessor extends ProcessorBase {
return (ExternalPaymentProviderPlugin) pluginRegistry.getServiceForName(ExternalPaymentProviderPlugin.PLUGIN_NAME);
}
- private List<PaymentMethod> getPaymentMethodInternal(final List<PaymentMethodModelDao> paymentMethodModels, final UUID accountId,
- final String accountKey, final InternalTenantContext context)
+ private List<PaymentMethod> getPaymentMethodInternal(final List<PaymentMethodModelDao> paymentMethodModels)
throws PaymentApiException {
final List<PaymentMethod> result = new ArrayList<PaymentMethod>(paymentMethodModels.size());
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
index 4bfe8a3..7a41e27 100644
--- a/payment/src/main/java/com/ning/billing/payment/provider/DefaultNoOpPaymentProviderPlugin.java
+++ b/payment/src/main/java/com/ning/billing/payment/provider/DefaultNoOpPaymentProviderPlugin.java
@@ -139,6 +139,16 @@ public class DefaultNoOpPaymentProviderPlugin implements NoOpPaymentPluginApi {
}
@Override
+ public PaymentMethodPlugin getPaymentMethodDetail(final UUID kbAccountId, final UUID kbPaymentMethodId, final TenantContext context) throws PaymentPluginApiException {
+ final List<PaymentMethodPlugin> paymentMethodPlugins = paymentMethods.get(kbPaymentMethodId.toString());
+ if (paymentMethodPlugins == null || paymentMethodPlugins.size() == 0) {
+ return null;
+ } else {
+ return paymentMethodPlugins.get(0);
+ }
+ }
+
+ @Override
public void setDefaultPaymentMethod(final UUID kbPaymentMethodId, final CallContext context) throws PaymentPluginApiException {
}
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 f5b233b..e72c9b3 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
@@ -23,6 +23,7 @@ import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicBoolean;
+import com.ning.billing.payment.api.DefaultPaymentMethodPlugin;
import com.ning.billing.payment.api.PaymentMethodPlugin;
import com.ning.billing.payment.plugin.api.NoOpPaymentPluginApi;
import com.ning.billing.payment.plugin.api.PaymentInfoPlugin;
@@ -55,7 +56,8 @@ public class MockPaymentProviderPlugin implements NoOpPaymentPluginApi {
private final Map<String, PaymentInfoPlugin> payments = new ConcurrentHashMap<String, PaymentInfoPlugin>();
// Note: we can't use HashMultiMap as we care about storing duplicate key/value pairs
private final Multimap<String, RefundInfoPlugin> refunds = LinkedListMultimap.<String, RefundInfoPlugin>create();
- private final Map<String, PaymentMethodInfoPlugin> paymentMethods = new ConcurrentHashMap<String, PaymentMethodInfoPlugin>();
+ private final Map<String, PaymentMethodPlugin> paymentMethods = new ConcurrentHashMap<String, PaymentMethodPlugin>();
+ private final Map<String, PaymentMethodInfoPlugin> paymentMethodsInfo = new ConcurrentHashMap<String, PaymentMethodInfoPlugin>();
private final Clock clock;
@@ -117,13 +119,22 @@ public class MockPaymentProviderPlugin implements NoOpPaymentPluginApi {
@Override
public void addPaymentMethod(final UUID kbAccountId, final UUID kbPaymentMethodId, final PaymentMethodPlugin paymentMethodProps, final boolean setDefault, final CallContext context) throws PaymentPluginApiException {
// externalPaymentMethodId is set to a random value
- final PaymentMethodInfoPlugin realWithID = new DefaultPaymentMethodInfoPlugin(kbAccountId, kbPaymentMethodId, setDefault, UUID.randomUUID().toString());
+ final PaymentMethodPlugin realWithID = new DefaultPaymentMethodPlugin(paymentMethodProps, UUID.randomUUID().toString());
paymentMethods.put(kbPaymentMethodId.toString(), realWithID);
+
+ final PaymentMethodInfoPlugin realInfoWithID = new DefaultPaymentMethodInfoPlugin(kbAccountId, kbPaymentMethodId, setDefault, UUID.randomUUID().toString());
+ paymentMethodsInfo.put(kbPaymentMethodId.toString(), realInfoWithID);
}
@Override
public void deletePaymentMethod(final UUID kbPaymentMethodId, final CallContext context) throws PaymentPluginApiException {
paymentMethods.remove(kbPaymentMethodId.toString());
+ paymentMethodsInfo.remove(kbPaymentMethodId.toString());
+ }
+
+ @Override
+ public PaymentMethodPlugin getPaymentMethodDetail(final UUID kbAccountId, final UUID kbPaymentMethodId, final TenantContext context) throws PaymentPluginApiException {
+ return paymentMethods.get(kbPaymentMethodId.toString());
}
@Override
@@ -132,15 +143,15 @@ public class MockPaymentProviderPlugin implements NoOpPaymentPluginApi {
@Override
public List<PaymentMethodInfoPlugin> getPaymentMethods(final UUID kbAccountId, final boolean refreshFromGateway, final CallContext context) {
- return ImmutableList.<PaymentMethodInfoPlugin>copyOf(paymentMethods.values());
+ return ImmutableList.<PaymentMethodInfoPlugin>copyOf(paymentMethodsInfo.values());
}
@Override
public void resetPaymentMethods(final List<PaymentMethodInfoPlugin> input) {
- paymentMethods.clear();
+ paymentMethodsInfo.clear();
if (input != null) {
- for (PaymentMethodInfoPlugin cur : input) {
- paymentMethods.put(cur.getPaymentMethodId().toString(), cur);
+ for (final PaymentMethodInfoPlugin cur : input) {
+ paymentMethodsInfo.put(cur.getPaymentMethodId().toString(), cur);
}
}
}
diff --git a/util/src/main/java/com/ning/billing/util/svcapi/payment/PaymentInternalApi.java b/util/src/main/java/com/ning/billing/util/svcapi/payment/PaymentInternalApi.java
index 7cb5116..79937ae 100644
--- a/util/src/main/java/com/ning/billing/util/svcapi/payment/PaymentInternalApi.java
+++ b/util/src/main/java/com/ning/billing/util/svcapi/payment/PaymentInternalApi.java
@@ -30,7 +30,7 @@ public interface PaymentInternalApi {
public Payment getPayment(UUID paymentId, InternalTenantContext context)
throws PaymentApiException;
- public PaymentMethod getPaymentMethod(Account account, UUID paymentMethodId, InternalTenantContext context)
+ public PaymentMethod getPaymentMethodById(UUID paymentMethodId, InternalTenantContext context)
throws PaymentApiException;
public List<Payment> getAccountPayments(UUID accountId, InternalTenantContext context)