package net.techreadiness.persistence.datagrid; import java.util.List; import javax.inject.Inject; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import javax.persistence.TypedQuery; import net.techreadiness.persistence.domain.OrgDO; import net.techreadiness.service.common.DataGrid; import net.techreadiness.service.object.Org; import net.techreadiness.service.object.mapping.MappingService; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Transactional; @Repository @Scope("prototype") @Transactional(readOnly = true) public class OrgByUserItemProviderImpl implements OrgByUserItemProvider { @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 OrgByUserItemProviderImpl() { super(); } @Override public void setUserId(Long userId) { this.userId = userId; } @Override public void setScopeId(Long scopeId) { this.scopeId = scopeId; } public void setIgnoreScope(boolean ignoreScope) { this.ignoreScope = ignoreScope; } @Override @Transactional(readOnly = true) public int getTotalNumberOfItems(DataGrid<Org> dataGrid) { return getOrgInfo().size(); } @Override @Transactional(readOnly = true) public List<Org> getPage(DataGrid<Org> dataGrid) { if (dataGrid.getFilters().containsKey("currentScope")) { ignoreScope = true; } return mappingService.mapFromDOList(getOrgInfo()); } private List<OrgDO> getOrgInfo() { StringBuilder sb = new StringBuilder(); sb.append("select uo.org"); sb.append(" from UserOrgDO uo "); sb.append(" where uo.user.userId = :userId "); if (!ignoreScope) { sb.append(" and uo.org.scope.scopeId =:scopeId "); } TypedQuery<OrgDO> query = em.createQuery(sb.toString(), OrgDO.class); query.setParameter("userId", userId); if (!ignoreScope) { query.setParameter("scopeId", scopeId); } return query.getResultList(); } }