package persistencia; import java.util.List; import javax.ejb.Stateless; import javax.persistence.TypedQuery; @Stateless public class UsuarioDAOImpl extends BaseDAO<Usuario> implements UsuarioDAO { private static final String findAllQuery = "SELECT u FROM Usuario u"; private static final String checkLoginQuery = "SELECT u.id " + "FROM Usuario u " + "WHERE u.nombre = :userName " + "AND u.password = :password " + "AND u.facebookUser = 0"; private static final String buscarUsuarioFacebook = "SELECT u.id FROM Usuario u " + "WHERE u.nombre = :nombre " + "AND u.facebookUser = 1"; private static final String obtenerContactosQuery = "SELECT u1 FROM Usuario u2, Usuario u1 " + "WHERE u2.id = :id " + "AND u1 MEMBER OF u2.contactos"; private static final String obtenerContactoQuery = "SELECT u1 FROM Usuario u2, Usuario u1 " + "WHERE u2.id = :id " + "AND u2.id = :idContacto " + "AND u1 MEMBER OF u2.contactos"; private static final String buscarUsuariosQuery = "SELECT u FROM Usuario u " + "WHERE u.nombre LIKE :nombre"; private static final String obtenerCategoriaQuery = "SELECT c FROM Usuario u JOIN u.categorias c " + "WHERE u.id = :idUsuario AND " + "c.id = :idCategoria"; @Override public Usuario buscarPorId(int id) { Usuario ret = em.find(Usuario.class, id); return ret; } @Override public List<Usuario> obtenerTodos() { TypedQuery<Usuario> ret = em.createQuery( findAllQuery, Usuario.class); return ret.getResultList(); } @Override public int checkLogin(String nombre, String password) { TypedQuery<Integer> query = em.createQuery(checkLoginQuery, Integer.class); query.setParameter("userName", nombre); query.setParameter("password", password); List<Integer> resultado = query.getResultList(); int ret = -1; if (!resultado.isEmpty() && (resultado.size() == 1)) { ret = resultado.get(0); } return ret; } @Override public int checkLoginUsuarioFacebook(String nombre) { TypedQuery<Integer> query = em.createQuery(buscarUsuarioFacebook, Integer.class); query.setParameter("nombre", nombre); List<Integer> resultado = query.getResultList(); int ret = -1; if (!resultado.isEmpty()) { ret = resultado.get(0); } return ret; } @Override public List<Usuario> obtenerContactos(int idUsuario) { TypedQuery<Usuario> query = em.createQuery(obtenerContactosQuery, Usuario.class); query.setParameter("id", idUsuario); return query.getResultList(); } @Override public Usuario obtenerContacto(int idUsuario, int idContacto) { TypedQuery<Usuario> query = em.createQuery(obtenerContactoQuery, Usuario.class); query.setParameter("id", idUsuario); query.setParameter("idContacto", idContacto); List<Usuario> contactos = query.getResultList(); Usuario ret = null; if (!contactos.isEmpty()) { ret = contactos.get(0); } return ret; } @Override public List<Usuario> buscarUsuarios(String nombre) { TypedQuery<Usuario> query = em.createQuery(buscarUsuariosQuery, Usuario.class); nombre = nombre + "%"; query.setParameter("nombre", nombre); return query.getResultList(); } @Override public Categoria obtenerCategoria(int idUsuario, int idCategoria) { TypedQuery<Categoria> query = em.createQuery(obtenerCategoriaQuery, Categoria.class); query.setParameter("idUsuario", idUsuario); query.setParameter("idCategoria", idCategoria); List<Categoria> categorias = query.getResultList(); Categoria ret = null; if (!categorias.isEmpty()) { ret = categorias.get(0); } return ret; } }