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.Tag;
@Component
public class TagDao {
private final Session session;
public TagDao(Session session) {
this.session = session;
}
@SuppressWarnings("unchecked")
/**
* Devolve uma lista com todas as tags cadastradas no banco
* de dados.
*
* @return List<Tag>
*/
public List<Tag> listaTudo() {
return this.session.createCriteria(Tag.class).list();
}
/**
* Cadastra a tag fornecida no banco de dados.
*
* @param tag
*/
public void salva(Tag tag) {
Transaction tx = session.beginTransaction();
session.saveOrUpdate(tag);
tx.commit();
}
/**
* Devolve uma tag com o id fornecido.
*
* @param id
* @return Tag
*/
public Tag carrega(Long id) {
return (Tag) this.session.load(Tag.class, id);
}
/**
* Atualiza a tag fornecida no banco de dados.
*
* @param tag
*/
public void atualiza(Tag tag) {
Transaction tx = session.beginTransaction();
this.session.update(tag);
tx.commit();
}
/**
* Remove a tag fornecida do banco de dados.
*
* @param tag
*/
public void remove(Tag tag) {
Transaction tx = session.beginTransaction();
this.session.delete(tag);
tx.commit();
}
public void recarrega(Tag tag) {
session.refresh(tag);
}
public Tag buscaPeloNome(String nome) {
return (Tag) session.createCriteria(Tag.class).add(Restrictions.eq("nome", nome)).uniqueResult();
}
@SuppressWarnings("unchecked")
public List<String> autoCompletar(String nomeDaTag) {
return session.createCriteria(Tag.class)
.add(Restrictions.ilike("nome", nomeDaTag, MatchMode.ANYWHERE))
.list();
}
}