killbill-memoizeit
Changes
api/pom.xml 4(+4 -0)
Details
api/pom.xml 4(+4 -0)
diff --git a/api/pom.xml b/api/pom.xml
index 013feb9..f691349 100644
--- a/api/pom.xml
+++ b/api/pom.xml
@@ -50,6 +50,10 @@
<groupId>org.skife.config</groupId>
<artifactId>config-magic</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.codehaus.jackson</groupId>
+ <artifactId>jackson-core-asl</artifactId>
+ </dependency>
</dependencies>
<build>
diff --git a/api/src/main/java/com/ning/billing/payment/api/Either.java b/api/src/main/java/com/ning/billing/payment/api/Either.java
index 0ad6405..25ce8f8 100644
--- a/api/src/main/java/com/ning/billing/payment/api/Either.java
+++ b/api/src/main/java/com/ning/billing/payment/api/Either.java
@@ -16,6 +16,8 @@
package com.ning.billing.payment.api;
+import org.codehaus.jackson.annotate.JsonValue;
+
public abstract class Either<T, V> {
public static <T, V> Either<T, V> left(T value) {
return new Left<T, V>(value);
@@ -51,6 +53,7 @@ public abstract class Either<T, V> {
return true;
}
@Override
+ @JsonValue
public T getLeft() {
return value;
}
@@ -68,6 +71,7 @@ public abstract class Either<T, V> {
}
@Override
+ @JsonValue
public V getRight() {
return value;
}
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 e54ee98..fb07745 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
@@ -25,9 +25,21 @@ public interface PaymentApi {
Either<PaymentError, List<PaymentMethodInfo>> getPaymentMethods(String accountKey);
+ Either<PaymentError, Void> deletePaymentMethod(String accountKey, String paymentMethodId);
+
Either<PaymentError, Void> updatePaymentGateway(String accountKey);
+ Either<PaymentError, String> addPaypalPaymentMethod(@Nullable String accountKey, PaypalPaymentMethodInfo paypalPaymentMethod);
+
+ Either<PaymentError, PaymentMethodInfo> updatePaymentMethod(String accountKey, PaymentMethodInfo paymentMethodInfo);
+
+ List<Either<PaymentError, PaymentInfo>> createPayment(String accountKey, List<String> invoiceIds);
+
Either<PaymentError, PaymentProviderAccount> getPaymentProviderAccount(String accountKey);
- Either<PaymentError, String> addPaypalPaymentMethod(@Nullable String accountId, PaypalPaymentMethodInfo paypalPaymentMethod);
+ Either<PaymentError, PaymentProviderAccount> createPaymentProviderAccount(PaymentProviderAccount account);
+
+ Either<PaymentError, PaymentProviderAccount> updatePaymentProviderAccount(PaymentProviderAccount account);
+
+
}
diff --git a/api/src/main/java/com/ning/billing/payment/api/PaymentError.java b/api/src/main/java/com/ning/billing/payment/api/PaymentError.java
index 85b5ecd..45e8555 100644
--- a/api/src/main/java/com/ning/billing/payment/api/PaymentError.java
+++ b/api/src/main/java/com/ning/billing/payment/api/PaymentError.java
@@ -15,8 +15,12 @@
*/
package com.ning.billing.payment.api;
+import org.codehaus.jackson.annotate.JsonTypeInfo;
+import org.codehaus.jackson.annotate.JsonTypeInfo.Id;
+
import com.ning.billing.util.eventbus.EventBusNotification;
+@JsonTypeInfo(use = Id.NAME, property = "error")
public class PaymentError implements EventBusNotification {
private final String type;
private final String message;
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 d7faf43..5849c11 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
@@ -16,6 +16,7 @@
package com.ning.billing.payment.api;
+import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
@@ -24,6 +25,8 @@ import javax.annotation.Nullable;
import com.google.inject.Inject;
import com.ning.billing.account.api.Account;
import com.ning.billing.account.api.AccountUserApi;
+import com.ning.billing.invoice.api.Invoice;
+import com.ning.billing.invoice.api.InvoicePaymentApi;
import com.ning.billing.payment.RequestProcessor;
import com.ning.billing.payment.provider.PaymentProviderPlugin;
import com.ning.billing.payment.provider.PaymentProviderPluginRegistry;
@@ -31,11 +34,15 @@ import com.ning.billing.payment.provider.PaymentProviderPluginRegistry;
public class DefaultPaymentApi implements PaymentApi {
private final PaymentProviderPluginRegistry pluginRegistry;
private final AccountUserApi accountUserApi;
+ private final InvoicePaymentApi invoicePaymentApi;
@Inject
- public DefaultPaymentApi(PaymentProviderPluginRegistry pluginRegistry, AccountUserApi accountUserApi) {
+ public DefaultPaymentApi(PaymentProviderPluginRegistry pluginRegistry,
+ AccountUserApi accountUserApi,
+ InvoicePaymentApi invoicePaymentApi) {
this.pluginRegistry = pluginRegistry;
this.accountUserApi = accountUserApi;
+ this.invoicePaymentApi = invoicePaymentApi;
}
@Override
@@ -78,8 +85,47 @@ public class DefaultPaymentApi implements PaymentApi {
}
@Override
- public Either<PaymentError, String> addPaypalPaymentMethod(@Nullable String accountId, PaypalPaymentMethodInfo paypalPaymentMethod) {
- final PaymentProviderPlugin plugin = getPaymentProviderPlugin(accountId);
- return plugin.addPaypalPaymentMethod(accountId, paypalPaymentMethod);
+ public Either<PaymentError, String> addPaypalPaymentMethod(@Nullable String accountKey, PaypalPaymentMethodInfo paypalPaymentMethod) {
+ final PaymentProviderPlugin plugin = getPaymentProviderPlugin(accountKey);
+ return plugin.addPaypalPaymentMethod(accountKey, paypalPaymentMethod);
+ }
+
+ @Override
+ public Either<PaymentError, Void> deletePaymentMethod(String accountKey, String paymentMethodId) {
+ final PaymentProviderPlugin plugin = getPaymentProviderPlugin(accountKey);
+ return plugin.deletePaypalPaymentMethod(accountKey, paymentMethodId);
+ }
+
+ @Override
+ public Either<PaymentError, PaymentMethodInfo> updatePaymentMethod(String accountKey, PaymentMethodInfo paymentMethodInfo) {
+ final PaymentProviderPlugin plugin = getPaymentProviderPlugin(accountKey);
+ return plugin.updatePaypalPaymentMethod(accountKey, paymentMethodInfo);
+ }
+
+ @Override
+ public List<Either<PaymentError, PaymentInfo>> createPayment(String accountKey, List<String> invoiceIds) {
+ final PaymentProviderPlugin plugin = getPaymentProviderPlugin(accountKey);
+ final Account account = accountUserApi.getAccountByKey(accountKey);
+ List<Either<PaymentError, PaymentInfo>> processedPaymentsOrErrors = new ArrayList<Either<PaymentError, PaymentInfo>>(invoiceIds.size());
+
+ for (String invoiceId : invoiceIds) {
+ Invoice invoice = invoicePaymentApi.getInvoice(UUID.fromString(invoiceId));
+ Either<PaymentError, PaymentInfo> paymentOrError = plugin.processInvoice(account, invoice);
+ processedPaymentsOrErrors.add(paymentOrError);
+ }
+
+ return processedPaymentsOrErrors;
+ }
+
+ @Override
+ public Either<PaymentError, PaymentProviderAccount> createPaymentProviderAccount(PaymentProviderAccount account) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Either<PaymentError, PaymentProviderAccount> updatePaymentProviderAccount(PaymentProviderAccount account) {
+ // TODO Auto-generated method stub
+ return null;
}
}
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 a6ef30f..62557f1 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
@@ -20,9 +20,9 @@ import java.util.List;
import com.ning.billing.account.api.Account;
import com.ning.billing.invoice.api.Invoice;
-import com.ning.billing.payment.PaymentInfo;
import com.ning.billing.payment.api.Either;
import com.ning.billing.payment.api.PaymentError;
+import com.ning.billing.payment.api.PaymentInfo;
import com.ning.billing.payment.api.PaymentMethodInfo;
import com.ning.billing.payment.api.PaymentProviderAccount;
import com.ning.billing.payment.api.PaypalPaymentMethodInfo;
@@ -35,8 +35,10 @@ public interface PaymentProviderPlugin {
Either<PaymentError, PaymentInfo> getPaymentInfo(String paymentId);
Either<PaymentError, PaymentMethodInfo> getPaymentMethodInfo(String paymentMethodId);
Either<PaymentError, PaymentProviderAccount> getPaymentProviderAccount(String accountKey);
- Either<PaymentError, List<PaymentMethodInfo>> getPaymentMethods(String screenName);
+ Either<PaymentError, List<PaymentMethodInfo>> getPaymentMethods(String accountKey);
Either<PaymentError, Void> updatePaymentGateway(String accountKey);
+ Either<PaymentError, Void> deletePaypalPaymentMethod(String accountKey, String paymentMethodId);
+ Either<PaymentError, PaymentMethodInfo> updatePaypalPaymentMethod(String accountKey, PaymentMethodInfo paymentMethodInfo);
}
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 6353a1b..2033d59 100644
--- a/payment/src/main/java/com/ning/billing/payment/RequestProcessor.java
+++ b/payment/src/main/java/com/ning/billing/payment/RequestProcessor.java
@@ -16,6 +16,8 @@
package com.ning.billing.payment;
+import java.math.BigDecimal;
+
import com.google.common.eventbus.Subscribe;
import com.google.inject.Inject;
import com.ning.billing.account.api.Account;
@@ -25,6 +27,7 @@ import com.ning.billing.invoice.api.InvoiceCreationNotification;
import com.ning.billing.invoice.api.InvoicePaymentApi;
import com.ning.billing.payment.api.Either;
import com.ning.billing.payment.api.PaymentError;
+import com.ning.billing.payment.api.PaymentInfo;
import com.ning.billing.payment.provider.PaymentProviderPlugin;
import com.ning.billing.payment.provider.PaymentProviderPluginRegistry;
import com.ning.billing.util.eventbus.EventBus;
@@ -49,25 +52,33 @@ public class RequestProcessor {
}
@Subscribe
- public void receiveInvoice(InvoiceCreationNotification event) throws EventBusException {
- final Invoice invoice = invoiceApi.getInvoice(event.getInvoiceId());
- if (invoice == null) {
- // TODO: log a warning ?
- }
- else {
- final Account account = accountUserApi.getAccountById(event.getAccountId());
- if (account == null) {
- // TODO: log a warning ?
+ public void receiveInvoice(InvoiceCreationNotification event) {
+ try {
+ final Invoice invoice = invoiceApi.getInvoice(event.getInvoiceId());
+ if (invoice == null) {
+ // TODO: log a warning
+ }
+ else if (invoice.getAmountOutstanding().compareTo(BigDecimal.ZERO) == 0 ) {
+ // TODO: send a notification that invoice was ignored ?
}
else {
- final String paymentProviderName = account.getFieldValue(PAYMENT_PROVIDER_KEY);
- final PaymentProviderPlugin plugin = pluginRegistry.getPlugin(paymentProviderName);
+ final Account account = accountUserApi.getAccountById(event.getAccountId());
+ if (account == null) {
+ // TODO: log a warning
+ }
+ else {
+ final String paymentProviderName = account.getPaymentProviderName();
+ final PaymentProviderPlugin plugin = pluginRegistry.getPlugin(paymentProviderName);
- Either<PaymentError, PaymentInfo> result = plugin.processInvoice(account, invoice);
+ Either<PaymentError, PaymentInfo> result = plugin.processInvoice(account, invoice);
- eventBus.post(result.isLeft() ? result.getLeft() : result.getRight());
+ eventBus.post(result.isLeft() ? result.getLeft() : result.getRight());
+ }
}
}
+ catch (EventBusException ex) {
+ // TODO: log
+ }
}
@Subscribe
diff --git a/payment/src/test/java/com/ning/billing/payment/MockPaymentInfoReceiver.java b/payment/src/test/java/com/ning/billing/payment/MockPaymentInfoReceiver.java
index 789f616..cf2494d 100644
--- a/payment/src/test/java/com/ning/billing/payment/MockPaymentInfoReceiver.java
+++ b/payment/src/test/java/com/ning/billing/payment/MockPaymentInfoReceiver.java
@@ -22,6 +22,7 @@ import java.util.List;
import com.google.common.eventbus.Subscribe;
import com.ning.billing.payment.api.PaymentError;
+import com.ning.billing.payment.api.PaymentInfo;
public class MockPaymentInfoReceiver {
private final List<PaymentInfo> processedPayments = Collections.synchronizedList(new ArrayList<PaymentInfo>());
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 7046f2e..578fd15 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
@@ -23,9 +23,9 @@ import java.util.concurrent.ConcurrentHashMap;
import com.ning.billing.account.api.Account;
import com.ning.billing.invoice.api.Invoice;
-import com.ning.billing.payment.PaymentInfo;
import com.ning.billing.payment.api.Either;
import com.ning.billing.payment.api.PaymentError;
+import com.ning.billing.payment.api.PaymentInfo;
import com.ning.billing.payment.api.PaymentMethodInfo;
import com.ning.billing.payment.api.PaymentProviderAccount;
import com.ning.billing.payment.api.PaypalPaymentMethodInfo;
@@ -72,19 +72,31 @@ public class MockPaymentProviderPlugin implements PaymentProviderPlugin {
}
@Override
- public Either<PaymentError, PaypalPaymentMethodInfo> addPaypalPaymentMethod(Account account, PaypalPaymentMethodInfo paypalPaymentMethod) {
+ public Either<PaymentError, Void> updatePaymentGateway(String accountKey) {
// TODO
return Either.left(new PaymentError("unknown", "Not implemented"));
}
@Override
- public Either<PaymentError, Void> updatePaymentGateway(String accountKey) {
+ public Either<PaymentError, PaymentProviderAccount> getPaymentProviderAccount(String accountKey) {
// TODO
return Either.left(new PaymentError("unknown", "Not implemented"));
}
@Override
- public Either<PaymentError, PaymentProviderAccount> getPaymentProviderAccount(String accountKey) {
+ public Either<PaymentError, String> addPaypalPaymentMethod(String accountId, PaypalPaymentMethodInfo paypalPaymentMethod) {
+ // TODO
+ return Either.left(new PaymentError("unknown", "Not implemented"));
+ }
+
+ @Override
+ public Either<PaymentError, Void> deletePaypalPaymentMethod(String accountKey, String paymentMethodId) {
+ // TODO
+ return Either.left(new PaymentError("unknown", "Not implemented"));
+ }
+
+ @Override
+ public Either<PaymentError, PaymentMethodInfo> updatePaypalPaymentMethod(String accountKey, PaymentMethodInfo paymentMethodInfo) {
// TODO
return Either.left(new PaymentError("unknown", "Not implemented"));
}
diff --git a/payment/src/test/java/com/ning/billing/payment/TestPaymentProvider.java b/payment/src/test/java/com/ning/billing/payment/TestPaymentProvider.java
index a35a5ac..9afc1ae 100644
--- a/payment/src/test/java/com/ning/billing/payment/TestPaymentProvider.java
+++ b/payment/src/test/java/com/ning/billing/payment/TestPaymentProvider.java
@@ -44,6 +44,7 @@ import com.ning.billing.invoice.api.MockInvoicePaymentApi;
import com.ning.billing.invoice.model.DefaultInvoice;
import com.ning.billing.invoice.model.DefaultInvoiceItem;
import com.ning.billing.payment.api.PaymentError;
+import com.ning.billing.payment.api.PaymentInfo;
import com.ning.billing.payment.setup.PaymentTestModule;
import com.ning.billing.util.eventbus.EventBus;
import com.ning.billing.util.eventbus.EventBus.EventBusException;
@@ -55,9 +56,9 @@ public class TestPaymentProvider {
@Inject
private RequestProcessor invoiceProcessor;
@Inject
- private MockAccountUserApi accountUserApi;
+ protected MockAccountUserApi accountUserApi;
@Inject
- private MockInvoicePaymentApi invoiceApi;
+ protected MockInvoicePaymentApi invoiceApi;
private MockPaymentInfoReceiver paymentInfoReceiver;