CatalogImpl.java
- package ejava.examples.blpurchase.blimpl;
- import java.util.List;
- import javax.persistence.EntityManager;
- import javax.persistence.TypedQuery;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import ejava.examples.blpurchase.bl.Catalog;
- import ejava.examples.blpurchase.bo.Account;
- import ejava.examples.blpurchase.bo.Cart;
- import ejava.examples.blpurchase.bo.Product;
- public class CatalogImpl implements Catalog {
- private static final Logger logger = LoggerFactory.getLogger(CatalogImpl.class);
- private EntityManager em;
- public void setEntityManager(EntityManager entityManager) {
- em = entityManager;
- }
- @Override
- public List<Product> getProducts(int offset, int limit) {
- TypedQuery<Product> query = em.createNamedQuery(Product.GET_PRODUCTS_QUERY, Product.class);
- if (offset > 0) {
- query.setFirstResult(offset);
- }
- if (limit > 0) {
- query.setMaxResults(limit);
- }
- return query.getResultList();
- }
- @Override
- public int addToCart(int id, String email) {
- Product product = em.find(Product.class, id);
- if (product == null) {
- logger.warn("product not found: {}", id);
- return 0;
- }
- if (product.getCount()-1 < 0) {
- logger.warn("no product left");
- return 0;
- }
- product.setCount(product.getCount()-1);
- Cart cart = em.find(Cart.class, email);
- if (cart == null) {
- List<Account> accounts = em.createNamedQuery(
- Account.FIND_BY_EMAIL_QUERY, Account.class)
- .setParameter("email", email)
- .getResultList();
- if (accounts.size() == 0) {
- logger.warn("no account found for: {}", email);
- return 0;
- }
- cart = new Cart(accounts.get(0));
- em.persist(cart);
- }
- cart.getProducts().add(product);
-
- return cart.getProducts().size();
- }
- }