package br.com.triadworks.issuetracker.service.impl; import java.util.List; import javax.inject.Named; import org.conventionsframework.exception.BusinessException; 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.Projeto; import br.com.triadworks.issuetracker.service.ProjetoService; @Named("projetoService")//é acessado diretamente na tela(combo de projetos) public class ProjetoServiceImpl extends BaseServiceImpl<Projeto> implements ProjetoService { @SuppressWarnings("unchecked") @Override public List<Projeto> listaTudo() { return crud.listAll(); } @Override public void salva(Projeto projeto) { if(isProjetoExistente(projeto)){ throw new BusinessException("Projeto com o nome:"+projeto.getNome() + " já existe em nossa base de dados."); } super.store(projeto); } @Override public void atualiza(Projeto projeto) { crud.saveOrUpdate(projeto); } @Override public Projeto carrega(Long id) { return getEntityManager().find(Projeto.class, id); } @Override public boolean isProjetoExistente(Projeto projeto) { Criteria crit = getCriteria(); //usando para ignorar id do projeto que estamos editando senão o rowCount retorna o proprio projeto if(projeto.getId() != null){ crit.add(Restrictions.ne("id", projeto.getId())); } if(projeto != null && !"".endsWith(projeto.getNome())){ crit.add(Restrictions.ilike("nome", projeto.getNome(), MatchMode.EXACT)); return (crud.criteria(crit).count() > 0); } return false; } }