package br.usp.ime.academicdevoir.dao;
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.Disciplina;
@Component
public class DisciplinaDao {
/**
* @uml.property name="session"
* @uml.associationEnd multiplicity="(1 1)"
*/
private final Session session;
public DisciplinaDao(Session session) {
this.session = session;
}
/**
* Cadastra a disciplina fornecida no banco de dados.
*
* @param disciplina
*/
@SuppressWarnings("unchecked")
public void salvaDisciplina(Disciplina disciplina) {
String nome = disciplina.getNome();
List<Disciplina> listaDeDisciplinas = session.createCriteria(Disciplina.class)
.add(Restrictions.like("nome", nome, MatchMode.EXACT))
.list();
if (listaDeDisciplinas.size() != 0) return;
Transaction tx = session.beginTransaction();
session.save(disciplina);
tx.commit();
}
/**
* Atualiza a disciplina fornecida no banco de dados.
*
* @param disciplina
*/
@SuppressWarnings("unchecked")
public void atualizaDisciplina(Disciplina disciplina) {
String nome = disciplina.getNome();
List<Disciplina> listaDeDisciplinas = session.createCriteria(Disciplina.class)
.add(Restrictions.like("nome", nome, MatchMode.EXACT))
.list();
if (listaDeDisciplinas.size() != 0 && listaDeDisciplinas.get(0).getId() != disciplina.getId()) return;
Transaction tx = session.beginTransaction();
session.update(disciplina);
tx.commit();
}
/**
* Remove a disciplina fornecida do banco de dados.
*
* @param disciplina
*/
public void removeDisciplina(Disciplina disciplina) {
try{
Transaction tx = session.beginTransaction();
session.delete(disciplina);
tx.commit();
} catch (Exception e) {
return; /*Não foi possível remover a disciplina, pois tem alguma turma associada.*/
}
}
/**
* Devolve uma disciplina com o id fornecido.
*
* @param id
* @return Disciplina
*/
public Disciplina carrega(Long id) {
return (Disciplina) session.load(Disciplina.class, id);
}
@SuppressWarnings("unchecked")
/**
* Devolve uma lista com todas as disciplinas cadastradas no banco de dados.
*
* @return List<Disciplina>
*/
/* public List<Disciplina> listaTudo() {
String nome = "SELECT p FROM Disciplina p";
Query query = session.createQuery(nome);
List<Disciplina> listaDeDisciplinas = query.list();
return listaDeDisciplinas;
}*/
public List<Disciplina> listaTudo() {
return this.session.createCriteria(Disciplina.class).list();
}
}