killbill-memoizeit

invoice: make formatters not output null values The Mustache

7/3/2012 2:54:19 PM

Details

diff --git a/invoice/src/main/java/com/ning/billing/invoice/template/formatters/DefaultInvoiceFormatter.java b/invoice/src/main/java/com/ning/billing/invoice/template/formatters/DefaultInvoiceFormatter.java
index 55a2e8f..9499378 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/template/formatters/DefaultInvoiceFormatter.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/template/formatters/DefaultInvoiceFormatter.java
@@ -29,6 +29,7 @@
  * License for the specific language governing permissions and limitations
  * under the License.
  */
+
 package com.ning.billing.invoice.template.formatters;
 
 import java.math.BigDecimal;
@@ -41,6 +42,9 @@ import org.joda.time.DateTime;
 import org.joda.time.format.DateTimeFormat;
 import org.joda.time.format.DateTimeFormatter;
 
+import com.google.common.base.Objects;
+import com.google.common.base.Strings;
+import com.google.common.collect.ImmutableList;
 import com.ning.billing.catalog.api.Currency;
 import com.ning.billing.invoice.api.Invoice;
 import com.ning.billing.invoice.api.InvoiceItem;
@@ -48,6 +52,9 @@ import com.ning.billing.invoice.api.InvoicePayment;
 import com.ning.billing.invoice.api.formatters.InvoiceFormatter;
 import com.ning.billing.util.template.translation.TranslatorConfig;
 
+/**
+ * Format invoice fields. Note that the Mustache engine won't accept null values.
+ */
 public class DefaultInvoiceFormatter implements InvoiceFormatter {
     private final TranslatorConfig config;
     private final Invoice invoice;
@@ -63,7 +70,7 @@ public class DefaultInvoiceFormatter implements InvoiceFormatter {
 
     @Override
     public Integer getInvoiceNumber() {
-        return invoice.getInvoiceNumber();
+        return Objects.firstNonNull(invoice.getInvoiceNumber(), 0);
     }
 
     @Override
@@ -87,7 +94,7 @@ public class DefaultInvoiceFormatter implements InvoiceFormatter {
 
     @Override
     public <T extends InvoiceItem> List<InvoiceItem> getInvoiceItems(final Class<T> clazz) {
-        return invoice.getInvoiceItems(clazz);
+        return Objects.firstNonNull(invoice.getInvoiceItems(clazz), ImmutableList.<InvoiceItem>of());
     }
 
     @Override
@@ -107,7 +114,7 @@ public class DefaultInvoiceFormatter implements InvoiceFormatter {
 
     @Override
     public List<InvoicePayment> getPayments() {
-        return invoice.getPayments();
+        return Objects.firstNonNull(invoice.getPayments(), ImmutableList.<InvoicePayment>of());
     }
 
     @Override
@@ -122,18 +129,17 @@ public class DefaultInvoiceFormatter implements InvoiceFormatter {
 
     @Override
     public BigDecimal getChargedAmount() {
-        return invoice.getChargedAmount();
+        return Objects.firstNonNull(invoice.getChargedAmount(), BigDecimal.ZERO);
     }
 
     @Override
     public BigDecimal getCBAAmount() {
-        return invoice.getCBAAmount();
+        return Objects.firstNonNull(invoice.getCBAAmount(), BigDecimal.ZERO);
     }
 
-
     @Override
     public BigDecimal getBalance() {
-        return invoice.getBalance();
+        return Objects.firstNonNull(invoice.getBalance(), BigDecimal.ZERO);
     }
 
     @Override
@@ -168,12 +174,17 @@ public class DefaultInvoiceFormatter implements InvoiceFormatter {
 
     @Override
     public BigDecimal getPaidAmount() {
-        return invoice.getPaidAmount();
+        return Objects.firstNonNull(invoice.getPaidAmount(), BigDecimal.ZERO);
     }
 
     @Override
     public String getFormattedInvoiceDate() {
-        return invoice.getInvoiceDate().toString(dateFormatter);
+        final DateTime invoiceDate = invoice.getInvoiceDate();
+        if (invoiceDate == null) {
+            return "";
+        } else {
+            return Strings.nullToEmpty(invoiceDate.toString(dateFormatter));
+        }
     }
 
     @Override
@@ -201,16 +212,16 @@ public class DefaultInvoiceFormatter implements InvoiceFormatter {
 
     @Override
     public BigDecimal getTotalAdjAmount() {
-        return invoice.getTotalAdjAmount();
+        return Objects.firstNonNull(invoice.getTotalAdjAmount(), BigDecimal.ZERO);
     }
 
     @Override
     public BigDecimal getCreditAdjAmount() {
-        return invoice.getCreditAdjAmount();
+        return Objects.firstNonNull(invoice.getCreditAdjAmount(), BigDecimal.ZERO);
     }
 
     @Override
     public BigDecimal getRefundAdjAmount() {
-        return invoice.getRefundAdjAmount();
+        return Objects.firstNonNull(invoice.getRefundAdjAmount(), BigDecimal.ZERO);
     }
 }
diff --git a/invoice/src/main/java/com/ning/billing/invoice/template/formatters/DefaultInvoiceItemFormatter.java b/invoice/src/main/java/com/ning/billing/invoice/template/formatters/DefaultInvoiceItemFormatter.java
index 3f4ff92..86be83b 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/template/formatters/DefaultInvoiceItemFormatter.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/template/formatters/DefaultInvoiceItemFormatter.java
@@ -23,6 +23,8 @@ import java.util.UUID;
 import org.joda.time.DateTime;
 import org.joda.time.format.DateTimeFormatter;
 
+import com.google.common.base.Objects;
+import com.google.common.base.Strings;
 import com.ning.billing.catalog.api.Currency;
 import com.ning.billing.invoice.api.InvoiceItem;
 import com.ning.billing.invoice.api.InvoiceItemType;
@@ -31,6 +33,9 @@ import com.ning.billing.util.template.translation.DefaultCatalogTranslator;
 import com.ning.billing.util.template.translation.Translator;
 import com.ning.billing.util.template.translation.TranslatorConfig;
 
+/**
+ * Format invoice item fields. Note that the Mustache engine won't accept null values.
+ */
 public class DefaultInvoiceItemFormatter implements InvoiceItemFormatter {
     private final Translator translator;
 
@@ -48,7 +53,7 @@ public class DefaultInvoiceItemFormatter implements InvoiceItemFormatter {
 
     @Override
     public BigDecimal getAmount() {
-        return item.getAmount();
+        return Objects.firstNonNull(item.getAmount(), BigDecimal.ZERO);
     }
 
     @Override
@@ -60,16 +65,10 @@ public class DefaultInvoiceItemFormatter implements InvoiceItemFormatter {
     public InvoiceItemType getInvoiceItemType() {
         return item.getInvoiceItemType();
     }
-/*
-    @Override
-    public InvoiceItem asReversingItem() {
-        return item.asReversingItem();
-    }
-    */
 
     @Override
     public String getDescription() {
-        return item.getDescription();
+        return Strings.nullToEmpty(item.getDescription());
     }
 
     @Override
@@ -84,12 +83,12 @@ public class DefaultInvoiceItemFormatter implements InvoiceItemFormatter {
 
     @Override
     public String getFormattedStartDate() {
-        return item.getStartDate().toString(dateFormatter);
+        return Strings.nullToEmpty(item.getStartDate().toString(dateFormatter));
     }
 
     @Override
     public String getFormattedEndDate() {
-        return item.getEndDate().toString(dateFormatter);
+        return Strings.nullToEmpty(item.getEndDate().toString(dateFormatter));
     }
 
     @Override
@@ -114,12 +113,12 @@ public class DefaultInvoiceItemFormatter implements InvoiceItemFormatter {
 
     @Override
     public String getPlanName() {
-        return translator.getTranslation(locale, item.getPlanName());
+        return Strings.nullToEmpty(translator.getTranslation(locale, item.getPlanName()));
     }
 
     @Override
     public String getPhaseName() {
-        return translator.getTranslation(locale, item.getPhaseName());
+        return Strings.nullToEmpty(translator.getTranslation(locale, item.getPhaseName()));
     }
 
     @Override
@@ -134,7 +133,7 @@ public class DefaultInvoiceItemFormatter implements InvoiceItemFormatter {
 
     @Override
     public BigDecimal getRate() {
-        return null;
+        return BigDecimal.ZERO;
     }
 
     @Override
diff --git a/invoice/src/test/java/com/ning/billing/invoice/TestHtmlInvoiceGenerator.java b/invoice/src/test/java/com/ning/billing/invoice/TestHtmlInvoiceGenerator.java
index 2847e0b..049e7e4 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/TestHtmlInvoiceGenerator.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/TestHtmlInvoiceGenerator.java
@@ -22,7 +22,9 @@ import java.util.List;
 import java.util.Locale;
 
 import org.joda.time.DateTime;
+import org.mockito.Mockito;
 import org.skife.config.ConfigurationObjectFactory;
+import org.testng.Assert;
 import org.testng.annotations.BeforeSuite;
 import org.testng.annotations.Test;
 
@@ -39,12 +41,10 @@ import com.ning.billing.util.email.templates.MustacheTemplateEngine;
 import com.ning.billing.util.email.templates.TemplateEngine;
 import com.ning.billing.util.template.translation.TranslatorConfig;
 
-import static org.testng.Assert.assertNotNull;
-
 public class TestHtmlInvoiceGenerator {
     private HtmlInvoiceGenerator g;
 
-    @BeforeSuite(groups = {"fast"})
+    @BeforeSuite(groups = "fast")
     public void setup() {
         final TranslatorConfig config = new ConfigurationObjectFactory(System.getProperties()).build(TranslatorConfig.class);
         final TemplateEngine templateEngine = new MustacheTemplateEngine();
@@ -52,11 +52,17 @@ public class TestHtmlInvoiceGenerator {
         g = new HtmlInvoiceGenerator(factory, templateEngine, config);
     }
 
-    @Test(groups = {"fast"})
+    @Test(groups = "fast")
     public void testGenerateInvoice() throws Exception {
         final String output = g.generateInvoice(createAccount(), createInvoice());
-        assertNotNull(output);
-        System.out.print(output);
+        Assert.assertNotNull(output);
+    }
+
+    @Test(groups = "fast")
+    public void testGenerateNullInvoice() throws Exception {
+        final Invoice invoice = Mockito.mock(Invoice.class);
+        final String output = g.generateInvoice(createAccount(), invoice);
+        Assert.assertNotNull(output);
     }
 
     private Account createAccount() {
@@ -110,7 +116,6 @@ public class TestHtmlInvoiceGenerator {
         zombie.addResult("getPlanName", planName);
         zombie.addResult("getDescription", networkName);
 
-
         return item;
     }
 }