package be.mentoringsystems.merke.persistence.hibernate; import be.mentoringsystems.merke.model.Filter; import be.mentoringsystems.merke.model.QueryParams; import be.mentoringsystems.merke.model.Sorting; import java.util.List; import org.hibernate.criterion.DetachedCriteria; import org.hibernate.criterion.Order; import org.hibernate.criterion.Restrictions; import org.springframework.orm.hibernate5.support.HibernateDaoSupport; /** * * @author anthonyarents */ public class HibernateDAO extends HibernateDaoSupport { private static final String SORT_DESC = "DESC"; protected boolean addSorting(final DetachedCriteria criteria, final QueryParams queryParams) { if (queryParams.getSort() == null) { return false; } else { for (Sorting sorting : queryParams.getSort().getSortings()) { addOrder(criteria, sorting); } return true; } } protected void addOrder(final DetachedCriteria criteria, Sorting sorting) { criteria.addOrder(getOrder(sorting.getDirection(), sorting.getProperty())); } protected Order getOrder(final String dir, final String property) { if (SORT_DESC.equals(dir)) { return Order.desc(property); } else { return Order.asc(property); } } protected boolean addFilter(final DetachedCriteria criteria, final QueryParams queryParams) { if (queryParams.getFilter() == null) { return false; } else { for (Filter filter : queryParams.getFilter().getFilters()) { if (filter.getValue() == null) { criteria.add(Restrictions.isNull(filter.getProperty())); } else { criteria.add(Restrictions.eq(filter.getProperty(), filter.getValue())); } } return true; } } List byCriteria(final DetachedCriteria criteria, final QueryParams queryParams) { return getHibernateTemplate().findByCriteria(criteria, queryParams.getStart(), queryParams.getLimit()); } List byCriteriaS(final DetachedCriteria criteria, final QueryParams queryParams) { addSorting(criteria, queryParams); return getHibernateTemplate().findByCriteria(criteria, queryParams.getStart(), queryParams.getLimit()); } List byCriteriaF(final DetachedCriteria criteria, final QueryParams queryParams) { addFilter(criteria, queryParams); return getHibernateTemplate().findByCriteria(criteria, queryParams.getStart(), queryParams.getLimit()); } List byCriteriaFS(final DetachedCriteria criteria, final QueryParams queryParams) { addFilter(criteria, queryParams); addSorting(criteria, queryParams); return getHibernateTemplate().findByCriteria(criteria, queryParams.getStart(), queryParams.getLimit()); } }