package com.titanic.ventapasajes.repositorio; import com.titanic.ventapasajes.modelo.Recorrido; import com.titanic.ventapasajes.repositorio.filtros.RecorridoFiltros; import com.titanic.ventapasajes.service.NegocioExcepciones; import com.titanic.ventapasajes.util.jpa.Transaccion; import org.apache.commons.lang3.StringUtils; import org.hibernate.Criteria; import org.hibernate.Session; import org.hibernate.criterion.MatchMode; import org.hibernate.criterion.Order; import org.hibernate.criterion.Restrictions; import javax.inject.Inject; import javax.persistence.EntityManager; import javax.persistence.NoResultException; import javax.persistence.PersistenceException; import java.io.Serializable; import java.util.List; /** * Created by josediaz on 7/25/14. */ public class RecorridoRepositorio implements Serializable { private static final long serialVersionUID = 1L; @Inject private EntityManager entityManager; public Recorrido buscarRecorridoporId(Long ideRecorrido) { return this.entityManager.find(Recorrido.class, ideRecorrido); } public List<Recorrido> buscarRecorridoPorRuta(String ruta) { return this.entityManager.createQuery("from Recorrido " + "where upper(ruta) like :ruta", Recorrido.class) .setParameter("ruta", ruta.toUpperCase() + "%") .getResultList(); } @SuppressWarnings("unchecked") public List<Recorrido> listarRecorridosFiltrados(RecorridoFiltros filtros) { Session session = entityManager.unwrap(Session.class); Criteria criteria = session.createCriteria(Recorrido.class); if(StringUtils.isNotBlank(filtros.getOrigen())){ criteria.add(Restrictions.eq("origen.ideTerminal", Long.valueOf(filtros.getOrigen()))); } if(StringUtils.isNotBlank(filtros.getDestino())){ criteria.add(Restrictions.eq("destino.ideTerminal", Long.valueOf(filtros.getDestino()))); } if(StringUtils.isNotBlank(filtros.getRuta())){ criteria.add(Restrictions.like("ruta", filtros.getRuta(), MatchMode.ANYWHERE)); } return criteria.addOrder(Order.asc("ruta")).list(); } @Transaccion public void removerRecorrido(Recorrido recorrido) { try{ recorrido = obtenerRecorrido(recorrido.getIdeRecorrido()); entityManager.remove(recorrido); entityManager.flush(); }catch(PersistenceException e){ throw new NegocioExcepciones("El recorrido no puede ser eliminado."); } } public Recorrido obtenerRecorrido(Long id){ return entityManager.find(Recorrido.class, id); } public Recorrido obtenerRecorridoPorOrigen(String origen){ try{ return entityManager.createQuery("from Recorrido where origen.ideTerminal = :origen", Recorrido.class) .setParameter("origen", origen) .getSingleResult(); }catch(NoResultException e){ return null; } } public Recorrido adicionarRecorrido(Recorrido recorrido) { return entityManager.merge(recorrido); } public Recorrido obtenerRecorridoPorRuta(String ruta) { try{ return entityManager.createQuery("from Recorrido where ruta = :ruta", Recorrido.class) .setParameter("ruta", ruta) .getSingleResult(); }catch(NoResultException e){ return null; } } }