package br.com.ufrj.msi2.netuno.modelo.servicos;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import br.com.ufrj.msi2.netuno.modelo.entidades.CPF;
import br.com.ufrj.msi2.netuno.modelo.entidades.Contratante;
import br.com.ufrj.msi2.netuno.modelo.exceptions.ResultadoNaoEncontradoException;
import br.com.ufrj.msi2.netuno.modelo.exceptions.ValidacaoException;
@Stateless
public class ContratanteServiceImpl implements ContratanteService {
private static final long serialVersionUID = -7087952795393582189L;
@PersistenceContext
EntityManager em;
@EJB
UsuarioService usuarioService;
public Contratante criarContratante() {
return new Contratante();
}
public void salvarContratante(Contratante contratante) throws ValidacaoException {
if(contratante.getLogin() == null) {
throw new ValidacaoException("contratante.loginObrigatorio");
}
if(contratante.getLogin().trim().equals("")) {
throw new ValidacaoException("contratante.loginInvalido");
}
if(contratante.getSenha() == null) {
throw new ValidacaoException("contratante.senhaObrigatoria");
}
if(contratante.getSenha().trim().equals("")) {
throw new ValidacaoException("contratante.senhaInvalida");
}
if(contratante.getNome() == null) {
throw new ValidacaoException("contratante.nomeObrigatorio");
}
if(contratante.getLogin().trim().equals("")) {
throw new ValidacaoException("contratante.nomeInvalido");
}
if(contratante.getEmail() == null) {
throw new ValidacaoException("contratante.emailObrigatorio");
}
if(contratante.getEmail().trim().equals("")) {
throw new ValidacaoException("contratante.emailInvalido");
}
if(contratante.getCpf() == null) {
throw new ValidacaoException("contratante.cpfObrigatorio");
}
if(contratante.getCpf().getCpf().trim().equals("")) {
throw new ValidacaoException("contratante.cpfInvalido");
}
em.persist(contratante);
}
public Contratante recuperaPorIdComContratos(Integer id) {
Query query = em.createNamedQuery("Contratante.recuperaPorIdComFetch");
query.setParameter("id", id);
return (Contratante) query.getSingleResult();
}
@Override
public Contratante recuperaPorCPF(CPF cpf) throws ResultadoNaoEncontradoException {
Query query = em.createNamedQuery("Contratante.recuperaPorCPF");
query.setParameter("cpf", cpf.getCpf());
try {
return (Contratante) query.getSingleResult();
} catch (NoResultException e) {
throw new ResultadoNaoEncontradoException(e.getMessage());
}
}
public EntityManager getEm() {
return em;
}
public UsuarioService getUsuarioService() {
return usuarioService;
}
public void setUsuarioService(UsuarioService usuarioService) {
this.usuarioService = usuarioService;
}
}