killbill-memoizeit

Fix #11

9/13/2013 10:57:31 PM

Details

diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/AccountTimelineJson.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/AccountTimelineJson.java
index 0807c09..e05d73f 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/AccountTimelineJson.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/AccountTimelineJson.java
@@ -134,7 +134,7 @@ public class AccountTimelineJson {
             for (final InvoiceItem invoiceItem : invoice.getInvoiceItems()) {
                 if (InvoiceItemType.CREDIT_ADJ.equals(invoiceItem.getInvoiceItemType())) {
                     final List<AuditLog> auditLogs = invoiceItemsAuditLogs.get(invoiceItem.getId());
-                    credits.add(new CreditJson(invoiceItem, account.getTimeZone(), auditLogs));
+                    credits.add(new CreditJson(invoice, invoiceItem, auditLogs));
                 }
             }
         }
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/CreditJson.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/CreditJson.java
index ce95bb7..3910cd8 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/CreditJson.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/CreditJson.java
@@ -23,7 +23,9 @@ import javax.annotation.Nullable;
 
 import org.joda.time.DateTime;
 import org.joda.time.DateTimeZone;
+import org.joda.time.LocalDate;
 
+import com.ning.billing.invoice.api.Invoice;
 import com.ning.billing.invoice.api.InvoiceItem;
 import com.ning.billing.util.audit.AuditLog;
 
@@ -35,43 +37,35 @@ public class CreditJson extends JsonBase {
     private final BigDecimal creditAmount;
     private final String invoiceId;
     private final String invoiceNumber;
-    private final DateTime requestedDate;
-    private final DateTime effectiveDate;
-    private final String reason;
+    private final LocalDate effectiveDate;
     private final String accountId;
 
     @JsonCreator
     public CreditJson(@JsonProperty("creditAmount") final BigDecimal creditAmount,
                       @JsonProperty("invoiceId") final String invoiceId,
                       @JsonProperty("invoiceNumber") final String invoiceNumber,
-                      @JsonProperty("requestedDate") final DateTime requestedDate,
-                      @JsonProperty("effectiveDate") final DateTime effectiveDate,
-                      @JsonProperty("reason") final String reason,
+                      @JsonProperty("effectiveDate") final LocalDate effectiveDate,
                       @JsonProperty("accountId") final String accountId,
                       @JsonProperty("auditLogs") @Nullable final List<AuditLogJson> auditLogs) {
         super(auditLogs);
         this.creditAmount = creditAmount;
         this.invoiceId = invoiceId;
         this.invoiceNumber = invoiceNumber;
-        this.requestedDate = requestedDate;
         this.effectiveDate = effectiveDate;
-        this.reason = reason;
         this.accountId = accountId;
     }
 
-    public CreditJson(final InvoiceItem credit, final DateTimeZone accountTimeZone, final List<AuditLog> auditLogs) {
+    public CreditJson(final Invoice invoice, final InvoiceItem credit, final List<AuditLog> auditLogs) {
         super(toAuditLogJson(auditLogs));
+        this.accountId = toString(credit.getAccountId());
         this.creditAmount = credit.getAmount();
         this.invoiceId = toString(credit.getInvoiceId());
-        this.invoiceNumber = null;
-        this.requestedDate = null;
-        this.effectiveDate = credit.getStartDate().toDateTimeAtStartOfDay(accountTimeZone);
-        this.reason = null;
-        this.accountId = toString(credit.getAccountId());
+        this.invoiceNumber = invoice.getInvoiceNumber().toString();
+        this.effectiveDate = credit.getStartDate();
     }
 
-    public CreditJson(final InvoiceItem credit, final DateTimeZone timeZone) {
-        this(credit, timeZone, null);
+    public CreditJson(final Invoice invoice, final InvoiceItem credit) {
+        this(invoice, credit, null);
     }
 
     public BigDecimal getCreditAmount() {
@@ -86,18 +80,10 @@ public class CreditJson extends JsonBase {
         return invoiceNumber;
     }
 
-    public DateTime getRequestedDate() {
-        return requestedDate;
-    }
-
-    public DateTime getEffectiveDate() {
+    public LocalDate getEffectiveDate() {
         return effectiveDate;
     }
 
-    public String getReason() {
-        return reason;
-    }
-
     public String getAccountId() {
         return accountId;
     }
@@ -109,9 +95,7 @@ public class CreditJson extends JsonBase {
         sb.append("{creditAmount=").append(creditAmount);
         sb.append(", invoiceId=").append(invoiceId);
         sb.append(", invoiceNumber='").append(invoiceNumber).append('\'');
-        sb.append(", requestedDate=").append(requestedDate);
         sb.append(", effectiveDate=").append(effectiveDate);
-        sb.append(", reason='").append(reason).append('\'');
         sb.append(", accountId=").append(accountId);
         sb.append('}');
         return sb.toString();
@@ -132,21 +116,14 @@ public class CreditJson extends JsonBase {
               (creditAmount != null && that.creditAmount != null && creditAmount.compareTo(that.creditAmount) == 0))) {
             return false;
         }
-        if (!((effectiveDate == null && that.effectiveDate == null) ||
-              (effectiveDate != null && that.effectiveDate != null && effectiveDate.compareTo(that.effectiveDate) == 0))) {
-            return false;
-        }
         if (invoiceId != null ? !invoiceId.equals(that.invoiceId) : that.invoiceId != null) {
             return false;
         }
         if (invoiceNumber != null ? !invoiceNumber.equals(that.invoiceNumber) : that.invoiceNumber != null) {
             return false;
         }
-        if (reason != null ? !reason.equals(that.reason) : that.reason != null) {
-            return false;
-        }
-        if (!((requestedDate == null && that.requestedDate == null) ||
-              (requestedDate != null && that.requestedDate != null && requestedDate.compareTo(that.requestedDate) == 0))) {
+        if (!((effectiveDate == null && that.effectiveDate == null) ||
+              (effectiveDate != null && that.effectiveDate != null && effectiveDate.compareTo(that.effectiveDate) == 0))) {
             return false;
         }
 
@@ -158,9 +135,7 @@ public class CreditJson extends JsonBase {
         int result = creditAmount != null ? creditAmount.hashCode() : 0;
         result = 31 * result + (invoiceId != null ? invoiceId.hashCode() : 0);
         result = 31 * result + (invoiceNumber != null ? invoiceNumber.hashCode() : 0);
-        result = 31 * result + (requestedDate != null ? requestedDate.hashCode() : 0);
         result = 31 * result + (effectiveDate != null ? effectiveDate.hashCode() : 0);
-        result = 31 * result + (reason != null ? reason.hashCode() : 0);
         return result;
     }
 }
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/CreditResource.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/CreditResource.java
index b918f42..990b23e 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/CreditResource.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/CreditResource.java
@@ -35,6 +35,7 @@ import com.ning.billing.account.api.Account;
 import com.ning.billing.account.api.AccountApiException;
 import com.ning.billing.account.api.AccountUserApi;
 import com.ning.billing.clock.Clock;
+import com.ning.billing.invoice.api.Invoice;
 import com.ning.billing.invoice.api.InvoiceApiException;
 import com.ning.billing.invoice.api.InvoiceItem;
 import com.ning.billing.invoice.api.InvoiceUserApi;
@@ -80,8 +81,8 @@ public class CreditResource extends JaxRsResourceBase {
                               @javax.ws.rs.core.Context final HttpServletRequest request) throws InvoiceApiException, AccountApiException {
         final TenantContext tenantContext = context.createContext(request);
         final InvoiceItem credit = invoiceUserApi.getCreditById(UUID.fromString(creditId), tenantContext);
-        final Account account = accountUserApi.getAccountById(credit.getAccountId(), tenantContext);
-        final CreditJson creditJson = new CreditJson(credit, account.getTimeZone());
+        final Invoice invoice = invoiceUserApi.getInvoice(credit.getInvoiceId(), tenantContext);
+        final CreditJson creditJson = new CreditJson(invoice, credit);
         return Response.status(Response.Status.OK).entity(creditJson).build();
     }
 
@@ -96,7 +97,7 @@ public class CreditResource extends JaxRsResourceBase {
         final CallContext callContext = context.createContext(createdBy, reason, comment, request);
 
         final Account account = accountUserApi.getAccountById(UUID.fromString(json.getAccountId()), callContext);
-        final LocalDate effectiveDate = json.getEffectiveDate().toDateTime(account.getTimeZone()).toLocalDate();
+        final LocalDate effectiveDate = new LocalDate(clock.getUTCNow(), account.getTimeZone());
 
         final InvoiceItem credit;
         if (json.getInvoiceId() != null) {
diff --git a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestCreditCollectionJson.java b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestCreditCollectionJson.java
index 132480e..73903c2 100644
--- a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestCreditCollectionJson.java
+++ b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestCreditCollectionJson.java
@@ -21,6 +21,7 @@ import java.util.List;
 import java.util.UUID;
 
 import org.joda.time.DateTime;
+import org.joda.time.LocalDate;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
@@ -39,12 +40,10 @@ public class TestCreditCollectionJson extends JaxrsTestSuiteNoDB {
         final BigDecimal creditAmount = BigDecimal.TEN;
         final String invoiceId = UUID.randomUUID().toString();
         final String invoiceNumber = UUID.randomUUID().toString();
-        final DateTime requestedDate = clock.getUTCNow();
-        final DateTime effectiveDate = clock.getUTCNow();
-        final String reason = UUID.randomUUID().toString();
+        final LocalDate effectiveDate = clock.getUTCToday();
         final List<AuditLogJson> auditLogs = createAuditLogsJson(clock.getUTCNow());
-        final CreditJson creditJson = new CreditJson(creditAmount, invoiceId, invoiceNumber, requestedDate,
-                                                     effectiveDate, reason, accountId, auditLogs);
+        final CreditJson creditJson = new CreditJson(creditAmount, invoiceId, invoiceNumber,
+                                                     effectiveDate, accountId, auditLogs);
 
         final CreditCollectionJson creditCollectionJson = new CreditCollectionJson(accountId, ImmutableList.<CreditJson>of(creditJson));
         Assert.assertEquals(creditCollectionJson.getAccountId(), accountId);
diff --git a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestCreditJson.java b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestCreditJson.java
index 32c9992..c68d7bd 100644
--- a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestCreditJson.java
+++ b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestCreditJson.java
@@ -21,6 +21,7 @@ import java.util.List;
 import java.util.UUID;
 
 import org.joda.time.DateTime;
+import org.joda.time.LocalDate;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
@@ -35,19 +36,15 @@ public class TestCreditJson extends JaxrsTestSuiteNoDB {
         final BigDecimal creditAmount = BigDecimal.TEN;
         final String invoiceId = UUID.randomUUID().toString();
         final String invoiceNumber = UUID.randomUUID().toString();
-        final DateTime requestedDate = clock.getUTCNow();
-        final DateTime effectiveDate = clock.getUTCNow();
-        final String reason = UUID.randomUUID().toString();
+        final LocalDate effectiveDate = clock.getUTCToday();
         final String accountId = UUID.randomUUID().toString();
         final List<AuditLogJson> auditLogs = createAuditLogsJson(clock.getUTCNow());
-        final CreditJson creditJson = new CreditJson(creditAmount, invoiceId, invoiceNumber, requestedDate, effectiveDate,
-                                                     reason, accountId, auditLogs);
-        Assert.assertEquals(creditJson.getRequestedDate(), requestedDate);
+        final CreditJson creditJson = new CreditJson(creditAmount, invoiceId, invoiceNumber, effectiveDate,
+                                                     accountId, auditLogs);
         Assert.assertEquals(creditJson.getEffectiveDate(), effectiveDate);
         Assert.assertEquals(creditJson.getCreditAmount(), creditAmount);
         Assert.assertEquals(creditJson.getInvoiceId(), invoiceId);
         Assert.assertEquals(creditJson.getInvoiceNumber(), invoiceNumber);
-        Assert.assertEquals(creditJson.getReason(), reason);
         Assert.assertEquals(creditJson.getAccountId(), accountId);
 
         final String asJson = mapper.writeValueAsString(creditJson);
diff --git a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestInvoiceJsonWithBundleKeys.java b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestInvoiceJsonWithBundleKeys.java
index 9aa5e36..99606af 100644
--- a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestInvoiceJsonWithBundleKeys.java
+++ b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestInvoiceJsonWithBundleKeys.java
@@ -109,10 +109,8 @@ public class TestInvoiceJsonWithBundleKeys extends JaxrsTestSuiteNoDB {
         final BigDecimal creditAmount = BigDecimal.TEN;
         final String invoiceId = UUID.randomUUID().toString();
         final String invoiceNumber = UUID.randomUUID().toString();
-        final DateTime requestedDate = clock.getUTCNow();
-        final DateTime effectiveDate = clock.getUTCNow();
-        final String reason = UUID.randomUUID().toString();
+        final LocalDate effectiveDate = clock.getUTCToday();
         final String accountId = UUID.randomUUID().toString();
-        return new CreditJson(creditAmount, invoiceId, invoiceNumber, requestedDate, effectiveDate, reason, accountId, null);
+        return new CreditJson(creditAmount, invoiceId, invoiceNumber, effectiveDate,  accountId, null);
     }
 }
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 5596fd8..654157f 100644
--- a/server/src/test/java/com/ning/billing/jaxrs/KillbillClient.java
+++ b/server/src/test/java/com/ning/billing/jaxrs/KillbillClient.java
@@ -843,8 +843,8 @@ public abstract class KillbillClient extends GuicyKillbillTestSuiteWithEmbeddedD
     protected CreditJson createCreditForInvoice(final String accountId, final String invoiceId, final BigDecimal creditAmount,
                                                 final DateTime requestedDate, final DateTime effectiveDate) throws IOException {
         final CreditJson input = new CreditJson(creditAmount, invoiceId, UUID.randomUUID().toString(),
-                                                requestedDate, effectiveDate,
-                                                UUID.randomUUID().toString(), accountId,
+                                                effectiveDate.toLocalDate(),
+                                                accountId,
                                                 null);
         final String jsonInput = mapper.writeValueAsString(input);
 
diff --git a/server/src/test/java/com/ning/billing/jaxrs/TestCredit.java b/server/src/test/java/com/ning/billing/jaxrs/TestCredit.java
index 182d068..6ba1f86 100644
--- a/server/src/test/java/com/ning/billing/jaxrs/TestCredit.java
+++ b/server/src/test/java/com/ning/billing/jaxrs/TestCredit.java
@@ -22,6 +22,7 @@ import java.util.UUID;
 import javax.ws.rs.core.Response.Status;
 
 import org.joda.time.DateTime;
+import org.joda.time.LocalDate;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
@@ -54,16 +55,15 @@ public class TestCredit extends TestJaxrsBase {
         // We can't just compare the object via .equals() due e.g. to the invoice id
         assertEquals(objFromJson.getAccountId(), accountJson.getAccountId());
         assertEquals(objFromJson.getCreditAmount().compareTo(creditAmount), 0);
-        assertEquals(objFromJson.getEffectiveDate().toLocalDate().compareTo(effectiveDate.toLocalDate()), 0);
+        assertEquals(objFromJson.getEffectiveDate().compareTo(effectiveDate.toLocalDate()), 0);
     }
 
     @Test(groups = "slow")
     public void testAccountDoesNotExist() throws Exception {
-        final DateTime requestedDate = clock.getUTCNow();
-        final DateTime effectiveDate = clock.getUTCNow();
+        final LocalDate effectiveDate = clock.getUTCToday();
         final CreditJson input = new CreditJson(BigDecimal.TEN, UUID.randomUUID().toString(), UUID.randomUUID().toString(),
-                                                requestedDate, effectiveDate,
-                                                UUID.randomUUID().toString(), UUID.randomUUID().toString(), null);
+                                                effectiveDate,
+                                                UUID.randomUUID().toString(), null);
         final String jsonInput = mapper.writeValueAsString(input);
 
         // Try to create the credit
@@ -73,7 +73,7 @@ public class TestCredit extends TestJaxrsBase {
 
     @Test(groups = "slow")
     public void testBadRequest() throws Exception {
-        final CreditJson input = new CreditJson(null, null, null, null, null, null, null, null);
+        final CreditJson input = new CreditJson(null, null, null, null, null, null);
         final String jsonInput = mapper.writeValueAsString(input);
 
         // Try to create the credit