/**
* Copyright (C) 2013 Premium Minds.
*
* This file is part of billy spain (ES Pack).
*
* billy spain (ES Pack) is free software: you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation, either version 3 of the License, or (at your option) any
* later version.
*
* billy spain (ES Pack) is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
* A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with billy spain (ES Pack). If not, see <http://www.gnu.org/licenses/>.
*/
package com.premiumminds.billy.spain;
import javax.inject.Inject;
import javax.inject.Singleton;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.persist.PersistService;
import com.premiumminds.billy.spain.util.Addresses;
import com.premiumminds.billy.spain.util.Applications;
import com.premiumminds.billy.spain.util.Businesses;
import com.premiumminds.billy.spain.util.Contacts;
import com.premiumminds.billy.spain.util.Contexts;
import com.premiumminds.billy.spain.util.CreditNotes;
import com.premiumminds.billy.spain.util.CreditReceipts;
import com.premiumminds.billy.spain.util.Customers;
import com.premiumminds.billy.spain.util.Invoices;
import com.premiumminds.billy.spain.util.Payments;
import com.premiumminds.billy.spain.util.Products;
import com.premiumminds.billy.spain.util.Receipts;
import com.premiumminds.billy.spain.util.SimpleInvoices;
import com.premiumminds.billy.spain.util.Taxes;
/**
* Spanish Module for Billy.
*
*/
@Singleton
public class BillySpain {
static final String DEFAULT_PERSISTENCE_UNIT = "BillySpainPersistenceUnit";
private final Injector injector;
private Contexts contexts;
private Taxes taxes;
private Customers customers;
private Addresses addresses;
private Businesses businesses;
private Invoices invoices;
private Receipts receipts;
private SimpleInvoices simpleInvoices;
private CreditNotes creditNotes;
private CreditReceipts creditReceipts;
private Products products;
private Applications applications;
private Contacts contacts;
private Payments payments;
public BillySpain() {
this(DEFAULT_PERSISTENCE_UNIT);
}
public BillySpain(String persistenceUnitId) {
this.injector = Guice.createInjector(
new SpainDependencyModule(),
new SpainPersistenceDependencyModule(persistenceUnitId));
this.injector.getInstance(PersistService.class).start();
}
@Inject
public BillySpain(Injector injector) {
this.injector = injector;
}
/**
* Provides access to predefined taxes for Billy-Spain module.
*
* @return {@link Taxes}
*/
public Taxes taxes() {
if(this.taxes == null) {
this.taxes = new Taxes(injector);
}
return this.taxes;
}
public Customers customers() {
if(this.customers == null) {
this.customers = new Customers(injector);
}
return this.customers;
}
public Addresses addresses() {
if(this.addresses == null) {
this.addresses = new Addresses(injector);
}
return this.addresses;
}
public Businesses businesses() {
if(this.businesses == null) {
this.businesses = new Businesses(injector);
}
return this.businesses;
}
public Invoices invoices() {
if(this.invoices == null) {
this.invoices = new Invoices(injector);
}
return this.invoices;
}
public Receipts receipts() {
if(this.receipts == null) {
this.receipts = new Receipts(injector);
}
return this.receipts;
}
public SimpleInvoices simpleInvoices() {
if(this.simpleInvoices == null) {
this.simpleInvoices = new SimpleInvoices(injector);
}
return this.simpleInvoices;
}
public CreditNotes creditNotes() {
if(this.creditNotes == null) {
this.creditNotes = new CreditNotes(injector);
}
return this.creditNotes;
}
public CreditReceipts creditReceipts() {
if(this.creditReceipts == null) {
this.creditReceipts = new CreditReceipts(injector);
}
return this.creditReceipts;
}
public Products products() {
if(this.products == null) {
this.products = new Products(injector);
}
return this.products;
}
public Contexts contexts() {
if(this.contexts == null) {
this.contexts = new Contexts(injector);
}
return this.contexts;
}
public Applications applications() {
if(this.applications == null) {
this.applications = new Applications(injector);
}
return this.applications;
}
public Contacts contacts() {
if(this.contacts == null) {
this.contacts = new Contacts(injector);
}
return this.contacts;
}
public Payments payments() {
if(this.payments == null) {
this.payments = new Payments(injector);
}
return this.payments;
}
}