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());
+ }
+}