killbill-aplcache

Details

diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/InvoiceJsonSimple.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/InvoiceJsonSimple.java
index 9adf285..0c50fda 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/InvoiceJsonSimple.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/InvoiceJsonSimple.java
@@ -16,6 +16,7 @@
 
 package com.ning.billing.jaxrs.json;
 
+import javax.annotation.Nullable;
 import java.math.BigDecimal;
 
 import org.joda.time.DateTime;
@@ -27,34 +28,26 @@ import com.ning.billing.invoice.api.Invoice;
 public class InvoiceJsonSimple {
     private final BigDecimal amount;
     private final BigDecimal credit;
-    private final String     invoiceId;
-    private final DateTime   invoiceDate;
-    private final DateTime   targetDate;
-    private final String     invoiceNumber;
+    private final String invoiceId;
+    private final DateTime invoiceDate;
+    private final DateTime targetDate;
+    private final String invoiceNumber;
     private final BigDecimal balance;
-    private final String     accountId;
+    private final String accountId;
 
     public InvoiceJsonSimple() {
-        this.amount = BigDecimal.ZERO;
-        this.credit = BigDecimal.ZERO;
-        this.invoiceId = null;
-        this.invoiceDate = null;
-        this.targetDate = null;
-        this.invoiceNumber = null;
-        this.balance = BigDecimal.ZERO;
-        this.accountId = null;
+        this(BigDecimal.ZERO, BigDecimal.ZERO, null, null, null, null, BigDecimal.ZERO, null);
     }
 
     @JsonCreator
     public InvoiceJsonSimple(@JsonProperty("amount") final BigDecimal amount,
                              @JsonProperty("credit") final BigDecimal credit,
-                             @JsonProperty("invoiceId") final String invoiceId,
-                             @JsonProperty("invoiceDate") final DateTime invoiceDate,
-                             @JsonProperty("targetDate") final DateTime targetDate,
-                             @JsonProperty("invoiceNumber") final String invoiceNumber,
+                             @JsonProperty("invoiceId") @Nullable final String invoiceId,
+                             @JsonProperty("invoiceDate") @Nullable final DateTime invoiceDate,
+                             @JsonProperty("targetDate") @Nullable final DateTime targetDate,
+                             @JsonProperty("invoiceNumber") @Nullable final String invoiceNumber,
                              @JsonProperty("balance") final BigDecimal balance,
-                             @JsonProperty("accountId") final String accountId) {
-        super();
+                             @JsonProperty("accountId") @Nullable final String accountId) {
         this.amount = amount;
         this.credit = credit;
         this.invoiceId = invoiceId;
@@ -66,14 +59,8 @@ public class InvoiceJsonSimple {
     }
 
     public InvoiceJsonSimple(final Invoice input) {
-        this.amount = input.getAmountCharged();
-        this.credit = input.getAmountCredited();
-        this.invoiceId = input.getId().toString();
-        this.invoiceDate = input.getInvoiceDate();
-        this.targetDate = input.getTargetDate();
-        this.invoiceNumber = String.valueOf(input.getInvoiceNumber());
-        this.balance = input.getBalance();
-        this.accountId = input.getAccountId().toString();
+        this(input.getAmountCharged(), input.getAmountCredited(), input.getId().toString(), input.getInvoiceDate(),
+             input.getTargetDate(), String.valueOf(input.getInvoiceNumber()), input.getBalance(), input.getAccountId().toString());
     }
 
     public BigDecimal getAmount() {
@@ -109,89 +96,54 @@ public class InvoiceJsonSimple {
     }
 
     @Override
-    public int hashCode() {
-        final int prime = 31;
-        int result = 1;
-        result = prime * result + ((amount == null) ? 0 : amount.hashCode());
-        result = prime * result + ((balance == null) ? 0 : balance.hashCode());
-        result = prime * result + ((credit == null) ? 0 : credit.hashCode());
-        result = prime * result
-                + ((invoiceDate == null) ? 0 : invoiceDate.hashCode());
-        result = prime * result
-                + ((invoiceId == null) ? 0 : invoiceId.hashCode());
-        result = prime * result
-                + ((invoiceNumber == null) ? 0 : invoiceNumber.hashCode());
-        return result;
-    }
-
-    @Override
-    public boolean equals(final Object obj) {
-        if (this == obj) {
+    public boolean equals(final Object o) {
+        if (this == o) {
             return true;
         }
-        if (obj == null) {
+        if (o == null || getClass() != o.getClass()) {
             return false;
         }
-        if (getClass() != obj.getClass()) {
+
+        final InvoiceJsonSimple that = (InvoiceJsonSimple) o;
+
+        if (accountId != null ? !accountId.equals(that.accountId) : that.accountId != null) {
             return false;
         }
-        final InvoiceJsonSimple other = (InvoiceJsonSimple) obj;
-        if (amount == null) {
-            if (other.amount != null) {
-                return false;
-            }
-        } else if (!amount.equals(other.amount)) {
+        if (amount != null ? !amount.equals(that.amount) : that.amount != null) {
             return false;
         }
-
-        if (balance == null) {
-            if (other.balance != null) {
-                return false;
-            }
-        } else if (!balance.equals(other.balance)) {
+        if (balance != null ? !balance.equals(that.balance) : that.balance != null) {
             return false;
         }
-
-        if (credit == null) {
-            if (other.credit != null) {
-                return false;
-            }
-        } else if (!credit.equals(other.credit)) {
+        if (credit != null ? !credit.equals(that.credit) : that.credit != null) {
             return false;
         }
-
-        if (invoiceDate == null) {
-            if (other.invoiceDate != null) {
-                return false;
-            }
-        } else if (!invoiceDate.equals(other.invoiceDate)) {
+        if (invoiceDate != null ? !invoiceDate.equals(that.invoiceDate) : that.invoiceDate != null) {
             return false;
         }
-
-        if (invoiceId == null) {
-            if (other.invoiceId != null) {
-                return false;
-            }
-        } else if (!invoiceId.equals(other.invoiceId)) {
+        if (invoiceId != null ? !invoiceId.equals(that.invoiceId) : that.invoiceId != null) {
             return false;
         }
-
-        if (invoiceNumber == null) {
-            if (other.invoiceNumber != null) {
-                return false;
-            }
-        } else if (!invoiceNumber.equals(other.invoiceNumber)) {
+        if (invoiceNumber != null ? !invoiceNumber.equals(that.invoiceNumber) : that.invoiceNumber != null) {
             return false;
         }
-
-        if (accountId == null) {
-            if (other.accountId != null) {
-                return false;
-            }
-        } else if (!accountId.equals(other.accountId)) {
+        if (targetDate != null ? !targetDate.equals(that.targetDate) : that.targetDate != null) {
             return false;
         }
 
         return true;
     }
+
+    @Override
+    public int hashCode() {
+        int result = amount != null ? amount.hashCode() : 0;
+        result = 31 * result + (credit != null ? credit.hashCode() : 0);
+        result = 31 * result + (invoiceId != null ? invoiceId.hashCode() : 0);
+        result = 31 * result + (invoiceDate != null ? invoiceDate.hashCode() : 0);
+        result = 31 * result + (targetDate != null ? targetDate.hashCode() : 0);
+        result = 31 * result + (invoiceNumber != null ? invoiceNumber.hashCode() : 0);
+        result = 31 * result + (balance != null ? balance.hashCode() : 0);
+        result = 31 * result + (accountId != null ? accountId.hashCode() : 0);
+        return result;
+    }
 }
diff --git a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestInvoiceJsonSimple.java b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestInvoiceJsonSimple.java
new file mode 100644
index 0000000..64f0ac0
--- /dev/null
+++ b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestInvoiceJsonSimple.java
@@ -0,0 +1,98 @@
+/*
+ * Copyright 2010-2012 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License.  You may obtain a copy of the License at:
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.jaxrs.json;
+
+import java.math.BigDecimal;
+import java.util.UUID;
+
+import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
+import org.mockito.Mockito;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.datatype.joda.JodaModule;
+import com.ning.billing.invoice.api.Invoice;
+
+public class TestInvoiceJsonSimple {
+    private static final ObjectMapper mapper = new ObjectMapper();
+
+    static {
+        mapper.registerModule(new JodaModule());
+        mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
+    }
+
+    @Test(groups = "fast")
+    public void testJson() throws Exception {
+        final BigDecimal amount = BigDecimal.TEN;
+        final BigDecimal credit = BigDecimal.ONE;
+        final String invoiceId = UUID.randomUUID().toString();
+        final DateTime invoiceDate = new DateTime(DateTimeZone.UTC);
+        final DateTime targetDate = new DateTime(DateTimeZone.UTC);
+        final String invoiceNumber = UUID.randomUUID().toString();
+        final BigDecimal balance = BigDecimal.ZERO;
+        final String accountId = UUID.randomUUID().toString();
+        final InvoiceJsonSimple invoiceJsonSimple = new InvoiceJsonSimple(amount, credit, invoiceId, invoiceDate,
+                                                                          targetDate, invoiceNumber, balance, accountId);
+        Assert.assertEquals(invoiceJsonSimple.getAmount(), amount);
+        Assert.assertEquals(invoiceJsonSimple.getCredit(), credit);
+        Assert.assertEquals(invoiceJsonSimple.getInvoiceId(), invoiceId);
+        Assert.assertEquals(invoiceJsonSimple.getInvoiceDate(), invoiceDate);
+        Assert.assertEquals(invoiceJsonSimple.getTargetDate(), targetDate);
+        Assert.assertEquals(invoiceJsonSimple.getInvoiceNumber(), invoiceNumber);
+        Assert.assertEquals(invoiceJsonSimple.getBalance(), balance);
+        Assert.assertEquals(invoiceJsonSimple.getAccountId(), accountId);
+
+        final String asJson = mapper.writeValueAsString(invoiceJsonSimple);
+        Assert.assertEquals(asJson, "{\"amount\":" + invoiceJsonSimple.getAmount().toString() + "," +
+                "\"credit\":" + invoiceJsonSimple.getCredit().toString() + "," +
+                "\"invoiceId\":\"" + invoiceJsonSimple.getInvoiceId() + "\"," +
+                "\"invoiceDate\":\"" + invoiceJsonSimple.getInvoiceDate().toDateTimeISO().toString() + "\"," +
+                "\"targetDate\":\"" + invoiceJsonSimple.getTargetDate().toDateTimeISO().toString() + "\"," +
+                "\"invoiceNumber\":\"" + invoiceJsonSimple.getInvoiceNumber() + "\"," +
+                "\"balance\":" + invoiceJsonSimple.getBalance().toString() + "," +
+                "\"accountId\":\"" + invoiceJsonSimple.getAccountId() + "\"}");
+
+        final InvoiceJsonSimple fromJson = mapper.readValue(asJson, InvoiceJsonSimple.class);
+        Assert.assertEquals(fromJson, invoiceJsonSimple);
+    }
+
+    @Test(groups = "fast")
+    public void testFromInvoice() throws Exception {
+        final Invoice invoice = Mockito.mock(Invoice.class);
+        Mockito.when(invoice.getAmountCharged()).thenReturn(BigDecimal.TEN);
+        Mockito.when(invoice.getAmountCredited()).thenReturn(BigDecimal.ONE);
+        Mockito.when(invoice.getId()).thenReturn(UUID.randomUUID());
+        Mockito.when(invoice.getInvoiceDate()).thenReturn(new DateTime(DateTimeZone.UTC));
+        Mockito.when(invoice.getTargetDate()).thenReturn(new DateTime(DateTimeZone.UTC));
+        Mockito.when(invoice.getInvoiceNumber()).thenReturn(Integer.MAX_VALUE);
+        Mockito.when(invoice.getBalance()).thenReturn(BigDecimal.ZERO);
+        Mockito.when(invoice.getAccountId()).thenReturn(UUID.randomUUID());
+
+        final InvoiceJsonSimple invoiceJsonSimple = new InvoiceJsonSimple(invoice);
+        Assert.assertEquals(invoiceJsonSimple.getAmount(), invoice.getAmountCharged());
+        Assert.assertEquals(invoiceJsonSimple.getCredit(), invoice.getAmountCredited());
+        Assert.assertEquals(invoiceJsonSimple.getInvoiceId(), invoice.getId().toString());
+        Assert.assertEquals(invoiceJsonSimple.getInvoiceDate(), invoice.getInvoiceDate());
+        Assert.assertEquals(invoiceJsonSimple.getTargetDate(), invoice.getTargetDate());
+        Assert.assertEquals(invoiceJsonSimple.getInvoiceNumber(), String.valueOf(invoice.getInvoiceNumber()));
+        Assert.assertEquals(invoiceJsonSimple.getBalance(), invoice.getBalance());
+        Assert.assertEquals(invoiceJsonSimple.getAccountId(), invoice.getAccountId().toString());
+    }
+}