1 package info.ejava.examples.ejb.cdisales.dao;
2
3 import java.util.Collections;
4 import java.util.List;
5
6 import info.ejava.examples.ejb.cdisales.bl.ProductCatalog;
7 import info.ejava.examples.ejb.cdisales.bo.Member;
8 import info.ejava.examples.ejb.cdisales.bo.Product;
9
10 import javax.enterprise.inject.Alternative;
11 import javax.inject.Inject;
12 import javax.inject.Named;
13 import javax.persistence.EntityManager;
14 import javax.persistence.TypedQuery;
15 import javax.persistence.criteria.CriteriaBuilder;
16 import javax.persistence.criteria.CriteriaQuery;
17 import javax.persistence.criteria.Expression;
18 import javax.persistence.criteria.Predicate;
19 import javax.persistence.criteria.Root;
20
21 @Named
22 public class ProductCatalogDAO implements ProductCatalog {
23 @Inject
24 private EntityManager em;
25
26 @Override
27 public Product addProduct(Product product) {
28 if (product==null) { return null; }
29 product=em.merge(product);
30 return product;
31 }
32
33 @Override
34 public List<Product> getProductsForSale(Product template, int offset, int limit) {
35 CriteriaBuilder cb = em.getCriteriaBuilder();
36 CriteriaQuery<Product> qdef = cb.createQuery(Product.class);
37 Root<Product> p = qdef.from(Product.class);
38 qdef.select(p).orderBy(cb.asc(p.get("name")));
39
40 Predicate pred = cb.conjunction();
41 if (template != null) {
42 List<Expression<Boolean>> expr = pred.getExpressions();
43 if (template.getCategory()!=null) {
44 expr.add(cb.equal(p.get("category"), template.getCategory()));
45 }
46 if (template.getName()!=null) {
47 String name = template.getName().replace("*", "%").trim();
48 expr.add(cb.like(p.<String>get("name"), name));
49 }
50 }
51 qdef.where(pred);
52
53 TypedQuery<Product> query = em.createQuery(qdef);
54 if (offset > 0) {
55 query.setFirstResult(offset);
56 }
57 if (limit > 0) {
58 query.setMaxResults(limit);
59 }
60 return query.getResultList();
61 }
62
63 @Override
64 public List<Product> getBuyerProducts(Member buyer, int offset, int limit) {
65 TypedQuery<Product> query = null;
66 if (buyer!=null) {
67 if (buyer.getId()!=0) {
68 query = em.createNamedQuery("CDIProduct.getProductsByBuyer", Product.class).setParameter("buyer", buyer);
69 } else if (buyer.getLogin()!=null) {
70 query = em.createNamedQuery("CDIProduct.getProductsByBuyerLogin", Product.class).setParameter("login", buyer.getLogin());
71 }
72 }
73 if (query!=null) {
74 if (offset > 0) {
75 query.setFirstResult(offset);
76 }
77 if (limit > 0) {
78 query.setMaxResults(limit);
79 }
80 }
81
82 return query==null ? Collections.<Product>emptyList() : query.getResultList();
83 }
84
85 @Override
86 public List<Product> getSellerProducts(Member seller, int offset, int limit) {
87 TypedQuery<Product> query = null;
88 if (seller!=null) {
89 if (seller.getId()!=0) {
90 query = em.createNamedQuery("CDIProduct.getProductsBySeller", Product.class).setParameter("seller", seller);
91 } else if (seller.getLogin()!=null) {
92 query = em.createNamedQuery("CDIProduct.getProductsBySellerLogin", Product.class).setParameter("login", seller.getLogin());
93 }
94 }
95 if (query!=null) {
96 if (offset > 0) {
97 query.setFirstResult(offset);
98 }
99 if (limit > 0) {
100 query.setMaxResults(limit);
101 }
102 }
103
104 return query==null ? Collections.<Product>emptyList() : query.getResultList();
105 }
106
107 @Override
108 public int remove(Product product) {
109 if (product==null || product.getId()==0) { return 0; }
110 product = em.find(Product.class, product.getId());
111 if (product!=null) {
112 em.remove(product);
113 return 1;
114 }
115 return 0;
116 }
117 }