net.neurowork.cenatic.centraldir.dao.impl.HibernateOrganizacionDaoImpl.java Source code

Java tutorial

Introduction

Here is the source code for net.neurowork.cenatic.centraldir.dao.impl.HibernateOrganizacionDaoImpl.java

Source

/*
 * Copyright 2010 CENATIC
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package net.neurowork.cenatic.centraldir.dao.impl;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import net.neurowork.cenatic.centraldir.dao.DaoException;
import net.neurowork.cenatic.centraldir.dao.OrganizacionDao;
import net.neurowork.cenatic.centraldir.model.Satelite;
import net.neurowork.cenatic.centraldir.model.satelite.Asociacion;
import net.neurowork.cenatic.centraldir.model.satelite.Capacidad;
import net.neurowork.cenatic.centraldir.model.satelite.ClasificacionOrganizacion;
import net.neurowork.cenatic.centraldir.model.satelite.Evento;
import net.neurowork.cenatic.centraldir.model.satelite.FormaJuridica;
import net.neurowork.cenatic.centraldir.model.satelite.Organizacion;
import net.neurowork.cenatic.centraldir.model.satelite.OrganizacionAsociacion;
import net.neurowork.cenatic.centraldir.model.satelite.OrganizacionCapacidadDemanda;
import net.neurowork.cenatic.centraldir.model.satelite.OrganizacionCapacidadOferta;
import net.neurowork.cenatic.centraldir.model.satelite.OrganizacionSatelite;
import net.neurowork.cenatic.centraldir.model.satelite.Provincia;
import net.neurowork.cenatic.centraldir.model.satelite.Sector;

import org.hibernate.ObjectNotFoundException;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.ProjectionList;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.dao.DataAccessException;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

/**
 *
 * @author Alejandro Sanchez Acosta <asanchez@neurowork.net> http://www.neurowork.net
 * @since 03/12/2010
 */
public class HibernateOrganizacionDaoImpl extends HibernateDaoSupport implements OrganizacionDao {
    private final static Logger logger = LoggerFactory.getLogger(HibernateOrganizacionDaoImpl.class);

    @SuppressWarnings("unchecked")
    private Collection<Organizacion> findByCriteria(DetachedCriteria criteria) {
        return (List<Organizacion>) getHibernateTemplate().findByCriteria(criteria);
    }

    @Override
    public List<Organizacion> getOrganizaciones() throws DaoException {
        if (logger.isTraceEnabled())
            logger.trace("Loading all Organizaciones");
        return getHibernateTemplate().loadAll(Organizacion.class);
    }

    @Override
    public void save(Organizacion organizacion) throws DaoException {
        if (logger.isTraceEnabled())
            logger.trace("Saving Organizacion: " + organizacion);
        getHibernateTemplate().saveOrUpdate(organizacion);
    }

    @Override
    public Organizacion findById(Integer id) throws DaoException {
        if (logger.isTraceEnabled())
            logger.trace("Loading Organizacion width id: " + id);
        try {
            return getHibernateTemplate().load(Organizacion.class, id);
        } catch (ObjectNotFoundException e) {
            return null;
        } catch (DataAccessException e) {
            throw new DaoException(e.getMessage());
        }
    }

    @Override
    public Collection<Organizacion> findByName(String name) throws DaoException {
        if (logger.isTraceEnabled())
            logger.trace("Hibernate Searching Organizacion with name:" + name);
        DetachedCriteria criteria = DetachedCriteria.forClass(Organizacion.class);
        criteria.add(Restrictions.like("name", "%" + name + "%"));
        criteria.addOrder(Order.asc("name"));
        return findByCriteria(criteria);
    }

    @Override
    public Organizacion findByHash(String xmlHash) throws DaoException {
        if (logger.isTraceEnabled())
            logger.trace("Hibernate Searching Organizacion with hash:" + xmlHash);
        DetachedCriteria criteria = DetachedCriteria.forClass(Organizacion.class);
        criteria.add(Restrictions.eq("xmlHash", xmlHash));

        Collection<Organizacion> l = findByCriteria(criteria);

        if (l != null) {
            if (l.size() >= 1) {
                return l.iterator().next();
            }
        }
        return null;
    }

    @SuppressWarnings("unchecked")
    @Override
    public Organizacion findByCIF(String cif) throws DaoException {
        if (logger.isTraceEnabled())
            logger.trace("Hibernate Searching Organizacion with CIF:" + cif);
        DetachedCriteria criteria = DetachedCriteria.forClass(Organizacion.class);
        criteria.add(Restrictions.eq("cif", cif));

        List<Organizacion> l = (List<Organizacion>) getHibernateTemplate().findByCriteria(criteria);

        if (l != null) {
            if (l.size() >= 1) {
                return l.get(0);
            }
        }
        return null;
    }

    @SuppressWarnings("unchecked")
    @Override
    public List<ClasificacionOrganizacion> findClasificacionOrganizacionByName(String name) throws DaoException {
        if (logger.isTraceEnabled())
            logger.trace("Hibernate Searching FormaJuridica with name:" + name);
        DetachedCriteria criteria = DetachedCriteria.forClass(ClasificacionOrganizacion.class);
        criteria.add(Restrictions.like("name", "%" + name + "%"));
        criteria.addOrder(Order.asc("name"));
        return (List<ClasificacionOrganizacion>) getHibernateTemplate().findByCriteria(criteria);
    }

    @Override
    public void saveClasificacionOrganizacion(ClasificacionOrganizacion clasificacionOrganizacion)
            throws DaoException {
        if (logger.isTraceEnabled())
            logger.trace("Saving ClasificacionOrganizacion: " + clasificacionOrganizacion);
        getHibernateTemplate().saveOrUpdate(clasificacionOrganizacion);
    }

    @Override
    public ClasificacionOrganizacion findClasificacionOrganizacionById(Integer id) throws DaoException {
        if (logger.isTraceEnabled())
            logger.trace("Loading ClasificacionOrganizacion width id: " + id);
        try {
            return getHibernateTemplate().load(ClasificacionOrganizacion.class, id);
        } catch (ObjectNotFoundException e) {
            return null;
        } catch (DataAccessException e) {
            throw new DaoException(e.getMessage());
        }
    }

    @SuppressWarnings("unchecked")
    @Override
    public List<OrganizacionSatelite> findBySatelite(Satelite satelite) throws DaoException {
        if (logger.isTraceEnabled())
            logger.trace("Hibernate Organizacion with Satelite: " + satelite);
        DetachedCriteria criteria = DetachedCriteria.forClass(OrganizacionSatelite.class);
        criteria.add(Restrictions.eq("satelite", satelite));
        List<OrganizacionSatelite> ret = getHibernateTemplate().findByCriteria(criteria);
        if (logger.isTraceEnabled())
            logger.trace("Returning: " + ret.size() + " Organizaciones.");
        return ret;
    }

    @Override
    public void saveCapacidad(Capacidad capacidad) throws DaoException {
        if (logger.isTraceEnabled())
            logger.trace("Saving Capacidad: " + capacidad);
        getHibernateTemplate().saveOrUpdate(capacidad);
    }

    @Override
    public Capacidad findCapacidadById(Integer id) throws DaoException {
        if (logger.isTraceEnabled())
            logger.trace("Loading Capacidad width id: " + id);
        try {
            return getHibernateTemplate().load(Capacidad.class, id);
        } catch (ObjectNotFoundException e) {
            return null;
        } catch (DataAccessException e) {
            throw new DaoException(e.getMessage());
        }
    }

    @SuppressWarnings("unchecked")
    @Override
    public List<Capacidad> findCapacidadByName(String name) throws DaoException {
        if (logger.isTraceEnabled())
            logger.trace("Hibernate Searching Capacidad with name:" + name);
        DetachedCriteria criteria = DetachedCriteria.forClass(Capacidad.class);
        criteria.add(Restrictions.like("name", "%" + name + "%"));
        criteria.addOrder(Order.asc("name"));
        return (List<Capacidad>) getHibernateTemplate().findByCriteria(criteria);
    }

    @SuppressWarnings("rawtypes")
    @Override
    public Integer getTotalOrganizaciones() throws DaoException {
        if (logger.isTraceEnabled())
            logger.trace("Hibernate Searching Total Organizaciones");
        DetachedCriteria criteria = DetachedCriteria.forClass(Organizacion.class);

        ProjectionList projList = Projections.projectionList();
        projList.add(Projections.rowCount());
        criteria.setProjection(projList);

        List result = getHibernateTemplate().findByCriteria(criteria);
        if (result != null)
            return (Integer) result.get(0);
        return 0;
    }

    @SuppressWarnings("unchecked")
    @Override
    public List<ClasificacionOrganizacion> getClasificacionOrganizaciones() throws DaoException {
        if (logger.isTraceEnabled())
            logger.trace("Loading all Organizaciones");
        DetachedCriteria criteria = DetachedCriteria.forClass(ClasificacionOrganizacion.class);
        criteria.addOrder(Order.asc("name"));
        return (List<ClasificacionOrganizacion>) getHibernateTemplate().findByCriteria(criteria);
    }

    @SuppressWarnings("unchecked")
    @Override
    public List<Organizacion> findByClasificacionOrganizacion(ClasificacionOrganizacion clasificacionOrganizacion)
            throws DaoException {
        if (logger.isTraceEnabled())
            logger.trace("Hibernate Searching Organizacion with ClasificacionOrganizacion: "
                    + clasificacionOrganizacion);
        DetachedCriteria criteria = DetachedCriteria.forClass(Organizacion.class);
        criteria.add(Restrictions.eq("clasificacionOrganizacion", clasificacionOrganizacion));
        criteria.addOrder(Order.asc("name"));
        return (List<Organizacion>) getHibernateTemplate().findByCriteria(criteria);
    }

    @Override
    public List<Capacidad> getCapacidades() throws DaoException {
        if (logger.isTraceEnabled())
            logger.trace("Loading all Capacidades");
        return getHibernateTemplate().loadAll(Capacidad.class);
    }

    @Override
    public List<OrganizacionCapacidadDemanda> getDemandas() throws DaoException {
        if (logger.isTraceEnabled())
            logger.trace("Loading all Organizaciones");
        return getHibernateTemplate().loadAll(OrganizacionCapacidadDemanda.class);
    }

    @Override
    public Set<Organizacion> findByCapacidades(Collection<Capacidad> capacidades) throws DaoException {
        Set<Organizacion> ret = new HashSet<Organizacion>();
        for (Capacidad capacidad : capacidades)
            ret.addAll(findByCapacidad(capacidad));
        return ret;
    }

    @Override
    public void saveEvento(Evento evento) throws DaoException {
        if (logger.isTraceEnabled())
            logger.trace("Saving Evento: " + evento);
        getHibernateTemplate().saveOrUpdate(evento);
    }

    @Override
    public Collection<Organizacion> findByFormaJuridica(FormaJuridica formaJuridica) throws DaoException {
        if (logger.isTraceEnabled())
            logger.trace("Hibernate Searching Organizacion with Forma Juridica:" + formaJuridica);
        DetachedCriteria criteria = DetachedCriteria.forClass(Organizacion.class);
        criteria.add(Restrictions.eq("formaJuridica", formaJuridica));
        criteria.addOrder(Order.asc("name"));
        return findByCriteria(criteria);
    }

    @Override
    public Collection<Organizacion> findByProvincia(Provincia provincia) throws DaoException {
        if (logger.isTraceEnabled())
            logger.trace("Hibernate Searching Organizacion with Provincia:" + provincia);
        DetachedCriteria criteria = DetachedCriteria.forClass(Organizacion.class);
        criteria.add(Restrictions.eq("provincia", provincia));
        criteria.addOrder(Order.asc("name"));
        return findByCriteria(criteria);
    }

    @SuppressWarnings("unchecked")
    @Override
    public Collection<Organizacion> findByAsociacion(Asociacion asociacion) throws DaoException {
        if (logger.isTraceEnabled())
            logger.trace("Hibernate Searching Organizacion with Asociacion:" + asociacion);
        DetachedCriteria criteria = DetachedCriteria.forClass(OrganizacionAsociacion.class);
        criteria.add(Restrictions.eq("asociacion", asociacion));
        Collection<Organizacion> ret = null;

        try {
            List<OrganizacionAsociacion> oas = (List<OrganizacionAsociacion>) getHibernateTemplate()
                    .findByCriteria(criteria);
            if (oas == null)
                logger.info("No Organizaciones found with Asociacion: " + asociacion);
            else if (oas.size() > 0) {
                logger.info("Found: " + oas.size() + "Organizaciones found with Asociacion: " + asociacion);
                ret = new ArrayList<Organizacion>();
                for (OrganizacionAsociacion oa : oas) {
                    ret.add(oa.getOrganizacion());
                }
            }
        } catch (DataAccessException e) {
            logger.error(e.getMessage());
        }

        return ret;
    }

    @Override
    public Set<Organizacion> findBySector(Sector sector) throws DaoException {
        if (logger.isTraceEnabled())
            logger.trace("Hibernate Searching Organizacion with Sector:" + sector);
        Set<Organizacion> ret = new HashSet<Organizacion>();

        Collection<Organizacion> demandas = findByDemandaSector(sector);
        if (demandas != null)
            ret.addAll(demandas);
        Collection<Organizacion> ofertas = findByOfertaSector(sector);
        if (ofertas != null)
            ret.addAll(ofertas);
        return ret;
    }

    @Override
    public Set<Organizacion> findByCapacidad(Capacidad capacidad) throws DaoException {
        if (logger.isTraceEnabled())
            logger.trace("Hibernate Searching Organizacion with Capacidad:" + capacidad);
        Set<Organizacion> ret = new HashSet<Organizacion>();

        Collection<Organizacion> demandas = findByDemandaCapacidad(capacidad);
        if (demandas != null)
            ret.addAll(demandas);
        Collection<Organizacion> ofertas = findByOfertaCapacidad(capacidad);
        if (ofertas != null)
            ret.addAll(ofertas);
        return ret;
    }

    @SuppressWarnings("unchecked")
    @Override
    public Set<Organizacion> findByDemandaSector(Sector sector) throws DaoException {
        DetachedCriteria criteria = DetachedCriteria.forClass(OrganizacionCapacidadDemanda.class);
        criteria.add(Restrictions.eq("sector", sector));
        Set<Organizacion> ret = new HashSet<Organizacion>();

        try {
            List<OrganizacionCapacidadDemanda> oas = (List<OrganizacionCapacidadDemanda>) getHibernateTemplate()
                    .findByCriteria(criteria);
            if (oas == null || oas.size() == 0) {
                if (logger.isTraceEnabled())
                    logger.trace("No Organizaciones found with Sector: " + sector);
            } else {
                if (logger.isTraceEnabled())
                    logger.trace("Found: " + oas.size() + " Organizaciones found with Demanda Sector: " + sector);

                for (OrganizacionCapacidadDemanda oa : oas) {
                    ret.add(oa.getOrganizacion());
                }
            }
        } catch (DataAccessException e) {
            logger.error(e.getMessage());
        }

        return ret;
    }

    @SuppressWarnings("unchecked")
    @Override
    public Set<Organizacion> findByOfertaSector(Sector sector) throws DaoException {
        DetachedCriteria criteria = DetachedCriteria.forClass(OrganizacionCapacidadOferta.class);
        criteria.add(Restrictions.eq("sector", sector));
        Set<Organizacion> ret = new HashSet<Organizacion>();

        try {
            List<OrganizacionCapacidadOferta> oas = (List<OrganizacionCapacidadOferta>) getHibernateTemplate()
                    .findByCriteria(criteria);
            if (oas == null)
                logger.info("No Organizaciones found with Sector: " + sector);
            else if (oas.size() > 0) {
                logger.info("Found: " + oas.size() + "Organizaciones found with Sector: " + sector);
                for (OrganizacionCapacidadOferta oa : oas) {
                    ret.add(oa.getOrganizacion());
                }
            }
        } catch (DataAccessException e) {
            logger.error(e.getMessage());
        }

        return ret;
    }

    @Override
    public Set<Organizacion> findBySectores(Collection<Sector> sectores) throws DaoException {
        Set<Organizacion> ret = new HashSet<Organizacion>();
        for (Sector sector : sectores)
            ret.addAll(findBySector(sector));
        return ret;
    }

    @SuppressWarnings("unchecked")
    @Override
    public Set<Organizacion> findByOfertaCapacidad(Capacidad capacidad) throws DaoException {
        DetachedCriteria criteria = DetachedCriteria.forClass(OrganizacionCapacidadOferta.class);
        criteria.add(Restrictions.eq("capacidad", capacidad));
        Set<Organizacion> ret = new HashSet<Organizacion>();

        try {
            List<OrganizacionCapacidadOferta> oas = (List<OrganizacionCapacidadOferta>) getHibernateTemplate()
                    .findByCriteria(criteria);
            if (oas == null)
                logger.info("No Organizaciones found with Capacidad: " + capacidad);
            else if (oas.size() > 0) {
                logger.info("Found: " + oas.size() + "Organizaciones found with Capacidad: " + capacidad);
                for (OrganizacionCapacidadOferta oa : oas) {
                    ret.add(oa.getOrganizacion());
                }
            }
        } catch (DataAccessException e) {
            logger.error(e.getMessage());
        }

        return ret;
    }

    @SuppressWarnings("unchecked")
    @Override
    public Set<Organizacion> findByDemandaCapacidad(Capacidad capacidad) throws DaoException {
        DetachedCriteria criteria = DetachedCriteria.forClass(OrganizacionCapacidadDemanda.class);
        criteria.add(Restrictions.eq("capacidad", capacidad));
        Set<Organizacion> ret = new HashSet<Organizacion>();

        try {
            List<OrganizacionCapacidadDemanda> oas = (List<OrganizacionCapacidadDemanda>) getHibernateTemplate()
                    .findByCriteria(criteria);
            if (oas == null || oas.size() == 0) {
                if (logger.isTraceEnabled())
                    logger.trace("No Organizaciones found with Capacidad: " + capacidad);
            } else {
                if (logger.isTraceEnabled())
                    logger.trace(
                            "Found: " + oas.size() + " Organizaciones found with Demanda Capacidad: " + capacidad);

                for (OrganizacionCapacidadDemanda oa : oas) {
                    ret.add(oa.getOrganizacion());
                }
            }
        } catch (DataAccessException e) {
            logger.error(e.getMessage());
        }
        return ret;
    }

    @SuppressWarnings("unchecked")
    @Override
    public List<Organizacion> getLatest(Integer count) throws DaoException {
        DetachedCriteria criteria = DetachedCriteria.forClass(Organizacion.class);
        criteria.addOrder(Order.desc("id"));
        return (List<Organizacion>) getHibernateTemplate().findByCriteria(criteria, 0, count);
    }
}