modelo.dao.UsuarioDAO.java Source code

Java tutorial

Introduction

Here is the source code for modelo.dao.UsuarioDAO.java

Source

/*
 * Copyright (C) 2015 Fernando Enrique Avendao Hernndez, Alfredo Rouse Madrigal
 *
 * This file is part of MatExmenes.
 *
 * MatExmenes is free software; you can redistribute it and/or modify it under
 * the terms of the GNU General Public License as published by the Free Software
 * Foundation; either version 2 of the License, or (at your option) any later
 * version.
 *
 * MatExmenes is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
 * details.
 *
 * You should have received a copy of the GNU General Public License along with
 * this program; if not, write to the Free Software Foundation, Inc., 51
 * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 */
package modelo.dao;

import java.util.List;
import modelo.dto.UsuarioDTO;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;
import modelo.dto.UsuarioDTO.Tipo;
import org.hibernate.Query;
import org.hibernate.criterion.Order;

/**
 * Esta clase es un dao de UsuarioDTO para los mtodos especficos a este objeto
 * dto, proporciona la funcionalidad necesaria accediendo a la base de datos
 *
 * @author Fernando Enrique Avendao Hernndez, Alfredo Rouse Madrigal
 * @version 1 18 Mayo 2015
 */
public class UsuarioDAO extends BaseDAO<UsuarioDTO, Integer> {

    /**
     * Esta cadena es un query en hql que regresa los alumnos que no pertenecen
     * a un grupo por su apellido paterno.
     */
    private final String GET_ALUMNOS_SIN_ASIGNAR = "SELECT DISTINCT a2 FROM " + "UsuarioDTO AS a2 WHERE a2 NOT IN"
            + "(SELECT ELEMENTS(g.alumnos) FROM GrupoDTO AS g) and a2.tipo = "
            + "'Alumno' and a2.apellidoPaterno like ?";

    /**
     * Esta cadena es un query en hql que regresa los alumnos que no pertenecen
     * a un grupo por su apellido materno.
     */
    private final String GET_ALUMNOS_SIN_ASIGNAR_APPM = "SELECT DISTINCT a2 FROM "
            + "UsuarioDTO AS a2 WHERE a2 NOT IN" + "(SELECT ELEMENTS(g.alumnos) FROM GrupoDTO AS g) and a2.tipo = "
            + "'Alumno' and a2.apellidoMaterno like ?";

    /**
     * Esta cadena es un query en hql que regresa los alumnos que no pertenecen
     * a un grupo por su nombre.
     */
    private final String GET_ALUMNOS_SIN_ASIGNAR_NOM = "SELECT DISTINCT a2 FROM "
            + "UsuarioDTO AS a2 WHERE a2 NOT IN" + "(SELECT ELEMENTS(g.alumnos) FROM GrupoDTO AS g) and a2.tipo = "
            + "'Alumno' and a2.nombre like ?";

    /**
     * Query utilizado para verificar la existencia de un usuario en un grupo.
     */
    private final String USUARIO_PERTENECE_A_GRUPO = "select gpo.id" + " from GrupoDTO as gpo"
            + " where :usuario in elements(gpo.alumnos)";

    /**
     * Obtiene todos los usuarios que concuerden con el parametro
     *
     * @param nombre El patron por el cual se buscaran los usuarios
     * @return Lista de UsuarioDTO que concuerden con el nombre ingresado, o
     * null en caso de que ningun usuario concuerde
     */
    public List<UsuarioDTO> obtenerUsuariosPorNombreOApellidos(String nombre) {
        Session s = getSession();
        Transaction tx = null;
        List<UsuarioDTO> usuarios;

        if (s == null) {
            System.out.println("Session nula, regresando null....");
            return null;
        }

        try {
            tx = s.beginTransaction();

            usuarios = s.createCriteria(UsuarioDTO.class)
                    .add(Restrictions.or(Restrictions.like("apellidoPaterno", "%" + nombre + "%"),
                            Restrictions.like("apellidoMaterno", "%" + nombre + "%"),
                            Restrictions.like("nombre", "%" + nombre + "%")))
                    .addOrder(Order.asc("apellidoPaterno")).list();

            tx.commit();
        } catch (Exception e) {
            if (tx != null) {
                tx.rollback();
            }
            usuarios = null;
        } finally {
            s.close();
            System.out.println("Session cerrada");
        }
        return usuarios;
    }

    /**
     * Obtiene todos los usuarios que concuerden con los parametros
     *
     * @param apellido El patron por el cual se buscaran los usuarios
     * @param tipo el tipo de usuario a buscar
     * @return Lista de UsuarioDTO que concuerden con el nombre ingresado, o
     * null en caso de que ningun usuario concuerde
     */
    public List<UsuarioDTO> obtenerUsuariosPorApellido(String apellido, Tipo tipo) {
        Session s = getSession();
        Transaction tx = null;
        List<UsuarioDTO> usuarios;

        if (s == null) {
            System.out.println("Session nula, regresando null....");
            return null;
        }

        try {
            tx = s.beginTransaction();
            //Obtiene todos los objetos que concuenrden con el apellido

            usuarios = s.createCriteria(UsuarioDTO.class).add(Restrictions
                    .and(Restrictions.like("apellidoPaterno", "%" + apellido + "%"), Restrictions.eq("tipo", tipo)))
                    .list();

            tx.commit();
        } catch (Exception e) {
            if (tx != null) {
                tx.rollback();
            }
            usuarios = null;
        } finally {
            s.close();
            System.out.println("Session cerrada");
        }
        return usuarios;
    }

    /**
     * Obtiene todos los usuarios que concuerden con los parametros
     *
     * @param apellidoMaterno El patron por el cual se buscaran los usuarios
     * @param tipo el tipo de usuario a buscar
     * @return Lista de UsuarioDTO que concuerden con el nombre ingresado, o
     * null en caso de que ningun usuario concuerde
     */
    public List<UsuarioDTO> obtenerUsuariosPorApellidoM(String apellidoMaterno, Tipo tipo) {
        Session s = getSession();
        Transaction tx = null;
        List<UsuarioDTO> usuarios;

        if (s == null) {
            System.out.println("Session nula, regresando null....");
            return null;
        }

        try {
            tx = s.beginTransaction();
            //Obtiene todos los objetos que concuenrden con el apellido

            usuarios = s.createCriteria(UsuarioDTO.class)
                    .add(Restrictions.and(Restrictions.like("apellidoMaterno", "%" + apellidoMaterno + "%"),
                            Restrictions.eq("tipo", tipo)))
                    .list();

            tx.commit();
        } catch (Exception e) {
            if (tx != null) {
                tx.rollback();
            }
            usuarios = null;
        } finally {
            s.close();
            System.out.println("Session cerrada");
        }
        return usuarios;
    }

    /**
     * Obtiene todos los usuarios que concuerden con los parametros
     *
     * @param nombre El patron por el cual se buscaran los usuarios
     * @param tipo el tipo de usuario a buscar
     * @return Lista de UsuarioDTO que concuerden con el nombre ingresado, o
     * null en caso de que ningun usuario concuerde
     */
    public List<UsuarioDTO> obtenerUsuariosPorNombre(String nombre, Tipo tipo) {
        Session s = getSession();
        Transaction tx = null;
        List<UsuarioDTO> usuarios;

        if (s == null) {
            System.out.println("Session nula, regresando null....");
            return null;
        }

        try {
            tx = s.beginTransaction();
            //Obtiene todos los objetos que concuenrden con el apellido

            usuarios = s
                    .createCriteria(UsuarioDTO.class).add(Restrictions
                            .and(Restrictions.like("nombre", "%" + nombre + "%"), Restrictions.eq("tipo", tipo)))
                    .list();

            tx.commit();
        } catch (Exception e) {
            if (tx != null) {
                tx.rollback();
            }
            usuarios = null;
        } finally {
            s.close();
            System.out.println("Session cerrada");
        }
        return usuarios;
    }

    /**
     * Obtiene todos los usuarios tipo alumno que concuerden con el parametro
     *
     * @param apellido El patron por el cual se buscaran los usuarios
     * @return Lista de UsuarioDTO que concuerden con el nombre ingresado, o
     * null en caso de que ningun usuario concuerde
     */
    public List<UsuarioDTO> obtenerAlumnosPorApellido(String apellido) {
        Session s = getSession();
        Transaction tx = null;
        List<UsuarioDTO> usuarios;

        if (s == null) {
            System.out.println("Session nula, regresando null....");
            return null;
        }

        try {
            tx = s.beginTransaction();
            //Obtiene todos los objetos que concuenrden con el apellido
            Query q = s.createQuery(GET_ALUMNOS_SIN_ASIGNAR);
            q.setString(0, "%" + apellido + "%");
            usuarios = q.list();

            tx.commit();
        } catch (Exception e) {
            if (tx != null) {
                tx.rollback();
            }
            usuarios = null;
        } finally {
            //s.close();
            System.out.println("Session cerrada");
        }
        return usuarios;
    }

    /**
     * Obtiene todos los usuarios tipo alumno que concuerden con el parametro
     *
     * @param apellidoMaterno El patron por el cual se buscaran los usuarios
     * @return Lista de UsuarioDTO que concuerden con el nombre ingresado, o
     * null en caso de que ningun usuario concuerde
     */
    public List<UsuarioDTO> obtenerAlumnosPorApellidoM(String apellidoMaterno) {
        Session s = getSession();
        Transaction tx = null;
        List<UsuarioDTO> usuarios;

        if (s == null) {
            System.out.println("Session nula, regresando null....");
            return null;
        }

        try {
            tx = s.beginTransaction();
            //Obtiene todos los objetos que concuenrden con el apellido
            Query q = s.createQuery(GET_ALUMNOS_SIN_ASIGNAR_APPM);
            q.setString(0, "%" + apellidoMaterno + "%");
            usuarios = q.list();

            tx.commit();
        } catch (Exception e) {
            if (tx != null) {
                tx.rollback();
            }
            usuarios = null;
        } finally {
            //s.close();
            System.out.println("Session cerrada");
        }
        return usuarios;
    }

    /**
     * Obtiene todos los usuarios tipo alumno que concuerden con el parametro
     *
     * @param nombre El patron por el cual se buscaran los usuarios
     * @return Lista de UsuarioDTO que concuerden con el nombre ingresado, o
     * null en caso de que ningun usuario concuerde
     */
    public List<UsuarioDTO> obtenerAlumnosPorNombre(String nombre) {
        Session s = getSession();
        Transaction tx = null;
        List<UsuarioDTO> usuarios;

        if (s == null) {
            System.out.println("Session nula, regresando null....");
            return null;
        }

        try {
            tx = s.beginTransaction();
            //Obtiene todos los objetos que concuenrden con el apellido
            Query q = s.createQuery(GET_ALUMNOS_SIN_ASIGNAR_NOM);
            q.setString(0, "%" + nombre + "%");
            usuarios = q.list();

            tx.commit();
        } catch (Exception e) {
            if (tx != null) {
                tx.rollback();
            }
            usuarios = null;
        } finally {
            //s.close();
            System.out.println("Session cerrada");
        }
        return usuarios;
    }

    /**
     * Obtiene el usuario completo que concuerde con su nombre de usuario.
     *
     * @param unUsuario El nombre de usuario a obtener.
     * @return el objeto UsuarioDTO completo, con todas sus relaciones, o null
     * en caso de que no exista
     */
    public UsuarioDTO obtener(String unUsuario) {
        Session s = getSession();
        Transaction tx = null;
        UsuarioDTO usuario;

        if (s == null) {
            System.out.println("Session nula, regresando null....");
            return null;
        }

        try {
            tx = s.beginTransaction();
            //Obtiene todos los objetos que concuenrden con el apellido

            usuario = (UsuarioDTO) s.createCriteria(UsuarioDTO.class).add(Restrictions.eq("usuario", unUsuario))
                    .uniqueResult();

            tx.commit();
        } catch (Exception e) {
            if (tx != null) {
                tx.rollback();
            }
            usuario = null;
        } finally {
            s.close();
            System.out.println("Session cerrada");
        }
        return usuario;
    }

    /**
     * Validara si el usuario se encuentra inscrito en un grupo.
     *
     * @param usuario El usuario a validar si existe en un grupo.
     * @return Verdadero si el usuario esta inscrito a un grupo.<br>
     * Falso de otra forma.
     */
    public boolean perteneceAGrupo(UsuarioDTO usuario) {
        boolean ok = false;
        Session s = getSession();
        Transaction tx = null;

        if (s == null) {
            System.out.println("Session nula, regresando null....");
        }

        try {
            tx = s.beginTransaction();
            Query query = s.createQuery(USUARIO_PERTENECE_A_GRUPO);
            query.setEntity("usuario", usuario);
            List list = query.list();

            if (list.size() > 0) {
                ok = true;
            }

            tx.commit();
        } catch (Exception e) {
            System.out.println(e);
            if (tx != null) {
                tx.rollback();
            }
            System.out.println("olololol");
        } finally {
            s.close();
            System.out.println("Session cerrada");
        }
        return ok;
    }
}