/*
* JBoss, Home of Professional Open Source
*
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
package com.jboss.dvd.seam;
import static org.jboss.seam.ScopeType.SESSION;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.ejb.Remove;
import javax.ejb.Stateful;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.PersistenceContextType;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
@Stateful
@Name("cart")
@Scope(SESSION)
public class ShoppingCartBean
implements ShoppingCart,
Serializable
{
static final long serialVersionUID = 8722576722482084467L;
@PersistenceContext(type=PersistenceContextType.EXTENDED)
EntityManager em;
Order cartOrder = new Order();
Map<Product,Boolean> cartSelection = new HashMap<Product,Boolean>();
public List<OrderLine> getCart() {
return cartOrder.getOrderLines();
}
public boolean getIsEmpty() {
return cartOrder.isEmpty();
}
public void addProduct(Product product, int quantity) {
cartOrder.addProduct(product,quantity);
cartOrder.calculateTotals();
}
@SuppressWarnings("unchecked")
public Map getCartSelection() {
return cartSelection;
}
public BigDecimal getSubtotal() {
return cartOrder.getNetAmount();
}
public BigDecimal getTax() {
return cartOrder.getTax();
}
public BigDecimal getTotal() {
return cartOrder.getTotalAmount();
}
public void updateCart() {
List<OrderLine> newLines = new ArrayList<OrderLine>();
for (OrderLine line: cartOrder.getOrderLines()) {
if (line.getQuantity() > 0) {
Boolean selected = cartSelection.get(line);
if (selected==null || !selected) {
newLines.add(line);
}
}
}
cartOrder.setOrderLines(newLines);
cartOrder.calculateTotals();
cartSelection = new HashMap<Product,Boolean>();
}
public void resetCart() {
cartOrder = new Order();
}
@Remove
public void destroy() {}
}