package com.jspxcms.core.repository.impl;
import java.util.Date;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.apache.commons.lang3.ArrayUtils;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import com.jspxcms.common.orm.Limitable;
import com.jspxcms.common.orm.QuerydslUtils;
import com.jspxcms.core.domain.Special;
import com.jspxcms.core.domaindsl.QSpecial;
import com.jspxcms.core.repository.SpecialDaoPlus;
import com.mysema.query.BooleanBuilder;
import com.mysema.query.jpa.impl.JPAQuery;
/**
* SpecialDaoImpl
*
* @author liufang
*
*/
public class SpecialDaoImpl implements SpecialDaoPlus {
public List<Special> findList(Integer[] siteId, Integer[] categoryId,
Date startDate, Date endDate, Boolean isWithImage,
Boolean isRecommend, Limitable limitable) {
JPAQuery query = new JPAQuery(this.em);
QSpecial special = QSpecial.special;
predicate(query, special, siteId, categoryId, startDate, endDate,
isWithImage, isRecommend);
return QuerydslUtils.list(query, special, limitable);
}
public Page<Special> findPage(Integer[] siteId, Integer[] categoryId,
Date startDate, Date endDate, Boolean isWithImage,
Boolean isRecommend, Pageable pageable) {
JPAQuery query = new JPAQuery(this.em);
QSpecial special = QSpecial.special;
predicate(query, special, siteId, categoryId, startDate, endDate,
isWithImage, isRecommend);
return QuerydslUtils.page(query, special, pageable);
}
private void predicate(JPAQuery query, QSpecial special, Integer[] siteId,
Integer[] categoryId, Date startDate, Date endDate,
Boolean isWithImage, Boolean isRecommend) {
query.from(special);
BooleanBuilder exp = new BooleanBuilder();
if (ArrayUtils.isNotEmpty(siteId)) {
exp = exp.and(special.site.id.in(siteId));
}
if (ArrayUtils.isNotEmpty(categoryId)) {
exp = exp.and(special.category.id.in(categoryId));
}
if (startDate != null) {
exp = exp.and(special.creationDate.goe(startDate));
}
if (endDate != null) {
exp = exp.and(special.creationDate.goe(endDate));
}
if (isWithImage != null) {
exp = exp.and(special.withImage.eq(isWithImage));
}
if (isRecommend != null) {
exp = exp.and(special.recommend.eq(isRecommend));
}
query.where(exp);
}
private EntityManager em;
@PersistenceContext
public void setEm(EntityManager em) {
this.em = em;
}
}