package br.usp.ime.academicdevoir.dao; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.hibernate.Session; import org.hibernate.Transaction; import org.hibernate.criterion.MatchMode; import org.hibernate.criterion.Restrictions; import br.com.caelum.vraptor.ioc.Component; import br.usp.ime.academicdevoir.entidade.Turma; import br.usp.ime.academicdevoir.entidade.Disciplina; import br.usp.ime.academicdevoir.infra.UsuarioSession; @Component public class TurmaDao { /** * @uml.property name="session" * @uml.associationEnd multiplicity="(1 1)" */ private final Session session; public TurmaDao(Session session) { this.session = session; } /** * Cadastra a turma no banco de dados. * * @param turma */ public void salvaTurma(Turma turma) { Transaction tx = session.beginTransaction(); session.save(turma); tx.commit(); } /** * Atualiza a turma fornecida no banco de dados. * * @param turma */ @SuppressWarnings("unchecked") public void atualizaTurma(Turma turma) { /*String nome = turma.getNome(); Disciplina disciplina = turma.getDisciplina(); List<Turma> listaDeTurmas = session.createCriteria(Turma.class) .add(Restrictions.like("nome", nome, MatchMode.EXACT)) .add(Restrictions.eq("disciplina", disciplina)) .list(); if (listaDeTurmas.size() != 0 && listaDeTurmas.get(0).getId() != turma.getId()) return; */ Transaction tx = session.beginTransaction(); session.update(turma); tx.commit(); } /** * Remove a turma fornecida do banco de dados. * * @param turma */ public void removeTurma(Turma turma) { try { Transaction tx = session.beginTransaction(); session.delete(turma); tx.commit(); } catch (Exception e) { return; /*Não foi possível remover a turma, pois tem alguma lista associada.*/ } } /** * Devolve uma turma com o id fornecido. * * @param id * @return Turma */ public Turma carrega(Long id) { return (Turma) session.get(Turma.class, id); } @SuppressWarnings("unchecked") /** * Devolve uma lista com todas as turmas cadastradas no banco de dados. * * @return List<Turma> */ public List<Turma> listaTudo() { return (ArrayList<Turma>)session.createCriteria(Turma.class).list(); } public List<Turma> listaTurmasFiltradas(Long idAluno) { List<Turma> listaTudo = listaTudo(); List<Turma> listaFinal = new ArrayList<Turma>(); for(int i = 0; i < listaTudo.size(); i++){ if(!listaTudo.get(i).alunoMatriculado(idAluno)) listaFinal.add(listaTudo.get(i)); } return listaFinal; } /** * Carrega os dados da questão fornecida a partir do banco de dados. * @param turma */ public void recarrega(Turma turma) { session.refresh(turma); } }