Details
diff --git a/account/src/main/java/com/ning/billing/account/api/DefaultAccount.java b/account/src/main/java/com/ning/billing/account/api/DefaultAccount.java
index e1831d1..00477dd 100644
--- a/account/src/main/java/com/ning/billing/account/api/DefaultAccount.java
+++ b/account/src/main/java/com/ning/billing/account/api/DefaultAccount.java
@@ -31,7 +31,7 @@ public class DefaultAccount extends EntityBase implements Account {
private final int firstNameLength;
private final Currency currency;
private final int billCycleDay;
- private final String paymentProviderName;
+ private final UUID paymentMethodId;
private final DateTimeZone timeZone;
private final String locale;
private final String address1;
@@ -57,7 +57,7 @@ public class DefaultAccount extends EntityBase implements Account {
*/
public DefaultAccount(final UUID id, final AccountData data) {
this(id, data.getExternalKey(), data.getEmail(), data.getName(), data.getFirstNameLength(),
- data.getCurrency(), data.getBillCycleDay(), data.getPaymentProviderName(),
+ data.getCurrency(), data.getBillCycleDay(), data.getPaymentMethodId(),
data.getTimeZone(), data.getLocale(),
data.getAddress1(), data.getAddress2(), data.getCompanyName(),
data.getCity(), data.getStateOrProvince(), data.getCountry(),
@@ -69,7 +69,7 @@ public class DefaultAccount extends EntityBase implements Account {
*/
public DefaultAccount(final UUID id, final String externalKey, final String email,
final String name, final int firstNameLength,
- final Currency currency, final int billCycleDay, final String paymentProviderName,
+ final Currency currency, final int billCycleDay, final UUID paymentMethodId,
final DateTimeZone timeZone, final String locale,
final String address1, final String address2, final String companyName,
final String city, final String stateOrProvince, final String country,
@@ -82,7 +82,7 @@ public class DefaultAccount extends EntityBase implements Account {
this.firstNameLength = firstNameLength;
this.currency = currency;
this.billCycleDay = billCycleDay;
- this.paymentProviderName = paymentProviderName;
+ this.paymentMethodId = paymentMethodId;
this.timeZone = timeZone;
this.locale = locale;
this.address1 = address1;
@@ -128,8 +128,8 @@ public class DefaultAccount extends EntityBase implements Account {
}
@Override
- public String getPaymentProviderName() {
- return paymentProviderName;
+ public UUID getPaymentMethodId() {
+ return paymentMethodId;
}
@Override
@@ -206,7 +206,7 @@ public class DefaultAccount extends EntityBase implements Account {
", phone=" + phone +
", currency=" + currency +
", billCycleDay=" + billCycleDay +
- ", paymentProviderName=" + paymentProviderName +
+ ", paymentMethodId=" + paymentMethodId +
", timezone=" + timeZone +
", locale=" + locale +
", address1=" + address1 +
diff --git a/account/src/main/java/com/ning/billing/account/api/user/DefaultAccountChangeEvent.java b/account/src/main/java/com/ning/billing/account/api/user/DefaultAccountChangeEvent.java
index 84f5995..412bc5e 100644
--- a/account/src/main/java/com/ning/billing/account/api/user/DefaultAccountChangeEvent.java
+++ b/account/src/main/java/com/ning/billing/account/api/user/DefaultAccountChangeEvent.java
@@ -143,8 +143,9 @@ public class DefaultAccountChangeEvent implements AccountChangeEvent {
"billCycleDay",
Integer.toString(oldData.getBillCycleDay()), Integer.toString(newData.getBillCycleDay()));
- addIfValueChanged(tmpChangedFields,"paymentProviderName",
- oldData.getPaymentProviderName(), newData.getPaymentProviderName());
+ addIfValueChanged(tmpChangedFields,"paymentMethodId",
+ (oldData.getPaymentMethodId() != null) ? oldData.getPaymentMethodId().toString() : null,
+ (newData.getPaymentMethodId() != null) ? newData.getPaymentMethodId().toString(): null);
addIfValueChanged(tmpChangedFields, "locale", oldData.getLocale(), newData.getLocale());
diff --git a/account/src/main/java/com/ning/billing/account/api/user/DefaultAccountCreationEvent.java b/account/src/main/java/com/ning/billing/account/api/user/DefaultAccountCreationEvent.java
index 1c20f44..57f2504 100644
--- a/account/src/main/java/com/ning/billing/account/api/user/DefaultAccountCreationEvent.java
+++ b/account/src/main/java/com/ning/billing/account/api/user/DefaultAccountCreationEvent.java
@@ -117,7 +117,7 @@ public class DefaultAccountCreationEvent implements AccountCreationEvent {
private final String email;
private final Integer billCycleDay;
private final String currency;
- private final String paymentProviderName;
+ private final UUID paymentMethodId;
private final String timeZone;
private final String locale;
private final String address1;
@@ -139,7 +139,7 @@ public class DefaultAccountCreationEvent implements AccountCreationEvent {
d.getEmail(),
d.getBillCycleDay(),
d.getCurrency() != null ? d.getCurrency().name() : null,
- d.getPaymentProviderName(),
+ d.getPaymentMethodId(),
d.getTimeZone() != null ? d.getTimeZone().getID() : null,
d.getLocale(),
d.getAddress1(),
@@ -161,7 +161,7 @@ public class DefaultAccountCreationEvent implements AccountCreationEvent {
@JsonProperty("email") String email,
@JsonProperty("billCycleDay") Integer billCycleDay,
@JsonProperty("currency") String currency,
- @JsonProperty("paymentProviderName") String paymentProviderName,
+ @JsonProperty("paymentMethodId") UUID paymentMethodId,
@JsonProperty("timeZone") String timeZone,
@JsonProperty("locale") String locale,
@JsonProperty("address1") String address1,
@@ -181,7 +181,7 @@ public class DefaultAccountCreationEvent implements AccountCreationEvent {
this.email = email;
this.billCycleDay = billCycleDay;
this.currency = currency;
- this.paymentProviderName = paymentProviderName;
+ this.paymentMethodId = paymentMethodId;
this.timeZone = timeZone;
this.locale = locale;
this.address1 = address1;
@@ -226,11 +226,6 @@ public class DefaultAccountCreationEvent implements AccountCreationEvent {
return Currency.valueOf(currency);
}
- @Override
- public String getPaymentProviderName() {
- return paymentProviderName;
- }
-
@JsonIgnore
@Override
public DateTimeZone getTimeZone() {
@@ -288,6 +283,11 @@ public class DefaultAccountCreationEvent implements AccountCreationEvent {
}
@Override
+ public UUID getPaymentMethodId() {
+ return paymentMethodId;
+ }
+
+ @Override
@JsonIgnore
public boolean isMigrated() {
return isMigrated;
@@ -328,7 +328,7 @@ public class DefaultAccountCreationEvent implements AccountCreationEvent {
result = prime * result + ((name == null) ? 0 : name.hashCode());
result = prime
* result
- + ((paymentProviderName == null) ? 0 : paymentProviderName
+ + ((paymentMethodId == null) ? 0 : paymentMethodId
.hashCode());
result = prime * result + ((phone == null) ? 0 : phone.hashCode());
result = prime * result
@@ -411,10 +411,10 @@ public class DefaultAccountCreationEvent implements AccountCreationEvent {
return false;
} else if (!name.equals(other.name))
return false;
- if (paymentProviderName == null) {
- if (other.paymentProviderName != null)
+ if (paymentMethodId == null) {
+ if (other.paymentMethodId != null)
return false;
- } else if (!paymentProviderName.equals(other.paymentProviderName))
+ } else if (!paymentMethodId.equals(other.paymentMethodId))
return false;
if (phone == null) {
if (other.phone != null)
diff --git a/account/src/main/java/com/ning/billing/account/dao/AccountBinder.java b/account/src/main/java/com/ning/billing/account/dao/AccountBinder.java
index 57b61c2..682fa02 100644
--- a/account/src/main/java/com/ning/billing/account/dao/AccountBinder.java
+++ b/account/src/main/java/com/ning/billing/account/dao/AccountBinder.java
@@ -48,7 +48,7 @@ public @interface AccountBinder {
Currency currency = account.getCurrency();
q.bind("currency", (currency == null) ? null : currency.toString());
q.bind("billingCycleDay", account.getBillCycleDay());
- q.bind("paymentProviderName", account.getPaymentProviderName());
+ q.bind("paymentMethodId", account.getPaymentMethodId());
DateTimeZone timeZone = account.getTimeZone();
q.bind("timeZone", (timeZone == null) ? null : timeZone.toString());
q.bind("locale", account.getLocale());
diff --git a/account/src/main/java/com/ning/billing/account/dao/AccountHistoryBinder.java b/account/src/main/java/com/ning/billing/account/dao/AccountHistoryBinder.java
index 66cba44..c496b53 100644
--- a/account/src/main/java/com/ning/billing/account/dao/AccountHistoryBinder.java
+++ b/account/src/main/java/com/ning/billing/account/dao/AccountHistoryBinder.java
@@ -53,7 +53,7 @@ public @interface AccountHistoryBinder {
Currency currency = account.getCurrency();
q.bind("currency", (currency == null) ? null : currency.toString());
q.bind("billingCycleDay", account.getBillCycleDay());
- q.bind("paymentProviderName", account.getPaymentProviderName());
+ q.bind("paymentMethodId", account.getPaymentMethodId());
DateTimeZone timeZone = account.getTimeZone();
q.bind("timeZone", (timeZone == null) ? null : timeZone.toString());
q.bind("locale", account.getLocale());
diff --git a/account/src/main/java/com/ning/billing/account/dao/AccountMapper.java b/account/src/main/java/com/ning/billing/account/dao/AccountMapper.java
index 1a62c19..86c29a6 100644
--- a/account/src/main/java/com/ning/billing/account/dao/AccountMapper.java
+++ b/account/src/main/java/com/ning/billing/account/dao/AccountMapper.java
@@ -20,7 +20,6 @@ import com.ning.billing.account.api.Account;
import com.ning.billing.account.api.DefaultAccount;
import com.ning.billing.catalog.api.Currency;
import com.ning.billing.util.dao.MapperBase;
-import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import org.skife.jdbi.v2.StatementContext;
import org.skife.jdbi.v2.tweak.ResultSetMapper;
@@ -42,7 +41,7 @@ public class AccountMapper extends MapperBase implements ResultSetMapper<Account
String currencyString = result.getString("currency");
Currency currency = (currencyString == null) ? null : Currency.valueOf(currencyString);
- String paymentProviderName = result.getString("payment_provider_name");
+ UUID paymentMethodId = result.getString("payment_method_id") != null ? UUID.fromString(result.getString("payment_method_id")) : null;
String timeZoneId = result.getString("time_zone");
DateTimeZone timeZone = (timeZoneId == null) ? null : DateTimeZone.forID(timeZoneId);
@@ -62,7 +61,7 @@ public class AccountMapper extends MapperBase implements ResultSetMapper<Account
Boolean isNotifiedForInvoices = result.getBoolean("is_notified_for_invoices");
return new DefaultAccount(id, externalKey, email, name,firstNameLength, currency,
- billingCycleDay, paymentProviderName, timeZone, locale,
+ billingCycleDay, paymentMethodId, timeZone, locale,
address1, address2, companyName, city, stateOrProvince, country, postalCode, phone,
isMigrated, isNotifiedForInvoices);
}
diff --git a/account/src/main/resources/com/ning/billing/account/dao/AccountSqlDao.sql.stg b/account/src/main/resources/com/ning/billing/account/dao/AccountSqlDao.sql.stg
index 7985459..e56bf58 100644
--- a/account/src/main/resources/com/ning/billing/account/dao/AccountSqlDao.sql.stg
+++ b/account/src/main/resources/com/ning/billing/account/dao/AccountSqlDao.sql.stg
@@ -8,7 +8,7 @@ accountFields(prefix) ::= <<
<prefix>first_name_length,
<prefix>currency,
<prefix>billing_cycle_day,
- <prefix>payment_provider_name,
+ <prefix>payment_method_id,
<prefix>time_zone,
<prefix>locale,
<prefix>address1,
@@ -32,7 +32,7 @@ create() ::= <<
(<accountFields()>)
VALUES
(:id, :externalKey, :email, :name, :firstNameLength, :currency, :billingCycleDay,
- :paymentProviderName, :timeZone, :locale,
+ :paymentMethodId, :timeZone, :locale,
:address1, :address2, :companyName, :city, :stateOrProvince, :country, :postalCode, :phone,
:migrated, :isNotifiedForInvoices, :userName, :createdDate, :userName, :updatedDate);
>>
@@ -40,7 +40,7 @@ create() ::= <<
update() ::= <<
UPDATE accounts
SET external_key = :externalKey, email = :email, name = :name, first_name_length = :firstNameLength,
- currency = :currency, billing_cycle_day = :billingCycleDay, payment_provider_name = :paymentProviderName,
+ currency = :currency, billing_cycle_day = :billingCycleDay, payment_method_id = :paymentMethodId,
time_zone = :timeZone, locale = :locale,
address1 = :address1, address2 = :address2, company_name = :companyName, city = :city, state_or_province = :stateOrProvince,
country = :country, postal_code = :postalCode, phone = :phone,
@@ -57,7 +57,7 @@ historyFields() ::= <<
first_name_length,
currency,
billing_cycle_day,
- payment_provider_name,
+ payment_method_id,
time_zone,
locale,
address1,
@@ -91,7 +91,7 @@ insertHistoryFromTransaction() ::= <<
INSERT INTO account_history(<historyFields()>)
VALUES
(:recordId, :id, :externalKey, :email, :name, :firstNameLength, :currency,
- :billingCycleDay, :paymentProviderName, :timeZone, :locale,
+ :billingCycleDay, :paymentMethodId, :timeZone, :locale,
:address1, :address2, :companyName, :city, :stateOrProvince,
:country, :postalCode, :phone, :migrated, :isNotifiedForInvoices, :changeType, :userName, :createdDate);
>>
diff --git a/account/src/main/resources/com/ning/billing/account/ddl.sql b/account/src/main/resources/com/ning/billing/account/ddl.sql
index 5fe7c90..2cf54d1 100644
--- a/account/src/main/resources/com/ning/billing/account/ddl.sql
+++ b/account/src/main/resources/com/ning/billing/account/ddl.sql
@@ -8,7 +8,7 @@ CREATE TABLE accounts (
first_name_length int NOT NULL,
currency char(3) DEFAULT NULL,
billing_cycle_day int DEFAULT NULL,
- payment_provider_name varchar(20) DEFAULT NULL,
+ payment_method_id char(36) DEFAULT NULL,
time_zone varchar(50) DEFAULT NULL,
locale varchar(5) DEFAULT NULL,
address1 varchar(100) DEFAULT NULL,
@@ -42,7 +42,7 @@ CREATE TABLE account_history (
first_name_length int NOT NULL,
currency char(3) DEFAULT NULL,
billing_cycle_day int DEFAULT NULL,
- payment_provider_name varchar(20) DEFAULT NULL,
+ payment_method_id char(36) DEFAULT NULL,
time_zone varchar(50) DEFAULT NULL,
locale varchar(5) DEFAULT NULL,
address1 varchar(100) DEFAULT NULL,
diff --git a/account/src/test/java/com/ning/billing/account/api/MockAccountUserApi.java b/account/src/test/java/com/ning/billing/account/api/MockAccountUserApi.java
index f916278..77504db 100644
--- a/account/src/test/java/com/ning/billing/account/api/MockAccountUserApi.java
+++ b/account/src/test/java/com/ning/billing/account/api/MockAccountUserApi.java
@@ -31,27 +31,27 @@ import com.ning.billing.util.customfield.CustomField;
public class MockAccountUserApi implements AccountUserApi {
private final CopyOnWriteArrayList<Account> accounts = new CopyOnWriteArrayList<Account>();
- public Account createAccount(UUID id,
- String externalKey,
- String email,
- String name,
- int firstNameLength,
- Currency currency,
- int billCycleDay,
- String paymentProviderName,
- final DateTimeZone timeZone,
- final String locale,
- final String address1,
- final String address2,
- final String companyName,
- final String city,
- final String stateOrProvince,
- final String country,
- final String postalCode,
- final String phone) {
+ public Account createAccount(final UUID id,
+ final String externalKey,
+ final String email,
+ final String name,
+ final int firstNameLength,
+ final Currency currency,
+ final int billCycleDay,
+ final UUID paymentMethodId,
+ final DateTimeZone timeZone,
+ final String locale,
+ final String address1,
+ final String address2,
+ final String companyName,
+ final String city,
+ final String stateOrProvince,
+ final String country,
+ final String postalCode,
+ final String phone) {
Account result = new DefaultAccount(id, externalKey, email, name,
- firstNameLength, currency, billCycleDay, paymentProviderName,
+ firstNameLength, currency, billCycleDay, paymentMethodId,
timeZone, locale, address1, address2, companyName, city,
stateOrProvince, country, postalCode, phone, false, false);
accounts.add(result);
diff --git a/account/src/test/java/com/ning/billing/account/api/user/TestEventJson.java b/account/src/test/java/com/ning/billing/account/api/user/TestEventJson.java
index 7cfe1ba..a32fbc2 100644
--- a/account/src/test/java/com/ning/billing/account/api/user/TestEventJson.java
+++ b/account/src/test/java/com/ning/billing/account/api/user/TestEventJson.java
@@ -49,7 +49,7 @@ public class TestEventJson {
@Test(groups= {"fast"})
public void testAccountCreationEvent() throws Exception {
- DefaultAccountData data = new DefaultAccountData("dsfdsf", "bobo", 3, "bobo@yahoo.com", 12, "USD", "paypal",
+ DefaultAccountData data = new DefaultAccountData("dsfdsf", "bobo", 3, "bobo@yahoo.com", 12, "USD", UUID.randomUUID(),
"UTC", "US", "21 avenue", "", "Gling", "San Franciso", "CA", "94110", "USA", "4126789887", false, false);
DefaultAccountCreationEvent e = new DefaultAccountCreationEvent(data, UUID.randomUUID(), UUID.randomUUID());
diff --git a/account/src/test/java/com/ning/billing/account/dao/TestAccountDao.java b/account/src/test/java/com/ning/billing/account/dao/TestAccountDao.java
index 733902a..07a3351 100644
--- a/account/src/test/java/com/ning/billing/account/dao/TestAccountDao.java
+++ b/account/src/test/java/com/ning/billing/account/dao/TestAccountDao.java
@@ -232,8 +232,8 @@ public class TestAccountDao extends AccountDaoTestBase {
}
@Override
- public String getPaymentProviderName() {
- return account.getPaymentProviderName();
+ public UUID getPaymentMethodId() {
+ return account.getPaymentMethodId();
}
@Override
public DateTimeZone getTimeZone() {
@@ -288,7 +288,7 @@ public class TestAccountDao extends AccountDaoTestBase {
assertNotNull(savedAccount);
assertEquals(savedAccount.getName(), updatedAccount.getName());
assertEquals(savedAccount.getEmail(), updatedAccount.getEmail());
- assertEquals(savedAccount.getPaymentProviderName(), updatedAccount.getPaymentProviderName());
+ assertEquals(savedAccount.getPaymentMethodId(), updatedAccount.getPaymentMethodId());
assertEquals(savedAccount.getBillCycleDay(), updatedAccount.getBillCycleDay());
assertEquals(savedAccount.getFirstNameLength(), updatedAccount.getFirstNameLength());
assertEquals(savedAccount.getTimeZone(), updatedAccount.getTimeZone());
diff --git a/analytics/src/test/java/com/ning/billing/analytics/MockAccount.java b/analytics/src/test/java/com/ning/billing/analytics/MockAccount.java
index 6a11803..adaa5b1 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/MockAccount.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/MockAccount.java
@@ -89,8 +89,8 @@ public class MockAccount implements Account
}
@Override
- public String getPaymentProviderName() {
- return "PayPal";
+ public UUID getPaymentMethodId() {
+ return UUID.randomUUID();
}
@Override
diff --git a/api/src/main/java/com/ning/billing/account/api/AccountData.java b/api/src/main/java/com/ning/billing/account/api/AccountData.java
index 3220971..fa3e135 100644
--- a/api/src/main/java/com/ning/billing/account/api/AccountData.java
+++ b/api/src/main/java/com/ning/billing/account/api/AccountData.java
@@ -16,6 +16,8 @@
package com.ning.billing.account.api;
+import java.util.UUID;
+
import org.joda.time.DateTimeZone;
import com.ning.billing.catalog.api.Currency;
@@ -34,7 +36,7 @@ public interface AccountData {
public Currency getCurrency();
- public String getPaymentProviderName();
+ public UUID getPaymentMethodId();
public DateTimeZone getTimeZone();
diff --git a/api/src/main/java/com/ning/billing/account/api/MutableAccountData.java b/api/src/main/java/com/ning/billing/account/api/MutableAccountData.java
index 6ea638d..fea8c8b 100644
--- a/api/src/main/java/com/ning/billing/account/api/MutableAccountData.java
+++ b/api/src/main/java/com/ning/billing/account/api/MutableAccountData.java
@@ -16,6 +16,8 @@
package com.ning.billing.account.api;
+import java.util.UUID;
+
import org.joda.time.DateTimeZone;
import com.ning.billing.catalog.api.Currency;
@@ -33,7 +35,7 @@ public interface MutableAccountData extends AccountData {
public void setBillCycleDay(int billCycleDay);
- public void setPaymentProviderName(String paymentProviderName);
+ public void setPaymentMethodId(UUID paymentMethodId);
public void setTimeZone(DateTimeZone timeZone);
diff --git a/api/src/main/java/com/ning/billing/ErrorCode.java b/api/src/main/java/com/ning/billing/ErrorCode.java
index 7816bee..5ceb670 100644
--- a/api/src/main/java/com/ning/billing/ErrorCode.java
+++ b/api/src/main/java/com/ning/billing/ErrorCode.java
@@ -236,7 +236,9 @@ public enum ErrorCode {
PAYMENT_AMOUNT_DENIED(7018, "Payment amount requested for invoice %s is greater than invoice balance [%f/%f]"),
PAYMENT_INTERNAL_ERROR(7019, "Internal payment error : %s"),
PAYMENT_NO_SUCH_PAYMENT(7020, "Payment %s does not exist"),
-
+ PAYMENT_NO_DEFAULT_PAYMENT_METHOD(7021, "Account %s does not have a default payment method set"),
+ PAYMENT_DEL_DEFAULT_PAYMENT_METHOD(7022, "Cannot delete default payment method for account %s"),
+
PAYMENT_PLUGIN_TIMEOUT(7100, "Plugin timeout for account %s and invoice %s"),
PAYMENT_PLUGIN_ACCOUNT_INIT(7101, "Account initialization for account %s and plugin % s failed: %s"),
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 03954eb..2ff19b9 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
@@ -56,7 +56,7 @@ public interface PaymentApi {
public UUID addPaymentMethod(final String pluginName, final Account account, boolean setDefault, final PaymentMethodPlugin paymentMethodInfo, final CallContext context)
throws PaymentApiException;
- public List<PaymentMethod> refreshPaymentMethods(final String pluginName, final Account account, final PaymentMethodPlugin paymentMethodInfo, final CallContext context)
+ public List<PaymentMethod> refreshPaymentMethods(final String pluginName, final Account account, final CallContext context)
throws PaymentApiException;
public List<PaymentMethod> getPaymentMethods(final Account account, final boolean withPluginDetail)
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 fc9033e..cab1a77 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
@@ -33,16 +33,12 @@ public interface PaymentPluginApi {
public PaymentInfoPlugin getPaymentInfo(UUID paymentId)
throws PaymentPluginApiException;
-
public List<PaymentInfoPlugin> processRefund(Account account)
throws PaymentPluginApiException;
-
public String createPaymentProviderAccount(Account account)
throws PaymentPluginApiException;
-
-
public List<PaymentMethodPlugin> getPaymentMethodDetails(String accountKey)
throws PaymentPluginApiException;
@@ -60,20 +56,4 @@ public interface PaymentPluginApi {
public void setDefaultPaymentMethod(String accountKey, String externalPaymentId)
throws PaymentPluginApiException;
-
-
- //
- // STEPH to be deleted
- //
- public void updatePaymentGateway(String accountKey)
- throws PaymentPluginApiException;
-
- public PaymentProviderAccount getPaymentProviderAccount(String accountKey)
- throws PaymentPluginApiException;
-
- public void updatePaymentProviderAccountExistingContact(Account account)
- throws PaymentPluginApiException;
-
- public void updatePaymentProviderAccountWithNewContact(Account account)
- throws PaymentPluginApiException;
}
diff --git a/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestIntegrationBase.java b/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestIntegrationBase.java
index 78e37d0..803c20d 100644
--- a/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestIntegrationBase.java
+++ b/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestIntegrationBase.java
@@ -295,8 +295,8 @@ public class TestIntegrationBase implements TestListenerStatus {
return Currency.USD;
}
@Override
- public String getPaymentProviderName() {
- return BeatrixModule.PLUGIN_NAME;
+ public UUID getPaymentMethodId() {
+ return UUID.randomUUID();
}
@Override
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/TestApiBase.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/TestApiBase.java
index 337ef59..ba09b34 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/TestApiBase.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/TestApiBase.java
@@ -440,8 +440,8 @@ public abstract class TestApiBase implements TestListenerStatus {
}
@Override
- public String getPaymentProviderName() {
- return "Paypal";
+ public UUID getPaymentMethodId() {
+ return UUID.randomUUID();
}
@Override
public DateTimeZone getTimeZone() {
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/AccountJson.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/AccountJson.java
index 4603f3d..d0cca64 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/AccountJson.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/AccountJson.java
@@ -16,6 +16,8 @@
package com.ning.billing.jaxrs.json;
+import java.util.UUID;
+
import org.joda.time.DateTimeZone;
import com.fasterxml.jackson.annotation.JsonCreator;
@@ -38,7 +40,7 @@ public class AccountJson extends AccountJsonSimple {
private final String currency;
- private final String paymentProvider;
+ private final String paymentMethodId;
private final String timeZone;
@@ -61,8 +63,8 @@ public class AccountJson extends AccountJsonSimple {
this.length = account.getFirstNameLength();
this.email = account.getEmail();
this.billCycleDay = account.getBillCycleDay();
- this.currency = account.getCurrency().toString();
- this.paymentProvider = account.getPaymentProviderName();
+ this.currency = account.getCurrency() != null ? account.getCurrency().toString() : null;
+ this.paymentMethodId = account.getPaymentMethodId() != null ? account.getPaymentMethodId().toString() : null;
this.timeZone = account.getTimeZone().toString();
this.address1 = account.getAddress1();
this.address2 = account.getAddress2();
@@ -105,8 +107,8 @@ public class AccountJson extends AccountJsonSimple {
}
@Override
- public String getPaymentProviderName() {
- return paymentProvider;
+ public UUID getPaymentMethodId() {
+ return paymentMethodId != null ? UUID.fromString(paymentMethodId) : null;
}
@Override
@@ -180,7 +182,7 @@ public class AccountJson extends AccountJsonSimple {
this.email = null;
this.billCycleDay = null;
this.currency = null;
- this.paymentProvider = null;
+ this.paymentMethodId = null;
this.timeZone = null;
this.address1 = null;
this.address2 = null;
@@ -198,7 +200,7 @@ public class AccountJson extends AccountJsonSimple {
@JsonProperty("email") String email,
@JsonProperty("billingDay") Integer billCycleDay,
@JsonProperty("currency") String currency,
- @JsonProperty("paymentProvider") String paymentProvider,
+ @JsonProperty("paymentMethodId") String paymentMethodId,
@JsonProperty("timezone") String timeZone,
@JsonProperty("address1") String address1,
@JsonProperty("address2") String address2,
@@ -212,7 +214,7 @@ public class AccountJson extends AccountJsonSimple {
this.email = email;
this.billCycleDay = billCycleDay;
this.currency = currency;
- this.paymentProvider = paymentProvider;
+ this.paymentMethodId = paymentMethodId;
this.timeZone = timeZone;
this.address1 = address1;
this.address2 = address2;
@@ -242,8 +244,8 @@ public class AccountJson extends AccountJsonSimple {
return currency;
}
- public String getPaymentProvider() {
- return paymentProvider;
+ public String getPaymentMethodId() {
+ return paymentMethodId;
}
public String getTimeZone() {
@@ -296,7 +298,7 @@ public class AccountJson extends AccountJsonSimple {
result = prime * result + ((length == null) ? 0 : length.hashCode());
result = prime * result + ((name == null) ? 0 : name.hashCode());
result = prime * result
- + ((paymentProvider == null) ? 0 : paymentProvider.hashCode());
+ + ((paymentMethodId == null) ? 0 : paymentMethodId.hashCode());
result = prime * result + ((phone == null) ? 0 : phone.hashCode());
result = prime * result + ((state == null) ? 0 : state.hashCode());
result = prime * result
@@ -363,10 +365,10 @@ public class AccountJson extends AccountJsonSimple {
return false;
} else if (!name.equals(other.name))
return false;
- if (paymentProvider == null) {
- if (other.paymentProvider != null)
+ if (paymentMethodId == null) {
+ if (other.paymentMethodId != null)
return false;
- } else if (!paymentProvider.equals(other.paymentProvider))
+ } else if (!paymentMethodId.equals(other.paymentMethodId))
return false;
if (phone == null) {
if (other.phone != null)
diff --git a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestAccountJson.java b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestAccountJson.java
index 901a8e4..96b497f 100644
--- a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestAccountJson.java
+++ b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestAccountJson.java
@@ -38,7 +38,7 @@ public class TestAccountJson {
final String email = UUID.randomUUID().toString();
final Integer billCycleDay = 6;
final String currency = UUID.randomUUID().toString();
- final String paymentProvider = UUID.randomUUID().toString();
+ final String paymentMethodId = UUID.randomUUID().toString();
final String timeZone = UUID.randomUUID().toString();
final String address1 = UUID.randomUUID().toString();
final String address2 = UUID.randomUUID().toString();
@@ -48,7 +48,7 @@ public class TestAccountJson {
final String phone = UUID.randomUUID().toString();
final AccountJson accountJson = new AccountJson(accountId, name, length, externalKey,
- email, billCycleDay, currency, paymentProvider,
+ email, billCycleDay, currency, paymentMethodId,
timeZone, address1, address2, company, state,
country, phone);
Assert.assertEquals(accountJson.getAccountId(), accountId);
@@ -58,7 +58,7 @@ public class TestAccountJson {
Assert.assertEquals(accountJson.getEmail(), email);
Assert.assertEquals(accountJson.getBillCycleDay(), billCycleDay);
Assert.assertEquals(accountJson.getCurrency(), currency);
- Assert.assertEquals(accountJson.getPaymentProvider(), paymentProvider);
+ Assert.assertEquals(accountJson.getPaymentMethodId(), paymentMethodId);
Assert.assertEquals(accountJson.getTimeZone(), timeZone);
Assert.assertEquals(accountJson.getAddress1(), address1);
Assert.assertEquals(accountJson.getAddress2(), address2);
@@ -70,7 +70,7 @@ public class TestAccountJson {
final String asJson = mapper.writeValueAsString(accountJson);
Assert.assertEquals(asJson, "{\"accountId\":\"" + accountJson.getAccountId() + "\",\"name\":\"" + accountJson.getName() + "\"," +
"\"externalKey\":\"" + accountJson.getExternalKey() + "\",\"email\":\"" + accountJson.getEmail() + "\"," +
- "\"currency\":\"" + accountJson.getCurrency() + "\",\"paymentProvider\":\"" + accountJson.getPaymentProvider() + "\"," +
+ "\"currency\":\"" + accountJson.getCurrency() + "\",\"paymentMethodId\":\"" + accountJson.getPaymentMethodId() + "\"," +
"\"address1\":\"" + accountJson.getAddress1() + "\",\"address2\":\"" + accountJson.getAddress2() + "\"," +
"\"company\":\"" + accountJson.getCompany() + "\",\"state\":\"" + accountJson.getState() + "\"," +
"\"country\":\"" + accountJson.getCountry() + "\",\"phone\":\"" + accountJson.getPhone() + "\"," +
@@ -98,7 +98,7 @@ public class TestAccountJson {
accountBuilder.locale(UUID.randomUUID().toString());
accountBuilder.migrated(true);
accountBuilder.name(UUID.randomUUID().toString());
- accountBuilder.paymentProviderName(UUID.randomUUID().toString());
+ accountBuilder.paymentMethodId(UUID.randomUUID());
accountBuilder.phone(UUID.randomUUID().toString());
accountBuilder.postalCode(UUID.randomUUID().toString());
accountBuilder.stateOrProvince(UUID.randomUUID().toString());
@@ -115,7 +115,7 @@ public class TestAccountJson {
Assert.assertEquals(accountJson.getEmail(), account.getEmail());
Assert.assertEquals(accountJson.getExternalKey(), account.getExternalKey());
Assert.assertEquals(accountJson.getName(), account.getName());
- Assert.assertEquals(accountJson.getPaymentProvider(), account.getPaymentProviderName());
+ Assert.assertEquals(accountJson.getPaymentMethodId(), account.getPaymentMethodId().toString());
Assert.assertEquals(accountJson.getPhone(), account.getPhone());
Assert.assertEquals(accountJson.getState(), account.getStateOrProvince());
Assert.assertEquals(accountJson.getTimeZone(), account.getTimeZone().toString());
diff --git a/junction/src/main/java/com/ning/billing/junction/plumbing/api/BlockingAccount.java b/junction/src/main/java/com/ning/billing/junction/plumbing/api/BlockingAccount.java
index fb80641..2dfb4b4 100644
--- a/junction/src/main/java/com/ning/billing/junction/plumbing/api/BlockingAccount.java
+++ b/junction/src/main/java/com/ning/billing/junction/plumbing/api/BlockingAccount.java
@@ -72,8 +72,8 @@ public class BlockingAccount implements Account {
}
@Override
- public String getPaymentProviderName() {
- return account.getPaymentProviderName();
+ public UUID getPaymentMethodId() {
+ return account.getPaymentMethodId();
}
@Override
@@ -148,5 +148,4 @@ public class BlockingAccount implements Account {
public boolean isNotifiedForInvoices() {
return account.isNotifiedForInvoices();
}
-
}
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 fa52399..2d94661 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
@@ -24,11 +24,9 @@ import java.util.UUID;
import com.google.inject.Inject;
import com.ning.billing.ErrorCode;
import com.ning.billing.account.api.Account;
-import com.ning.billing.payment.core.AccountProcessor;
import com.ning.billing.payment.core.PaymentMethodProcessor;
import com.ning.billing.payment.core.PaymentProcessor;
import com.ning.billing.payment.core.RefundProcessor;
-import com.ning.billing.payment.plugin.api.PaymentProviderAccount;
import com.ning.billing.util.callcontext.CallContext;
public class DefaultPaymentApi implements PaymentApi {
@@ -37,15 +35,12 @@ public class DefaultPaymentApi implements PaymentApi {
private final PaymentMethodProcessor methodProcessor;
private final PaymentProcessor paymentProcessor;
private final RefundProcessor refundProcessor;
- private final AccountProcessor accountProcessor;
-
+
@Inject
public DefaultPaymentApi(final PaymentMethodProcessor methodProcessor,
- final AccountProcessor accountProcessor,
final PaymentProcessor paymentProcessor,
final RefundProcessor refundProcessor) {
this.methodProcessor = methodProcessor;
- this.accountProcessor = accountProcessor;
this.paymentProcessor = paymentProcessor;
this.refundProcessor = refundProcessor;
}
@@ -89,10 +84,6 @@ public class DefaultPaymentApi implements PaymentApi {
return refundProcessor.createRefund(account, paymentId, context);
}
-
-
-
-
@Override
public Set<String> getAvailablePlugins() {
return methodProcessor.getAvailablePlugins();
@@ -116,7 +107,7 @@ public class DefaultPaymentApi implements PaymentApi {
@Override
public List<PaymentMethod> refreshPaymentMethods(String pluginName,
- Account account, PaymentMethodPlugin paymentMethodInfo, final CallContext context)
+ Account account, final CallContext context)
throws PaymentApiException {
return methodProcessor.refreshPaymentMethods(pluginName, account, context);
}
@@ -148,6 +139,6 @@ public class DefaultPaymentApi implements PaymentApi {
@Override
public void setDefaultPaymentMethod(Account account, UUID paymentMethodId, final CallContext context)
throws PaymentApiException {
- methodProcessor.setDefaultPaymentMethod(account, paymentMethodId);
+ methodProcessor.setDefaultPaymentMethod(account, paymentMethodId, 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 090bc09..5498ed3 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
@@ -25,12 +25,14 @@ import java.util.Set;
import java.util.UUID;
import java.util.concurrent.ExecutorService;
-
import com.google.inject.Inject;
import com.google.inject.name.Named;
import com.ning.billing.ErrorCode;
import com.ning.billing.account.api.Account;
+import com.ning.billing.account.api.AccountApiException;
import com.ning.billing.account.api.AccountUserApi;
+import com.ning.billing.account.api.DefaultMutableAccountData;
+import com.ning.billing.account.api.MutableAccountData;
import com.ning.billing.payment.api.DefaultPaymentMethod;
import com.ning.billing.payment.api.PaymentApiException;
import com.ning.billing.payment.api.PaymentMethod;
@@ -67,7 +69,8 @@ public class PaymentMethodProcessor extends ProcessorBase {
public String initializeAccountPlugin(String pluginName, Account account) throws PaymentApiException {
PaymentPluginApi pluginApi = null;
try {
- pluginApi = getPaymentProviderPlugin(account.getExternalKey());
+ // STEPH do we want to really have a default or fail?? probably fail
+ pluginApi = pluginRegistry.getPlugin(pluginName);
return pluginApi.createPaymentProviderAccount(account);
} catch (PaymentPluginApiException e) {
throw new PaymentApiException(ErrorCode.PAYMENT_PLUGIN_ACCOUNT_INIT,
@@ -83,20 +86,26 @@ public class PaymentMethodProcessor extends ProcessorBase {
PaymentMethod pm = null;
PaymentPluginApi pluginApi = null;
try {
- pluginApi = getPaymentProviderPlugin(account.getExternalKey());
+ pluginApi = pluginRegistry.getPlugin(pluginName);
pm = new DefaultPaymentMethod(account.getId(), pluginName, paymentMethodProps);
String externalId = pluginApi.addPaymentMethod(account.getExternalKey(), paymentMethodProps, setDefault);
PaymentMethodModelDao pmModel = new PaymentMethodModelDao(pm.getId(), pm.getAccountId(), pm.getPluginName(), pm.isActive(), externalId);
paymentDao.insertPaymentMethod(pmModel, context);
- // STEPH setDefault
+ if (setDefault) {
+ MutableAccountData updateAccountData = new DefaultMutableAccountData(account);
+ updateAccountData.setPaymentMethodId(pm.getId());
+ accountUserApi.updateAccount(account.getId(), updateAccountData, context);
+ }
} catch (PaymentPluginApiException e) {
// STEPH all errors should also take a pluginName
throw new PaymentApiException(ErrorCode.PAYMENT_ADD_PAYMENT_METHOD, account.getId(), e.getErrorMessage());
+ } catch (AccountApiException e) {
+ throw new PaymentApiException(e);
}
return pm.getId();
}
-
+
public List<PaymentMethod> refreshPaymentMethods(String pluginName,
Account account, final CallContext context)
@@ -105,13 +114,12 @@ public class PaymentMethodProcessor extends ProcessorBase {
List<PaymentMethod> result = new LinkedList<PaymentMethod>();
PaymentPluginApi pluginApi = null;
try {
- pluginApi = getPaymentProviderPlugin(account.getExternalKey());
-
+ pluginApi = pluginRegistry.getPlugin(pluginName);
List<PaymentMethodPlugin> pluginPms = pluginApi.getPaymentMethodDetails(account.getExternalKey());
for (PaymentMethodPlugin cur : pluginPms) {
PaymentMethod input = new DefaultPaymentMethod(account.getId(), pluginName, cur);
PaymentMethodModelDao pmModel = new PaymentMethodModelDao(input.getId(), input.getAccountId(), input.getPluginName(), input.isActive(), input.getPluginDetail().getExternalPaymentMethodId());
- // STEPH we should insert iwithin one batch
+ // STEPH we should insert within one batch
paymentDao.insertPaymentMethod(pmModel, context);
result.add(input);
}
@@ -151,14 +159,14 @@ public class PaymentMethodProcessor extends ProcessorBase {
PaymentPluginApi pluginApi = null;
try {
- List<PaymentMethodPlugin> pluginDetails = null;
-
- if (withPluginDetail) {
- pluginApi = getPaymentProviderPlugin(accountKey);
- pluginDetails = pluginApi.getPaymentMethodDetails(accountKey);
- }
-
+ List<PaymentMethodPlugin> pluginDetails = null;
for (PaymentMethodModelDao cur : paymentMethodModels) {
+
+ if (withPluginDetail) {
+ pluginApi = pluginRegistry.getPlugin(cur.getPluginName());
+ pluginDetails = pluginApi.getPaymentMethodDetails(accountKey);
+ }
+
PaymentMethod pm = new DefaultPaymentMethod(cur, getPaymentMethodDetail(pluginDetails, cur.getExternalId()));
result.add(pm);
}
@@ -182,11 +190,8 @@ public class PaymentMethodProcessor extends ProcessorBase {
return null;
}
-
-
-
- public void updatePaymentMethod(Account account, UUID paymentMethodId,
- PaymentMethodPlugin paymentMethodProps)
+ public void updatePaymentMethod(final Account account, final UUID paymentMethodId,
+ final PaymentMethodPlugin paymentMethodProps)
throws PaymentApiException {
PaymentMethodModelDao paymentMethodModel = paymentDao.getPaymentMethod(paymentMethodId);
@@ -194,10 +199,8 @@ public class PaymentMethodProcessor extends ProcessorBase {
throw new PaymentApiException(ErrorCode.PAYMENT_NO_SUCH_PAYMENT_METHOD, account.getId(), paymentMethodId);
}
- PaymentPluginApi pluginApi = null;
try {
- pluginApi = getPaymentProviderPlugin(account.getExternalKey());
-
+ PaymentPluginApi pluginApi = getPluginApi(paymentMethodId, account.getId());
pluginApi.updatePaymentMethod(account.getExternalKey(), paymentMethodModel.getExternalId(), paymentMethodProps);
} catch (PaymentPluginApiException e) {
throw new PaymentApiException(ErrorCode.PAYMENT_UPD_PAYMENT_METHOD, account.getId(), e.getErrorMessage());
@@ -213,9 +216,12 @@ public class PaymentMethodProcessor extends ProcessorBase {
throw new PaymentApiException(ErrorCode.PAYMENT_NO_SUCH_PAYMENT_METHOD, account.getId(), paymentMethodId);
}
- PaymentPluginApi pluginApi = null;
try {
- pluginApi = getPaymentProviderPlugin(account.getExternalKey());
+ if (account.getPaymentMethodId().equals(paymentMethodId)) {
+ throw new PaymentApiException(ErrorCode.PAYMENT_DEL_DEFAULT_PAYMENT_METHOD, account.getId());
+ }
+
+ PaymentPluginApi pluginApi = getPluginApi(paymentMethodId, account.getId());
pluginApi.deletePaymentMethod(account.getExternalKey(), paymentMethodModel.getExternalId());
} catch (PaymentPluginApiException e) {
@@ -224,7 +230,7 @@ public class PaymentMethodProcessor extends ProcessorBase {
}
- public void setDefaultPaymentMethod(Account account, UUID paymentMethodId)
+ public void setDefaultPaymentMethod(Account account, UUID paymentMethodId, final CallContext context)
throws PaymentApiException {
PaymentMethodModelDao paymentMethodModel = paymentDao.getPaymentMethod(paymentMethodId);
@@ -232,15 +238,25 @@ public class PaymentMethodProcessor extends ProcessorBase {
throw new PaymentApiException(ErrorCode.PAYMENT_NO_SUCH_PAYMENT_METHOD, account.getId(), paymentMethodId);
}
- PaymentPluginApi pluginApi = null;
try {
- pluginApi = getPaymentProviderPlugin(account.getExternalKey());
-
+ PaymentPluginApi pluginApi = getPluginApi(paymentMethodId, account.getId());
pluginApi.setDefaultPaymentMethod(account.getExternalKey(), paymentMethodModel.getExternalId());
-
+ MutableAccountData updateAccountData = new DefaultMutableAccountData(account);
+ updateAccountData.setPaymentMethodId(paymentMethodId);
+ accountUserApi.updateAccount(account.getId(), updateAccountData, context);
} catch (PaymentPluginApiException e) {
throw new PaymentApiException(ErrorCode.PAYMENT_UPD_PAYMENT_METHOD, account.getId(), e.getErrorMessage());
+ } catch (AccountApiException e) {
+ throw new PaymentApiException(e);
}
}
+ private PaymentPluginApi getPluginApi(UUID paymentMethodId, UUID accountId)
+ throws PaymentApiException {
+ PaymentMethodModelDao paymentMethod = paymentDao.getPaymentMethod(paymentMethodId);
+ if (paymentMethod == null) {
+ throw new PaymentApiException(ErrorCode.PAYMENT_NO_SUCH_PAYMENT_METHOD, accountId, "");
+ }
+ return pluginRegistry.getPlugin(paymentMethod.getPluginName());
+ }
}
diff --git a/payment/src/main/java/com/ning/billing/payment/core/PaymentProcessor.java b/payment/src/main/java/com/ning/billing/payment/core/PaymentProcessor.java
index 88ab7ad..ca66795 100644
--- a/payment/src/main/java/com/ning/billing/payment/core/PaymentProcessor.java
+++ b/payment/src/main/java/com/ning/billing/payment/core/PaymentProcessor.java
@@ -166,7 +166,8 @@ public class PaymentProcessor extends ProcessorBase {
log.warn(String.format("Payment from Account %s, Invoice %s timedout", account.getId(), invoiceId));
// If we don't crash, plugin thread will complete (and set the correct status)
// If we crash before plugin thread completes, we may end up with a UNKNOWN Payment
- // We would like to return an error so the Bus can retry but we are limited bu Guava bug
+ // We would like to return an error so the Bus can retry but we are limited by Guava bug
+ // swallowing exception
return null;
}
}
diff --git a/payment/src/main/java/com/ning/billing/payment/core/ProcessorBase.java b/payment/src/main/java/com/ning/billing/payment/core/ProcessorBase.java
index bbcd3b7..781d4ee 100644
--- a/payment/src/main/java/com/ning/billing/payment/core/ProcessorBase.java
+++ b/payment/src/main/java/com/ning/billing/payment/core/ProcessorBase.java
@@ -63,28 +63,25 @@ public abstract class ProcessorBase {
}
- protected PaymentPluginApi getPaymentProviderPlugin(String accountKey) {
+ protected PaymentPluginApi getPaymentProviderPlugin(String accountKey)
+ throws AccountApiException, PaymentApiException {
String paymentProviderName = null;
if (accountKey != null) {
- Account account;
- try {
- account = accountUserApi.getAccountByKey(accountKey);
- return getPaymentProviderPlugin(account);
- } catch (AccountApiException e) {
- log.error("Error getting payment provider plugin.", e);
- }
+ Account account = accountUserApi.getAccountByKey(accountKey);
+ return getPaymentProviderPlugin(account);
}
return pluginRegistry.getPlugin(paymentProviderName);
}
- protected PaymentPluginApi getPaymentProviderPlugin(Account account) {
+ protected PaymentPluginApi getPaymentProviderPlugin(Account account) throws PaymentApiException {
String paymentProviderName = null;
-
if (account != null) {
- paymentProviderName = account.getPaymentProviderName();
+ UUID paymentMethodId = account.getPaymentMethodId();
+ if (paymentMethodId == null) {
+ throw new PaymentApiException(ErrorCode.PAYMENT_NO_DEFAULT_PAYMENT_METHOD, account.getId());
+ }
}
-
return pluginRegistry.getPlugin(paymentProviderName);
}
diff --git a/payment/src/main/java/com/ning/billing/payment/glue/PaymentModule.java b/payment/src/main/java/com/ning/billing/payment/glue/PaymentModule.java
index d17731f..01f7bbf 100644
--- a/payment/src/main/java/com/ning/billing/payment/glue/PaymentModule.java
+++ b/payment/src/main/java/com/ning/billing/payment/glue/PaymentModule.java
@@ -30,7 +30,6 @@ import com.ning.billing.payment.api.DefaultPaymentApi;
import com.ning.billing.payment.api.PaymentApi;
import com.ning.billing.payment.api.PaymentService;
import com.ning.billing.payment.bus.InvoiceHandler;
-import com.ning.billing.payment.core.AccountProcessor;
import com.ning.billing.payment.core.PaymentMethodProcessor;
import com.ning.billing.payment.core.PaymentProcessor;
import com.ning.billing.payment.core.RefundProcessor;
@@ -87,7 +86,6 @@ public class PaymentModule extends AbstractModule {
}
});
bind(ExecutorService.class).annotatedWith(Names.named(PLUGIN_EXECUTOR_NAMED)).toInstance(pluginExecutorService);
- bind(AccountProcessor.class).asEagerSingleton();
bind(PaymentProcessor.class).asEagerSingleton();
bind(RefundProcessor.class).asEagerSingleton();
bind(PaymentMethodProcessor.class).asEagerSingleton();
diff --git a/payment/src/main/java/com/ning/billing/payment/provider/NoOpPaymentProviderPlugin.java b/payment/src/main/java/com/ning/billing/payment/provider/NoOpPaymentProviderPlugin.java
index 63f11f6..551fa71 100644
--- a/payment/src/main/java/com/ning/billing/payment/provider/NoOpPaymentProviderPlugin.java
+++ b/payment/src/main/java/com/ning/billing/payment/provider/NoOpPaymentProviderPlugin.java
@@ -91,35 +91,6 @@ public class NoOpPaymentProviderPlugin implements PaymentPluginApi {
}
@Override
- public PaymentProviderAccount getPaymentProviderAccount(String accountKey)
- throws PaymentPluginApiException {
- return null;
- }
-
- @Override
- public void updatePaymentGateway(String accountKey)
- throws PaymentPluginApiException {
- }
-
-
- @Override
- public void deletePaymentMethod(String accountKey, String paymentMethodId)
- throws PaymentPluginApiException {
- }
-
- @Override
- public void updatePaymentProviderAccountExistingContact(Account account)
- throws PaymentPluginApiException {
-
- }
-
- @Override
- public void updatePaymentProviderAccountWithNewContact(Account account)
- throws PaymentPluginApiException {
-
- }
-
- @Override
public List<PaymentInfoPlugin> processRefund(Account account)
throws PaymentPluginApiException {
return null;
@@ -159,4 +130,11 @@ public class NoOpPaymentProviderPlugin implements PaymentPluginApi {
public void setDefaultPaymentMethod(String accountKey,
String externalPaymentId) throws PaymentPluginApiException {
}
+
+ @Override
+ public void deletePaymentMethod(String accountKey,
+ String externalPaymentMethodId) throws PaymentPluginApiException {
+ // TODO Auto-generated method stub
+
+ }
}
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 aecdc23..358a36c 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
@@ -25,12 +25,10 @@ import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.UUID;
-import org.apache.commons.lang.RandomStringUtils;
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.testng.Assert;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Guice;
@@ -39,6 +37,7 @@ import org.testng.annotations.Test;
import com.google.inject.Inject;
import com.ning.billing.ErrorCode;
import com.ning.billing.account.api.Account;
+import com.ning.billing.account.api.AccountUserApi;
import com.ning.billing.catalog.api.Currency;
import com.ning.billing.invoice.api.Invoice;
import com.ning.billing.invoice.api.InvoicePaymentApi;
@@ -50,7 +49,6 @@ import com.ning.billing.payment.MockRecurringInvoiceItem;
import com.ning.billing.payment.TestHelper;
import com.ning.billing.payment.api.Payment.PaymentAttempt;
import com.ning.billing.payment.glue.PaymentTestModuleWithMocks;
-import com.ning.billing.payment.plugin.api.PaymentProviderAccount;
import com.ning.billing.util.bus.Bus;
import com.ning.billing.util.bus.Bus.EventBusException;
import com.ning.billing.util.callcontext.CallContext;
@@ -71,6 +69,8 @@ public class TestPaymentApi {
@Inject
protected PaymentApi paymentApi;
@Inject
+ protected AccountUserApi accountApi;
+ @Inject
protected TestHelper testHelper;
@Inject
protected InvoicePaymentApi invoicePaymentApi;
@@ -137,7 +137,7 @@ public class TestPaymentApi {
((ZombieControl)invoicePaymentApi).addResult("notifyOfPaymentAttempt", BrainDeadProxyFactory.ZOMBIE_VOID);
final DateTime now = new DateTime(DateTimeZone.UTC);
- final Account account = testHelper.createTestCreditCardAccount();
+ final Account account = testHelper.createTestAccount("yoyo.yahoo.com");
final Invoice invoice = testHelper.createTestInvoice(account, now, Currency.USD);
final UUID subscriptionId = UUID.randomUUID();
diff --git a/payment/src/test/java/com/ning/billing/payment/glue/PaymentTestModuleWithMocks.java b/payment/src/test/java/com/ning/billing/payment/glue/PaymentTestModuleWithMocks.java
index 15d0cf6..7f39f8c 100644
--- a/payment/src/test/java/com/ning/billing/payment/glue/PaymentTestModuleWithMocks.java
+++ b/payment/src/test/java/com/ning/billing/payment/glue/PaymentTestModuleWithMocks.java
@@ -51,6 +51,8 @@ public class PaymentTestModuleWithMocks extends PaymentModule {
}
*/
+ public final static String PLUGIN_TEST_NAME = "my-mock";
+
private void loadSystemPropertiesFromClasspath(final String resource) {
final URL url = PaymentTestModuleWithMocks.class.getResource(resource);
assertNotNull(url);
@@ -63,7 +65,7 @@ public class PaymentTestModuleWithMocks extends PaymentModule {
}
public PaymentTestModuleWithMocks() {
- super(MapUtils.toProperties(ImmutableMap.of("killbill.payment.provider.default", "my-mock",
+ super(MapUtils.toProperties(ImmutableMap.of("killbill.payment.provider.default", PLUGIN_TEST_NAME,
"killbill.payment.engine.events.off", "false")));
}
@@ -74,7 +76,7 @@ public class PaymentTestModuleWithMocks extends PaymentModule {
@Override
protected void installPaymentProviderPlugins(PaymentConfig config) {
- install(new MockPaymentProviderPluginModule("my-mock"));
+ install(new MockPaymentProviderPluginModule(PLUGIN_TEST_NAME));
}
@Override
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 36863ff..eeea342 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
@@ -76,6 +76,13 @@ public class MockPaymentProviderPlugin implements PaymentPluginApi {
makeAllInvoicesFailWithError.set(failure);
}
+
+ @Override
+ public String getName() {
+ return null;
+ }
+
+
@Override
public PaymentInfoPlugin processPayment(String externalKey, UUID paymentId, BigDecimal amount) throws PaymentPluginApiException {
if (makeNextInvoiceFailWithException.getAndSet(false)) {
@@ -116,16 +123,6 @@ public class MockPaymentProviderPlugin implements PaymentPluginApi {
}
@Override
- public PaymentProviderAccount getPaymentProviderAccount(String accountKey) throws PaymentPluginApiException {
- if (accountKey != null) {
- return accounts.get(accountKey);
- }
- else {
- throw new PaymentPluginApiException("", "Did not get account for accountKey " + accountKey);
- }
- }
-
- @Override
public String addPaymentMethod(String accountKey, PaymentMethodPlugin paymentMethodProps, boolean setDefault) throws PaymentPluginApiException {
PaymentMethodPlugin realWithID = new DefaultPaymentMethodPlugin(paymentMethodProps);
List<PaymentMethodPlugin> pms = paymentMethods.get(accountKey);
@@ -227,40 +224,9 @@ public class MockPaymentProviderPlugin implements PaymentPluginApi {
String externalPaymentId) throws PaymentPluginApiException {
}
-
-
-
-
- @Override
- public String getName() {
- return null;
- }
-
-
@Override
public List<PaymentInfoPlugin> processRefund(Account account)
throws PaymentPluginApiException {
return null;
}
-
-
-
-
-
- @Override
- public void updatePaymentGateway(String accountKey)
- throws PaymentPluginApiException {
- }
-
-
- @Override
- public void updatePaymentProviderAccountExistingContact(Account account)
- throws PaymentPluginApiException {
- }
-
-
- @Override
- public void updatePaymentProviderAccountWithNewContact(Account account)
- throws PaymentPluginApiException {
- }
}
diff --git a/payment/src/test/java/com/ning/billing/payment/TestHelper.java b/payment/src/test/java/com/ning/billing/payment/TestHelper.java
index 33dc142..fb08dcb 100644
--- a/payment/src/test/java/com/ning/billing/payment/TestHelper.java
+++ b/payment/src/test/java/com/ning/billing/payment/TestHelper.java
@@ -31,6 +31,11 @@ import com.ning.billing.invoice.api.InvoiceItem;
import com.ning.billing.invoice.api.InvoicePaymentApi;
import com.ning.billing.mock.BrainDeadProxyFactory;
import com.ning.billing.mock.BrainDeadProxyFactory.ZombieControl;
+import com.ning.billing.payment.api.DefaultPaymentMethodPlugin;
+import com.ning.billing.payment.api.PaymentApi;
+import com.ning.billing.payment.api.PaymentMethod;
+import com.ning.billing.payment.api.PaymentMethodPlugin;
+import com.ning.billing.payment.glue.PaymentTestModuleWithMocks;
import com.ning.billing.util.bus.Bus;
import com.ning.billing.util.bus.Bus.EventBusException;
import com.ning.billing.util.callcontext.CallContext;
@@ -40,34 +45,24 @@ import com.ning.billing.util.callcontext.UserType;
import com.ning.billing.util.entity.EntityPersistenceException;
public class TestHelper {
+
protected final AccountUserApi accountUserApi;
protected final InvoicePaymentApi invoicePaymentApi;
+ protected PaymentApi paymentApi;
private final CallContext context;
private final Bus eventBus;
@Inject
- public TestHelper(CallContextFactory factory, AccountUserApi accountUserApi, InvoicePaymentApi invoicePaymentApi, Bus eventBus) {
+ public TestHelper(CallContextFactory factory, AccountUserApi accountUserApi, InvoicePaymentApi invoicePaymentApi, PaymentApi paymentApi, Bus eventBus) {
this.eventBus = eventBus;
this.accountUserApi = accountUserApi;
this.invoicePaymentApi = invoicePaymentApi;
+ this.paymentApi = paymentApi;
context = factory.createCallContext("Princess Buttercup", CallOrigin.TEST, UserType.TEST);
}
- // These helper methods can be overridden in a plugin implementation
- public Account createTestCreditCardAccount() throws EntityPersistenceException {
- final Account account = createTestAccount("ccuser" + RandomStringUtils.randomAlphanumeric(8) + "@example.com");
- ((ZombieControl)accountUserApi).addResult("getAccountById", account);
- ((ZombieControl)accountUserApi).addResult("getAccountByKey", account);
- return account;
- }
-
- public Account createTestPayPalAccount() throws EntityPersistenceException {
- final Account account = createTestAccount("ppuser@example.com");
- ((ZombieControl)accountUserApi).addResult("getAccountById", account);
- ((ZombieControl)accountUserApi).addResult("getAccountByKey", account);
- return account;
- }
-
+
+
public Invoice createTestInvoice(Account account,
DateTime targetDate,
Currency currency,
@@ -91,7 +86,6 @@ public class TestHelper {
}
}
- // invoiceTestApi.create(invoice, context);
((ZombieControl)invoicePaymentApi).addResult("getInvoice", invoice);
InvoiceCreationEvent event = new MockInvoiceCreationEvent(invoice.getId(), invoice.getAccountId(),
invoice.getBalance(), invoice.getCurrency(),
@@ -102,7 +96,7 @@ public class TestHelper {
return invoice;
}
- public Account createTestAccount(String email) {
+ public Account createTestAccount(String email) throws Exception {
final String name = "First" + RandomStringUtils.randomAlphanumeric(5) + " " + "Last" + RandomStringUtils.randomAlphanumeric(5);
final String externalKey = RandomStringUtils.randomAlphanumeric(10);
@@ -116,8 +110,19 @@ public class TestHelper {
zombie.addResult("getEmail", email);
zombie.addResult("getCurrency", Currency.USD);
zombie.addResult("getBillCycleDay", 1);
- zombie.addResult("getPaymentProviderName", "");
+
+ ((ZombieControl)accountUserApi).addResult("getAccountById", account);
+ ((ZombieControl)accountUserApi).addResult("getAccountByKey", account);
+ PaymentMethodPlugin pm = new DefaultPaymentMethodPlugin(UUID.randomUUID().toString(), true, null);
+ addTestPaymentMethod(account, pm);
return account;
}
+
+ private void addTestPaymentMethod(Account account, PaymentMethodPlugin paymentMethodInfo) throws Exception {
+ UUID paymentMethodId = paymentApi.addPaymentMethod(PaymentTestModuleWithMocks.PLUGIN_TEST_NAME, account, true, paymentMethodInfo, context);
+ ZombieControl zombie = (ZombieControl) account;
+ zombie.addResult("getPaymentMethodId", paymentMethodId);
+ }
+
}
diff --git a/payment/src/test/java/com/ning/billing/payment/TestRetryService.java b/payment/src/test/java/com/ning/billing/payment/TestRetryService.java
index a32330d..a2bc8f9 100644
--- a/payment/src/test/java/com/ning/billing/payment/TestRetryService.java
+++ b/payment/src/test/java/com/ning/billing/payment/TestRetryService.java
@@ -167,7 +167,7 @@ public class TestRetryService {
private void testSchedulesRetryInternal(int maxTries, final FailureType failureType) throws Exception {
- final Account account = testHelper.createTestCreditCardAccount();
+ final Account account = testHelper.createTestAccount("yiyi.gmail.com");
final Invoice invoice = testHelper.createTestInvoice(account, clock.getUTCNow(), Currency.USD);
final BigDecimal amount = new BigDecimal("10.00");
final UUID subscriptionId = UUID.randomUUID();
diff --git a/util/src/test/java/com/ning/billing/mock/MockAccountBuilder.java b/util/src/test/java/com/ning/billing/mock/MockAccountBuilder.java
index 2546757..842372c 100644
--- a/util/src/test/java/com/ning/billing/mock/MockAccountBuilder.java
+++ b/util/src/test/java/com/ning/billing/mock/MockAccountBuilder.java
@@ -33,7 +33,7 @@ public class MockAccountBuilder {
private int firstNameLength;
private Currency currency;
private int billingCycleDay;
- private String paymentProviderName;
+ private UUID paymentMethodId;
private DateTimeZone timeZone;
private String locale;
private String address1;
@@ -85,8 +85,8 @@ public class MockAccountBuilder {
return this;
}
- public MockAccountBuilder paymentProviderName(final String paymentProviderName) {
- this.paymentProviderName = paymentProviderName;
+ public MockAccountBuilder paymentMethodId(final UUID paymentMethodId) {
+ this.paymentMethodId = paymentMethodId;
return this;
}
@@ -189,9 +189,9 @@ public class MockAccountBuilder {
}
@Override
- public String getPaymentProviderName() {
+ public UUID getPaymentMethodId() {
- return paymentProviderName;
+ return paymentMethodId;
}
@Override