killbill-memoizeit

Allow Invoice endpoint to use a LocalDate as an input-- in addition

9/24/2013 6:36:13 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 448d539..9c595e1 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
@@ -181,11 +181,7 @@ public class InvoiceResource extends JaxRsResourceBase {
                                         @HeaderParam(HDR_COMMENT) final String comment,
                                         @javax.ws.rs.core.Context final HttpServletRequest request) throws AccountApiException, InvoiceApiException {
         final CallContext callContext = context.createContext(createdBy, reason, comment, request);
-
-        final Account account = accountUserApi.getAccountById(UUID.fromString(accountId), callContext);
-
-        final DateTime inputDateTime = targetDateTime != null ? DATE_TIME_FORMATTER.parseDateTime(targetDateTime) : clock.getUTCNow();
-        final LocalDate inputDate = inputDateTime.toDateTime(account.getTimeZone()).toLocalDate();
+        final LocalDate inputDate = toLocalDate(UUID.fromString(accountId), targetDateTime, callContext);
 
         final Invoice generatedInvoice = invoiceApi.triggerInvoiceGeneration(UUID.fromString(accountId), inputDate, dryRun,
                                                                              callContext);
@@ -229,26 +225,17 @@ public class InvoiceResource extends JaxRsResourceBase {
                                       @javax.ws.rs.core.Context final HttpServletRequest request) throws AccountApiException, InvoiceApiException {
         final CallContext callContext = context.createContext(createdBy, reason, comment, request);
 
-        final Account account = accountUserApi.getAccountById(UUID.fromString(json.getAccountId()), callContext);
-
-        // Get the effective date of the adjustment, in the account timezone
-        final LocalDate requestedDate;
-        if (requestedDateTimeString == null) {
-            requestedDate = clock.getUTCToday();
-        } else {
-            final DateTime requestedDateTime = DATE_TIME_FORMATTER.parseDateTime(requestedDateTimeString);
-            requestedDate = requestedDateTime.toDateTime(account.getTimeZone()).toLocalDate();
-        }
-
+        final UUID accountId = UUID.fromString(json.getAccountId());
+        final LocalDate requestedDate = toLocalDate(accountId, requestedDateTimeString, callContext);
         final InvoiceItem adjustmentItem;
         if (json.getAmount() == null) {
-            adjustmentItem = invoiceApi.insertInvoiceItemAdjustment(account.getId(),
+            adjustmentItem = invoiceApi.insertInvoiceItemAdjustment(accountId,
                                                                     UUID.fromString(invoiceId),
                                                                     UUID.fromString(json.getInvoiceItemId()),
                                                                     requestedDate,
                                                                     callContext);
         } else {
-            adjustmentItem = invoiceApi.insertInvoiceItemAdjustment(account.getId(),
+            adjustmentItem = invoiceApi.insertInvoiceItemAdjustment(accountId,
                                                                     UUID.fromString(invoiceId),
                                                                     UUID.fromString(json.getInvoiceItemId()),
                                                                     requestedDate,
@@ -276,13 +263,7 @@ public class InvoiceResource extends JaxRsResourceBase {
         final Account account = accountUserApi.getAccountById(UUID.fromString(externalChargeJson.getAccountId()), callContext);
 
         // Get the effective date of the external charge, in the account timezone
-        final LocalDate requestedDate;
-        if (requestedDateTimeString == null) {
-            requestedDate = clock.getUTCToday();
-        } else {
-            final DateTime requestedDateTime = DATE_TIME_FORMATTER.parseDateTime(requestedDateTimeString);
-            requestedDate = requestedDateTime.toDateTime(account.getTimeZone()).toLocalDate();
-        }
+        final LocalDate requestedDate = toLocalDate(account, requestedDateTimeString, callContext);
 
         final Currency currency = Objects.firstNonNull(externalChargeJson.getCurrency(), account.getCurrency());
         final InvoiceItem externalCharge;
@@ -316,13 +297,7 @@ public class InvoiceResource extends JaxRsResourceBase {
         final Account account = accountUserApi.getAccountById(UUID.fromString(externalChargeJson.getAccountId()), callContext);
 
         // Get the effective date of the external charge, in the account timezone
-        final LocalDate requestedDate;
-        if (requestedDateTimeString == null) {
-            requestedDate = clock.getUTCToday();
-        } else {
-            final DateTime requestedDateTime = DATE_TIME_FORMATTER.parseDateTime(requestedDateTimeString);
-            requestedDate = requestedDateTime.toDateTime(account.getTimeZone()).toLocalDate();
-        }
+        final LocalDate requestedDate = toLocalDate(account, requestedDateTimeString, callContext);
 
         final UUID invoiceId = UUID.fromString(invoiceIdString);
         final Currency currency = Objects.firstNonNull(externalChargeJson.getCurrency(), account.getCurrency());
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/JaxRsResourceBase.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/JaxRsResourceBase.java
index e0ee06a..3915e39 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/JaxRsResourceBase.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/JaxRsResourceBase.java
@@ -172,24 +172,33 @@ public abstract class JaxRsResourceBase implements JaxrsResource {
 
     protected LocalDate toLocalDate(final UUID accountId, final String inputDate, final TenantContext context) {
 
-        if (inputDate != null) {
-            try {
-                final LocalDate localDate = LocalDate.parse(inputDate, LOCAL_DATE_FORMATTER);
-                return localDate;
-            } catch (IllegalArgumentException expectedAndIgnore) { /*Fall through... */ }
+        final LocalDate maybeResult  = extractLocalDate(inputDate);
+        if (maybeResult != null) {
+            return maybeResult;
         }
-        final DateTime inputDateTime = inputDate != null ? DATE_TIME_FORMATTER.parseDateTime(inputDate) : clock.getUTCNow();
-        return toLocalDate(accountId, inputDateTime, context);
-    }
-
-    private LocalDate toLocalDate(final UUID accountId, final DateTime inputDate, final TenantContext context) {
         Account account = null;
         try {
             account = accountId != null ? accountUserApi.getAccountById(accountId, context) : null;
         } catch (AccountApiException e) {
             log.info("Failed to retrieve account for id " + accountId);
         }
+        final DateTime inputDateTime = inputDate != null ? DATE_TIME_FORMATTER.parseDateTime(inputDate) : clock.getUTCNow();
+        return toLocalDate(account, inputDateTime, context);
+    }
+
 
+
+    protected LocalDate toLocalDate(final Account account, final String inputDate, final TenantContext context) {
+
+        final LocalDate maybeResult  = extractLocalDate(inputDate);
+        if (maybeResult != null) {
+            return maybeResult;
+        }
+        final DateTime inputDateTime = inputDate != null ? DATE_TIME_FORMATTER.parseDateTime(inputDate) : clock.getUTCNow();
+        return toLocalDate(account, inputDateTime, context);
+    }
+
+    private LocalDate toLocalDate(final Account account, final DateTime inputDate, final TenantContext context) {
         if (account == null && inputDate == null) {
             // We have no inputDate and so accountTimeZone so we default to LocalDate as seen in UTC
             return new LocalDate(clock.getUTCNow(), DateTimeZone.UTC);
@@ -204,4 +213,15 @@ public abstract class JaxRsResourceBase implements JaxrsResource {
             return new LocalDate(inputDate, account.getTimeZone());
         }
     }
+
+    private LocalDate extractLocalDate(final String inputDate) {
+        if (inputDate != null) {
+            try {
+                final LocalDate localDate = LocalDate.parse(inputDate, LOCAL_DATE_FORMATTER);
+                return localDate;
+            } catch (IllegalArgumentException expectedAndIgnore) {
+            }
+        }
+        return null;
+    }
 }