killbill-aplcache

Details

diff --git a/api/src/main/java/com/ning/billing/ErrorCode.java b/api/src/main/java/com/ning/billing/ErrorCode.java
index 10d4d2a..a832a41 100644
--- a/api/src/main/java/com/ning/billing/ErrorCode.java
+++ b/api/src/main/java/com/ning/billing/ErrorCode.java
@@ -191,7 +191,8 @@ public enum ErrorCode {
     INVOICE_PAYMENT_NOT_FOUND(4900, "No invoice payment could be found for id %s."),
     CHARGE_BACK_AMOUNT_TOO_HIGH(4901, "Tried to charge back %s of a %s payment."),
     CHARGE_BACK_AMOUNT_IS_NEGATIVE(4902, "Charge backs for negative amounts are not permitted"),
-    CHARGE_BACK_COULD_NOT_FIND_ACCOUNT_ID(4093, "Could not find invoice payment for id %s."),
+    CHARGE_BACK_COULD_NOT_FIND_ACCOUNT_ID(4093, "Could not find chargeback for id %s."),
+    CHARGE_BACK_DOES_NOT_EXIST(4093, "Could not find chargeback for id %s."),
     /*
      * 
      * Range 5000: Overdue system
diff --git a/api/src/main/java/com/ning/billing/invoice/api/InvoicePaymentApi.java b/api/src/main/java/com/ning/billing/invoice/api/InvoicePaymentApi.java
index debc1d6..ecc477b 100644
--- a/api/src/main/java/com/ning/billing/invoice/api/InvoicePaymentApi.java
+++ b/api/src/main/java/com/ning/billing/invoice/api/InvoicePaymentApi.java
@@ -55,4 +55,6 @@ public interface InvoicePaymentApi {
     public UUID getAccountIdFromInvoicePaymentId(UUID uuid) throws InvoiceApiException;
 
     public List<InvoicePayment> getChargebacksByPaymentAttemptId(UUID paymentAttemptId);
+
+    public InvoicePayment getChargebackById(UUID chargebackId) throws InvoiceApiException;
 }
diff --git a/invoice/src/main/java/com/ning/billing/invoice/api/invoice/DefaultInvoicePaymentApi.java b/invoice/src/main/java/com/ning/billing/invoice/api/invoice/DefaultInvoicePaymentApi.java
index 4fec185..2283a39 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/api/invoice/DefaultInvoicePaymentApi.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/api/invoice/DefaultInvoicePaymentApi.java
@@ -108,6 +108,11 @@ public class DefaultInvoicePaymentApi implements InvoicePaymentApi {
     }
 
     @Override
+    public InvoicePayment getChargebackById(UUID chargebackId) throws InvoiceApiException {
+        return dao.getChargebackById(chargebackId);
+    }
+
+    @Override
     public UUID getAccountIdFromInvoicePaymentId(UUID invoicePaymentId) throws InvoiceApiException {
         return dao.getAccountIdFromInvoicePaymentId(invoicePaymentId);
     }
diff --git a/invoice/src/main/java/com/ning/billing/invoice/dao/DefaultInvoiceDao.java b/invoice/src/main/java/com/ning/billing/invoice/dao/DefaultInvoiceDao.java
index b567533..e33eced 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/dao/DefaultInvoiceDao.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/dao/DefaultInvoiceDao.java
@@ -307,6 +307,16 @@ public class DefaultInvoiceDao implements InvoiceDao {
     }
 
     @Override
+    public InvoicePayment getChargebackById(UUID chargebackId) throws InvoiceApiException {
+        InvoicePayment chargeback = invoicePaymentSqlDao.getById(chargebackId.toString());
+        if (chargeback == null) {
+            throw new InvoiceApiException(ErrorCode.CHARGE_BACK_DOES_NOT_EXIST, chargebackId);
+        } else {
+            return chargeback;
+        }
+    }
+
+    @Override
     public void test() {
         invoiceSqlDao.test();
     }
diff --git a/invoice/src/main/java/com/ning/billing/invoice/dao/InvoiceDao.java b/invoice/src/main/java/com/ning/billing/invoice/dao/InvoiceDao.java
index 1c7fbc8..870e756 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/dao/InvoiceDao.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/dao/InvoiceDao.java
@@ -66,4 +66,6 @@ public interface InvoiceDao {
     List<InvoicePayment> getChargebacksByAccountId(final UUID accountId);
 
     List<InvoicePayment> getChargebacksByPaymentAttemptId(final UUID paymentAttemptId);
+
+    InvoicePayment getChargebackById(UUID chargebackId) throws InvoiceApiException;
 }
diff --git a/invoice/src/test/java/com/ning/billing/invoice/api/MockInvoicePaymentApi.java b/invoice/src/test/java/com/ning/billing/invoice/api/MockInvoicePaymentApi.java
index 274976d..1bde0c6 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/api/MockInvoicePaymentApi.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/api/MockInvoicePaymentApi.java
@@ -160,4 +160,9 @@ public class MockInvoicePaymentApi implements InvoicePaymentApi
     public List<InvoicePayment> getChargebacksByPaymentAttemptId(UUID paymentAttemptId) {
         throw new UnsupportedOperationException();
     }
+
+    @Override
+    public InvoicePayment getChargebackById(UUID chargebackId) {
+        throw new UnsupportedOperationException();
+    }
 }
diff --git a/invoice/src/test/java/com/ning/billing/invoice/dao/MockInvoiceDao.java b/invoice/src/test/java/com/ning/billing/invoice/dao/MockInvoiceDao.java
index 17a28ab..5eadd4e 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/dao/MockInvoiceDao.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/dao/MockInvoiceDao.java
@@ -236,4 +236,9 @@ public class MockInvoiceDao implements InvoiceDao {
     public List<InvoicePayment> getChargebacksByPaymentAttemptId(UUID paymentAttemptId) {
         throw new UnsupportedOperationException();
     }
+
+    @Override
+    public InvoicePayment getChargebackById(UUID chargebackId) throws InvoiceApiException {
+        throw new UnsupportedOperationException();
+    }
 }
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/ChargeBackResource.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/ChargeBackResource.java
index f9e2941..7090040 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/ChargeBackResource.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/ChargeBackResource.java
@@ -66,6 +66,22 @@ public class ChargebackResource implements JaxrsResource {
     }
 
     @GET
+    @Path("/chargebacks/{chargebackId:" + UUID_PATTERN + "}")
+    @Produces(APPLICATION_JSON)
+    public Response getChargeback(@PathParam("chargebackId") String chargebackId) {
+        try {
+            InvoicePayment chargeback = invoicePaymentApi.getChargebackById(UUID.fromString(chargebackId));
+            ChargebackJson chargebackJson = new ChargebackJson(chargeback);
+
+            return Response.status(Response.Status.OK).entity(chargebackJson).build();
+        } catch (InvoiceApiException e) {
+            final String error = String.format("Failed to locate chargeback for id %s", chargebackId);
+            log.info(error, e);
+            return Response.status(Response.Status.NO_CONTENT).build();
+        }
+    }
+
+    @GET
     @Path("/accounts/{accountId:" + UUID_PATTERN + "}/chargebacks")
     @Produces(APPLICATION_JSON)
     public Response getForAccount(@PathParam("accountId") String accountId) {
@@ -114,7 +130,7 @@ public class ChargebackResource implements JaxrsResource {
         try {
             invoicePaymentApi.processChargeback(UUID.fromString(json.getPaymentId()), json.getChargebackAmount(),
                     context.createContext(createdBy, reason, comment));
-            return uriBuilder.buildResponse(ChargebackResource.class, "createChargeback", json.getPaymentId());
+            return uriBuilder.buildResponse(ChargebackResource.class, "getChargeback", json.getPaymentId());
         } catch (InvoiceApiException e) {
             final String error = String.format("Failed to create chargeback %s", json);
             log.info(error, e);