ShoppingCartModelPopulator.java
Home
/
sm-shop /
src /
main /
java /
com /
salesmanager /
web /
populator /
shoppingCart /
ShoppingCartModelPopulator.java
/**
*
*/
package com.salesmanager.web.populator.shoppingCart;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.configuration.ConversionException;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import com.salesmanager.core.business.catalog.product.model.Product;
import com.salesmanager.core.business.catalog.product.model.attribute.ProductAttribute;
import com.salesmanager.core.business.catalog.product.service.ProductService;
import com.salesmanager.core.business.catalog.product.service.attribute.ProductAttributeService;
import com.salesmanager.core.business.customer.model.Customer;
import com.salesmanager.core.business.generic.exception.ServiceException;
import com.salesmanager.core.business.merchant.model.MerchantStore;
import com.salesmanager.core.business.reference.language.model.Language;
import com.salesmanager.core.business.shoppingcart.model.ShoppingCart;
import com.salesmanager.core.business.shoppingcart.service.ShoppingCartService;
import com.salesmanager.core.utils.AbstractDataPopulator;
import com.salesmanager.web.entity.shoppingcart.ShoppingCartAttribute;
import com.salesmanager.web.entity.shoppingcart.ShoppingCartData;
import com.salesmanager.web.entity.shoppingcart.ShoppingCartItem;
/**
* @author Umesh A
*/
@Service(value="shoppingCartModelPopulator")
public class ShoppingCartModelPopulator
extends AbstractDataPopulator<ShoppingCartData,ShoppingCart>
{
private static final Logger LOG = LoggerFactory.getLogger(ShoppingCartModelPopulator.class);
private ShoppingCartService shoppingCartService;
private Customer customer;
public ShoppingCartService getShoppingCartService() {
return shoppingCartService;
}
public void setShoppingCartService(ShoppingCartService shoppingCartService) {
this.shoppingCartService = shoppingCartService;
}
private ProductService productService;
public ProductService getProductService() {
return productService;
}
public void setProductService(ProductService productService) {
this.productService = productService;
}
private ProductAttributeService productAttributeService;
public ProductAttributeService getProductAttributeService() {
return productAttributeService;
}
public void setProductAttributeService(
ProductAttributeService productAttributeService) {
this.productAttributeService = productAttributeService;
}
@Override
public ShoppingCart populate(ShoppingCartData shoppingCart,ShoppingCart cartMdel,final MerchantStore store, Language language)
{
// if id >0 get the original from the database, override products
try{
if ( shoppingCart.getId() > 0 && StringUtils.isNotBlank( shoppingCart.getCode()))
{
cartMdel = shoppingCartService.getByCode( shoppingCart.getCode(), store );
if(cartMdel==null){
cartMdel=new ShoppingCart();
cartMdel.setShoppingCartCode( shoppingCart.getCode() );
cartMdel.setMerchantStore( store );
if ( customer != null )
{
cartMdel.setCustomerId( customer.getId() );
}
shoppingCartService.create( cartMdel );
}
}
else
{
cartMdel.setShoppingCartCode( shoppingCart.getCode() );
cartMdel.setMerchantStore( store );
if ( customer != null )
{
cartMdel.setCustomerId( customer.getId() );
}
shoppingCartService.create( cartMdel );
}
List<ShoppingCartItem> items = shoppingCart.getShoppingCartItems();
Set<com.salesmanager.core.business.shoppingcart.model.ShoppingCartItem> newItems =
new HashSet<com.salesmanager.core.business.shoppingcart.model.ShoppingCartItem>();
if ( items != null && items.size() > 0 )
{
for ( ShoppingCartItem item : items )
{
Set<com.salesmanager.core.business.shoppingcart.model.ShoppingCartItem> cartItems = cartMdel.getLineItems();
if ( cartItems != null && cartItems.size() > 0 )
{
for ( com.salesmanager.core.business.shoppingcart.model.ShoppingCartItem dbItem : cartItems )
{
if ( dbItem.getId().longValue() == item.getId() )
{
dbItem.setQuantity( item.getQuantity() );
// compare attributes
Set<com.salesmanager.core.business.shoppingcart.model.ShoppingCartAttributeItem> attributes =
dbItem.getAttributes();
Set<com.salesmanager.core.business.shoppingcart.model.ShoppingCartAttributeItem> newAttributes =
new HashSet<com.salesmanager.core.business.shoppingcart.model.ShoppingCartAttributeItem>();
List<ShoppingCartAttribute> cartAttributes = item.getShoppingCartAttributes();
if ( !CollectionUtils.isEmpty( cartAttributes ) )
{
for ( ShoppingCartAttribute attribute : cartAttributes )
{
for ( com.salesmanager.core.business.shoppingcart.model.ShoppingCartAttributeItem dbAttribute : attributes )
{
if ( dbAttribute.getId().longValue() == attribute.getId() )
{
newAttributes.add( dbAttribute );
}
}
}
dbItem.setAttributes( newAttributes );
}
else
{
dbItem.removeAllAttributes();
}
newItems.add( dbItem );
}
}
}
else
{// create new item
com.salesmanager.core.business.shoppingcart.model.ShoppingCartItem cartItem =
createCartItem( cartMdel, item, store );
Set<com.salesmanager.core.business.shoppingcart.model.ShoppingCartItem> lineItems =
cartMdel.getLineItems();
if ( lineItems == null )
{
lineItems = new HashSet<com.salesmanager.core.business.shoppingcart.model.ShoppingCartItem>();
cartMdel.setLineItems( lineItems );
}
lineItems.add( cartItem );
shoppingCartService.update( cartMdel );
}
}// end for
}// end if
}catch(ServiceException se){
LOG.error( "Error while converting cart data to cart model.."+se );
throw new ConversionException( "Unable to create cart model", se );
}
catch (Exception ex){
LOG.error( "Error while converting cart data to cart model.."+ex );
throw new ConversionException( "Unable to create cart model", ex );
}
return cartMdel;
}
private com.salesmanager.core.business.shoppingcart.model.ShoppingCartItem createCartItem( com.salesmanager.core.business.shoppingcart.model.ShoppingCart cart,
ShoppingCartItem shoppingCartItem,
MerchantStore store )
throws Exception
{
Product product = productService.getById( shoppingCartItem.getProductId() );
if ( product == null )
{
throw new Exception( "Item with id " + shoppingCartItem.getProductId() + " does not exist" );
}
if ( product.getMerchantStore().getId().intValue() != store.getId().intValue() )
{
throw new Exception( "Item with id " + shoppingCartItem.getProductId() + " does not belong to merchant "
+ store.getId() );
}
com.salesmanager.core.business.shoppingcart.model.ShoppingCartItem item =
new com.salesmanager.core.business.shoppingcart.model.ShoppingCartItem( cart, product );
item.setQuantity( shoppingCartItem.getQuantity() );
item.setItemPrice( shoppingCartItem.getProductPrice() );
item.setShoppingCart( cart );
// attributes
List<ShoppingCartAttribute> cartAttributes = shoppingCartItem.getShoppingCartAttributes();
if ( !CollectionUtils.isEmpty( cartAttributes ) )
{
Set<com.salesmanager.core.business.shoppingcart.model.ShoppingCartAttributeItem> newAttributes =
new HashSet<com.salesmanager.core.business.shoppingcart.model.ShoppingCartAttributeItem>();
for ( ShoppingCartAttribute attribute : cartAttributes )
{
ProductAttribute productAttribute = productAttributeService.getById( attribute.getAttributeId() );
if ( productAttribute != null
&& productAttribute.getProduct().getId().longValue() == product.getId().longValue() )
{
com.salesmanager.core.business.shoppingcart.model.ShoppingCartAttributeItem attributeItem =
new com.salesmanager.core.business.shoppingcart.model.ShoppingCartAttributeItem( item,
productAttribute );
if ( attribute.getAttributeId() > 0 )
{
attributeItem.setId( attribute.getId() );
}
item.addAttributes( attributeItem );
//newAttributes.add( attributeItem );
}
}
//item.setAttributes( newAttributes );
}
return item;
}
@Override
protected ShoppingCart createTarget()
{
return new ShoppingCart();
}
public Customer getCustomer() {
return customer;
}
public void setCustomer(Customer customer) {
this.customer = customer;
}
}