killbill-aplcache

Details

diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PaymentResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PaymentResource.java
index 11c37c0..2c46e1b 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PaymentResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PaymentResource.java
@@ -71,6 +71,7 @@ import org.killbill.clock.Clock;
 import com.codahale.metrics.annotation.Timed;
 import com.google.common.base.Function;
 import com.google.common.base.Strings;
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 import com.wordnik.swagger.annotations.Api;
 import com.wordnik.swagger.annotations.ApiOperation;
@@ -227,7 +228,7 @@ public class PaymentResource extends JaxRsResourceBase {
 
         final Iterable<PluginProperty> pluginProperties = extractPluginProperties(pluginPropertiesString);
         final CallContext callContext = context.createContext(createdBy, reason, comment, request);
-        final UUID paymentId = UUID.fromString(paymentIdStr);
+        final UUID paymentId = getPaymentId(json, callContext);
         final Payment initialPayment = paymentApi.getPayment(paymentId, false, pluginProperties, callContext);
 
         final Account account = accountUserApi.getAccountById(initialPayment.getAccountId(), callContext);
@@ -238,6 +239,7 @@ public class PaymentResource extends JaxRsResourceBase {
         return uriBuilder.buildResponse(uriInfo, PaymentResource.class, "getPayment", payment.getId());
     }
 
+
     @Timed
     @POST
     @Path("/{paymentId:" + UUID_PATTERN + "}/" + REFUNDS)
@@ -259,7 +261,7 @@ public class PaymentResource extends JaxRsResourceBase {
 
         final Iterable<PluginProperty> pluginProperties = extractPluginProperties(pluginPropertiesString);
         final CallContext callContext = context.createContext(createdBy, reason, comment, request);
-        final UUID paymentId = UUID.fromString(paymentIdStr);
+        final UUID paymentId = getPaymentId(json, callContext);
         final Payment initialPayment = paymentApi.getPayment(paymentId, false, pluginProperties, callContext);
 
         final Account account = accountUserApi.getAccountById(initialPayment.getAccountId(), callContext);
@@ -339,7 +341,7 @@ public class PaymentResource extends JaxRsResourceBase {
                                 @javax.ws.rs.core.Context final HttpServletRequest request) throws PaymentApiException, AccountApiException {
         final Iterable<PluginProperty> pluginProperties = extractPluginProperties(pluginPropertiesString);
         final CallContext callContext = context.createContext(createdBy, reason, comment, request);
-        final UUID paymentId = UUID.fromString(paymentIdStr);
+        final UUID paymentId = getPaymentId(json, callContext);
         final Payment initialPayment = paymentApi.getPayment(paymentId, false, pluginProperties, callContext);
 
         final Account account = accountUserApi.getAccountById(initialPayment.getAccountId(), callContext);
@@ -370,7 +372,7 @@ public class PaymentResource extends JaxRsResourceBase {
 
         final Iterable<PluginProperty> pluginProperties = extractPluginProperties(pluginPropertiesString);
         final CallContext callContext = context.createContext(createdBy, reason, comment, request);
-        final UUID paymentId = UUID.fromString(paymentIdStr);
+        final UUID paymentId = getPaymentId(json, callContext);
         final Payment initialPayment = paymentApi.getPayment(paymentId, false, pluginProperties, callContext);
 
         final Account account = accountUserApi.getAccountById(initialPayment.getAccountId(), callContext);
@@ -425,4 +427,13 @@ public class PaymentResource extends JaxRsResourceBase {
         return paymentApi.addPaymentMethod(account, paymentMethodJson.getExternalKey(), paymentMethodJson.getPluginName(), paymentMethodJson.isDefault(),
                                            paymentData.getPluginDetail(), pluginProperties, callContext);
     }
+
+    private UUID getPaymentId(final PaymentTransactionJson json, final TenantContext tenantContext) throws PaymentApiException {
+        if (json.getPaymentId() != null) {
+            return UUID.fromString(json.getPaymentId());
+        }
+
+        verifyNonNullOrEmpty(json.getPaymentExternalKey(), "Payment ExternalKey should not be null");
+        return paymentApi.getPaymentByExternalKey(json.getPaymentExternalKey(), false, ImmutableList.<PluginProperty>of(), tenantContext).getId();
+    }
 }