killbill-memoizeit

jaxrs: Code review integration for 159ea86613628789452ce4c703b2f4bc0758ce11 Reorder

9/13/2015 4:54:03 PM

Details

diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/InvoiceResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/InvoiceResource.java
index a7dbf1f..180a800 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/InvoiceResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/InvoiceResource.java
@@ -24,6 +24,7 @@ import java.io.InputStream;
 import java.net.URI;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Comparator;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -114,6 +115,7 @@ import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Iterables;
 import com.google.common.collect.Lists;
+import com.google.common.collect.Ordering;
 import com.google.inject.Inject;
 import com.wordnik.swagger.annotations.Api;
 import com.wordnik.swagger.annotations.ApiOperation;
@@ -137,6 +139,14 @@ public class InvoiceResource extends JaxRsResourceBase {
     private final TenantUserApi tenantApi;
     private final Locale defaultLocale;
 
+    private static final Ordering<InvoicePaymentJson> INVOICE_PAYMENT_ORDERING = Ordering.from(new Comparator<InvoicePaymentJson>() {
+        @Override
+        public int compare(final InvoicePaymentJson o1, final InvoicePaymentJson o2) {
+            return o1.getTransactions().get(0).getEffectiveDate().compareTo(o2.getTransactions().get(0).getEffectiveDate());
+        }
+    });
+
+
     @Inject
     public InvoiceResource(final AccountUserApi accountUserApi,
                            final InvoiceUserApi invoiceApi,
@@ -530,6 +540,7 @@ public class InvoiceResource extends JaxRsResourceBase {
         }
     }
 
+
     @Timed
     @GET
     @Path("/{invoiceId:" + UUID_PATTERN + "}/" + PAYMENTS)
@@ -541,8 +552,8 @@ public class InvoiceResource extends JaxRsResourceBase {
                                 @QueryParam(QUERY_AUDIT) @DefaultValue("NONE") final AuditMode auditMode,
                                 @QueryParam(QUERY_WITH_PLUGIN_INFO) @DefaultValue("false") final Boolean withPluginInfo,
                                 @javax.ws.rs.core.Context final HttpServletRequest request) throws PaymentApiException, InvoiceApiException {
-        final TenantContext tenantContext = context.createContext(request);
 
+        final TenantContext tenantContext = context.createContext(request);
         final Invoice invoice = invoiceApi.getInvoice(UUID.fromString(invoiceId), tenantContext);
 
         // Extract unique set of paymentId for this invoice
@@ -552,19 +563,22 @@ public class InvoiceResource extends JaxRsResourceBase {
                 return input.getPaymentId();
             }
         }));
+        if (invoicePaymentIds.isEmpty()) {
+            return Response.status(Status.OK).entity(ImmutableList.<InvoicePaymentJson>of()).build();
+        }
 
         final List<Payment> payments = new ArrayList<Payment>();
         for (final UUID paymentId : invoicePaymentIds) {
             final Payment payment = paymentApi.getPayment(paymentId, withPluginInfo, ImmutableList.<PluginProperty>of(), tenantContext);
             payments.add(payment);
         }
-        final List<InvoicePaymentJson> result = new ArrayList<InvoicePaymentJson>(payments.size());
-        if (payments.isEmpty()) {
-            return Response.status(Status.OK).entity(result).build();
-        }
-        for (final Payment cur : payments) {
-            result.add(new InvoicePaymentJson(cur, invoice.getId(), null));
-        }
+
+        final Iterable<InvoicePaymentJson> result = INVOICE_PAYMENT_ORDERING.sortedCopy(Iterables.transform(payments, new Function<Payment, InvoicePaymentJson>() {
+            @Override
+            public InvoicePaymentJson apply(final Payment input) {
+                return new InvoicePaymentJson(input, invoice.getId(), null);
+            }
+        }));
         return Response.status(Status.OK).entity(result).build();
     }