killbill-memoizeit

jaxrs: implement search by invoice number This implements:

7/25/2013 3:43:50 PM

Details

diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/InvoiceResource.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/InvoiceResource.java
index 42162ba..1620cf8 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/InvoiceResource.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/InvoiceResource.java
@@ -157,6 +157,21 @@ public class InvoiceResource extends JaxRsResourceBase {
     }
 
     @GET
+    @Path("/{invoiceNumber:" + NUMBER_PATTERN + "}/")
+    @Produces(APPLICATION_JSON)
+    public Response getInvoiceByNumber(@PathParam("invoiceNumber") final Integer invoiceNumber,
+                                       @QueryParam(QUERY_INVOICE_WITH_ITEMS) @DefaultValue("false") final boolean withItems,
+                                       @javax.ws.rs.core.Context final HttpServletRequest request) throws InvoiceApiException {
+        final Invoice invoice = invoiceApi.getInvoiceByNumber(invoiceNumber, context.createContext(request));
+        if (invoice == null) {
+            throw new InvoiceApiException(ErrorCode.INVOICE_NOT_FOUND, invoiceNumber);
+        } else {
+            final InvoiceJsonSimple json = withItems ? new InvoiceJsonWithItems(invoice) : new InvoiceJsonSimple(invoice);
+            return Response.status(Status.OK).entity(json).build();
+        }
+    }
+
+    @GET
     @Path("/{invoiceId:" + UUID_PATTERN + "}/html")
     @Produces(TEXT_HTML)
     public Response getInvoiceAsHTML(@PathParam("invoiceId") final String invoiceId,
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/JaxrsResource.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/JaxrsResource.java
index 74b20ab..d72e7f7 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/JaxrsResource.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/JaxrsResource.java
@@ -39,6 +39,7 @@ public interface JaxrsResource {
      */
     public static String STRING_PATTERN = "[\\w-]+";
     public static String UUID_PATTERN = "\\w+-\\w+-\\w+-\\w+-\\w+";
+    public static String NUMBER_PATTERN = "[0-9]+";
 
     /*
      * Query parameters
diff --git a/server/src/test/java/com/ning/billing/jaxrs/KillbillClient.java b/server/src/test/java/com/ning/billing/jaxrs/KillbillClient.java
index 6195436..ece110f 100644
--- a/server/src/test/java/com/ning/billing/jaxrs/KillbillClient.java
+++ b/server/src/test/java/com/ning/billing/jaxrs/KillbillClient.java
@@ -394,6 +394,10 @@ public abstract class KillbillClient extends GuicyKillbillTestSuiteWithEmbeddedD
         return doGetInvoice(invoiceId, Boolean.FALSE, InvoiceJsonSimple.class);
     }
 
+    protected InvoiceJsonSimple getInvoice(final Integer invoiceNumber) throws IOException {
+        return getInvoice(invoiceNumber.toString());
+    }
+
     protected InvoiceJsonWithItems getInvoiceWithItems(final String invoiceId) throws IOException {
         return doGetInvoice(invoiceId, Boolean.TRUE, InvoiceJsonWithItems.class);
     }
diff --git a/server/src/test/java/com/ning/billing/jaxrs/TestInvoice.java b/server/src/test/java/com/ning/billing/jaxrs/TestInvoice.java
index 97d8dbc..69833e4 100644
--- a/server/src/test/java/com/ning/billing/jaxrs/TestInvoice.java
+++ b/server/src/test/java/com/ning/billing/jaxrs/TestInvoice.java
@@ -52,6 +52,10 @@ public class TestInvoice extends TestJaxrsBase {
         final InvoiceJsonSimple firstInvoiceJson = getInvoice(invoiceJsonSimple.getInvoiceId());
         assertEquals(firstInvoiceJson, invoiceJsonSimple);
 
+        // Check we can retrieve the invoice by number
+        final InvoiceJsonSimple firstInvoiceByNumberJson = getInvoice(invoiceJsonSimple.getInvoiceNumber());
+        assertEquals(firstInvoiceByNumberJson, invoiceJsonSimple);
+
         // Then create a dryRun Invoice
         final DateTime futureDate = clock.getUTCNow().plusMonths(1).plusDays(3);
         createDryRunInvoice(accountJson.getAccountId(), futureDate);