killbill-uncached
Changes
beatrix/src/test/java/com/ning/billing/beatrix/integration/overdue/TestOverdueIntegration.java 2(+1 -1)
osgi-bundles/bundles/jruby/src/main/java/com/ning/billing/osgi/bundles/jruby/JRubyPaymentPlugin.java 10(+10 -0)
osgi-bundles/tests/beatrix/src/test/java/com/ning/billing/osgi/bundles/test/TestPaymentPluginApi.java 16(+16 -0)
osgi-bundles/tests/payment/src/test/java/com/ning/billing/osgi/bundles/test/TestPaymentPluginApi.java 31(+31 -0)
payment/src/main/java/com/ning/billing/payment/provider/DefaultNoOpPaymentInfoPlugin.java 10(+10 -0)
payment/src/main/java/com/ning/billing/payment/provider/DefaultNoOpPaymentMethodPlugin.java 60(+60 -0)
Details
diff --git a/api/src/main/java/com/ning/billing/ErrorCode.java b/api/src/main/java/com/ning/billing/ErrorCode.java
index 50e4fde..aff1bd1 100644
--- a/api/src/main/java/com/ning/billing/ErrorCode.java
+++ b/api/src/main/java/com/ning/billing/ErrorCode.java
@@ -271,6 +271,7 @@ public enum ErrorCode {
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"),
+ PAYMENT_PLUGIN_GET_PAYMENT_INFO(7102, "Failed to retrieve payment plugin info for payment %s: %s"),
/*
*
diff --git a/api/src/main/java/com/ning/billing/payment/api/Payment.java b/api/src/main/java/com/ning/billing/payment/api/Payment.java
index a1edee9..2c31f46 100644
--- a/api/src/main/java/com/ning/billing/payment/api/Payment.java
+++ b/api/src/main/java/com/ning/billing/payment/api/Payment.java
@@ -22,6 +22,7 @@ import java.util.UUID;
import org.joda.time.DateTime;
import com.ning.billing.catalog.api.Currency;
+import com.ning.billing.payment.plugin.api.PaymentInfoPlugin;
import com.ning.billing.util.entity.Entity;
public interface Payment extends Entity {
@@ -50,6 +51,8 @@ public interface Payment extends Entity {
public String getExtSecondPaymentIdRef();
+ public PaymentInfoPlugin getPaymentInfoPlugin();
+
public interface PaymentAttempt extends Entity {
public UUID getId();
@@ -62,4 +65,6 @@ public interface Payment extends Entity {
public PaymentStatus getPaymentStatus();
}
+
+
}
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 23778b8..b1413ae 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
@@ -28,14 +28,28 @@ import com.ning.billing.util.callcontext.TenantContext;
public interface PaymentApi {
+ /**
+ * @param account the account
+ * @param invoiceId the invoice id
+ * @param amount the amount to pay
+ * @param context the call context
+ * @return the payment
+ * @throws PaymentApiException
+ */
public Payment createPayment(Account account, UUID invoiceId, BigDecimal amount, CallContext context)
throws PaymentApiException;
+ /**
+ * @param account the account
+ * @param invoiceId the invoice id
+ * @param amount the amount to pay
+ * @param context the call context
+ * @return the payment
+ * @throws PaymentApiException
+ */
public Payment createExternalPayment(Account account, UUID invoiceId, BigDecimal amount, CallContext context)
throws PaymentApiException;
- public Refund getRefund(UUID refundId, TenantContext context)
- throws PaymentApiException;
/**
* Create a refund for a given payment. The associated invoice is not adjusted.
@@ -51,6 +65,15 @@ public interface PaymentApi {
throws PaymentApiException;
/**
+ * @param refundId the refund id
+ * @param withPluginInfo whether to fetch plugin info
+ * @param context the call context @return the refund
+ * @throws PaymentApiException
+ */
+ public Refund getRefund(UUID refundId, final boolean withPluginInfo, TenantContext context)
+ throws PaymentApiException;
+
+ /**
* Create a refund for a given payment. The associated invoice is adjusted.
*
* @param account account to refund
@@ -91,41 +114,117 @@ public interface PaymentApi {
public Refund createRefundWithItemsAdjustments(Account account, UUID paymentId, Map<UUID, BigDecimal> invoiceItemIdsWithAmounts, CallContext context)
throws PaymentApiException;
+ /**
+ * @param account the account
+ * @param context the call context
+ * @return the list of refund on this account
+ * @throws PaymentApiException
+ */
public List<Refund> getAccountRefunds(Account account, TenantContext context)
throws PaymentApiException;
+ /**
+ * @param paymentId the payment id
+ * @param context the call context
+ * @return the list of refund on this account
+ * @throws PaymentApiException
+ */
public List<Refund> getPaymentRefunds(UUID paymentId, TenantContext context)
throws PaymentApiException;
+
+ /**
+ * @param invoiceId the invoice id
+ * @param context the call context
+ * @return the list of payment on this invoice
+ * @throws PaymentApiException
+ */
public List<Payment> getInvoicePayments(UUID invoiceId, TenantContext context)
throws PaymentApiException;
+ /**
+ * @param accountId the account id
+ * @param context the call context
+ * @return the list of payment on this account
+ * @throws PaymentApiException
+ */
public List<Payment> getAccountPayments(UUID accountId, TenantContext context)
throws PaymentApiException;
- public Payment getPayment(UUID paymentId, TenantContext context)
+ /**
+ * @param paymentId the payment id
+ * @param withPluginInfo whether to fetch plugin info
+ * @param context the call context
+ * @return the payment
+ * @throws PaymentApiException
+ */
+ public Payment getPayment(UUID paymentId, final boolean withPluginInfo, TenantContext context)
throws PaymentApiException;
- /*
- * Payment method Apis
+ /**
+ * @return a list of all the payment plugins registered
*/
public Set<String> getAvailablePlugins();
+ /**
+ * @param pluginName the plugin name
+ * @param account the account
+ * @param setDefault whether this should be set as a default payment method
+ * @param paymentMethodInfo the details for the payment method
+ * @param context the call context
+ * @return the uuid of the payment method
+ * @throws PaymentApiException
+ */
public UUID addPaymentMethod(String pluginName, Account account, boolean setDefault, PaymentMethodPlugin paymentMethodInfo, CallContext context)
throws PaymentApiException;
+ /**
+ * @param account the account id
+ * @param withPluginInfo whether we want to retrieve the plugin info for that payment method
+ * @param context the call context
+ * @return the list of payment methods
+ * @throws PaymentApiException
+ */
public List<PaymentMethod> getPaymentMethods(Account account, final boolean withPluginInfo, TenantContext context)
throws PaymentApiException;
+ /**
+ * @param paymentMethodId the payment methid id
+ * @param withPluginInfo whether we want to retrieve the plugin info for that payment method
+ * @param context the call context
+ * @return the payment method
+ * @throws PaymentApiException
+ */
public PaymentMethod getPaymentMethodById(UUID paymentMethodId, final boolean withPluginInfo, TenantContext context)
throws PaymentApiException;
+ /**
+ * @param account the account
+ * @param paymentMethodId the id of the payment method
+ * @param deleteDefaultPaymentMethodWithAutoPayOff
+ * whether to allow deletion of default payment method and set account into AUTO_PAY_OFF
+ * @param context the call context
+ * @throws PaymentApiException
+ */
public void deletedPaymentMethod(Account account, UUID paymentMethodId, boolean deleteDefaultPaymentMethodWithAutoPayOff, CallContext context)
throws PaymentApiException;
+ /**
+ * @param account the account
+ * @param paymentMethodId the payment method id
+ * @param context the call context
+ * @throws PaymentApiException
+ */
public void setDefaultPaymentMethod(Account account, UUID paymentMethodId, CallContext context)
throws PaymentApiException;
+ /**
+ * @param pluginName the name of the plugin
+ * @param account the account
+ * @param context the call context
+ * @return the list of payment methods for that account
+ * @throws PaymentApiException
+ */
public List<PaymentMethod> refreshPaymentMethods(String pluginName, Account account, CallContext context)
throws PaymentApiException;
diff --git a/api/src/main/java/com/ning/billing/payment/api/PaymentMethodPlugin.java b/api/src/main/java/com/ning/billing/payment/api/PaymentMethodPlugin.java
index 0433003..1c3d2a1 100644
--- a/api/src/main/java/com/ning/billing/payment/api/PaymentMethodPlugin.java
+++ b/api/src/main/java/com/ning/billing/payment/api/PaymentMethodPlugin.java
@@ -21,14 +21,104 @@ import java.util.List;
public interface PaymentMethodPlugin {
+ /**
+ *
+ * @return the id from the plugin
+ */
public String getExternalPaymentMethodId();
+ /**
+ *
+ * @return whether plugin sees that PM as being the default
+ */
public boolean isDefaultPaymentMethod();
+ /**
+ *
+ * @return the list of key/value pair set by the plugin
+ */
public List<PaymentMethodKVInfo> getProperties();
+ /**
+ *
+ * @param key the key for which to get the value
+ * @return the value associated with the key
+ */
public String getValueString(String key);
+ /**
+ *
+ * @return the payment method type name if applicable
+ */
+ public String getType();
+
+ /**
+ *
+ * @return the credit card name if applicable
+ */
+ public String getCCName();
+
+ /**
+ *
+ * @return the credit card type if applicable
+ */
+ public String getCCType();
+
+ /**
+ *
+ * @return the credit card expiration month
+ */
+ public String getCCExprirationMonth();
+
+ /**
+ *
+ * @return the credit card expiration year
+ */
+ public String getCCExprirationYear();
+
+ /**
+ *
+ * @return the credit card last 4 numbers
+ */
+ public String getCCLast4();
+
+ /**
+ *
+ * @return the address line 1
+ */
+ public String getAddress1();
+
+ /**
+ *
+ * @return the address line 2
+ */
+ public String getAddress2();
+
+ /**
+ *
+ * @return the city
+ */
+ public String getCity();
+
+ /**
+ *
+ * @return the state
+ */
+ public String getState();
+
+ /**
+ *
+ * @return the zip
+ */
+ public String getZip();
+
+ /**
+ *
+ * @return the country
+ */
+ public String getCountry();
+
+
public class PaymentMethodKVInfo {
private final String key;
@@ -53,6 +143,8 @@ public interface PaymentMethodPlugin {
return isUpdatable;
}
+
+
@Override
public String toString() {
final StringBuilder sb = new StringBuilder();
diff --git a/api/src/main/java/com/ning/billing/payment/api/Refund.java b/api/src/main/java/com/ning/billing/payment/api/Refund.java
index 8c3e66b..da6d3a8 100644
--- a/api/src/main/java/com/ning/billing/payment/api/Refund.java
+++ b/api/src/main/java/com/ning/billing/payment/api/Refund.java
@@ -22,6 +22,7 @@ import java.util.UUID;
import org.joda.time.DateTime;
import com.ning.billing.catalog.api.Currency;
+import com.ning.billing.payment.plugin.api.RefundInfoPlugin;
import com.ning.billing.util.entity.Entity;
public interface Refund extends Entity {
@@ -37,4 +38,6 @@ public interface Refund extends Entity {
public Currency getCurrency();
public DateTime getEffectiveDate();
+
+ public RefundInfoPlugin getPluginDetail();
}
diff --git a/api/src/main/java/com/ning/billing/payment/plugin/api/PaymentInfoPlugin.java b/api/src/main/java/com/ning/billing/payment/plugin/api/PaymentInfoPlugin.java
index 50a2ac9..13965bc 100644
--- a/api/src/main/java/com/ning/billing/payment/plugin/api/PaymentInfoPlugin.java
+++ b/api/src/main/java/com/ning/billing/payment/plugin/api/PaymentInfoPlugin.java
@@ -57,4 +57,17 @@ public interface PaymentInfoPlugin {
* @return gateway error code, if any
*/
public String getGatewayErrorCode();
+
+ /**
+ *
+ * @return the first payment reference id
+ */
+ public String getFirstPaymentReferenceId();
+
+ /**
+ *
+ * @return the first payment reference id
+ */
+ public String getSecondPaymentReferenceId();
+
}
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 f2d0687..935c8ed 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
@@ -30,25 +30,25 @@ public interface PaymentPluginApi {
/**
* Charge a specific amount in the Gateway. Required.
*
- * @param kbAccountId killbill accountId
- * @param kbPaymentId killbill payment id (for reference)
- * @param kbPaymentMethodId killbill payment method id
- * @param amount amount to charge
- * @param currency currency
- * @param context call context
+ * @param kbAccountId killbill accountId
+ * @param kbPaymentId killbill payment id (for reference)
+ * @param kbPaymentMethodId killbill payment method id
+ * @param amount amount to charge
+ * @param currency currency
+ * @param context call context
* @return information about the payment in the gateway
* @throws PaymentPluginApiException
*/
public PaymentInfoPlugin processPayment(UUID kbAccountId, UUID kbPaymentId, UUID kbPaymentMethodId, BigDecimal amount, Currency currency, CallContext context)
throws PaymentPluginApiException;
+
/**
* Retrieve information about a given payment. Optional (not all gateways will support it).
*
- *
- * @param kbAccountId killbill accountId
- * @param kbPaymentId killbill payment id (for reference)
- * @param context call context
+ * @param kbAccountId killbill accountId
+ * @param kbPaymentId killbill payment id (for reference)
+ * @param context call context
* @return information about the payment in the gateway
* @throws PaymentPluginApiException
*/
@@ -58,21 +58,32 @@ public interface PaymentPluginApi {
/**
* Process a refund against a given payment. Required.
*
- *
- * @param kbAccountId killbill accountId
- * @param kbPaymentId killbill payment id (for reference)
- * @param refundAmount refund amount
- * @param currency currency
- * @param context call context
+ * @param kbAccountId killbill accountId
+ * @param kbPaymentId killbill payment id (for reference)
+ * @param refundAmount refund amount
+ * @param currency currency
+ * @param context call context
* @return information about the refund in the gateway
* @throws PaymentPluginApiException
*/
public RefundInfoPlugin processRefund(UUID kbAccountId, UUID kbPaymentId, BigDecimal refundAmount, Currency currency, CallContext context)
throws PaymentPluginApiException;
+
+ /**
+ * @param kbAccountId killbill account id
+ * @param kbPaymentId killbill payment id
+ * @param context call context
+ * @return information about the refunds in the gateway
+ * @throws PaymentPluginApiException
+ */
+ public List<RefundInfoPlugin> getRefundInfo(UUID kbAccountId, UUID kbPaymentId, CallContext context)
+ throws PaymentPluginApiException;
+
+
/**
* Add a payment method for a Killbill account in the gateway. Optional.
- *
+ * <p/>
* Note: the payment method doesn't exist yet in Killbill when receiving the call in
* the plugin (kbPaymentMethodId is a placeholder).
*
@@ -88,9 +99,9 @@ public interface PaymentPluginApi {
/**
* Delete a payment method in the gateway. Optional.
*
- * @param kbAccountId killbill accountId
- * @param kbPaymentMethodId killbill payment method id
- * @param context call context
+ * @param kbAccountId killbill accountId
+ * @param kbPaymentMethodId killbill payment method id
+ * @param context call context
* @throws PaymentPluginApiException
*/
public void deletePaymentMethod(UUID kbAccountId, UUID kbPaymentMethodId, CallContext context)
@@ -111,25 +122,24 @@ public interface PaymentPluginApi {
/**
* Set a payment method as default in the gateway. Optional.
*
- * @param kbAccountId killbill accountId
- * @param kbPaymentMethodId killbill payment method id
- * @param context call context
+ * @param kbAccountId killbill accountId
+ * @param kbPaymentMethodId killbill payment method id
+ * @param context call context
* @throws PaymentPluginApiException
*/
public void setDefaultPaymentMethod(UUID kbAccountId, UUID kbPaymentMethodId, CallContext context)
throws PaymentPluginApiException;
/**
- *
* This is used to see the view of paymentMethods kept by the plugin or the view of
* existing payment method on the gateway.
- *
+ * <p/>
* Sometimes payment methods have to be added directly to the gateway for PCI compliance issues
* and so Killbill needs to refresh its state.
*
- * @param kbAccountId killbill accountId
- * @param refreshFromGateway fetch the list of existing payment methods from gateway-- if supported
- * @param context call context
+ * @param kbAccountId killbill accountId
+ * @param refreshFromGateway fetch the list of existing payment methods from gateway-- if supported
+ * @param context call context
* @return
*/
public List<PaymentMethodInfoPlugin> getPaymentMethods(UUID kbAccountId, boolean refreshFromGateway, CallContext context)
@@ -138,8 +148,8 @@ public interface PaymentPluginApi {
/**
* This is used after Killbill decided to refresh its state from the gateway
*
- * @param kbAccountId killbill accountId
- * @param paymentMethods the list of payment methods
+ * @param kbAccountId killbill accountId
+ * @param paymentMethods the list of payment methods
*/
public void resetPaymentMethods(UUID kbAccountId, List<PaymentMethodInfoPlugin> paymentMethods)
throws PaymentPluginApiException;
diff --git a/api/src/main/java/com/ning/billing/payment/plugin/api/RefundInfoPlugin.java b/api/src/main/java/com/ning/billing/payment/plugin/api/RefundInfoPlugin.java
index c0c6662..4ac0695 100644
--- a/api/src/main/java/com/ning/billing/payment/plugin/api/RefundInfoPlugin.java
+++ b/api/src/main/java/com/ning/billing/payment/plugin/api/RefundInfoPlugin.java
@@ -57,4 +57,10 @@ public interface RefundInfoPlugin {
* @return gateway error code, if any
*/
public String getGatewayErrorCode();
+
+ /**
+ *
+ * @return the reference id
+ */
+ public String getReferenceId();
}
diff --git a/beatrix/src/main/java/com/ning/billing/beatrix/extbus/BeatrixListener.java b/beatrix/src/main/java/com/ning/billing/beatrix/extbus/BeatrixListener.java
index 4ffc2bb..07b4cf7 100644
--- a/beatrix/src/main/java/com/ning/billing/beatrix/extbus/BeatrixListener.java
+++ b/beatrix/src/main/java/com/ning/billing/beatrix/extbus/BeatrixListener.java
@@ -46,6 +46,9 @@ import com.ning.billing.util.events.OverdueChangeInternalEvent;
import com.ning.billing.util.events.PaymentErrorInternalEvent;
import com.ning.billing.util.events.PaymentInfoInternalEvent;
import com.ning.billing.util.events.SubscriptionInternalEvent;
+import com.ning.billing.util.events.UserTagCreationInternalEvent;
+import com.ning.billing.util.events.UserTagDefinitionCreationInternalEvent;
+import com.ning.billing.util.events.UserTagDefinitionDeletionInternalEvent;
import com.ning.billing.util.svcsapi.bus.InternalBus.EventBusException;
import com.google.common.eventbus.Subscribe;
@@ -153,14 +156,26 @@ public class BeatrixListener {
break;
case USER_TAG_CREATION:
+ UserTagCreationInternalEvent realUserTagEventCr = (UserTagCreationInternalEvent) event;
+ objectType = ObjectType.TAG;
+ objectId = realUserTagEventCr.getTagId();
+ eventBusType = ExtBusEventType.TAG_CREATION;
+ break;
+
case CONTROL_TAG_CREATION:
ControlTagCreationInternalEvent realTagEventCr = (ControlTagCreationInternalEvent) event;
objectType = ObjectType.TAG;
objectId = realTagEventCr.getTagId();
eventBusType = ExtBusEventType.TAG_CREATION;
- break;
+ break;
case USER_TAG_DELETION:
+ UserTagDefinitionDeletionInternalEvent realUserTagEventDel = (UserTagDefinitionDeletionInternalEvent) event;
+ objectType = ObjectType.TAG;
+ objectId = null; // TODO missing..
+ eventBusType = ExtBusEventType.TAG_DELETION;
+ break;
+
case CONTROL_TAG_DELETION:
ControlTagDeletionInternalEvent realTagEventDel = (ControlTagDeletionInternalEvent) event;
objectType = ObjectType.TAG;
diff --git a/beatrix/src/main/java/com/ning/billing/beatrix/extbus/dao/ExtBusSqlDao.java b/beatrix/src/main/java/com/ning/billing/beatrix/extbus/dao/ExtBusSqlDao.java
index 913b94a..6a40311 100644
--- a/beatrix/src/main/java/com/ning/billing/beatrix/extbus/dao/ExtBusSqlDao.java
+++ b/beatrix/src/main/java/com/ning/billing/beatrix/extbus/dao/ExtBusSqlDao.java
@@ -83,16 +83,24 @@ public interface ExtBusSqlDao extends Transactional<ExtBusSqlDao>, CloseMe {
@Override
public void bind(@SuppressWarnings("rawtypes") final SQLStatement stmt, final Bind bind, final ExtBusEventEntry evt) {
- stmt.bind("eventType", evt.getExtBusType().toString());
- stmt.bind("objectId", evt.getObjectId().toString());
- stmt.bind("objectType", evt.getObjectType().toString());
+ stmt.bind("eventType", extractWithNullValue(evt.getExtBusType().toString()));
+ stmt.bind("objectId", extractWithNullValue(evt.getObjectId().toString()));
+ stmt.bind("objectType", extractWithNullValue(evt.getObjectType().toString()));
stmt.bind("userToken", getUUIDString(evt.getUserToken()));
stmt.bind("createdDate", getDate(new DateTime()));
- stmt.bind("creatingOwner", evt.getCreatedOwner());
+ stmt.bind("creatingOwner", extractWithNullValue(evt.getCreatedOwner()));
stmt.bind("processingAvailableDate", getDate(evt.getNextAvailableDate()));
- stmt.bind("processingOwner", evt.getOwner());
+ stmt.bind("processingOwner", extractWithNullValue(evt.getOwner()));
stmt.bind("processingState", PersistentQueueEntryLifecycleState.AVAILABLE.toString());
}
+
+ private String extractWithNullValue(Object obj) {
+ if (obj == null) {
+ return null;
+ }
+ return obj.toString();
+ }
+
}
public static class ExtBusSqlMapper extends MapperBase implements ResultSetMapper<ExtBusEventEntry> {
diff --git a/beatrix/src/test/java/com/ning/billing/beatrix/integration/overdue/TestOverdueBase.java b/beatrix/src/test/java/com/ning/billing/beatrix/integration/overdue/TestOverdueBase.java
index 3594ec2..f035a12 100644
--- a/beatrix/src/test/java/com/ning/billing/beatrix/integration/overdue/TestOverdueBase.java
+++ b/beatrix/src/test/java/com/ning/billing/beatrix/integration/overdue/TestOverdueBase.java
@@ -13,11 +13,8 @@
* License for the specific language governing permissions and limitations
* under the License.
*/
-package com.ning.billing.beatrix.integration.overdue;
-import static com.jayway.awaitility.Awaitility.await;
-import static java.util.concurrent.TimeUnit.SECONDS;
-import static org.testng.Assert.assertNotNull;
+package com.ning.billing.beatrix.integration.overdue;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
@@ -35,8 +32,13 @@ import com.ning.billing.catalog.api.BillingPeriod;
import com.ning.billing.entitlement.api.user.SubscriptionBundle;
import com.ning.billing.overdue.config.OverdueConfig;
import com.ning.billing.payment.api.PaymentMethodPlugin;
+import com.ning.billing.payment.api.TestPaymentMethodPluginBase;
import com.ning.billing.util.config.catalog.XMLLoader;
+import static com.jayway.awaitility.Awaitility.await;
+import static java.util.concurrent.TimeUnit.SECONDS;
+import static org.testng.Assert.assertNotNull;
+
public abstract class TestOverdueBase extends TestIntegrationBase {
@@ -48,31 +50,11 @@ public abstract class TestOverdueBase extends TestIntegrationBase {
public abstract String getOverdueConfig();
- final PaymentMethodPlugin paymentMethodPlugin = new PaymentMethodPlugin() {
- @Override
- public boolean isDefaultPaymentMethod() {
- return false;
- }
-
- @Override
- public String getValueString(final String key) {
- return null;
- }
-
- @Override
- public List<PaymentMethodKVInfo> getProperties() {
- return null;
- }
-
- @Override
- public String getExternalPaymentMethodId() {
- return UUID.randomUUID().toString();
- }
- };
+ final PaymentMethodPlugin paymentMethodPlugin = new TestPaymentMethodPluginBase();
@Override
@BeforeMethod(groups = "slow")
- public void beforeMethod( ) throws Exception {
+ public void beforeMethod() throws Exception {
super.beforeMethod();
final String configXml = getOverdueConfig();
final InputStream is = new ByteArrayInputStream(configXml.getBytes());
@@ -110,6 +92,4 @@ public abstract class TestOverdueBase extends TestIntegrationBase {
Assert.assertEquals(blockingApi.getBlockingStateFor(bundle, internalCallContext).getStateName(), expected, "Got exception: " + e.toString());
}
}
-
-
}
diff --git a/beatrix/src/test/java/com/ning/billing/beatrix/integration/overdue/TestOverdueIntegration.java b/beatrix/src/test/java/com/ning/billing/beatrix/integration/overdue/TestOverdueIntegration.java
index 5ad8c97..94f8e77 100644
--- a/beatrix/src/test/java/com/ning/billing/beatrix/integration/overdue/TestOverdueIntegration.java
+++ b/beatrix/src/test/java/com/ning/billing/beatrix/integration/overdue/TestOverdueIntegration.java
@@ -366,7 +366,7 @@ public class TestOverdueIntegration extends TestOverdueBase {
checkODState(DefaultBlockingState.CLEAR_STATE_NAME);
// Now, refund the second (first non-zero dollar) invoice
- final Payment payment = paymentApi.getPayment(invoiceUserApi.getInvoicesByAccount(account.getId(), callContext).get(1).getPayments().get(0).getPaymentId(), callContext);
+ final Payment payment = paymentApi.getPayment(invoiceUserApi.getInvoicesByAccount(account.getId(), callContext).get(1).getPayments().get(0).getPaymentId(), false, callContext);
refundPaymentAndCheckForCompletion(account, payment, NextEvent.INVOICE_ADJUSTMENT);
// We should now be in OD1
checkODState("OD1");
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 8ca8e55..9c83c43 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
@@ -79,6 +79,7 @@ import com.ning.billing.payment.api.Payment;
import com.ning.billing.payment.api.PaymentApi;
import com.ning.billing.payment.api.PaymentApiException;
import com.ning.billing.payment.api.PaymentMethodPlugin;
+import com.ning.billing.payment.api.TestPaymentMethodPluginBase;
import com.ning.billing.payment.provider.MockPaymentProviderPlugin;
import com.ning.billing.util.api.TagUserApi;
import com.ning.billing.util.config.OSGIConfig;
@@ -331,32 +332,18 @@ public class TestIntegrationBase extends BeatrixTestSuiteWithEmbeddedDB implemen
return accountUserApi.getAccountById(account.getId(), callContext);
}
+ private class TestPaymentMethodPlugin extends TestPaymentMethodPluginBase {
+ @Override
+ public List<PaymentMethodKVInfo> getProperties() {
+ PaymentMethodKVInfo prop = new PaymentMethodKVInfo("whatever", "cool", Boolean.TRUE);
+ List<PaymentMethodKVInfo> res = new ArrayList<PaymentMethodKVInfo>();
+ res.add(prop);
+ return res;
+ }
+ }
protected PaymentMethodPlugin createPaymentMethodPlugin() {
- return new PaymentMethodPlugin() {
- @Override
- public boolean isDefaultPaymentMethod() {
- return false;
- }
-
- @Override
- public String getValueString(final String key) {
- return null;
- }
-
- @Override
- public List<PaymentMethodKVInfo> getProperties() {
- PaymentMethodKVInfo prop = new PaymentMethodKVInfo("whatever", "cool", Boolean.TRUE);
- List<PaymentMethodKVInfo> res = new ArrayList<PaymentMethodKVInfo>();
- res.add(prop);
- return res;
- }
-
- @Override
- public String getExternalPaymentMethodId() {
- return UUID.randomUUID().toString();
- }
- };
+ return new TestPaymentMethodPlugin();
}
protected AccountData getAccountData(final int billingDay) {
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/PaymentMethodJson.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/PaymentMethodJson.java
index 29dbb7b..1a7e1c9 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/PaymentMethodJson.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/PaymentMethodJson.java
@@ -121,6 +121,78 @@ public class PaymentMethodJson {
}
@Override
+ public String getType() {
+ // N/A
+ return null;
+ }
+
+ @Override
+ public String getCCName() {
+ // N/A
+ return null;
+ }
+
+ @Override
+ public String getCCType() {
+ // N/A
+ return null;
+ }
+
+ @Override
+ public String getCCExprirationMonth() {
+ // N/A
+ return null;
+ }
+
+ @Override
+ public String getCCExprirationYear() {
+ // N/A
+ return null;
+ }
+
+ @Override
+ public String getCCLast4() {
+ // N/A
+ return null;
+ }
+
+ @Override
+ public String getAddress1() {
+ // N/A
+ return null;
+ }
+
+ @Override
+ public String getAddress2() {
+ // N/A
+ return null;
+ }
+
+ @Override
+ public String getCity() {
+ // N/A
+ return null;
+ }
+
+ @Override
+ public String getState() {
+ // N/A
+ return null;
+ }
+
+ @Override
+ public String getZip() {
+ // N/A
+ return null;
+ }
+
+ @Override
+ public String getCountry() {
+ // N/A
+ return null;
+ }
+
+ @Override
public String getExternalPaymentMethodId() {
return pluginInfo.getExternalPaymentId();
}
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/PaymentResource.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/PaymentResource.java
index a694f3f..4d41e06 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/PaymentResource.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/PaymentResource.java
@@ -106,7 +106,7 @@ public class PaymentResource extends JaxRsResourceBase {
final TenantContext tenantContext = context.createContext(request);
final UUID paymentId = UUID.fromString(paymentIdString);
- final Payment payment = paymentApi.getPayment(paymentId, tenantContext);
+ final Payment payment = paymentApi.getPayment(paymentId, false, tenantContext);
final PaymentJsonSimple paymentJsonSimple;
if (withRefundsAndChargebacks) {
@@ -167,7 +167,7 @@ public class PaymentResource extends JaxRsResourceBase {
final CallContext callContext = context.createContext(createdBy, reason, comment, request);
final UUID paymentUuid = UUID.fromString(paymentId);
- final Payment payment = paymentApi.getPayment(paymentUuid, callContext);
+ final Payment payment = paymentApi.getPayment(paymentUuid, false, callContext);
final Account account = accountApi.getAccountById(payment.getAccountId(), callContext);
final Refund result;
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/RefundResource.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/RefundResource.java
index 1db623d..5a0bade 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/RefundResource.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/RefundResource.java
@@ -62,7 +62,7 @@ public class RefundResource extends JaxRsResourceBase {
@Produces(APPLICATION_JSON)
public Response getRefund(@PathParam("refundId") final String refundId,
@javax.ws.rs.core.Context final HttpServletRequest request) throws PaymentApiException {
- final Refund refund = paymentApi.getRefund(UUID.fromString(refundId), context.createContext(request));
+ final Refund refund = paymentApi.getRefund(UUID.fromString(refundId), false, context.createContext(request));
// TODO Return adjusted items and audits
return Response.status(Status.OK).entity(new RefundJson(refund, null, null)).build();
}
diff --git a/osgi-bundles/bundles/jruby/src/main/java/com/ning/billing/osgi/bundles/jruby/JRubyPaymentPlugin.java b/osgi-bundles/bundles/jruby/src/main/java/com/ning/billing/osgi/bundles/jruby/JRubyPaymentPlugin.java
index ddd411e..37e8f37 100644
--- a/osgi-bundles/bundles/jruby/src/main/java/com/ning/billing/osgi/bundles/jruby/JRubyPaymentPlugin.java
+++ b/osgi-bundles/bundles/jruby/src/main/java/com/ning/billing/osgi/bundles/jruby/JRubyPaymentPlugin.java
@@ -104,6 +104,16 @@ public class JRubyPaymentPlugin extends JRubyPlugin implements PaymentPluginApi
}
@Override
+ public List<RefundInfoPlugin> getRefundInfo(final UUID kbAccountId, final UUID kbPaymentId, final CallContext context) throws PaymentPluginApiException {
+ return callWithRuntimeAndChecking(new PluginCallback() {
+ @Override
+ public List<RefundInfoPlugin> doCall(final Ruby runtime) throws PaymentPluginApiException {
+ return ((PaymentPluginApi) pluginInstance).getRefundInfo(kbAccountId, kbPaymentId, context);
+ }
+ });
+ }
+
+ @Override
public void addPaymentMethod(final UUID kbAccountId, final UUID kbPaymentMethodId, final PaymentMethodPlugin paymentMethodProps, final boolean setDefault, final CallContext context) throws PaymentPluginApiException {
callWithRuntimeAndChecking(new PluginCallback() {
diff --git a/osgi-bundles/tests/beatrix/src/test/java/com/ning/billing/osgi/bundles/test/TestPaymentPluginApi.java b/osgi-bundles/tests/beatrix/src/test/java/com/ning/billing/osgi/bundles/test/TestPaymentPluginApi.java
index ee22e5a..7ca9201 100644
--- a/osgi-bundles/tests/beatrix/src/test/java/com/ning/billing/osgi/bundles/test/TestPaymentPluginApi.java
+++ b/osgi-bundles/tests/beatrix/src/test/java/com/ning/billing/osgi/bundles/test/TestPaymentPluginApi.java
@@ -17,6 +17,7 @@
package com.ning.billing.osgi.bundles.test;
import java.math.BigDecimal;
+import java.util.Collections;
import java.util.List;
import java.util.UUID;
@@ -71,6 +72,16 @@ public class TestPaymentPluginApi implements PaymentPluginApi {
public String getGatewayErrorCode() {
return null;
}
+
+ @Override
+ public String getFirstPaymentReferenceId() {
+ return null;
+ }
+
+ @Override
+ public String getSecondPaymentReferenceId() {
+ return null;
+ }
};
}
@@ -85,6 +96,11 @@ public class TestPaymentPluginApi implements PaymentPluginApi {
}
@Override
+ public List<RefundInfoPlugin> getRefundInfo(final UUID kbAccountId, final UUID kbPaymentId, final CallContext context) {
+ return Collections.<RefundInfoPlugin>emptyList();
+ }
+
+ @Override
public void addPaymentMethod(final UUID kbAccountId, final UUID kbPaymentMethodId, final PaymentMethodPlugin paymentMethodProps, final boolean setDefault, final CallContext context) throws PaymentPluginApiException {
}
diff --git a/osgi-bundles/tests/payment/src/test/java/com/ning/billing/osgi/bundles/test/TestPaymentPluginApi.java b/osgi-bundles/tests/payment/src/test/java/com/ning/billing/osgi/bundles/test/TestPaymentPluginApi.java
index 82acb4b..66959e9 100644
--- a/osgi-bundles/tests/payment/src/test/java/com/ning/billing/osgi/bundles/test/TestPaymentPluginApi.java
+++ b/osgi-bundles/tests/payment/src/test/java/com/ning/billing/osgi/bundles/test/TestPaymentPluginApi.java
@@ -17,6 +17,7 @@
package com.ning.billing.osgi.bundles.test;
import java.math.BigDecimal;
+import java.util.Collections;
import java.util.List;
import java.util.UUID;
@@ -71,6 +72,16 @@ public class TestPaymentPluginApi implements PaymentPluginApiWithTestControl {
public String getGatewayErrorCode() {
return null;
}
+
+ @Override
+ public String getFirstPaymentReferenceId() {
+ return null;
+ }
+
+ @Override
+ public String getSecondPaymentReferenceId() {
+ return null;
+ }
});
}
@@ -103,6 +114,16 @@ public class TestPaymentPluginApi implements PaymentPluginApiWithTestControl {
public String getGatewayErrorCode() {
return null;
}
+
+ @Override
+ public String getFirstPaymentReferenceId() {
+ return null;
+ }
+
+ @Override
+ public String getSecondPaymentReferenceId() {
+ return null;
+ }
});
}
@@ -135,10 +156,20 @@ public class TestPaymentPluginApi implements PaymentPluginApiWithTestControl {
public String getGatewayErrorCode() {
return null;
}
+
+ @Override
+ public String getReferenceId() {
+ return null;
+ }
});
}
@Override
+ public List<RefundInfoPlugin> getRefundInfo(final UUID kbAccountId, final UUID kbPaymentId, final CallContext context) {
+ return Collections.<RefundInfoPlugin>emptyList();
+ }
+
+ @Override
public void addPaymentMethod(final UUID kbAccountId, final UUID kbPaymentMethodId, final PaymentMethodPlugin paymentMethodProps, final boolean setDefault, final CallContext context) throws PaymentPluginApiException {
}
diff --git a/payment/src/main/java/com/ning/billing/payment/api/DefaultPayment.java b/payment/src/main/java/com/ning/billing/payment/api/DefaultPayment.java
index a9ed30d..a036ed0 100644
--- a/payment/src/main/java/com/ning/billing/payment/api/DefaultPayment.java
+++ b/payment/src/main/java/com/ning/billing/payment/api/DefaultPayment.java
@@ -31,6 +31,7 @@ import com.ning.billing.payment.dao.PaymentAttemptModelDao;
import com.ning.billing.payment.dao.PaymentModelDao;
import com.ning.billing.payment.dao.RefundModelDao;
import com.ning.billing.payment.dao.RefundModelDao.RefundStatus;
+import com.ning.billing.payment.plugin.api.PaymentInfoPlugin;
import com.ning.billing.util.entity.EntityBase;
import com.google.common.base.Function;
@@ -50,11 +51,14 @@ public class DefaultPayment extends EntityBase implements Payment {
private final String extFirstPaymentIdRef;
private final String extSecondPaymentIdRef;
private final List<PaymentAttempt> attempts;
+ private final PaymentInfoPlugin paymentPluginInfo;
private DefaultPayment(final UUID id, @Nullable final DateTime createdDate, @Nullable final DateTime updatedDate, final UUID accountId, final UUID invoiceId,
final UUID paymentMethodId, final BigDecimal amount, final BigDecimal paidAmount, final Currency currency,
final DateTime effectiveDate, final Integer paymentNumber,
- final PaymentStatus paymentStatus, final String paymentError, final String extFirstPaymentIdRef,
+ final PaymentStatus paymentStatus, final String paymentError,
+ final PaymentInfoPlugin paymentPluginInfo,
+ final String extFirstPaymentIdRef,
final String extSecondPaymentIdRef, final List<PaymentAttempt> attempts) {
super(id, createdDate, updatedDate);
this.accountId = accountId;
@@ -69,9 +73,10 @@ public class DefaultPayment extends EntityBase implements Payment {
this.extFirstPaymentIdRef = extFirstPaymentIdRef;
this.extSecondPaymentIdRef = extSecondPaymentIdRef;
this.attempts = attempts;
+ this.paymentPluginInfo = paymentPluginInfo;
}
- public DefaultPayment(final PaymentModelDao src, final List<PaymentAttemptModelDao> attempts, final List<RefundModelDao> refunds) {
+ public DefaultPayment(final PaymentModelDao src, final PaymentInfoPlugin paymentPluginInfo, final List<PaymentAttemptModelDao> attempts, final List<RefundModelDao> refunds) {
this(src.getId(),
src.getCreatedDate(),
src.getUpdatedDate(),
@@ -85,6 +90,7 @@ public class DefaultPayment extends EntityBase implements Payment {
src.getPaymentNumber(),
src.getPaymentStatus(),
null,
+ paymentPluginInfo,
src.getExtFirstPaymentRefId(),
src.getExtSecondPaymentRefId(),
toPaymentAttempts(attempts));
@@ -146,6 +152,11 @@ public class DefaultPayment extends EntityBase implements Payment {
}
@Override
+ public PaymentInfoPlugin getPaymentInfoPlugin() {
+ return paymentPluginInfo;
+ }
+
+ @Override
public List<PaymentAttempt> getAttempts() {
return attempts;
}
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 8777ae4..b996ecf 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
@@ -67,8 +67,8 @@ public class DefaultPaymentApi implements PaymentApi {
}
@Override
- public Payment getPayment(final UUID paymentId, final TenantContext context) throws PaymentApiException {
- final Payment payment = paymentProcessor.getPayment(paymentId, internalCallContextFactory.createInternalTenantContext(context));
+ public Payment getPayment(final UUID paymentId, final boolean withPluginInfo, final TenantContext context) throws PaymentApiException {
+ final Payment payment = paymentProcessor.getPayment(paymentId, withPluginInfo, internalCallContextFactory.createInternalTenantContext(context));
if (payment == null) {
throw new PaymentApiException(ErrorCode.PAYMENT_NO_SUCH_PAYMENT, paymentId);
}
@@ -87,8 +87,8 @@ public class DefaultPaymentApi implements PaymentApi {
}
@Override
- public Refund getRefund(final UUID refundId, final TenantContext context) throws PaymentApiException {
- return refundProcessor.getRefund(refundId, internalCallContextFactory.createInternalTenantContext(context));
+ public Refund getRefund(final UUID refundId, final boolean withPluginInfo, final TenantContext context) throws PaymentApiException {
+ return refundProcessor.getRefund(refundId, withPluginInfo, internalCallContextFactory.createInternalTenantContext(context));
}
@Override
diff --git a/payment/src/main/java/com/ning/billing/payment/api/DefaultRefund.java b/payment/src/main/java/com/ning/billing/payment/api/DefaultRefund.java
index 5cc7297..6d512ca 100644
--- a/payment/src/main/java/com/ning/billing/payment/api/DefaultRefund.java
+++ b/payment/src/main/java/com/ning/billing/payment/api/DefaultRefund.java
@@ -24,6 +24,7 @@ import javax.annotation.Nullable;
import org.joda.time.DateTime;
import com.ning.billing.catalog.api.Currency;
+import com.ning.billing.payment.plugin.api.RefundInfoPlugin;
import com.ning.billing.util.entity.EntityBase;
public class DefaultRefund extends EntityBase implements Refund {
@@ -71,6 +72,12 @@ public class DefaultRefund extends EntityBase implements Refund {
}
@Override
+ public RefundInfoPlugin getPluginDetail() {
+ // TODO not implemented
+ return null;
+ }
+
+ @Override
public String toString() {
final StringBuilder sb = new StringBuilder();
sb.append("DefaultRefund");
diff --git a/payment/src/main/java/com/ning/billing/payment/api/svcs/DefaultPaymentInternalApi.java b/payment/src/main/java/com/ning/billing/payment/api/svcs/DefaultPaymentInternalApi.java
index 673ea85..8368304 100644
--- a/payment/src/main/java/com/ning/billing/payment/api/svcs/DefaultPaymentInternalApi.java
+++ b/payment/src/main/java/com/ning/billing/payment/api/svcs/DefaultPaymentInternalApi.java
@@ -44,7 +44,7 @@ public class DefaultPaymentInternalApi implements PaymentInternalApi {
@Override
public Payment getPayment(final UUID paymentId, final InternalTenantContext context) throws PaymentApiException {
- final Payment payment = paymentProcessor.getPayment(paymentId, context);
+ final Payment payment = paymentProcessor.getPayment(paymentId, false, context);
if (payment == null) {
throw new PaymentApiException(ErrorCode.PAYMENT_NO_SUCH_PAYMENT, paymentId);
}
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 f33a55e..7e2663f 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
@@ -117,12 +117,21 @@ public class PaymentProcessor extends ProcessorBase {
this.voidPluginDispatcher = new PluginDispatcher<Void>(executor);
}
- public Payment getPayment(final UUID paymentId, final InternalTenantContext context) {
+ public Payment getPayment(final UUID paymentId, final boolean withPluginInfo, final InternalTenantContext context) throws PaymentApiException {
final PaymentModelDao model = paymentDao.getPayment(paymentId, context);
if (model == null) {
return null;
}
- return getPayments(Collections.singletonList(model), context).get(0);
+ final PaymentPluginApi plugin = withPluginInfo ? getPaymentProviderPlugin(model.getPaymentMethodId(), context) : null;
+ PaymentInfoPlugin pluginInfo = null;
+ if (plugin != null) {
+ try {
+ pluginInfo = plugin.getPaymentInfo(model.getAccountId(), paymentId, context.toTenantContext());
+ } catch (PaymentPluginApiException e) {
+ throw new PaymentApiException(ErrorCode.PAYMENT_PLUGIN_GET_PAYMENT_INFO, paymentId, e.toString());
+ }
+ }
+ return fromPaymentModelDao(model, pluginInfo, context);
}
@@ -141,14 +150,19 @@ public class PaymentProcessor extends ProcessorBase {
}
final List<Payment> result = new LinkedList<Payment>();
for (final PaymentModelDao cur : payments) {
- final List<PaymentAttemptModelDao> attempts = paymentDao.getAttemptsForPayment(cur.getId(), context);
- final List<RefundModelDao> refunds = paymentDao.getRefundsForPayment(cur.getId(), context);
- final Payment entry = new DefaultPayment(cur, attempts, refunds);
+ final Payment entry = fromPaymentModelDao(cur, null, context);
result.add(entry);
}
return result;
}
+ private Payment fromPaymentModelDao(final PaymentModelDao input, final PaymentInfoPlugin pluginInfo, final InternalTenantContext context) {
+ final List<PaymentAttemptModelDao> attempts = paymentDao.getAttemptsForPayment(input.getId(), context);
+ final List<RefundModelDao> refunds = paymentDao.getRefundsForPayment(input.getId(), context);
+ final Payment payment = new DefaultPayment(input, pluginInfo, attempts, refunds);
+ return payment;
+ }
+
public void process_AUTO_PAY_OFF_removal(final Account account, final InternalCallContext context) throws PaymentApiException {
try {
@@ -388,7 +402,7 @@ public class PaymentProcessor extends ProcessorBase {
final PaymentAttemptModelDao attempt = new PaymentAttemptModelDao(account.getId(), invoice.getId(), paymentInfo.getId(), paymentStatus, clock.getUTCNow(), requestedAmount);
paymentDao.insertPaymentWithAttempt(paymentInfo, attempt, context);
- return new DefaultPayment(paymentInfo, Collections.singletonList(attempt), Collections.<RefundModelDao>emptyList());
+ return fromPaymentModelDao(paymentInfo, null, context);
}
private Payment processNewPaymentWithAccountLocked(final UUID paymentMethodId, final PaymentPluginApi plugin, final Account account, final Invoice invoice,
@@ -416,15 +430,16 @@ public class PaymentProcessor extends ProcessorBase {
if (paymentConfig.isPaymentOff()) {
paymentDao.updateStatusForPaymentWithAttempt(paymentInput.getId(), PaymentStatus.PAYMENT_SYSTEM_OFF, null, null, attemptInput.getId(), context);
allAttempts = paymentDao.getAttemptsForPayment(paymentInput.getId(), context);
- return new DefaultPayment(paymentInput, allAttempts, Collections.<RefundModelDao>emptyList());
+ return new DefaultPayment(paymentInput, null, allAttempts, Collections.<RefundModelDao>emptyList());
}
PaymentModelDao payment = null;
BusInternalEvent event = null;
PaymentStatus paymentStatus;
+ final PaymentInfoPlugin paymentPluginInfo;
try {
- final PaymentInfoPlugin paymentPluginInfo = plugin.processPayment(account.getId(), paymentInput.getId(), paymentInput.getPaymentMethodId(), attemptInput.getRequestedAmount(), account.getCurrency(), context.toCallContext());
+ paymentPluginInfo = plugin.processPayment(account.getId(), paymentInput.getId(), paymentInput.getPaymentMethodId(), attemptInput.getRequestedAmount(), account.getCurrency(), context.toCallContext());
switch (paymentPluginInfo.getStatus()) {
case PROCESSED:
// Update Payment/PaymentAttempt status
@@ -491,7 +506,8 @@ public class PaymentProcessor extends ProcessorBase {
postPaymentEvent(event, account.getId(), context);
}
}
- return new DefaultPayment(payment, allAttempts, Collections.<RefundModelDao>emptyList());
+
+ return new DefaultPayment(payment, paymentPluginInfo, allAttempts, Collections.<RefundModelDao>emptyList());
}
private PaymentStatus scheduleRetryOnPluginFailure(final UUID paymentId, final InternalTenantContext context) {
diff --git a/payment/src/main/java/com/ning/billing/payment/core/RefundProcessor.java b/payment/src/main/java/com/ning/billing/payment/core/RefundProcessor.java
index 6778994..86068e9 100644
--- a/payment/src/main/java/com/ning/billing/payment/core/RefundProcessor.java
+++ b/payment/src/main/java/com/ning/billing/payment/core/RefundProcessor.java
@@ -183,7 +183,7 @@ public class RefundProcessor extends ProcessorBase {
throw new IllegalArgumentException("Unable to find invoice item for id " + itemId);
}
- public Refund getRefund(final UUID refundId, final InternalTenantContext context)
+ public Refund getRefund(final UUID refundId, final boolean withPluginInfo /* not yet implemented */ , final InternalTenantContext context)
throws PaymentApiException {
RefundModelDao result = paymentDao.getRefund(refundId, context);
if (result == null) {
diff --git a/payment/src/main/java/com/ning/billing/payment/provider/DefaultNoOpPaymentInfoPlugin.java b/payment/src/main/java/com/ning/billing/payment/provider/DefaultNoOpPaymentInfoPlugin.java
index bf10051..6c52b9d 100644
--- a/payment/src/main/java/com/ning/billing/payment/provider/DefaultNoOpPaymentInfoPlugin.java
+++ b/payment/src/main/java/com/ning/billing/payment/provider/DefaultNoOpPaymentInfoPlugin.java
@@ -70,6 +70,16 @@ public class DefaultNoOpPaymentInfoPlugin implements PaymentInfoPlugin {
}
@Override
+ public String getFirstPaymentReferenceId() {
+ return null;
+ }
+
+ @Override
+ public String getSecondPaymentReferenceId() {
+ return null;
+ }
+
+ @Override
public String toString() {
final StringBuilder sb = new StringBuilder();
sb.append("DefaultNoOpPaymentInfoPlugin");
diff --git a/payment/src/main/java/com/ning/billing/payment/provider/DefaultNoOpPaymentMethodPlugin.java b/payment/src/main/java/com/ning/billing/payment/provider/DefaultNoOpPaymentMethodPlugin.java
index a124373..9f135da 100644
--- a/payment/src/main/java/com/ning/billing/payment/provider/DefaultNoOpPaymentMethodPlugin.java
+++ b/payment/src/main/java/com/ning/billing/payment/provider/DefaultNoOpPaymentMethodPlugin.java
@@ -75,6 +75,66 @@ public class DefaultNoOpPaymentMethodPlugin implements PaymentMethodPlugin {
}
@Override
+ public String getType() {
+ return "noop";
+ }
+
+ @Override
+ public String getCCName() {
+ return null;
+ }
+
+ @Override
+ public String getCCType() {
+ return null;
+ }
+
+ @Override
+ public String getCCExprirationMonth() {
+ return null;
+ }
+
+ @Override
+ public String getCCExprirationYear() {
+ return null;
+ }
+
+ @Override
+ public String getCCLast4() {
+ return null;
+ }
+
+ @Override
+ public String getAddress1() {
+ return null;
+ }
+
+ @Override
+ public String getAddress2() {
+ return null;
+ }
+
+ @Override
+ public String getCity() {
+ return null;
+ }
+
+ @Override
+ public String getState() {
+ return null;
+ }
+
+ @Override
+ public String getZip() {
+ return null;
+ }
+
+ @Override
+ public String getCountry() {
+ return null;
+ }
+
+ @Override
public String toString() {
final StringBuilder sb = new StringBuilder();
sb.append("DefaultNoOpPaymentMethodPlugin");
diff --git a/payment/src/main/java/com/ning/billing/payment/provider/DefaultNoOpPaymentProviderPlugin.java b/payment/src/main/java/com/ning/billing/payment/provider/DefaultNoOpPaymentProviderPlugin.java
index bc046b0..f31b1fd 100644
--- a/payment/src/main/java/com/ning/billing/payment/provider/DefaultNoOpPaymentProviderPlugin.java
+++ b/payment/src/main/java/com/ning/billing/payment/provider/DefaultNoOpPaymentProviderPlugin.java
@@ -37,6 +37,7 @@ import com.ning.billing.util.callcontext.CallContext;
import com.ning.billing.util.callcontext.TenantContext;
import com.ning.billing.util.clock.Clock;
+import com.google.common.collect.ImmutableList;
import com.google.common.collect.LinkedListMultimap;
import com.google.common.collect.Multimap;
import com.google.inject.Inject;
@@ -178,4 +179,9 @@ public class DefaultNoOpPaymentProviderPlugin implements NoOpPaymentPluginApi {
return refundInfoPlugin;
}
+
+ @Override
+ public List<RefundInfoPlugin> getRefundInfo(final UUID kbAccountId, final UUID kbPaymentId, final CallContext context) {
+ return ImmutableList.<RefundInfoPlugin>copyOf(refunds.get(kbPaymentId.toString()));
+ }
}
diff --git a/payment/src/main/java/com/ning/billing/payment/provider/DefaultNoOpRefundInfoPlugin.java b/payment/src/main/java/com/ning/billing/payment/provider/DefaultNoOpRefundInfoPlugin.java
index d9b9805..0be96d2 100644
--- a/payment/src/main/java/com/ning/billing/payment/provider/DefaultNoOpRefundInfoPlugin.java
+++ b/payment/src/main/java/com/ning/billing/payment/provider/DefaultNoOpRefundInfoPlugin.java
@@ -70,6 +70,11 @@ public class DefaultNoOpRefundInfoPlugin implements RefundInfoPlugin {
}
@Override
+ public String getReferenceId() {
+ return null;
+ }
+
+ @Override
public String toString() {
final StringBuilder sb = new StringBuilder();
sb.append("DefaultNoOpRefundInfoPlugin");
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 33497c4..6aebbd2 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
@@ -17,6 +17,7 @@
package com.ning.billing.payment.provider;
import java.math.BigDecimal;
+import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.UUID;
@@ -24,7 +25,7 @@ import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicBoolean;
import com.ning.billing.catalog.api.Currency;
-import com.ning.billing.payment.api.DefaultPaymentMethodPlugin;
+import com.ning.billing.payment.api.TestPaymentMethodPlugin;
import com.ning.billing.payment.api.PaymentMethodPlugin;
import com.ning.billing.payment.plugin.api.NoOpPaymentPluginApi;
import com.ning.billing.payment.plugin.api.PaymentInfoPlugin;
@@ -115,7 +116,7 @@ public class MockPaymentProviderPlugin implements NoOpPaymentPluginApi {
@Override
public void addPaymentMethod(final UUID kbAccountId, final UUID kbPaymentMethodId, final PaymentMethodPlugin paymentMethodProps, final boolean setDefault, final CallContext context) throws PaymentPluginApiException {
// externalPaymentMethodId is set to a random value
- final PaymentMethodPlugin realWithID = new DefaultPaymentMethodPlugin(paymentMethodProps, UUID.randomUUID().toString());
+ final PaymentMethodPlugin realWithID = new TestPaymentMethodPlugin(paymentMethodProps, UUID.randomUUID().toString());
paymentMethods.put(kbPaymentMethodId.toString(), realWithID);
final PaymentMethodInfoPlugin realInfoWithID = new DefaultPaymentMethodInfoPlugin(kbAccountId, kbPaymentMethodId, setDefault, UUID.randomUUID().toString());
@@ -173,4 +174,9 @@ public class MockPaymentProviderPlugin implements NoOpPaymentPluginApi {
return refundInfoPlugin;
}
+
+ @Override
+ public List<RefundInfoPlugin> getRefundInfo(final UUID kbAccountId, final UUID kbPaymentId, final CallContext context) throws PaymentPluginApiException {
+ return Collections.<RefundInfoPlugin>emptyList();
+ }
}
diff --git a/util/src/test/java/com/ning/billing/payment/api/TestPaymentMethodPluginBase.java b/util/src/test/java/com/ning/billing/payment/api/TestPaymentMethodPluginBase.java
new file mode 100644
index 0000000..da02ef1
--- /dev/null
+++ b/util/src/test/java/com/ning/billing/payment/api/TestPaymentMethodPluginBase.java
@@ -0,0 +1,105 @@
+/*
+ * Copyright 2010-2013 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.payment.api;
+
+import java.util.List;
+import java.util.UUID;
+
+import com.google.common.collect.ImmutableList;
+
+public class TestPaymentMethodPluginBase implements PaymentMethodPlugin {
+
+ @Override
+ public String getExternalPaymentMethodId() {
+ return UUID.randomUUID().toString();
+ }
+
+ @Override
+ public boolean isDefaultPaymentMethod() {
+ return false;
+ }
+
+ @Override
+ public String getValueString(final String key) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public String getType() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public String getCCName() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public String getCCType() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public String getCCExprirationMonth() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public String getCCExprirationYear() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public String getCCLast4() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public String getAddress1() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public String getAddress2() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public String getCity() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public String getState() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public String getZip() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public String getCountry() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public List<PaymentMethodKVInfo> getProperties() {
+ return ImmutableList.<PaymentMethodKVInfo>of();
+ }
+}