/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package veolia.core.dao; import java.util.ArrayList; import java.util.HashSet; import java.util.Set; import java.util.List; import javax.ejb.Stateless; import javax.persistence.EntityManager; import javax.persistence.NoResultException; import javax.persistence.PersistenceContext; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Join; import javax.persistence.criteria.JoinType; import javax.persistence.criteria.Root; import veolia.core.entities.*; /** * * @author KCLARA */ @Stateless public class UserFacade extends AbstractFacade { @PersistenceContext(unitName = "VeoliaPU") private EntityManager em; @Override protected EntityManager getEntityManager() { return em; } public UserFacade() { super(User.class); } public User findUserByUsername(String username) { CriteriaBuilder cb = getEntityManager().getCriteriaBuilder(); CriteriaQuery query = cb.createQuery(User.class); try { Root user = query.from(User.class); query.where(cb.equal(user.get(User_.email), username)); return getEntityManager().createQuery(query).getSingleResult(); } catch (NoResultException e) { return null; } } public List getModules(User current) { List modules; CriteriaBuilder cb = getEntityManager().getCriteriaBuilder(); CriteriaQuery query = cb.createQuery(Module.class); Root root_module = query.from(Module.class); Root root_user = query.from(User.class); Root root_permission = query.from(Permission.class); Root root_group = query.from(Group.class); Join join_module_permission = root_module.join(Module_.permissions); Join join_permission_user = root_permission.join(Permission_.users); query.where(cb.equal(root_user.get(User_.email), current.getEmail())); modules = getEntityManager().createQuery(query).getResultList(); /* SELECT * FROM core_module m WHERE m.id IN ( SELECT m.id FROM core_module m INNER JOIN modules_permissions mp ON mp.modules_id = m.id INNER JOIN core_permission p ON p.id = mp.permissions_id INNER JOIN users_permissions up ON p.id = up.permissions_id INNER JOIN core_user u ON u.id = 1 ) OR m.id IN ( SELECT m.id FROM core_module m INNER JOIN modules_permissions mp ON m.id = mp.modules_id INNER JOIN core_permission p ON p.id = mp.permissions_id INNER JOIN groups_permissions gp ON gp.permissions_id = p.id INNER JOIN core_group g ON g.id = gp.groups_id INNER JOIN users_groups ug ON g.id = ug.groups_id INNER JOIN core_user u ON u.id = ug.users_id WHERE u.id = 1 ) */ return modules; } }