package br.com.ufrj.msi2.netuno.modelo.servicos; import java.util.List; import javax.ejb.Stateless; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import javax.persistence.Query; import br.com.ufrj.msi2.netuno.modelo.entidades.Contratante; import br.com.ufrj.msi2.netuno.modelo.entidades.Contrato; import br.com.ufrj.msi2.netuno.modelo.enums.SituacaoContratoEnum; @Stateless public class ContratoServiceImpl implements ContratoService { private static final long serialVersionUID = -7087952795393582189L; @PersistenceContext EntityManager em; public Contrato criarContrato() { Contrato contrato = new Contrato(); contrato.setSituacao(SituacaoContratoEnum.aberto); return contrato; } public void salvarContrato(Contrato contrato) { em.persist(contrato); } public void salvarContratoAguardandoColeta(Contrato contrato) { contrato.setSituacao(SituacaoContratoEnum.aguardandoColeta); this.salvarContrato(contrato); } public Contrato recuperaContratoPorId(Integer id) { Query query = em.createNamedQuery("Contrato.recuperaPorId"); query.setParameter("id", id); return (Contrato) query.getSingleResult(); } public Contrato recuperaContratoComCargas(Contrato contrato) { Query query = em.createNamedQuery("Contrato.recuperaPorIdComFetch"); query.setParameter("id", contrato.getId()); return (Contrato) query.getSingleResult(); } @SuppressWarnings("unchecked") public List<Contrato> recuperaContratosAbertosPorContratante(Contratante contratante) { Query query = em.createNamedQuery("Contrato.recuperaAbertoPorContratante"); query.setParameter("contratante", contratante); query.setParameter("situacao", SituacaoContratoEnum.aguardandoEntrega.ordinal()); return (List<Contrato>) query.getResultList(); } @SuppressWarnings("unchecked") public List<Contrato> recuperaContratosFechadosPorContratante(Contratante contratante) { Query query = em.createNamedQuery("Contrato.recuperaFinalizadoPorContratante"); query.setParameter("contratante", contratante); query.setParameter("situacao", SituacaoContratoEnum.finalizado.ordinal()); return (List<Contrato>) query.getResultList(); } public EntityManager getEm() { return em; } }