CatalogImpl.java

  1. package ejava.examples.blpurchase.blimpl;

  2. import java.util.List;

  3. import javax.persistence.EntityManager;
  4. import javax.persistence.TypedQuery;

  5. import org.slf4j.Logger;
  6. import org.slf4j.LoggerFactory;

  7. import ejava.examples.blpurchase.bl.Catalog;
  8. import ejava.examples.blpurchase.bo.Account;
  9. import ejava.examples.blpurchase.bo.Cart;
  10. import ejava.examples.blpurchase.bo.Product;

  11. public class CatalogImpl implements Catalog {
  12.     private static final Logger logger = LoggerFactory.getLogger(CatalogImpl.class);
  13.     private EntityManager em;

  14.     public void setEntityManager(EntityManager entityManager) {
  15.         em = entityManager;
  16.     }

  17.     @Override
  18.     public List<Product> getProducts(int offset, int limit) {
  19.         TypedQuery<Product> query = em.createNamedQuery(Product.GET_PRODUCTS_QUERY, Product.class);
  20.         if (offset > 0) {
  21.             query.setFirstResult(offset);
  22.         }
  23.         if (limit > 0) {
  24.             query.setMaxResults(limit);
  25.         }
  26.         return query.getResultList();
  27.     }

  28.     @Override
  29.     public int addToCart(int id, String email) {
  30.         Product product = em.find(Product.class, id);
  31.         if (product == null) {
  32.             logger.warn("product not found: {}", id);
  33.             return 0;
  34.         }
  35.         if (product.getCount()-1 < 0) {
  36.             logger.warn("no product left");
  37.             return 0;
  38.         }
  39.         product.setCount(product.getCount()-1);

  40.         Cart cart = em.find(Cart.class, email);
  41.         if (cart == null) {
  42.             List<Account> accounts = em.createNamedQuery(
  43.                     Account.FIND_BY_EMAIL_QUERY, Account.class)
  44.                     .setParameter("email", email)
  45.                     .getResultList();
  46.             if (accounts.size() == 0) {
  47.                 logger.warn("no account found for: {}", email);
  48.                 return 0;
  49.             }
  50.             cart = new Cart(accounts.get(0));
  51.             em.persist(cart);
  52.         }
  53.         cart.getProducts().add(product);
  54.        
  55.         return cart.getProducts().size();
  56.     }
  57. }