/*
* Copyright (c) JForum Team. All rights reserved.
*
* The software in this package is published under the terms of the LGPL
* license a copy of which has been included with this distribution in the
* license.txt file.
*
* The JForum Project
* http://www.jforum.net
*/
package net.jforum.repository;
import java.util.List;
import net.jforum.entities.Category;
import net.jforum.entities.Forum;
import org.hibernate.Session;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import br.com.caelum.vraptor.ioc.Component;
/**
* @author Rafael Steil
*/
@Component
public class CategoryRepository extends HibernateGenericDAO<Category> implements Repository<Category> {
public CategoryRepository(Session session) {
super(session);
}
@SuppressWarnings("unchecked")
public List<Forum> getForums(Category category) {
return session.createCriteria(Forum.class)
.add(Restrictions.eq("category", category))
.addOrder(Order.asc("displayOrder"))
.setCacheable(true)
.setCacheRegion("categoryDAO.getForums")
.setComment("categoryDAO.getForums")
.list();
}
@Override
public void add(Category entity) {
entity.setDisplayOrder(this.getMaxDisplayOrder());
super.add(entity);
}
@SuppressWarnings("unchecked")
public List<Category> getAllCategories() {
return session.createCriteria(this.persistClass)
.addOrder(Order.asc("displayOrder"))
.setCacheable(true)
.setCacheRegion("categoryDAO.getAllCategories")
.setComment("categoryDAO.getAllCategories")
.list();
}
private int getMaxDisplayOrder() {
Integer displayOrder = (Integer)session.createCriteria(this.persistClass)
.setProjection(Projections.max("displayOrder"))
.uniqueResult();
return displayOrder == null ? 1 : displayOrder + 1;
}
}