View Javadoc
1   package ejava.examples.blpurchase.blimpl;
2   
3   import java.util.List;
4   
5   import javax.persistence.EntityManager;
6   import javax.persistence.TypedQuery;
7   
8   import org.slf4j.Logger;
9   import org.slf4j.LoggerFactory;
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 Logger logger = LoggerFactory.getLogger(CatalogImpl.class);
18  	private EntityManager em;
19  
20  	public void setEntityManager(EntityManager entityManager) {
21  		em = entityManager;
22  	}
23  
24  	@Override
25  	public List<Product> getProducts(int offset, int limit) {
26  		TypedQuery<Product> query = em.createNamedQuery(Product.GET_PRODUCTS_QUERY, Product.class);
27  		if (offset > 0) {
28  			query.setFirstResult(offset);
29  		}
30  		if (limit > 0) {
31  			query.setMaxResults(limit);
32  		}
33  		return query.getResultList();
34  	}
35  
36  	@Override
37  	public int addToCart(int id, String email) {
38  		Product product = em.find(Product.class, id);
39  		if (product == null) {
40  			logger.warn("product not found: {}", id);
41  			return 0;
42  		}
43  		if (product.getCount()-1 < 0) {
44  			logger.warn("no product left");
45  			return 0;
46  		}
47  		product.setCount(product.getCount()-1);
48  
49  		Cart cart = em.find(Cart.class, email);
50  		if (cart == null) {
51  			List<Account> accounts = em.createNamedQuery(
52  					Account.FIND_BY_EMAIL_QUERY, Account.class)
53  					.setParameter("email", email)
54  					.getResultList();
55  			if (accounts.size() == 0) {
56  				logger.warn("no account found for: {}", email);
57  				return 0;
58  			}
59  			cart = new Cart(accounts.get(0));
60  			em.persist(cart);
61  		}
62  		cart.getProducts().add(product);
63  		
64  		return cart.getProducts().size();
65  	}
66  }