Skip to content

Commit 082b044

Browse files
authored
Merge pull request #13 from reshmabidikar/use-custom-invoice-plugin
Use custom invoice plugin
2 parents 5349b07 + 9ae227f commit 082b044

File tree

3 files changed

+61
-4
lines changed

3 files changed

+61
-4
lines changed

pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
<parent>
2323
<groupId>org.kill-bill.billing</groupId>
2424
<artifactId>killbill-oss-parent</artifactId>
25-
<version>0.146.6</version>
25+
<version>0.146.30</version>
2626
</parent>
2727
<groupId>org.kill-bill.billing.plugin.java</groupId>
2828
<artifactId>hello-world-plugin</artifactId>
@@ -104,7 +104,6 @@
104104
<dependency>
105105
<groupId>org.kill-bill.billing.plugin</groupId>
106106
<artifactId>killbill-plugin-api-invoice</artifactId>
107-
<scope>provided</scope>
108107
</dependency>
109108
<dependency>
110109
<groupId>org.kill-bill.billing.plugin</groupId>
@@ -140,6 +139,7 @@
140139
<artifactId>slf4j-api</artifactId>
141140
<scope>provided</scope>
142141
</dependency>
142+
143143
<dependency>
144144
<groupId>org.testng</groupId>
145145
<artifactId>testng</artifactId>

src/main/java/org/killbill/billing/plugin/helloworld/HelloWorldActivator.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@
3737
import org.killbill.billing.plugin.core.resources.jooby.PluginApp;
3838
import org.killbill.billing.plugin.core.resources.jooby.PluginAppBuilder;
3939
import org.osgi.framework.BundleContext;
40+
import org.osgi.util.tracker.ServiceTracker;
41+
import org.killbill.billing.invoice.plugin.api.InvoiceFormatterFactory;
4042

4143
public class HelloWorldActivator extends KillbillActivatorBase {
4244

@@ -50,6 +52,8 @@ public class HelloWorldActivator extends KillbillActivatorBase {
5052
private OSGIKillbillEventDispatcher.OSGIKillbillEventHandler killbillEventHandler;
5153
private MetricsGeneratorExample metricsGenerator;
5254

55+
private ServiceTracker<InvoiceFormatterFactory, InvoiceFormatterFactory> invoiceFormatterTracker;
56+
5357
@Override
5458
public void start(final BundleContext context) throws Exception {
5559
super.start(context);
@@ -62,8 +66,13 @@ public void start(final BundleContext context) throws Exception {
6266
.createConfigurable(configProperties.getProperties());
6367
helloWorldConfigurationHandler.setDefaultConfigurable(globalConfiguration);
6468

69+
// create a service tracker for a custom InvoiceFormatter service
70+
invoiceFormatterTracker = new ServiceTracker<>(context, InvoiceFormatterFactory.class, null);
71+
invoiceFormatterTracker.open();
72+
73+
6574
// Register an event listener (optional)
66-
killbillEventHandler = new HelloWorldListener(killbillAPI);
75+
killbillEventHandler = new HelloWorldListener(killbillAPI, invoiceFormatterTracker, configProperties.getProperties());
6776

6877
// As an example, this plugin registers a PaymentPluginApi (this could be
6978
// changed to any other plugin api)

src/main/java/org/killbill/billing/plugin/helloworld/HelloWorldListener.java

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,24 @@
1919

2020
package org.killbill.billing.plugin.helloworld;
2121

22+
import java.util.List;
23+
import java.util.Locale;
24+
import java.util.Properties;
25+
26+
import org.joda.time.LocalDate;
2227
import org.killbill.billing.account.api.Account;
2328
import org.killbill.billing.account.api.AccountApiException;
29+
import org.killbill.billing.invoice.api.Invoice;
30+
import org.killbill.billing.invoice.api.InvoiceItem;
31+
import org.killbill.billing.invoice.api.formatters.InvoiceFormatter;
32+
import org.killbill.billing.invoice.api.formatters.InvoiceItemFormatter;
33+
import org.killbill.billing.invoice.plugin.api.InvoiceFormatterFactory;
2434
import org.killbill.billing.notification.plugin.api.ExtBusEvent;
2535
import org.killbill.billing.osgi.libs.killbill.OSGIKillbillAPI;
2636
import org.killbill.billing.osgi.libs.killbill.OSGIKillbillEventDispatcher;
2737
import org.killbill.billing.plugin.api.PluginTenantContext;
2838
import org.killbill.billing.util.callcontext.TenantContext;
39+
import org.osgi.util.tracker.ServiceTracker;
2940
import org.slf4j.Logger;
3041
import org.slf4j.LoggerFactory;
3142

@@ -35,10 +46,18 @@ public class HelloWorldListener implements OSGIKillbillEventDispatcher.OSGIKillb
3546

3647
private final OSGIKillbillAPI osgiKillbillAPI;
3748

38-
public HelloWorldListener(final OSGIKillbillAPI killbillAPI) {
49+
private final ServiceTracker<InvoiceFormatterFactory, InvoiceFormatterFactory> invoiceFormatterTracker;
50+
51+
private final Properties configProperties;
52+
53+
public HelloWorldListener(final OSGIKillbillAPI killbillAPI, final ServiceTracker<InvoiceFormatterFactory, InvoiceFormatterFactory> invoiceFormatterTracker, Properties configProperties) {
3954
this.osgiKillbillAPI = killbillAPI;
55+
this.invoiceFormatterTracker = invoiceFormatterTracker;
56+
this.configProperties = configProperties;
4057
}
4158

59+
private static final String defaultLocale = "en_US";
60+
4261
@Override
4362
public void handleKillbillEvent(final ExtBusEvent killbillEvent) {
4463
logger.info("Received event {} for object id {} of type {}",
@@ -60,7 +79,36 @@ public void handleKillbillEvent(final ExtBusEvent killbillEvent) {
6079
logger.warn("Unable to find account", e);
6180
}
6281
break;
82+
case INVOICE_CREATION:
83+
84+
final Account account;
85+
try {
86+
account = osgiKillbillAPI.getAccountUserApi().getAccountById(killbillEvent.getAccountId(), context);
87+
} catch (AccountApiException e) {
88+
throw new RuntimeException(e);
89+
}
90+
final List<Invoice> invoices = osgiKillbillAPI.getInvoiceUserApi().getInvoicesByAccount(killbillEvent.getAccountId(), false, false, true, context);
91+
logger.info("Invoices in hello-world-plugin {}: ",invoices.size());
92+
93+
final String invoiceFormatterPluginName = configProperties.getProperty("org.killbill.template.invoiceFormatterFactoryPluginName");
94+
if(invoiceFormatterPluginName == null || invoiceFormatterPluginName.isEmpty()){
95+
logger.info("Invoice formatter plugin not configured. set the org.killbill.template.invoiceFormatterFactoryPluginName property to configure it");
96+
return;
97+
}
6398

99+
final InvoiceFormatterFactory formatterFactory = (invoiceFormatterTracker != null ? invoiceFormatterTracker.getService() : null);
100+
Invoice invoice = invoices.get(0); //For demo purpose, we are only retrieving the formattedEndDate for the first invoice
101+
//TODO Using null for parameters like catalogBundlePath,bundle, defaultBundle, etc. Update this to use correct values if possible or verify that using null values has no adverse effect
102+
103+
InvoiceFormatter invoiceFormatter = formatterFactory.createInvoiceFormatter(defaultLocale, null, invoice, Locale.forLanguageTag(account.getLocale()), osgiKillbillAPI.getCurrencyConversionApi(), null, null);
104+
105+
List<InvoiceItem> items = invoiceFormatter.getInvoiceItems();
106+
logger.info("hello-world-plugin got items:{}",items.size());
107+
for(InvoiceItem item:items) {
108+
final InvoiceItemFormatter invoiceItemFormatter = (InvoiceItemFormatter)item;
109+
final String formattedEndDate = invoiceItemFormatter.getFormattedEndDate();
110+
logger.info("hello-world-plugin formattedEndDate:{}",formattedEndDate);
111+
}
64112
// Nothing
65113
default:
66114
break;

0 commit comments

Comments
 (0)