killbill-aplcache

invoice: allow to pass custom InvoiceFormatterFactory Add

6/18/2012 7:59:50 PM

Details

diff --git a/api/src/main/java/com/ning/billing/util/template/translation/TranslatorConfig.java b/api/src/main/java/com/ning/billing/util/template/translation/TranslatorConfig.java
index a72d778..14dacf5 100644
--- a/api/src/main/java/com/ning/billing/util/template/translation/TranslatorConfig.java
+++ b/api/src/main/java/com/ning/billing/util/template/translation/TranslatorConfig.java
@@ -19,6 +19,8 @@ package com.ning.billing.util.template.translation;
 import org.skife.config.Config;
 import org.skife.config.Default;
 
+import com.ning.billing.invoice.api.formatters.InvoiceFormatterFactory;
+
 public interface TranslatorConfig {
     @Config("killbill.template.default.locale")
     @Default("en_US")
@@ -31,4 +33,8 @@ public interface TranslatorConfig {
     @Config("killbill.template.name")
     @Default("com/ning/billing/util/email/templates/HtmlInvoiceTemplate.mustache")
     String getTemplateName();
+
+    @Config("killbill.template.invoiceFormatterFactoryClass")
+    @Default("com.ning.billing.invoice.template.formatters.DefaultInvoiceFormatterFactory")
+    Class<? extends InvoiceFormatterFactory> getInvoiceFormatterFactoryClass();
 }
diff --git a/invoice/src/main/java/com/ning/billing/invoice/glue/DefaultInvoiceModule.java b/invoice/src/main/java/com/ning/billing/invoice/glue/DefaultInvoiceModule.java
index 85b009b..918bfa2 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/glue/DefaultInvoiceModule.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/glue/DefaultInvoiceModule.java
@@ -88,7 +88,7 @@ public class DefaultInvoiceModule extends AbstractModule implements InvoiceModul
         bind(NextBillingDatePoster.class).to(DefaultNextBillingDatePoster.class).asEagerSingleton();
         final TranslatorConfig config = new ConfigurationObjectFactory(System.getProperties()).build(TranslatorConfig.class);
         bind(TranslatorConfig.class).toInstance(config);
-        bind(InvoiceFormatterFactory.class).to(DefaultInvoiceFormatterFactory.class).asEagerSingleton();
+        bind(InvoiceFormatterFactory.class).to(config.getInvoiceFormatterFactoryClass()).asEagerSingleton();
     }
 
     protected void installInvoiceNotifier() {
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 098bde8..6ed5713 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
@@ -179,4 +179,22 @@ public class DefaultInvoiceFormatter implements InvoiceFormatter {
     public UUID getId() {
         return invoice.getId();
     }
+
+    // Expose the fields for children classes. This is useful for further customization of the invoices
+
+    protected TranslatorConfig getConfig() {
+        return config;
+    }
+
+    protected DateTimeFormatter getDateFormatter() {
+        return dateFormatter;
+    }
+
+    protected Locale getLocale() {
+        return locale;
+    }
+
+    protected Invoice getInvoice() {
+        return invoice;
+    }
 }

pom.xml 2(+1 -1)

diff --git a/pom.xml b/pom.xml
index c5264f7..b3fbb33 100644
--- a/pom.xml
+++ b/pom.xml
@@ -290,7 +290,7 @@
             <dependency>
                 <groupId>org.skife.config</groupId>
                 <artifactId>config-magic</artifactId>
-                <version>0.13</version>
+                <version>0.14</version>
             </dependency>
             <dependency>
                 <groupId>org.slf4j</groupId>