ReadableOrderProductPopulator.java
Home
/
sm-shop /
src /
main /
java /
com /
salesmanager /
web /
populator /
order /
ReadableOrderProductPopulator.java
package com.salesmanager.web.populator.order;
import java.math.BigDecimal;
import java.util.Set;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.Validate;
import com.salesmanager.core.business.catalog.product.model.Product;
import com.salesmanager.core.business.catalog.product.model.image.ProductImage;
import com.salesmanager.core.business.catalog.product.service.PricingService;
import com.salesmanager.core.business.catalog.product.service.ProductService;
import com.salesmanager.core.business.generic.exception.ConversionException;
import com.salesmanager.core.business.merchant.model.MerchantStore;
import com.salesmanager.core.business.order.model.orderproduct.OrderProduct;
import com.salesmanager.core.business.reference.language.model.Language;
import com.salesmanager.core.utils.AbstractDataPopulator;
import com.salesmanager.web.entity.catalog.product.ReadableProduct;
import com.salesmanager.web.entity.order.ReadableOrderProduct;
import com.salesmanager.web.populator.catalog.ReadableProductPopulator;
public class ReadableOrderProductPopulator extends
AbstractDataPopulator<OrderProduct, ReadableOrderProduct> {
private ProductService productService;
private PricingService pricingService;
@Override
public ReadableOrderProduct populate(OrderProduct source,
ReadableOrderProduct target, MerchantStore store, Language language)
throws ConversionException {
Validate.notNull(productService,"Requires ProductService");
Validate.notNull(pricingService,"Requires PricingService");
target.setId(source.getId());
target.setOrderedQuantity(source.getProductQuantity());
try {
target.setPrice(pricingService.getDisplayAmount(source.getOneTimeCharge(), store));
} catch(Exception e) {
throw new ConversionException("Cannot convert price",e);
}
target.setProductName(source.getProductName());
target.setSku(source.getSku());
//subtotal = price * quantity
BigDecimal subTotal = source.getOneTimeCharge();
subTotal = subTotal.multiply(new BigDecimal(source.getProductQuantity()));
try {
String subTotalPrice = pricingService.getDisplayAmount(subTotal, store);
target.setSubTotal(subTotalPrice);
} catch(Exception e) {
throw new ConversionException("Cannot format price",e);
}
if(productService!=null && pricingService!=null) {
String productSku = source.getSku();
if(!StringUtils.isBlank(productSku)) {
Product product = productService.getByCode(productSku, language);
if(product!=null) {
ReadableProductPopulator populator = new ReadableProductPopulator();
populator.setPricingService(pricingService);
ReadableProduct productProxy = populator.populate(product, new ReadableProduct(), store, language);
target.setProduct(productProxy);
Set<ProductImage> images = product.getImages();
ProductImage defaultImage = null;
if(images!=null) {
for(ProductImage image : images) {
if(defaultImage==null) {
defaultImage = image;
}
if(image.isDefaultImage()) {
defaultImage = image;
}
}
}
if(defaultImage!=null) {
target.setImage(defaultImage.getProductImage());
}
}
}
}
return target;
}
@Override
protected ReadableOrderProduct createTarget() {
return null;
}
public ProductService getProductService() {
return productService;
}
public void setProductService(ProductService productService) {
this.productService = productService;
}
public PricingService getPricingService() {
return pricingService;
}
public void setPricingService(PricingService pricingService) {
this.pricingService = pricingService;
}
}