/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package br.uff.ic.oceano.core.dao.impl; import br.uff.ic.oceano.core.dao.RefactoringDao; import br.uff.ic.oceano.core.dao.controle.JPAUtil; import br.uff.ic.oceano.core.dao.controle.anotations.MetodoRecuperaLista; import br.uff.ic.oceano.core.dao.controle.anotations.MetodoRecuperaUnico; import br.uff.ic.oceano.core.dao.generics.JPADaoGenerico; import br.uff.ic.oceano.core.exception.MetodoInterceptadoException; import br.uff.ic.oceano.core.exception.ObjetoNaoEncontradoException; import br.uff.ic.oceano.peixeespada.model.Refactoring; import java.math.BigInteger; import java.util.ArrayList; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.Query; /** * * @author Heliomar */ public class RefactoringDaoImpl extends JPADaoGenerico<Refactoring, Long> implements RefactoringDao { public RefactoringDaoImpl(){ super(Refactoring.class); } @MetodoRecuperaUnico public Refactoring getByName(String name) throws ObjetoNaoEncontradoException { throw new MetodoInterceptadoException(); } @MetodoRecuperaLista public List<Refactoring> getAll() { throw new MetodoInterceptadoException(); } @MetodoRecuperaLista public List<Refactoring> getByType(int tipo) { throw new MetodoInterceptadoException(); } public List<Refactoring> getByPopularType(int tipo, Integer quantidade) { EntityManager em = JPAUtil.getEntityManager(); String sql = "select t.id," + "t.description," + "t.name," + "t.tipo," + " cast(100*c.totalSucess as float) / cast(c.totalUsed as float) as percent " + "from espada_refactoring as t left outer join espada_knowledge as c " + "on (c.idRefactoring = t.id ) " + "where t.tipo=? " + "order by percent desc "; Query q = em.createNativeQuery(sql); q.setParameter(1, tipo); List<Object[]> tabela = q.getResultList(); List<Refactoring> transformacoesPopulares = new ArrayList<Refactoring>(tabela.size()); List<Refactoring> transformacoesNaoPopulares = new ArrayList<Refactoring>(tabela.size()); Refactoring t = null; for (Object[] tupla : tabela) { t = new Refactoring(); t.setId(((BigInteger)tupla[0]).longValue()); t.setDescription(tupla[1].toString()); t.setName(tupla[2].toString()); t.setTipo((Integer)tupla[3]); Double percent = (Double) tupla[4]; if(percent != null){ transformacoesPopulares.add(t); }else{ transformacoesNaoPopulares.add(t); } } transformacoesPopulares.addAll(transformacoesNaoPopulares); List<Refactoring> retorno = new ArrayList<Refactoring>(transformacoesPopulares); if(quantidade != null && quantidade.intValue() >= retorno.size()){ retorno = retorno.subList(0, quantidade); } return retorno; } }