killbill-uncached
jaxrs: add withPluginInfo support to /1.0/kb/accounts/.../paymentMethods Signed-off-by: …
3/18/2013 8:08:49 PM
Changes
Details
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 833b4d4..23778b8 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
@@ -114,7 +114,7 @@ public interface PaymentApi {
public UUID addPaymentMethod(String pluginName, Account account, boolean setDefault, PaymentMethodPlugin paymentMethodInfo, CallContext context)
throws PaymentApiException;
- public List<PaymentMethod> getPaymentMethods(Account account, TenantContext context)
+ public List<PaymentMethod> getPaymentMethods(Account account, final boolean withPluginInfo, TenantContext context)
throws PaymentApiException;
public PaymentMethod getPaymentMethodById(UUID paymentMethodId, final boolean withPluginInfo, TenantContext context)
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/AccountResource.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/AccountResource.java
index 2a7f6bc..c3d75af 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/AccountResource.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/AccountResource.java
@@ -395,11 +395,12 @@ public class AccountResource extends JaxRsResourceBase {
@Path("/{accountId:" + UUID_PATTERN + "}/" + PAYMENT_METHODS)
@Produces(APPLICATION_JSON)
public Response getPaymentMethods(@PathParam("accountId") final String accountId,
+ @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 Account account = accountApi.getAccountById(UUID.fromString(accountId), tenantContext);
- final List<PaymentMethod> methods = paymentApi.getPaymentMethods(account, tenantContext);
+ final List<PaymentMethod> methods = paymentApi.getPaymentMethods(account, withPluginInfo, tenantContext);
final List<PaymentMethodJson> json = new ArrayList<PaymentMethodJson>(Collections2.transform(methods, new Function<PaymentMethod, PaymentMethodJson>() {
@Override
public PaymentMethodJson apply(final PaymentMethod input) {
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 1f1ba8d..8777ae4 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
@@ -152,9 +152,9 @@ public class DefaultPaymentApi implements PaymentApi {
}
@Override
- public List<PaymentMethod> getPaymentMethods(final Account account, final TenantContext context)
+ public List<PaymentMethod> getPaymentMethods(final Account account, final boolean withPluginInfo, final TenantContext context)
throws PaymentApiException {
- return methodProcessor.getPaymentMethods(account, internalCallContextFactory.createInternalTenantContext(context));
+ return methodProcessor.getPaymentMethods(account, 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 acad7e0..673ea85 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
@@ -63,6 +63,6 @@ public class DefaultPaymentInternalApi implements PaymentInternalApi {
@Override
public List<PaymentMethod> getPaymentMethods(final Account account, final InternalTenantContext context) throws PaymentApiException {
- return methodProcessor.getPaymentMethods(account, context);
+ return methodProcessor.getPaymentMethods(account, false, context);
}
}
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 aa81ff9..f4fe009 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
@@ -113,13 +113,13 @@ public class PaymentMethodProcessor extends ProcessorBase {
});
}
- public List<PaymentMethod> getPaymentMethods(final Account account, final InternalTenantContext context) throws PaymentApiException {
+ public List<PaymentMethod> getPaymentMethods(final Account account, final boolean withPluginInfo, final InternalTenantContext context) throws PaymentApiException {
final List<PaymentMethodModelDao> paymentMethodModels = paymentDao.getPaymentMethods(account.getId(), context);
if (paymentMethodModels.size() == 0) {
return Collections.emptyList();
}
- return getPaymentMethodInternal(paymentMethodModels);
+ return getPaymentMethodInternal(paymentMethodModels, withPluginInfo, context);
}
public PaymentMethod getPaymentMethodById(final UUID paymentMethodId, final boolean withPluginInfo, final InternalTenantContext context)
@@ -129,23 +129,27 @@ public class PaymentMethodProcessor extends ProcessorBase {
throw new PaymentApiException(ErrorCode.PAYMENT_NO_SUCH_PAYMENT_METHOD, paymentMethodId);
}
+ return buildDefaultPaymentMethod(paymentMethodModel, withPluginInfo, context);
+ }
+
+ private PaymentMethod buildDefaultPaymentMethod(final PaymentMethodModelDao paymentMethodModelDao, final boolean withPluginInfo, final InternalTenantContext context) throws PaymentApiException {
final PaymentMethodPlugin paymentMethodPlugin;
if (withPluginInfo) {
try {
- final PaymentPluginApi pluginApi = pluginRegistry.getServiceForName(paymentMethodModel.getPluginName());
- paymentMethodPlugin = pluginApi.getPaymentMethodDetail(paymentMethodModel.getAccountId(), paymentMethodId, context.toTenantContext());
+ final PaymentPluginApi pluginApi = pluginRegistry.getServiceForName(paymentMethodModelDao.getPluginName());
+ paymentMethodPlugin = pluginApi.getPaymentMethodDetail(paymentMethodModelDao.getAccountId(), paymentMethodModelDao.getId(), context.toTenantContext());
} catch (PaymentPluginApiException e) {
- throw new PaymentApiException(ErrorCode.PAYMENT_GET_PAYMENT_METHODS, paymentMethodModel.getAccountId(), paymentMethodId);
+ throw new PaymentApiException(ErrorCode.PAYMENT_GET_PAYMENT_METHODS, paymentMethodModelDao.getAccountId(), paymentMethodModelDao.getId());
}
} else {
paymentMethodPlugin = null;
}
- return new DefaultPaymentMethod(paymentMethodModel, paymentMethodPlugin);
+ return new DefaultPaymentMethod(paymentMethodModelDao, paymentMethodPlugin);
}
public PaymentMethod getExternalPaymentMethod(final Account account, final InternalTenantContext context) throws PaymentApiException {
- final List<PaymentMethod> paymentMethods = getPaymentMethods(account, context);
+ final List<PaymentMethod> paymentMethods = getPaymentMethods(account, false, context);
for (final PaymentMethod paymentMethod : paymentMethods) {
if (ExternalPaymentProviderPlugin.PLUGIN_NAME.equals(paymentMethod.getPluginName())) {
return paymentMethod;
@@ -166,12 +170,12 @@ public class PaymentMethodProcessor extends ProcessorBase {
return (ExternalPaymentProviderPlugin) pluginRegistry.getServiceForName(ExternalPaymentProviderPlugin.PLUGIN_NAME);
}
- private List<PaymentMethod> getPaymentMethodInternal(final List<PaymentMethodModelDao> paymentMethodModels)
+ private List<PaymentMethod> getPaymentMethodInternal(final List<PaymentMethodModelDao> paymentMethodModels, final boolean withPluginInfo, final InternalTenantContext context)
throws PaymentApiException {
final List<PaymentMethod> result = new ArrayList<PaymentMethod>(paymentMethodModels.size());
- for (final PaymentMethodModelDao cur : paymentMethodModels) {
- final PaymentMethod pm = new DefaultPaymentMethod(cur, null);
+ for (final PaymentMethodModelDao paymentMethodModel : paymentMethodModels) {
+ final PaymentMethod pm = buildDefaultPaymentMethod(paymentMethodModel, withPluginInfo, context);
result.add(pm);
}
return result;
diff --git a/payment/src/test/java/com/ning/billing/payment/api/TestPaymentApi.java b/payment/src/test/java/com/ning/billing/payment/api/TestPaymentApi.java
index 9026102..92e578a 100644
--- a/payment/src/test/java/com/ning/billing/payment/api/TestPaymentApi.java
+++ b/payment/src/test/java/com/ning/billing/payment/api/TestPaymentApi.java
@@ -144,7 +144,7 @@ public class TestPaymentApi extends PaymentTestSuiteNoDB {
@Test(groups = "fast")
public void testPaymentMethods() throws Exception {
- List<PaymentMethod> methods = paymentApi.getPaymentMethods(account, callContext);
+ List<PaymentMethod> methods = paymentApi.getPaymentMethods(account, false, callContext);
assertEquals(methods.size(), 1);
final PaymentMethod initDefaultMethod = methods.get(0);
@@ -154,7 +154,7 @@ public class TestPaymentApi extends PaymentTestSuiteNoDB {
final UUID newPaymentMethodId = paymentApi.addPaymentMethod(MockPaymentProviderPlugin.PLUGIN_NAME, account, true, newPaymenrMethod, callContext);
Mockito.when(account.getPaymentMethodId()).thenReturn(newPaymentMethodId);
- methods = paymentApi.getPaymentMethods(account, callContext);
+ methods = paymentApi.getPaymentMethods(account, false, callContext);
assertEquals(methods.size(), 2);
assertEquals(newPaymentMethodId, account.getPaymentMethodId());
@@ -168,13 +168,13 @@ public class TestPaymentApi extends PaymentTestSuiteNoDB {
assertTrue(failed);
paymentApi.deletedPaymentMethod(account, initDefaultMethod.getId(), true, callContext);
- methods = paymentApi.getPaymentMethods(account, callContext);
+ methods = paymentApi.getPaymentMethods(account, false, callContext);
assertEquals(methods.size(), 1);
// NOW retry with default payment method with special flag
paymentApi.deletedPaymentMethod(account, newPaymentMethodId, true, callContext);
- methods = paymentApi.getPaymentMethods(account, callContext);
+ methods = paymentApi.getPaymentMethods(account, false, callContext);
assertEquals(methods.size(), 0);
}
}
diff --git a/payment/src/test/java/com/ning/billing/payment/core/TestPaymentMethodProcessorNoDB.java b/payment/src/test/java/com/ning/billing/payment/core/TestPaymentMethodProcessorNoDB.java
index dd09466..4f3048d 100644
--- a/payment/src/test/java/com/ning/billing/payment/core/TestPaymentMethodProcessorNoDB.java
+++ b/payment/src/test/java/com/ning/billing/payment/core/TestPaymentMethodProcessorNoDB.java
@@ -37,12 +37,12 @@ public class TestPaymentMethodProcessorNoDB extends PaymentTestSuiteNoDB {
Mockito.when(account.getId()).thenReturn(accountId);
Mockito.when(account.getExternalKey()).thenReturn(accountId.toString());
- Assert.assertEquals(paymentMethodProcessor.getPaymentMethods(account, internalCallContext).size(), 0);
+ Assert.assertEquals(paymentMethodProcessor.getPaymentMethods(account, false, internalCallContext).size(), 0);
// The first call should create the payment method
final ExternalPaymentProviderPlugin providerPlugin = paymentMethodProcessor.getExternalPaymentProviderPlugin(account, internalCallContext);
Assert.assertEquals(providerPlugin.getName(), ExternalPaymentProviderPlugin.PLUGIN_NAME);
- final List<PaymentMethod> paymentMethods = paymentMethodProcessor.getPaymentMethods(account, internalCallContext);
+ final List<PaymentMethod> paymentMethods = paymentMethodProcessor.getPaymentMethods(account, false, internalCallContext);
Assert.assertEquals(paymentMethods.size(), 1);
Assert.assertEquals(paymentMethods.get(0).getPluginName(), ExternalPaymentProviderPlugin.PLUGIN_NAME);
Assert.assertEquals(paymentMethods.get(0).getAccountId(), account.getId());
@@ -53,7 +53,7 @@ public class TestPaymentMethodProcessorNoDB extends PaymentTestSuiteNoDB {
final ExternalPaymentProviderPlugin foundProviderPlugin = paymentMethodProcessor.getExternalPaymentProviderPlugin(account, internalCallContext);
Assert.assertEquals(foundProviderPlugin.getName(), ExternalPaymentProviderPlugin.PLUGIN_NAME);
- final List<PaymentMethod> foundPaymentMethods = paymentMethodProcessor.getPaymentMethods(account, internalCallContext);
+ final List<PaymentMethod> foundPaymentMethods = paymentMethodProcessor.getPaymentMethods(account, false, internalCallContext);
Assert.assertEquals(foundPaymentMethods.size(), 1);
Assert.assertEquals(foundPaymentMethods.get(0).getPluginName(), ExternalPaymentProviderPlugin.PLUGIN_NAME);
Assert.assertEquals(foundPaymentMethods.get(0).getAccountId(), account.getId());
diff --git a/payment/src/test/java/com/ning/billing/payment/core/TestPaymentMethodProcessorRefreshWithDB.java b/payment/src/test/java/com/ning/billing/payment/core/TestPaymentMethodProcessorRefreshWithDB.java
index 69792df..49bdcb2 100644
--- a/payment/src/test/java/com/ning/billing/payment/core/TestPaymentMethodProcessorRefreshWithDB.java
+++ b/payment/src/test/java/com/ning/billing/payment/core/TestPaymentMethodProcessorRefreshWithDB.java
@@ -71,12 +71,12 @@ public class TestPaymentMethodProcessorRefreshWithDB extends PaymentTestSuiteWit
final UUID secondPmId = paymentApi.addPaymentMethod(MockPaymentProviderPlugin.PLUGIN_NAME, account, true, new DefaultNoOpPaymentMethodPlugin(UUID.randomUUID().toString(), false, null), callContext);
Assert.assertEquals(getPluginApi().getPaymentMethods(account.getId(), true, callContext).size(), 2);
- Assert.assertEquals(paymentApi.getPaymentMethods(account, callContext).size(), 2);
+ Assert.assertEquals(paymentApi.getPaymentMethods(account, false, callContext).size(), 2);
// Remove second PM from plugin
getPluginApi().deletePaymentMethod(secondPmId, callContext);
Assert.assertEquals(getPluginApi().getPaymentMethods(account.getId(), true, callContext).size(), 1);
- Assert.assertEquals(paymentApi.getPaymentMethods(account, callContext).size(), 2);
+ Assert.assertEquals(paymentApi.getPaymentMethods(account, false, callContext).size(), 2);
// Verify that the refresh sees that PM as being deleted now
final List<PaymentMethod> methods = paymentMethodProcessor.refreshPaymentMethods(MockPaymentProviderPlugin.PLUGIN_NAME, account, internalCallContext);