ShoppingCartDataPopulator.java
Home
/
sm-shop /
src /
main /
java /
com /
salesmanager /
web /
populator /
shoppingCart /
ShoppingCartDataPopulator.java
/**
*
*/
package com.salesmanager.web.populator.shoppingCart;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.configuration.ConversionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.salesmanager.core.business.catalog.product.model.attribute.ProductOptionDescription;
import com.salesmanager.core.business.catalog.product.model.attribute.ProductOptionValueDescription;
import com.salesmanager.core.business.catalog.product.model.image.ProductImage;
import com.salesmanager.core.business.catalog.product.service.PricingService;
import com.salesmanager.core.business.generic.exception.ServiceException;
import com.salesmanager.core.business.merchant.model.MerchantStore;
import com.salesmanager.core.business.order.model.OrderSummary;
import com.salesmanager.core.business.order.model.OrderTotalSummary;
import com.salesmanager.core.business.reference.language.model.Language;
import com.salesmanager.core.business.shoppingcart.model.ShoppingCart;
import com.salesmanager.core.business.shoppingcart.service.ShoppingCartCalculationService;
import com.salesmanager.core.utils.AbstractDataPopulator;
import com.salesmanager.web.entity.order.OrderTotal;
import com.salesmanager.web.entity.shoppingcart.ShoppingCartAttribute;
import com.salesmanager.web.entity.shoppingcart.ShoppingCartData;
import com.salesmanager.web.entity.shoppingcart.ShoppingCartItem;
import com.salesmanager.web.utils.ImageFilePathUtils;
/**
* @author Umesh A
*
*/
public class ShoppingCartDataPopulator extends AbstractDataPopulator<ShoppingCart,ShoppingCartData>
{
private static final Logger LOG = LoggerFactory.getLogger(ShoppingCartDataPopulator.class);
private PricingService pricingService;
private ShoppingCartCalculationService shoppingCartCalculationService;
@Override
public ShoppingCartData createTarget()
{
return new ShoppingCartData();
}
public ShoppingCartCalculationService getOrderService() {
return shoppingCartCalculationService;
}
public PricingService getPricingService() {
return pricingService;
}
@Override
public ShoppingCartData populate(final ShoppingCart shoppingCart,
final ShoppingCartData cart, final MerchantStore store, final Language language) {
int cartQuantity = 0;
cart.setCode(shoppingCart.getShoppingCartCode());
Set<com.salesmanager.core.business.shoppingcart.model.ShoppingCartItem> items = shoppingCart.getLineItems();
List<ShoppingCartItem> shoppingCartItemsList=Collections.emptyList();
try{
if(items!=null) {
shoppingCartItemsList=new ArrayList<ShoppingCartItem>();
for(com.salesmanager.core.business.shoppingcart.model.ShoppingCartItem item : items) {
ShoppingCartItem shoppingCartItem = new ShoppingCartItem();
shoppingCartItem.setCode(cart.getCode());
shoppingCartItem.setProductCode(item.getProduct().getSku());
shoppingCartItem.setProductVirtual(item.isProductVirtual());
shoppingCartItem.setProductId(item.getProductId());
shoppingCartItem.setId(item.getId());
shoppingCartItem.setName(item.getProduct().getProductDescription().getName());
shoppingCartItem.setPrice(pricingService.getDisplayAmount(item.getItemPrice(),store));
shoppingCartItem.setQuantity(item.getQuantity());
cartQuantity = cartQuantity + item.getQuantity();
shoppingCartItem.setProductPrice(item.getItemPrice());
shoppingCartItem.setSubTotal(pricingService.getDisplayAmount(item.getSubTotal(), store));
ProductImage image = item.getProduct().getProductImage();
if(image!=null) {
String imagePath = ImageFilePathUtils.buildProductImageFilePath(store, item.getProduct().getSku(), image.getProductImage());
shoppingCartItem.setImage(imagePath);
}
Set<com.salesmanager.core.business.shoppingcart.model.ShoppingCartAttributeItem> attributes = item.getAttributes();
if(attributes!=null) {
List<ShoppingCartAttribute> cartAttributes = new ArrayList<ShoppingCartAttribute>();
for(com.salesmanager.core.business.shoppingcart.model.ShoppingCartAttributeItem attribute : attributes) {
ShoppingCartAttribute cartAttribute = new ShoppingCartAttribute();
cartAttribute.setId(attribute.getId());
cartAttribute.setAttributeId(attribute.getProductAttributeId());
cartAttribute.setOptionId(attribute.getProductAttribute().getProductOption().getId());
cartAttribute.setOptionValueId(attribute.getProductAttribute().getProductOptionValue().getId());
List<ProductOptionDescription> optionDescriptions = attribute.getProductAttribute().getProductOption().getDescriptionsSettoList();
List<ProductOptionValueDescription> optionValueDescriptions = attribute.getProductAttribute().getProductOptionValue().getDescriptionsSettoList();
if(!CollectionUtils.isEmpty(optionDescriptions) && !CollectionUtils.isEmpty(optionValueDescriptions)) {
cartAttribute.setOptionName(optionDescriptions.get(0).getName());
cartAttribute.setOptionValue(optionValueDescriptions.get(0).getName());
cartAttributes.add(cartAttribute);
}
}
shoppingCartItem.setShoppingCartAttributes(cartAttributes);
}
shoppingCartItemsList.add(shoppingCartItem);
}
}
if(CollectionUtils.isNotEmpty(shoppingCartItemsList)){
cart.setShoppingCartItems(shoppingCartItemsList);
}
OrderSummary summary = new OrderSummary();
List<com.salesmanager.core.business.shoppingcart.model.ShoppingCartItem> productsList = new ArrayList<com.salesmanager.core.business.shoppingcart.model.ShoppingCartItem>();
productsList.addAll(shoppingCart.getLineItems());
summary.setProducts(productsList);
OrderTotalSummary orderSummary = shoppingCartCalculationService.calculate(shoppingCart,store, language );
if(CollectionUtils.isNotEmpty(orderSummary.getTotals())) {
List<OrderTotal> totals = new ArrayList<OrderTotal>();
for(com.salesmanager.core.business.order.model.OrderTotal t : orderSummary.getTotals()) {
OrderTotal total = new OrderTotal();
total.setCode(t.getOrderTotalCode());
total.setValue(t.getValue());
totals.add(total);
}
cart.setTotals(totals);
}
cart.setSubTotal(pricingService.getDisplayAmount(orderSummary.getSubTotal(), store));
cart.setTotal(pricingService.getDisplayAmount(orderSummary.getTotal(), store));
cart.setQuantity(cartQuantity);
cart.setId(shoppingCart.getId());
}
catch(ServiceException ex){
LOG.error( "Error while converting cart Model to cart Data.."+ex );
throw new ConversionException( "Unable to create cart data", ex );
}
return cart;
};
public void setPricingService(final PricingService pricingService) {
this.pricingService = pricingService;
}
public void setShoppingCartCalculationService(final ShoppingCartCalculationService shoppingCartCalculationService) {
this.shoppingCartCalculationService = shoppingCartCalculationService;
}
}