View Javadoc
1   package ejava.examples.blpurchase.blimpl;
2   
3   import java.util.List;
4   
5   import javax.persistence.EntityManager;
6   import javax.persistence.Query;
7   
8   import org.apache.commons.logging.Log;
9   import org.apache.commons.logging.LogFactory;
10  
11  import ejava.examples.blpurchase.bl.Catalog;
12  import ejava.examples.blpurchase.bo.Account;
13  import ejava.examples.blpurchase.bo.Cart;
14  import ejava.examples.blpurchase.bo.Product;
15  
16  public class CatalogImpl implements Catalog {
17  	private static final Log log = LogFactory.getLog(CatalogImpl.class);
18  	private EntityManager em;
19  
20  	public void setEntityManager(EntityManager entityManager) {
21  		em = entityManager;
22  	}
23  
24  	@SuppressWarnings("unchecked")
25  	@Override
26  	public List<Product> getProducts(int offset, int limit) {
27  		Query query = em.createQuery("select p from Product p");
28  		if (offset > 0) {
29  			query.setFirstResult(offset);
30  		}
31  		if (limit > 0) {
32  			query.setMaxResults(limit);
33  		}
34  		return query.getResultList();
35  	}
36  
37  	@Override
38  	public int addToCart(int id, String email) {
39  		Product product = em.find(Product.class, id);
40  		if (product == null) {
41  			log.warn("product not found:" + id);
42  			return 0;
43  		}
44  		if (product.getCount()-1 < 0) {
45  			log.warn("no product left");
46  			return 0;
47  		}
48  		product.setCount(product.getCount()-1);
49  
50  		Cart cart = em.find(Cart.class, email);
51  		if (cart == null) {
52  			List<Account> accounts = em.createNamedQuery(
53  					Account.FIND_BY_EMAIL, Account.class)
54  					.setParameter("email", email)
55  					.getResultList();
56  			if (accounts.size() == 0) {
57  				log.warn("no account found for:" + email);
58  				return 0;
59  			}
60  			cart = new Cart(accounts.get(0));
61  			em.persist(cart);
62  		}
63  		cart.getProducts().add(product);
64  		
65  		return cart.getProducts().size();
66  	}
67  }