/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package br.edu.ifnmg.GerenciamentoEventos.Infraestrutura.Dados;
import br.edu.ifnmg.DomainModel.AreaConhecimento;
import br.edu.ifnmg.DomainModel.Campus;
import br.edu.ifnmg.DomainModel.Pessoa;
import br.edu.ifnmg.GerenciamentoEventos.DomainModel.Atividade;
import br.edu.ifnmg.GerenciamentoEventos.DomainModel.Evento;
import br.edu.ifnmg.GerenciamentoEventos.DomainModel.Servicos.SubmissaoRepositorio;
import br.edu.ifnmg.GerenciamentoEventos.DomainModel.Submissao;
import br.edu.ifnmg.GerenciamentoEventos.DomainModel.SubmissaoStatus;
import java.util.List;
import javax.ejb.Singleton;
import javax.persistence.Query;
/**
*
* @author Isla Guedes
*/
@Singleton
public class SubmissaoDAO
extends DAO<Submissao>
implements SubmissaoRepositorio {
public SubmissaoDAO() {
super(Submissao.class);
}
@Override
public List<Submissao> Buscar(Submissao filtro) {
return IgualA("id", filtro.getId())
.IgualA("inscricao", filtro.getInscricao())
.IgualA("status", filtro.getStatus())
.Like("titulo", filtro.getTitulo())
.Like("autor1", filtro.getAutor1())
.Like("autor2", filtro.getAutor2())
.Ordenar("titulo", "ASC")
.Buscar();
}
@Override
public List<Submissao> Buscar(Submissao filtro, Evento e, Atividade a) {
Join("inscricao", "i");
return IgualA("id", filtro.getId())
.IgualA("inscricao", filtro.getInscricao())
.IgualA("status", filtro.getStatus())
.IgualA("i.evento", e)
.IgualA("i.atividade", a)
.Like("titulo", filtro.getTitulo())
.Like("autor1", filtro.getAutor1())
.Like("autor2", filtro.getAutor2())
.Ordenar("titulo", "ASC")
.Buscar();
}
@Override
public List<AreaConhecimento> AreasPorEvento(Evento e, SubmissaoStatus status) {
Query query = getManager()
.createQuery("Select ac from Submissao s "
+ "join s.inscricao i join s.areasConhecimento ac "
+ "where i.evento =:evento and s.status =:status "
+ "order by ac.numeroCNPQ");
query.setParameter("evento", e).setParameter("status", status);
return query.getResultList();
}
@Override
public List<AreaConhecimento> AreasPorAtividade(Atividade a, SubmissaoStatus status) {
Query query = getManager()
.createQuery("Select ac from Submissao s "
+ "join TREAT(s.inscricao AS InscricaoItem) i join s.areasConhecimento ac "
+ "where i.atividade =:atividade and s.status =:status "
+ "order by ac.numeroCNPQ");
query.setParameter("atividade", a).setParameter("status", status);
return query.getResultList();
}
@Override
public List<AreaConhecimento> GrandesAreasPorAtividade(Atividade a, SubmissaoStatus status) {
Query query = getManager()
.createQuery("Select ga from Submissao s "
+ "join TREAT(s.inscricao AS InscricaoItem) i join s.areasConhecimento ac join ac.grandeArea ga "
+ "where i.atividade =:atividade and s.status =:status "
+ "order by ac.numeroCNPQ");
query.setParameter("atividade", a).setParameter("status", status);
return query.getResultList();
}
@Override
public List<Campus> CampusPorEvento(Evento e, SubmissaoStatus s){
Query query = getManager()
.createQuery("Select c from Submissao s "
+ "join s.inscricao i join i.pessoa p join p.campus c "
+ "where i.evento =:evento and s.status =:status "
+ "order by c.nome");
query.setParameter("evento", e).setParameter("status", s);
return query.getResultList();
}
@Override
public List<Submissao> BuscarTexto(String filtro) {
List<Submissao> list = getManager()
.createNativeQuery("SELECT * FROM submissoes WHERE MATCH(titulo,resumo,autor1,autor2,autor3,autor4,autor5) AGAINST(? IN BOOLEAN MODE)", Submissao.class)
.setParameter(1, filtro + "*")
.getResultList();
return list;
}
@Override
public List<Submissao> Buscar(SubmissaoStatus status, Evento e, Atividade at, AreaConhecimento a){
return Unico().Join("TREAT(o.inscricao AS InscricaoItem)","i").Join("o.areasConhecimento", "ac").
IgualA("i.evento", e).IgualA("i.atividade", at).IgualA("status", status).IgualA("ac.id", a.getId()).
Ordenar("titulo", "ASC")
.Buscar();
}
@Override
public List<Submissao> BuscarGrandeArea(SubmissaoStatus status, Evento e, Atividade at, AreaConhecimento a){
return Unico().Join("TREAT(o.inscricao AS InscricaoItem)","i")
.Join("o.areasConhecimento", "ac")
.Join("ac.grandeArea", "ga")
.IgualA("i.evento", e)
.IgualA("i.atividade", at)
.IgualA("status", status)
.IgualA("ga.id", a.getId()).
Ordenar("titulo", "ASC")
.Buscar();
}
@Override
public List<Submissao> PorAvaliador(SubmissaoStatus status, Evento e, Pessoa p){
Join("inscricao", "i").Join("avaliadores", "a");
return IgualA("status", status)
.IgualA("i.evento", e)
.IgualA("a.id", p.getId())
.Ordenar("titulo", "ASC")
.Buscar();
}
}