killbill-memoizeit

Work in progress on payment apis

12/6/2011 1:01:47 AM

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 bc27211..6d03a61 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
@@ -16,8 +16,12 @@
 
 package com.ning.billing.payment.api;
 
+import java.util.List;
+
 import javax.annotation.Nullable;
 
 public interface PaymentApi {
-    Either<PaymentError, PaymentMethodInfo> getPaymentMethodInfo(@Nullable String accountId, String paymentMethodId);
+    Either<PaymentError, PaymentMethodInfo> getPaymentMethod(@Nullable String accountId, String paymentMethodId);
+
+    Either<PaymentError, List<PaymentMethodInfo>> getPaymentMethods(String accountId);
 }
diff --git a/api/src/main/java/com/ning/billing/payment/api/PaymentMethodInfo.java b/api/src/main/java/com/ning/billing/payment/api/PaymentMethodInfo.java
index 23b4993..49e8d7f 100644
--- a/api/src/main/java/com/ning/billing/payment/api/PaymentMethodInfo.java
+++ b/api/src/main/java/com/ning/billing/payment/api/PaymentMethodInfo.java
@@ -1,5 +1,7 @@
 package com.ning.billing.payment.api;
 
+import com.google.common.base.Objects;
+
 public class PaymentMethodInfo {
     private final String id;
     private final String accountId;
@@ -39,4 +41,36 @@ public class PaymentMethodInfo {
         return type;
     }
 
+    @Override
+    public int hashCode() {
+        return Objects.hashCode(id,
+                                accountId,
+                                defaultMethod,
+                                email,
+                                type);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (getClass() == obj.getClass()) {
+            PaymentMethodInfo other = (PaymentMethodInfo)obj;
+            if (obj == other) {
+                return true;
+            }
+            else {
+                return Objects.equal(id, other.id) &&
+                       Objects.equal(accountId, other.accountId) &&
+                       Objects.equal(defaultMethod, other.defaultMethod) &&
+                       Objects.equal(email, other.email) &&
+                       Objects.equal(type, other.type);
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public String toString() {
+        return "PaymentMethodInfo [id=" + id + ", accountId=" + accountId + ", defaultMethod=" + defaultMethod + ", email=" + email + ", type=" + type + "]";
+    }
+
 }
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 a1ac50e..d8f84c2 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
@@ -1,5 +1,6 @@
 package com.ning.billing.payment.api;
 
+import java.util.List;
 import java.util.UUID;
 
 import javax.annotation.Nullable;
@@ -22,11 +23,11 @@ public class DefaultPaymentApi implements PaymentApi {
     }
 
     @Override
-    public Either<PaymentError, PaymentMethodInfo> getPaymentMethodInfo(@Nullable String accountId, String paymentMethodId) {
+    public Either<PaymentError, PaymentMethodInfo> getPaymentMethod(@Nullable String accountId, String paymentMethodId) {
         final String paymentProviderName;
 
         if (accountId == null) {
-            // TODO: backwards compatible mode: get provider name from config
+            // TODO: get provider name from config to support null
             paymentProviderName = null;
         }
         else {
@@ -37,4 +38,16 @@ public class DefaultPaymentApi implements PaymentApi {
 
         return plugin.getPaymentMethodInfo(paymentMethodId);
     }
+
+    @Override
+    public Either<PaymentError, List<PaymentMethodInfo>> getPaymentMethods(String accountId) {
+        final String paymentProviderName;
+
+        final IAccount account = accountUserApi.getAccountFromId(UUID.fromString(accountId));
+        paymentProviderName = account.getFieldValue(RequestProcessor.PAYMENT_PROVIDER_KEY);
+
+        final PaymentProviderPlugin plugin = pluginRegistry.getPlugin(paymentProviderName);
+
+        return plugin.getPaymentMethods(accountId);
+    }
 }
diff --git a/payment/src/main/java/com/ning/billing/payment/CreditCardPaymentMethod.java b/payment/src/main/java/com/ning/billing/payment/CreditCardPaymentMethod.java
index 09f32c1..ed8f486 100644
--- a/payment/src/main/java/com/ning/billing/payment/CreditCardPaymentMethod.java
+++ b/payment/src/main/java/com/ning/billing/payment/CreditCardPaymentMethod.java
@@ -40,5 +40,4 @@ public class CreditCardPaymentMethod  extends PaymentMethodInfo {
         return maskNumber;
     }
 
-
 }
diff --git a/payment/src/main/java/com/ning/billing/payment/provider/PaymentProviderPlugin.java b/payment/src/main/java/com/ning/billing/payment/provider/PaymentProviderPlugin.java
index fa6b8a1..f686090 100644
--- a/payment/src/main/java/com/ning/billing/payment/provider/PaymentProviderPlugin.java
+++ b/payment/src/main/java/com/ning/billing/payment/provider/PaymentProviderPlugin.java
@@ -16,6 +16,8 @@
 
 package com.ning.billing.payment.provider;
 
+import java.util.List;
+
 import com.ning.billing.account.api.IAccount;
 import com.ning.billing.invoice.model.Invoice;
 import com.ning.billing.payment.PaymentInfo;
@@ -29,6 +31,6 @@ public interface PaymentProviderPlugin {
     Either<PaymentError, PaymentInfo> getPaymentInfo(String paymentId);
     Either<PaymentError, PaymentProviderAccount> createPaymentProviderAccount(IAccount account);
     Either<PaymentError, PaymentMethodInfo> getPaymentMethodInfo(String paymentMethodId);
-//    Either<PaymentError, List<PaymentMethodInfo>> getPaymentMethodInfo(IAccount account);
+    Either<PaymentError, List<PaymentMethodInfo>> getPaymentMethods(String accountId);
 
 }
diff --git a/payment/src/main/java/com/ning/billing/payment/RequestProcessor.java b/payment/src/main/java/com/ning/billing/payment/RequestProcessor.java
index 9359dd1..8b21412 100644
--- a/payment/src/main/java/com/ning/billing/payment/RequestProcessor.java
+++ b/payment/src/main/java/com/ning/billing/payment/RequestProcessor.java
@@ -55,12 +55,12 @@ public class RequestProcessor {
     }
 
     @Subscribe
-    public void receiveRequest(PaymentInfoRequest request) throws EventBusException {
-        final IAccount account = accountUserApi.getAccountFromId(request.getAccountId());
+    public void receivePaymentInfoRequest(PaymentInfoRequest paymentInfoRequest) throws EventBusException {
+        final IAccount account = accountUserApi.getAccountFromId(paymentInfoRequest.getAccountId());
         final String paymentProviderName = account.getFieldValue(PAYMENT_PROVIDER_KEY);
         final PaymentProviderPlugin plugin = pluginRegistry.getPlugin(paymentProviderName);
 
-        Either<PaymentError, PaymentInfo> result = plugin.getPaymentInfo(request.getPaymentId());
+        Either<PaymentError, PaymentInfo> result = plugin.getPaymentInfo(paymentInfoRequest.getPaymentId());
 
         eventBus.post(result.isLeft() ? result.getLeft() : result.getRight());
     }