package br.com.triadworks.issuetracker.service.impl;
import java.util.List;
import javax.inject.Named;
import org.conventionsframework.exception.BusinessException;
import org.conventionsframework.qualifier.PersistentClass;
import org.conventionsframework.service.impl.BaseServiceImpl;
import org.hibernate.Criteria;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Restrictions;
import br.com.triadworks.issuetracker.model.Usuario;
import br.com.triadworks.issuetracker.service.UsuarioService;
@Named("usuarioService")
@PersistentClass(Usuario.class)
public class UsuarioServiceImpl extends BaseServiceImpl<Usuario> implements UsuarioService {
private static final long serialVersionUID = 1L;
@Override
public List<Usuario> listaTudo() {
return crud.listAll();
}
@Override
public void salva(Usuario usuario) {
if(isUsuarioExistente(usuario)){
throw new BusinessException("Usuário com o login:"+usuario.getLogin() + " já cadastrado em nossa base de dados.");
}
super.store(usuario);
}
@Override
public void atualiza(Usuario usuario) {
crud.saveOrUpdate(usuario);
}
@Override
public Usuario carrega(Long id) {
return getEntityManager().find(Usuario.class, id);
}
@Override
public Usuario buscaPor(String login, String senha) {
return (Usuario) getCriteria().add(Restrictions.eq("login", login))
.add(Restrictions.eq("senha", senha)).uniqueResult();
}
@Override
public boolean isUsuarioExistente(Usuario usuario) {
Criteria crit = getCriteria();
//usando para ignorar id do usuario que estamos editando senão o rowCount retorna o proprio usuario
if(usuario.getId() != null){
crit.add(Restrictions.ne("id", usuario.getId()));
}
if(usuario != null && !"".endsWith(usuario.getLogin())){
crit.add(Restrictions.ilike("login", usuario.getLogin(), MatchMode.EXACT));
return (crud.criteria(crit).count() > 0);
}
return false;
}
}