package cz.coffei.foodo.data.dao; import cz.coffei.foodo.data.entities.MenuItem; import cz.coffei.foodo.data.entities.MenuItem_; import cz.coffei.foodo.data.exceptions.EntityInvalidException; import javax.ejb.Stateless; import javax.inject.Inject; import javax.persistence.EntityManager; import javax.persistence.TypedQuery; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Root; import java.sql.Date; import java.util.List; /** * Created by jtrantin on 25.7.15. */ @Stateless public class MenuDao { @Inject private EntityManager em; public void create(MenuItem menu) throws EntityInvalidException { if(menu.getId()!=null) throw new EntityInvalidException("entity has non-null ID"); em.persist(menu); } public void update(MenuItem menu) throws EntityInvalidException { if(menu.getId()==null) throw new EntityInvalidException("entity has no ID"); em.merge(menu); } public void delete(MenuItem menu) throws EntityInvalidException { if(menu.getId()==null) throw new EntityInvalidException("entity has no ID"); if(!em.contains(menu)) { menu = em.merge(menu); } em.remove(menu); } public MenuItem getMenuItem(Long id) { CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery<MenuItem> query = cb.createQuery(MenuItem.class); Root<MenuItem> root = query.from(MenuItem.class); query.select(root); query.where(cb.equal(root.get(MenuItem_.id), id)); TypedQuery<MenuItem> typedQuery = em.createQuery(query); return typedQuery.getSingleResult(); } /** * Retrieves MenuItems in the specified range, inclusive. * @param from inclusive from date * @param to inclusive to date * @return list of menus in the range, order is random */ public List<MenuItem> getMenusItemsInRange(Date from, Date to) { if(from.after(to)) throw new IllegalArgumentException("invalid date interval"); CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery<MenuItem> query = cb.createQuery(MenuItem.class); Root<MenuItem> root = query.from(MenuItem.class); query.select(root); query.where( cb.greaterThanOrEqualTo(root.get(MenuItem_.date), from), cb.lessThanOrEqualTo(root.get(MenuItem_.date), to) ); TypedQuery<MenuItem> typedQuery = em.createQuery(query); return typedQuery.getResultList(); } public List<MenuItem> getAllMenuItems() { CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery<MenuItem> query = cb.createQuery(MenuItem.class); Root<MenuItem> root = query.from(MenuItem.class); query.select(root); TypedQuery<MenuItem> typedQuery = em.createQuery(query); return typedQuery.getResultList(); } }