package fr.mch.mdo.restaurant.services.business.managers.assembler;
import fr.mch.mdo.logs.ILogger;
import fr.mch.mdo.logs.ILoggerBean;
import fr.mch.mdo.restaurant.beans.IMdoDaoBean;
import fr.mch.mdo.restaurant.beans.IMdoDtoBean;
import fr.mch.mdo.restaurant.dao.beans.Credit;
import fr.mch.mdo.restaurant.dao.beans.DinnerTable;
import fr.mch.mdo.restaurant.dao.beans.OrderLine;
import fr.mch.mdo.restaurant.dao.beans.Product;
import fr.mch.mdo.restaurant.dao.beans.ProductPart;
import fr.mch.mdo.restaurant.dao.beans.ProductSpecialCode;
import fr.mch.mdo.restaurant.dao.beans.ValueAddedTax;
import fr.mch.mdo.restaurant.dto.beans.CreditDto;
import fr.mch.mdo.restaurant.dto.beans.DinnerTableDto;
import fr.mch.mdo.restaurant.dto.beans.OrderLineDto;
import fr.mch.mdo.restaurant.dto.beans.ProductDto;
import fr.mch.mdo.restaurant.dto.beans.ProductPartDto;
import fr.mch.mdo.restaurant.dto.beans.ProductSpecialCodeDto;
import fr.mch.mdo.restaurant.dto.beans.ValueAddedTaxDto;
import fr.mch.mdo.restaurant.services.business.managers.tables.ManagedProductSpecialCode;
import fr.mch.mdo.restaurant.services.logs.LoggerServiceImpl;
import fr.mch.mdo.utils.IManagerAssembler;
public class DefaultOrderLinesAssembler extends AbstractAssembler implements IManagerAssembler, ILoggerBean
{
private ILogger logger;
private IManagerAssembler productsAssembler;
private IManagerAssembler productPartsAssembler;
private IManagerAssembler productSpecialCodesAssembler;
private IManagerAssembler creditsAssembler;
private IManagerAssembler vatsAssembler;
private static class LazyHolder {
private static IManagerAssembler instance = new DefaultOrderLinesAssembler(LoggerServiceImpl.getInstance().getLogger(DefaultOrderLinesAssembler.class.getName()));
}
private DefaultOrderLinesAssembler(ILogger logger) {
this.setLogger(logger);
this.productsAssembler = DefaultProductsAssembler.getInstance();
this.productPartsAssembler = DefaultProductPartsAssembler.getInstance();
this.productSpecialCodesAssembler = DefaultProductSpecialCodesAssembler.getInstance();
this.creditsAssembler = DefaultCreditsAssembler.getInstance();
this.vatsAssembler = DefaultValueAddedTaxesAssembler.getInstance();
}
public static IManagerAssembler getInstance() {
return LazyHolder.instance;
}
public DefaultOrderLinesAssembler() {
}
/**
* @return the productsAssembler
*/
public IManagerAssembler getProductsAssembler() {
return productsAssembler;
}
/**
* @param productsAssembler the productsAssembler to set
*/
public void setProductsAssembler(IManagerAssembler productsAssembler) {
this.productsAssembler = productsAssembler;
}
/**
* @return the productPartsAssembler
*/
public IManagerAssembler getProductPartsAssembler() {
return productPartsAssembler;
}
/**
* @param productPartsAssembler the productPartsAssembler to set
*/
public void setProductPartsAssembler(IManagerAssembler productPartsAssembler) {
this.productPartsAssembler = productPartsAssembler;
}
/**
* @return the productSpecialCodesAssembler
*/
public IManagerAssembler getProductSpecialCodesAssembler() {
return productSpecialCodesAssembler;
}
/**
* @param productSpecialCodesAssembler the productSpecialCodesAssembler to set
*/
public void setProductSpecialCodesAssembler(IManagerAssembler productSpecialCodesAssembler) {
this.productSpecialCodesAssembler = productSpecialCodesAssembler;
}
/**
* @return the creditsAssembler
*/
public IManagerAssembler getCreditsAssembler() {
return creditsAssembler;
}
/**
* @param creditsAssembler the creditsAssembler to set
*/
public void setCreditsAssembler(IManagerAssembler creditsAssembler) {
this.creditsAssembler = creditsAssembler;
}
/**
* @return the vatsAssembler
*/
public IManagerAssembler getVatsAssembler() {
return vatsAssembler;
}
/**
* @param vatsAssembler the vatsAssembler to set
*/
public void setVatsAssembler(IManagerAssembler vatsAssembler) {
this.vatsAssembler = vatsAssembler;
}
@Override
public IMdoDtoBean marshal(IMdoDaoBean daoBean) {
OrderLineDto dto = null;
if (daoBean != null) {
OrderLine bean = (OrderLine) daoBean;
dto = new OrderLineDto();
dto.setId(bean.getId());
dto.setAmount(bean.getAmount());
String code = "";
if (bean.getProduct() != null) {
code = bean.getProduct().getCode();
}
// Currently the dataCode is used for merging 2 rows
String dataCode = code;
if (bean.getProductSpecialCode() != null && bean.getProductSpecialCode().getShortCode() != null) {
code = bean.getProductSpecialCode().getShortCode() + code;
dataCode = code;
if (ManagedProductSpecialCode.USER_ORDER.name().equals(bean.getProductSpecialCode().getCode().getName())) {
dataCode = null;
}
}
dto.setCode(code);
dto.setDataCode(dataCode);
CreditDto credit = (CreditDto) creditsAssembler.marshal(bean.getCredit());
dto.setCredit(credit);
ValueAddedTaxDto vat = null;
if (bean.getVat() != null) {
vat = (ValueAddedTaxDto) vatsAssembler.marshal(bean.getVat());
}
dto.setVat(vat);
if (bean.getDinnerTable() != null) {
DinnerTableDto dinnerTable = new DinnerTableDto();
dinnerTable.setId(bean.getDinnerTable().getId());
dto.setDinnerTable(dinnerTable);
}
dto.setLabel(bean.getLabel());
ProductDto product = (ProductDto) productsAssembler.marshal(bean.getProduct());
dto.setProduct(product);
ProductPartDto productPart = (ProductPartDto) productPartsAssembler.marshal(bean.getProductPart());
dto.setProductPart(productPart);
ProductSpecialCodeDto productSpecialCode = (ProductSpecialCodeDto) productSpecialCodesAssembler.marshal(bean.getProductSpecialCode());
dto.setProductSpecialCode(productSpecialCode);
dto.setQuantity(bean.getQuantity());
dto.setUnitPrice(bean.getUnitPrice());
}
return dto;
}
@Override
public IMdoDaoBean unmarshal(IMdoDtoBean dtoBean, IMdoDaoBean... parents) {
if (dtoBean == null) {
return null;
}
OrderLine bean = new OrderLine();
OrderLineDto dto = (OrderLineDto) dtoBean;
bean.setId(dto.getId());
bean.setAmount(dto.getAmount());
//bean.setCode(code);
Credit credit = (Credit) creditsAssembler.unmarshal(dto.getCredit());
bean.setCredit(credit);
ValueAddedTax vat = null;
if (dto.getVat() != null) {
vat = (ValueAddedTax) vatsAssembler.unmarshal(dto.getVat());
}
bean.setVat(vat);
DinnerTable dinnerTable = null;
if (parents != null && parents.length == 1) {
dinnerTable = (DinnerTable) parents[0];
}
if (dinnerTable == null && dto.getDinnerTable() != null) {
dto.getDinnerTable().setBills(null);
dinnerTable = new DinnerTable();
dinnerTable.setId(dto.getDinnerTable().getId());
}
bean.setDinnerTable(dinnerTable);
bean.setLabel(dto.getLabel());
Product product = (Product) productsAssembler.unmarshal(dto.getProduct());
bean.setProduct(product);
ProductPart productPart = (ProductPart) productPartsAssembler.unmarshal(dto.getProductPart());
bean.setProductPart(productPart);
ProductSpecialCode productSpecialCode = (ProductSpecialCode) productSpecialCodesAssembler.unmarshal(dto.getProductSpecialCode());
bean.setProductSpecialCode(productSpecialCode);
bean.setQuantity(dto.getQuantity());
bean.setUnitPrice(dto.getUnitPrice());
return bean;
}
@Override
public ILogger getLogger() {
return logger;
}
@Override
public void setLogger(ILogger logger) {
this.logger = logger;
}
}