dao.SubscripcionesDao.java Source code

Java tutorial

Introduction

Here is the source code for dao.SubscripcionesDao.java

Source

/*
 * 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 dao;

import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
import model.Restaurantes;
import model.Subscripciones;
import model.SubscripcionesId;
import model.SubscripcionesTipos;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Restrictions;
import util.HibernateUtil;
import util.Utils;

/**
 *
 * @author Seix
 */
public class SubscripcionesDao {

    private SessionFactory sessionFactory = HibernateUtil.getSessionFactory();

    public List<Subscripciones> getAll() {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    /**
     * Crea una subscripcin en la base de datos. Se comprueba que el restaurante no tiene ninguna
     * subscripcin, si es as, se obtiene el tipo de subscripcin de la base de datos y se le asigna
     * a ste creando una nueva subscripcin en la base de datos.
     * 
     * @param idRestaurante Identificador del restaurante a subscribir.
     * @param idTipoSubscripcion Identificador del tipo de subscripcin.
     * @param fechaInicio Date fecha a partir de la cual se aplicar el periodo de subscripcin.
     * @return True or False si la operacin ha tenido xito.
     */
    public boolean create(int idRestaurante, int idTipoSubscripcion, Date fechaInicio) {

        boolean creado = false;
        Restaurantes restaurante = null;
        Subscripciones subscripcion = null;
        SubscripcionesTipos tipo = null;
        Session session = null;

        try {
            session = sessionFactory.openSession();

            SubscripcionesId subsIdAux = new SubscripcionesId(idRestaurante, idTipoSubscripcion);

            //Comprobamos si existe alguna subscripcin
            session.beginTransaction();
            Criteria criteria = session.createCriteria(Subscripciones.class)
                    .add(Restrictions.like("id", subsIdAux));
            Subscripciones subscripcionControl = (Subscripciones) criteria.uniqueResult();
            session.getTransaction().commit();

            if (subscripcionControl == null
                    || (subscripcionControl.getSubscripcionesTipos().getId() != idTipoSubscripcion)) {

                //Recuperamos el tipo de subscripcin y el restaurante de la base de datos.
                session.beginTransaction();
                restaurante = (Restaurantes) session.get(Restaurantes.class, idRestaurante);
                tipo = (SubscripcionesTipos) session.get(SubscripcionesTipos.class, idTipoSubscripcion);
                session.getTransaction().commit();

                //Creamos el nuevo objeto a persistir en la base de datos.
                SubscripcionesId subsId = new SubscripcionesId(idRestaurante, idTipoSubscripcion);
                subscripcion = new Subscripciones(subsId, restaurante, tipo, fechaInicio,
                        Utils.sumarDiasFecha(fechaInicio, tipo.getDias()), isActivo(fechaInicio, idRestaurante));

                //Persistencia de datos
                session.beginTransaction();
                session.persist(subscripcion);
                session.getTransaction().commit();
                creado = true;
            }
        } catch (Exception e) {
            if (session != null) {
                session.getTransaction().rollback();
                System.out.println("\n Error message:\n" + e.getMessage() + "\n");
            }
            creado = false;
        } finally {
            if (session != null) {
                session.close();
            }
        }
        return creado;
    }

    /**
     * Actualiza los datos de una subscripcin. Se comprobar que ya existe una subscripcin para
     * el restaurante indicado y se actualizar en caso de que el tipo de subscripcin sea 
     * diferente al anterior. Hay que tener en cuenta que se sobreescribir la subscripcin sin
     * tener en cuenta la validez de la anterior.
     * 
     * @param idRestaurante Identificador del restaurante a subscribir.
     * @param idTipoSubscripcion Identificador del tipo de subscripcin.
     * @param fechaInicio Date fecha a partir de la cual se aplicar la subscripcin.
     * @return True or False si la operacin ha tenido xito.
     */
    public boolean update(int idRestaurante, int idTipoSubscripcion, Date fechaInicio) {

        boolean actualizado = false;
        Subscripciones subscripcion = null;
        SubscripcionesTipos tipo = null;
        Session session = null;

        try {
            session = sessionFactory.openSession();

            //Comprobamos si existe alguna subscripcin
            session.beginTransaction();
            Criteria criteria = session.createCriteria(Subscripciones.class)
                    .add(Restrictions.like("id_restaurante", idRestaurante));
            subscripcion = (Subscripciones) criteria.uniqueResult();
            session.getTransaction().commit();

            if (subscripcion != null || (subscripcion.getSubscripcionesTipos().getId() != idTipoSubscripcion)) {

                //Recuperamos el tipo de subscripcin y el restaurante de la base de datos.
                session.beginTransaction();
                tipo = (SubscripcionesTipos) session.get(SubscripcionesTipos.class, idTipoSubscripcion);
                session.getTransaction().commit();

                //Asignamos el nuevo tipo de subscripcin si este no existe actualmente.
                if (subscripcion.getId().getIdTipoSubscripcion() != idTipoSubscripcion) {
                    subscripcion.getId().setIdTipoSubscripcion(idTipoSubscripcion);

                    //Actualizamos los datos.
                    GregorianCalendar cal = new GregorianCalendar();
                    subscripcion.setFechaInicio(fechaInicio);
                    subscripcion.setFechaFinal(Utils.sumarDiasFecha(fechaInicio, tipo.getDias()));
                    subscripcion.setActiva(isActivo(subscripcion.getFechaInicio(),
                            subscripcion.getSubscripcionesTipos().getDias()));

                    //Persistencia de datos
                    session.beginTransaction();
                    session.persist(subscripcion);
                    session.getTransaction().commit();
                    actualizado = true;
                }
            }
        } catch (Exception e) {
            if (session != null) {
                session.getTransaction().rollback();
                System.out.println("\n Error message:\n" + e.getMessage() + "\n");
            }
            actualizado = false;
        } finally {
            if (session != null) {
                session.close();
            }
        }

        return actualizado;
    }

    public boolean delete(Subscripciones subscripcion) {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    public List<SubscripcionesTipos> getTiposAll() {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    /**
     * Crea un tipo de subscripcin en la base de datos si no existe uno con el
     * mismo nombre.
     *
     * @param nombre String nombre del tipo de subscripcin.
     * @param dias int das de validez del tipo de subscripcin.
     * @param precio float precio del tipo de subscripcin.
     * @return True or False si la operacin ha tenido xito.
     */
    public boolean createTipo(String nombre, int dias, float precio) {

        boolean creado = false;
        SubscripcionesTipos tipo = null;
        Session session = null;

        try {
            session = sessionFactory.openSession();

            //Comprobamos que este no existe ya en la base de datos.
            session.beginTransaction();
            Criteria criteria = session.createCriteria(SubscripcionesTipos.class)
                    .add(Restrictions.like("nombre", nombre));
            SubscripcionesTipos tipoControl = (SubscripcionesTipos) criteria.uniqueResult();
            session.getTransaction().commit();

            if (tipoControl == null) {

                //Creamos el nuevo objeto a persistir en la base de datos.
                tipo = new SubscripcionesTipos(nombre, dias, precio);

                //Persistencia de datos
                session.beginTransaction();
                session.persist(tipo);
                session.getTransaction().commit();
                creado = true;
            }

        } catch (Exception e) {
            if (session != null) {
                session.getTransaction().rollback();
                System.out.println("\n Error message:\n" + e.getMessage() + "\n");
            }
            creado = false;
        } finally {
            if (session != null) {
                session.close();
            }
        }
        return creado;
    }

    /**
     * Actualiza los datos de un tipo de subscripcin de la base de datos.
     *
     * @param idTipo Identificador del tipo de subscripcin a modificar.
     * @param nombre String nombre del tipo de subscripcin.
     * @param dias int das de validez del tipo de subscripcin.
     * @param precio float precio del tipo de subscripcin.
     * @return True or False si la operacin ha tenido xito.
     */
    public boolean updateTipo(int idTipo, String nombre, int dias, float precio) {

        boolean actualizado = false;
        SubscripcionesTipos tipo = null;
        Session session = null;

        try {
            session = sessionFactory.openSession();

            //Primero obtenemos el tipo de restaurante de la BD
            session.beginTransaction();
            tipo = (SubscripcionesTipos) session.get(SubscripcionesTipos.class, idTipo);
            session.getTransaction().commit();

            if (tipo != null) {

                //Actualizamos valores
                if (!tipo.getNombre().equals(nombre)) {
                    tipo.setNombre(nombre);
                }
                if (tipo.getDias() != dias) {
                    tipo.setDias(dias);
                }
                if (tipo.getPrecio() != precio) {
                    tipo.setPrecio(precio);
                }

                //Persistencia de datos
                session.beginTransaction();
                session.persist(tipo);
                session.getTransaction().commit();
                actualizado = true;
            }
        } catch (Exception e) {
            if (session != null) {
                session.getTransaction().rollback();
                System.out.println("\n Error message:\n" + e.getMessage() + "\n");
            }
            actualizado = false;
        } finally {
            if (session != null) {
                session.close();
            }
        }

        return actualizado;
    }

    public boolean deleteTipo(SubscripcionesTipos tipo) {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    private boolean isActivo(Date fechaInicio, int dias) {
        boolean activo = false;
        GregorianCalendar calActual = new GregorianCalendar();

        if (fechaInicio.after(calActual.getTime()) && fechaInicio.before(Utils.sumarDiasFecha(fechaInicio, dias))) {
            activo = true;
        }
        return activo;
    }
}