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 07b82d0..a8e8ff2 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
@@ -319,6 +319,7 @@ public class PaymentMethodProcessor extends ProcessorBase {
}
final List<PaymentMethodModelDao> refreshedPaymentMethods = paymentDao.refreshPaymentMethods(account.getId(),
+ pluginName,
finalPaymentMethods,
context);
try {
diff --git a/payment/src/main/java/com/ning/billing/payment/dao/DefaultPaymentDao.java b/payment/src/main/java/com/ning/billing/payment/dao/DefaultPaymentDao.java
index 05fbfa6..17af1e2 100644
--- a/payment/src/main/java/com/ning/billing/payment/dao/DefaultPaymentDao.java
+++ b/payment/src/main/java/com/ning/billing/payment/dao/DefaultPaymentDao.java
@@ -16,9 +16,8 @@
package com.ning.billing.payment.dao;
-import java.util.HashSet;
+import java.util.Collection;
import java.util.List;
-import java.util.Set;
import java.util.UUID;
import javax.inject.Inject;
@@ -39,6 +38,8 @@ import com.ning.billing.util.entity.dao.EntitySqlDaoTransactionWrapper;
import com.ning.billing.util.entity.dao.EntitySqlDaoTransactionalJdbiWrapper;
import com.ning.billing.util.entity.dao.EntitySqlDaoWrapperFactory;
+import com.google.common.base.Predicate;
+import com.google.common.collect.Collections2;
public class DefaultPaymentDao implements PaymentDao {
@@ -295,16 +296,25 @@ public class DefaultPaymentDao implements PaymentDao {
}
@Override
- public List<PaymentMethodModelDao> refreshPaymentMethods(final UUID accountId, final List<PaymentMethodModelDao> newPaymentMethods, final InternalCallContext context) {
+ public List<PaymentMethodModelDao> refreshPaymentMethods(final UUID accountId, final String pluginName,
+ final List<PaymentMethodModelDao> newPaymentMethods, final InternalCallContext context) {
return transactionalSqlDao.execute(new EntitySqlDaoTransactionWrapper<List<PaymentMethodModelDao>>() {
@Override
public List<PaymentMethodModelDao> inTransaction(final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory) throws Exception {
final PaymentMethodSqlDao transactional = entitySqlDaoWrapperFactory.become(PaymentMethodSqlDao.class);
- final List<PaymentMethodModelDao> existingPaymentMethods = transactional.getByAccountId(accountId.toString(), context);
+ final List<PaymentMethodModelDao> allPaymentMethodsForAccount = transactional.getByAccountId(accountId.toString(), context);
- for (final PaymentMethodModelDao finalPaymentMethod : newPaymentMethods) {
+ // Consider only the payment methods for the plugin we are refreshing
+ final Collection<PaymentMethodModelDao> existingPaymentMethods = Collections2.filter(allPaymentMethodsForAccount,
+ new Predicate<PaymentMethodModelDao>() {
+ @Override
+ public boolean apply(final PaymentMethodModelDao paymentMethod) {
+ return pluginName.equals(paymentMethod.getPluginName());
+ }
+ });
+ for (final PaymentMethodModelDao finalPaymentMethod : newPaymentMethods) {
PaymentMethodModelDao foundExistingPaymentMethod = null;
for (final PaymentMethodModelDao existingPaymentMethod : existingPaymentMethods) {
if (existingPaymentMethod.equals(finalPaymentMethod)) {
@@ -329,11 +339,10 @@ public class DefaultPaymentDao implements PaymentDao {
// Finally, all payment methods left in the existingPaymentMethods should be marked as deleted
for (final PaymentMethodModelDao existingPaymentMethod : existingPaymentMethods) {
- deletedPaymentMethodInTransaction(entitySqlDaoWrapperFactory, existingPaymentMethod.getId(), context);
+ deletedPaymentMethodInTransaction(entitySqlDaoWrapperFactory, existingPaymentMethod.getId(), context);
}
return transactional.getByAccountId(accountId.toString(), context);
}
});
}
-
}
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 304a03f..eda7134 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
@@ -68,7 +68,7 @@ public interface PaymentDao {
public void deletedPaymentMethod(UUID paymentMethodId, InternalCallContext context);
- public List<PaymentMethodModelDao> refreshPaymentMethods(final UUID accountId, final List<PaymentMethodModelDao> paymentMethods, final InternalCallContext context);
+ public List<PaymentMethodModelDao> refreshPaymentMethods(UUID accountId, String pluginName, List<PaymentMethodModelDao> paymentMethods, InternalCallContext context);
public void undeletedPaymentMethod(UUID paymentMethodId, InternalCallContext context);
}
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 8eba46f..20db53e 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
@@ -164,7 +164,7 @@ public class MockPaymentDao implements PaymentDao {
}
@Override
- public List<PaymentMethodModelDao> refreshPaymentMethods(final UUID accountId, final List<PaymentMethodModelDao> paymentMethods, final InternalCallContext context) {
+ public List<PaymentMethodModelDao> refreshPaymentMethods(final UUID accountId, final String pluginName, final List<PaymentMethodModelDao> paymentMethods, final InternalCallContext context) {
return ImmutableList.<PaymentMethodModelDao>of();
}