Details
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 9105f58..16faab9 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
@@ -24,6 +24,11 @@ import java.util.Set;
import java.util.UUID;
import java.util.concurrent.ExecutorService;
+import javax.annotation.Nullable;
+
+import com.google.common.base.Function;
+import com.google.common.collect.Collections2;
+import com.google.common.collect.ImmutableList;
import com.google.inject.Inject;
import com.google.inject.name.Named;
import com.ning.billing.ErrorCode;
@@ -118,7 +123,6 @@ public class PaymentMethodProcessor extends ProcessorBase {
});
}
-
public List<PaymentMethod> refreshPaymentMethods(final String pluginName, final Account account, final CallContext context)
throws PaymentApiException {
@@ -126,31 +130,33 @@ public class PaymentMethodProcessor extends ProcessorBase {
@Override
public List<PaymentMethod> doOperation() throws PaymentApiException {
- final List<PaymentMethod> result = new LinkedList<PaymentMethod>();
final PaymentPluginApi pluginApi;
try {
pluginApi = pluginRegistry.getPlugin(pluginName);
final List<PaymentMethodPlugin> pluginPms = pluginApi.getPaymentMethodDetails(account.getExternalKey());
// The method should never return null by convention, but let's not trust the plugin...
if (pluginPms == null) {
- return result;
+ return ImmutableList.<PaymentMethod>of();
}
final List<PaymentMethodModelDao> finalPaymentMethods = new ArrayList<PaymentMethodModelDao>();
for (final PaymentMethodPlugin cur : pluginPms) {
final PaymentMethod input = new DefaultPaymentMethod(account.getId(), pluginName, cur);
- result.add(input);
-
final PaymentMethodModelDao pmModel = new PaymentMethodModelDao(input.getId(), input.getAccountId(), input.getPluginName(), input.isActive(), input.getPluginDetail().getExternalPaymentMethodId());
finalPaymentMethods.add(pmModel);
}
- paymentDao.refreshPaymentMethods(account.getId(), finalPaymentMethods, context);
+ final List<PaymentMethodModelDao> refreshedPaymentMethods = paymentDao.refreshPaymentMethods(account.getId(), finalPaymentMethods, context);
+ return ImmutableList.<PaymentMethod>copyOf(Collections2.transform(refreshedPaymentMethods, new Function<PaymentMethodModelDao, PaymentMethod>() {
+ @Override
+ public PaymentMethod apply(final PaymentMethodModelDao input) {
+ return new DefaultPaymentMethod(input);
+ }
+ }));
} catch (PaymentPluginApiException e) {
// STEPH all errors should also take a pluginName
throw new PaymentApiException(ErrorCode.PAYMENT_REFRESH_PAYMENT_METHOD, account.getId(), e.getErrorMessage());
}
- return result;
}
});
}
diff --git a/payment/src/main/java/com/ning/billing/payment/dao/AuditedPaymentDao.java b/payment/src/main/java/com/ning/billing/payment/dao/AuditedPaymentDao.java
index 943a858..b7ed65f 100644
--- a/payment/src/main/java/com/ning/billing/payment/dao/AuditedPaymentDao.java
+++ b/payment/src/main/java/com/ning/billing/payment/dao/AuditedPaymentDao.java
@@ -25,6 +25,8 @@ import org.skife.jdbi.v2.Transaction;
import org.skife.jdbi.v2.TransactionStatus;
import com.google.inject.Inject;
+
+import com.ning.billing.payment.api.PaymentMethod;
import com.ning.billing.payment.api.PaymentStatus;
import com.ning.billing.payment.dao.RefundModelDao.RefundStatus;
import com.ning.billing.payment.retry.PluginFailureRetryService.PluginFailureRetryServiceScheduler;
@@ -199,11 +201,11 @@ public class AuditedPaymentDao implements PaymentDao {
}
@Override
- public void refreshPaymentMethods(final UUID accountId, final List<PaymentMethodModelDao> paymentMethods, final CallContext context) {
- paymentMethodSqlDao.inTransaction(new Transaction<Void, PaymentMethodSqlDao>() {
+ public List<PaymentMethodModelDao> refreshPaymentMethods(final UUID accountId, final List<PaymentMethodModelDao> paymentMethods, final CallContext context) {
+ return paymentMethodSqlDao.inTransaction(new Transaction<List<PaymentMethodModelDao>, PaymentMethodSqlDao>() {
@Override
- public Void inTransaction(final PaymentMethodSqlDao transactional, final TransactionStatus status) throws Exception {
+ public List<PaymentMethodModelDao> inTransaction(final PaymentMethodSqlDao transactional, final TransactionStatus status) throws Exception {
final List<PaymentMethodModelDao> existingPaymentMethods = getPaymentMethodsInTransaction(transactional, accountId);
for (final PaymentMethodModelDao finalPaymentMethod : paymentMethods) {
@@ -232,7 +234,7 @@ public class AuditedPaymentDao implements PaymentDao {
}
}
- return null;
+ return getPaymentMethodsInTransaction(transactional, accountId);
}
});
}
diff --git a/payment/src/main/java/com/ning/billing/payment/dao/PaymentDao.java b/payment/src/main/java/com/ning/billing/payment/dao/PaymentDao.java
index 9a1d7bb..b4e7797 100644
--- a/payment/src/main/java/com/ning/billing/payment/dao/PaymentDao.java
+++ b/payment/src/main/java/com/ning/billing/payment/dao/PaymentDao.java
@@ -18,6 +18,7 @@ package com.ning.billing.payment.dao;
import java.util.List;
import java.util.UUID;
+import com.ning.billing.payment.api.PaymentMethod;
import com.ning.billing.payment.api.PaymentStatus;
import com.ning.billing.payment.dao.RefundModelDao.RefundStatus;
import com.ning.billing.util.callcontext.CallContext;
@@ -53,7 +54,7 @@ public interface PaymentDao {
public PaymentMethodModelDao insertPaymentMethod(final PaymentMethodModelDao paymentMethod, final CallContext context);
- public void refreshPaymentMethods(final UUID accountId, final List<PaymentMethodModelDao> paymentMethods, final CallContext context);
+ public List<PaymentMethodModelDao> refreshPaymentMethods(final UUID accountId, final List<PaymentMethodModelDao> paymentMethods, final CallContext context);
public PaymentMethodModelDao getPaymentMethod(final UUID paymentMethodId);
diff --git a/payment/src/test/java/com/ning/billing/payment/dao/MockPaymentDao.java b/payment/src/test/java/com/ning/billing/payment/dao/MockPaymentDao.java
index 9713bfa..3811f8c 100644
--- a/payment/src/test/java/com/ning/billing/payment/dao/MockPaymentDao.java
+++ b/payment/src/test/java/com/ning/billing/payment/dao/MockPaymentDao.java
@@ -24,6 +24,7 @@ import java.util.List;
import java.util.Map;
import java.util.UUID;
+import com.ning.billing.payment.api.PaymentMethod;
import com.ning.billing.payment.api.PaymentStatus;
import com.ning.billing.payment.dao.RefundModelDao.RefundStatus;
import com.ning.billing.util.callcontext.CallContext;
@@ -128,20 +129,8 @@ public class MockPaymentDao implements PaymentDao {
}
@Override
- public void refreshPaymentMethods(final UUID accountId, final List<PaymentMethodModelDao> newPaymentMethods, final CallContext context) {
- synchronized (this) {
- final Iterator<PaymentMethodModelDao> it = paymentMethods.iterator();
- while (it.hasNext()) {
- final PaymentMethodModelDao cur = it.next();
- if (cur.getAccountId().equals(accountId)) {
- it.remove();
- }
- }
-
- for (final PaymentMethodModelDao paymentMethodModelDao : paymentMethods) {
- insertPaymentMethod(paymentMethodModelDao, context);
- }
- }
+ public List<PaymentMethodModelDao> refreshPaymentMethods(final UUID accountId, final List<PaymentMethodModelDao> newPaymentMethods, final CallContext context) {
+ throw new UnsupportedOperationException();
}
@Override