package br.com.caelum.guj.controller;
import static br.com.caelum.vraptor.view.Results.logic;
import java.util.List;
import org.hibernate.Session;
import br.com.caelum.guj.model.Article;
import br.com.caelum.guj.model.ArticleLevel;
import br.com.caelum.guj.model.Category;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
@Resource
public class ApproveController {
private final Result result;
private final Session session;
public ApproveController(Result result, Session session) {
this.result = result;
this.session = session;
}
public void list() {
result.include("isModerator", true);
result.include("articles", this.getAllArticles());
result.include("categories", this.getAllCategories());
}
@SuppressWarnings("unchecked")
protected List<Category> getAllCategories() {
return session.createQuery(
"from Category c ORDER BY c.name").setCacheable(false).list();
}
public void save(long articleId, long categoryId, String articleLevel) {
Article article = this.getArticle(articleId);
article.setApproved(true);
article.setLevel(ArticleLevel.valueOf(articleLevel));
Category category = new CategoryController(result, null, session).getCategory(categoryId);
article.setCategory(category);
result.include("isModerator", true);
result.use(logic()).forwardTo(ApproveController.class).list();
}
public void delete(long id) {
Article article = this.getArticle(id);
session.delete(article);
result.use(logic()).forwardTo(ApproveController.class).list();
}
@SuppressWarnings("unchecked")
private List<Article> getAllArticles() {
return session.createQuery(
"from Article a where a.approved = false ORDER BY a.date")
.setCacheable(true).setCacheRegion("ApproveArticles").list();
}
private Article getArticle(long id) {
return (Article) session.get(Article.class, id);
}
}