package net.techreadiness.persistence.datagrid; import java.util.List; import javax.inject.Inject; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import javax.persistence.Query; import net.techreadiness.persistence.domain.RoleDO; import net.techreadiness.service.common.DataGrid; import net.techreadiness.service.object.Role; import net.techreadiness.service.object.mapping.MappingService; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Transactional; @Scope("prototype") @Repository @Transactional(readOnly = true) public class RoleByUserItemProviderImpl implements RoleByUserItemProvider { @PersistenceContext protected EntityManager em; @Inject MappingService mappingService; public void setEntityManager(EntityManager em) { this.em = em; } private Long userId; private Long scopeId; private boolean ignoreScope; public RoleByUserItemProviderImpl() { super(); } @Override public void setScopeId(Long scopeId) { this.scopeId = scopeId; } @Override public void setUserId(Long userId) { this.userId = userId; } @Override @Transactional(readOnly = true) public int getTotalNumberOfItems(DataGrid<Role> dataGrid) { return getRoleInfo().size(); } @Override @Transactional(readOnly = true) public List<Role> getPage(DataGrid<Role> dataGrid) { if (dataGrid.getFilters().containsKey("currentScope")) { ignoreScope = true; } return mappingService.mapFromDOList(getRoleInfo()); } private List<RoleDO> getRoleInfo() { StringBuilder sb = new StringBuilder(); sb.append("select r "); sb.append("from RoleDO r left outer join r.userRoles ur"); sb.append(" where ur.user.userId = :userId "); if (!ignoreScope) { sb.append(" and ur.role.scope.scopeId =:scopeId "); } Query query = em.createQuery(sb.toString()); query.setParameter("userId", userId); if (!ignoreScope) { query.setParameter("scopeId", scopeId); } return query.getResultList(); } }