package com.titanic.ventapasajes.repositorio;
import java.io.Serializable;
import java.util.List;
import javax.inject.Inject;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceException;
import org.apache.commons.lang3.StringUtils;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import com.titanic.ventapasajes.modelo.Terminal;
import com.titanic.ventapasajes.repositorio.filtros.TerminalFiltros;
import com.titanic.ventapasajes.service.NegocioExcepciones;
import com.titanic.ventapasajes.util.jpa.Transaccion;
/**
* Created by josediaz on 7/24/14.
*/
public class TerminalRepositorio implements Serializable {
private static final long serialVersionUID = 1L;
@Inject
private EntityManager entityManager;
public Terminal buscarTerminalporId(Long ideTerminal) {
return this.entityManager.find(Terminal.class, ideTerminal);
}
@Transaccion
public void removerTerminal(Terminal terminal) {
try{
terminal = obtenerTerminal(terminal.getIdeTerminal());
entityManager.remove(terminal);
entityManager.flush();
}catch(PersistenceException e){
throw new NegocioExcepciones("El terminal no puede ser eliminado.");
}
}
public Terminal obtenerTerminal(Long id){
return entityManager.find(Terminal.class, id);
}
public Terminal adicionarTerminal(Terminal terminal) {
return entityManager.merge(terminal);
}
public Terminal buscarTerminalPorNombre(String nombreTerminal) {
Terminal terminal = null;
try{
terminal = this.entityManager.createQuery("from Terminal where lower(nombreTerminal) = :terminal", Terminal.class)
.setParameter("terminal", nombreTerminal.toLowerCase()).getSingleResult();
}catch(NoResultException e){
}
return terminal;
}
public List<Terminal> listarTerminales() {
return entityManager.createQuery("from Terminal ", Terminal.class)
.getResultList();
}
@SuppressWarnings("unchecked")
public List<Terminal> listarTerminalesFiltrados(TerminalFiltros terminalFiltros) {
Session session = entityManager.unwrap(Session.class);
Criteria criteria = session.createCriteria(Terminal.class);
if(StringUtils.isNotBlank(terminalFiltros.getNombre())){
criteria.add(Restrictions.eq("nombreTerminal", terminalFiltros.getNombre()));
}
return criteria.addOrder(Order.asc("nombreTerminal")).list();
}
}