package cz.coffei.foodo.data.dao; import cz.coffei.foodo.data.entities.Ingredient; import cz.coffei.foodo.data.entities.IngredientGroup; import cz.coffei.foodo.data.entities.Ingredient_; 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.util.List; /** * Created by jtrantin on 26.7.15. */ @Stateless public class IngredientDao { @Inject private EntityManager em; public void create(Ingredient ingredient) throws EntityInvalidException { if(ingredient.getId()!=null) throw new EntityInvalidException("entity has non-null ID"); em.persist(ingredient); } public void update(Ingredient ingredient) throws EntityInvalidException { if(ingredient.getId()==null) throw new EntityInvalidException("entity has no ID"); em.merge(ingredient); } public void delete(Ingredient ingredient) throws EntityInvalidException { if(ingredient.getId()==null || ingredient.getGroup()==null) throw new EntityInvalidException("entity has no ID"); IngredientGroup group = null; if(!em.contains(ingredient)) { group = em.merge(ingredient.getGroup()); } group.getIngredients().remove(ingredient); // triggers removal of ingredient } public List<Ingredient> getAllIngredients() { CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery<Ingredient> query = cb.createQuery(Ingredient.class); Root<Ingredient> root = query.from(Ingredient.class); query.select(root); TypedQuery<Ingredient> typedQuery = em.createQuery(query); return typedQuery.getResultList(); } public List<Ingredient> getIngredientsInGroup(IngredientGroup group) { CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery<Ingredient> query = cb.createQuery(Ingredient.class); Root<Ingredient> root = query.from(Ingredient.class); query.select(root); query.where(cb.equal(root.get(Ingredient_.group), group)); TypedQuery<Ingredient> typedQuery = em.createQuery(query); return typedQuery.getResultList(); } public Ingredient getIngredientById(Long id) { CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery<Ingredient> query = cb.createQuery(Ingredient.class); Root<Ingredient> root = query.from(Ingredient.class); query.select(root); query.where(cb.equal(root.get(Ingredient_.id), id)); TypedQuery<Ingredient> typedQuery = em.createQuery(query); return typedQuery.getSingleResult(); } }