package com.jspxcms.ext.repository.impl;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.apache.commons.lang3.ArrayUtils;
import org.hibernate.ejb.QueryHints;
import com.jspxcms.common.orm.Limitable;
import com.jspxcms.common.orm.QuerydslUtils;
import com.jspxcms.ext.domain.Friendlink;
import com.jspxcms.ext.domaindsl.QFriendlink;
import com.jspxcms.ext.repository.FriendlinkDaoPlus;
import com.mysema.query.BooleanBuilder;
import com.mysema.query.jpa.impl.JPAQuery;
/**
* FriendlinkDaoImpl
*
* @author yangxing
*
*/
public class FriendlinkDaoImpl implements FriendlinkDaoPlus {
public List<Friendlink> findList(Integer[] siteId, String[] type,
Integer[] typeId, Boolean isWithLogo, Boolean isRecommend,
Integer[] status, Limitable limitable) {
JPAQuery query = new JPAQuery(this.em);
query.setHint(QueryHints.HINT_CACHEABLE, true);
QFriendlink friendlink = QFriendlink.friendlink;
predicate(query, friendlink, siteId, type, typeId, isWithLogo,
isRecommend, status);
return QuerydslUtils.list(query, friendlink, limitable);
}
private void predicate(JPAQuery query, QFriendlink friendlink,
Integer[] siteId, String[] type, Integer[] typeId,
Boolean isWithLogo, Boolean isRecommend, Integer[] status) {
query.from(friendlink);
BooleanBuilder exp = new BooleanBuilder();
if (ArrayUtils.isNotEmpty(siteId)) {
exp = exp.and(friendlink.site.id.in(siteId));
}
if (ArrayUtils.isNotEmpty(type)) {
exp = exp.and(friendlink.type.number.in(type));
}
if (ArrayUtils.isNotEmpty(typeId)) {
exp = exp.and(friendlink.type.id.in(typeId));
}
if (isWithLogo != null) {
exp = exp.and(friendlink.withLogo.eq(isWithLogo));
}
if (isRecommend != null) {
exp = exp.and(friendlink.recommend.eq(isRecommend));
}
if (ArrayUtils.isNotEmpty(status)) {
exp = exp.and(friendlink.status.in(status));
}
query.where(exp);
}
private EntityManager em;
@PersistenceContext
public void setEm(EntityManager em) {
this.em = em;
}
}