package com.salesmanager.core.business.repositories.user;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import com.salesmanager.core.model.user.Permission;
import com.salesmanager.core.model.user.PermissionCriteria;
import com.salesmanager.core.model.user.PermissionList;
public class PermissionRepositoryImpl implements PermissionRepositoryCustom {
@PersistenceContext
private EntityManager em;
@Override
public PermissionList listByCriteria(PermissionCriteria criteria) {
PermissionList permissionList = new PermissionList();
StringBuilder countBuilderSelect = new StringBuilder();
countBuilderSelect.append("select count(p) from Permission as p");
StringBuilder countBuilderWhere = new StringBuilder();
if(criteria.getGroupIds()!=null && criteria.getGroupIds().size()>0) {
countBuilderSelect.append(" INNER JOIN p.groups grous");
countBuilderWhere.append(" where grous.id in (:cid)");
}
Query countQ = em.createQuery(
countBuilderSelect.toString() + countBuilderWhere.toString());
if(criteria.getGroupIds()!=null && criteria.getGroupIds().size()>0) {
countQ.setParameter("cid", criteria.getGroupIds());
}
Number count = (Number) countQ.getSingleResult ();
permissionList.setTotalCount(count.intValue());
if(count.intValue()==0)
return permissionList;
StringBuilder qs = new StringBuilder();
qs.append("select p from Permission as p ");
qs.append("join fetch p.groups grous ");
if(criteria.getGroupIds()!=null && criteria.getGroupIds().size()>0) {
qs.append(" where grous.id in (:cid)");
}
qs.append(" order by p.id asc ");
String hql = qs.toString();
Query q = em.createQuery(hql);
if(criteria.getGroupIds()!=null && criteria.getGroupIds().size()>0) {
q.setParameter("cid", criteria.getGroupIds());
}
if(criteria.getMaxCount()>0) {
q.setFirstResult(criteria.getStartIndex());
if(criteria.getMaxCount()<count.intValue()) {
q.setMaxResults(criteria.getMaxCount());
permissionList.setTotalCount(criteria.getMaxCount());
}
else {
q.setMaxResults(count.intValue());
permissionList.setTotalCount(count.intValue());
}
}
@SuppressWarnings("unchecked")
List<Permission> permissions = q.getResultList();
permissionList.setPermissions(permissions);
return permissionList;
}
}