package fr.mch.mdo.restaurant.services.business.managers.assembler;
import java.util.HashSet;
import java.util.Set;
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.Product;
import fr.mch.mdo.restaurant.dao.beans.ProductCategory;
import fr.mch.mdo.restaurant.dao.beans.Restaurant;
import fr.mch.mdo.restaurant.dao.beans.ValueAddedTax;
import fr.mch.mdo.restaurant.dto.beans.ProductCategoryDto;
import fr.mch.mdo.restaurant.dto.beans.ProductDto;
import fr.mch.mdo.restaurant.dto.beans.RestaurantDto;
import fr.mch.mdo.restaurant.dto.beans.ValueAddedTaxDto;
import fr.mch.mdo.restaurant.services.logs.LoggerServiceImpl;
import fr.mch.mdo.utils.IManagerAssembler;
public class DefaultProductsAssembler extends AbstractAssembler implements IManagerAssembler, ILoggerBean
{
private ILogger logger;
private IManagerAssembler productCategoriesAssembler;
private IManagerAssembler restaurantsAssembler;
private IManagerAssembler vatsAssembler;
private static class LazyHolder {
private static IManagerAssembler instance = new DefaultProductsAssembler(LoggerServiceImpl.getInstance().getLogger(DefaultProductsAssembler.class.getName()));
}
private DefaultProductsAssembler(ILogger logger) {
this.setLogger(logger);
this.productCategoriesAssembler = DefaultProductCategoriesAssembler.getInstance();
this.restaurantsAssembler = DefaultRestaurantsAssembler.getInstance();
this.vatsAssembler = DefaultValueAddedTaxesAssembler.getInstance();
}
public static IManagerAssembler getInstance() {
return LazyHolder.instance;
}
public DefaultProductsAssembler() {
}
public IManagerAssembler getProductCategoriesAssembler() {
return productCategoriesAssembler;
}
public void setProductCategoriesAssembler(IManagerAssembler productCategoriesAssembler) {
this.productCategoriesAssembler = productCategoriesAssembler;
}
public IManagerAssembler getRestaurantsAssembler() {
return restaurantsAssembler;
}
public void setRestaurantsAssembler(IManagerAssembler restaurantsAssembler) {
this.restaurantsAssembler = restaurantsAssembler;
}
public IManagerAssembler getVatsAssembler() {
return vatsAssembler;
}
public void setVatsAssembler(IManagerAssembler vatsAssembler) {
this.vatsAssembler = vatsAssembler;
}
@SuppressWarnings("unchecked")
@Override
public IMdoDtoBean marshal(IMdoDaoBean daoBean) {
ProductDto dto = null;
if (daoBean != null) {
Product bean = (Product) daoBean;
dto = new ProductDto();
dto.setId(bean.getId());
dto.setCode(bean.getCode());
dto.setColorRGB(bean.getColorRGB());
dto.setPrice(bean.getPrice());
RestaurantDto restaurant = (RestaurantDto) restaurantsAssembler.marshal(bean.getRestaurant());
dto.setRestaurant(restaurant);
ValueAddedTaxDto vat = (ValueAddedTaxDto) vatsAssembler.marshal(bean.getVat());
dto.setVat(vat);
@SuppressWarnings("rawtypes")
Set<ProductCategoryDto> categories = (Set) productCategoriesAssembler.marshal(bean.getCategories());
dto.setCategories(categories);
dto.setLabels(super.getLabels(bean.getLabels()));
}
return dto;
}
@SuppressWarnings({ "unchecked", "rawtypes" })
@Override
public IMdoDaoBean unmarshal(IMdoDtoBean dtoBean, IMdoDaoBean... parents) {
if (dtoBean == null) {
return null;
}
Product bean = new Product();
ProductDto dto = (ProductDto) dtoBean;
bean.setId(dto.getId());
bean.setCode(dto.getCode());
bean.setColorRGB(dto.getColorRGB());
bean.setPrice(dto.getPrice());
bean.setLabels(dto.getLabels());
Restaurant restaurant = (Restaurant) restaurantsAssembler.unmarshal(dto.getRestaurant());
bean.setRestaurant(restaurant);
ValueAddedTax vat = (ValueAddedTax) vatsAssembler.unmarshal(dto.getVat());
bean.setVat(vat);
Set<ProductCategory> categories = new HashSet<ProductCategory>();
if (dto.getCategories() != null) {
categories = (Set) productCategoriesAssembler.unmarshal(dto.getCategories(), bean);
}
bean.setCategories(categories);
return bean;
}
@Override
public ILogger getLogger() {
return logger;
}
@Override
public void setLogger(ILogger logger) {
this.logger = logger;
}
}