package net.techreadiness.customer.action.filebatch; import java.io.Serializable; import java.util.Collection; import java.util.List; import javax.inject.Inject; import net.techreadiness.persistence.criteriaquery.Criteria; import net.techreadiness.persistence.criteriaquery.CriteriaQuery; import net.techreadiness.persistence.criteriaquery.QueryResult; import net.techreadiness.persistence.domain.FileDO; import net.techreadiness.service.ServiceContext; import net.techreadiness.service.common.DataGrid; import net.techreadiness.service.common.DataGridItemProviderImpl; import net.techreadiness.service.object.File; import net.techreadiness.service.object.mapping.MappingService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import com.google.common.collect.Lists; @Component @org.springframework.context.annotation.Scope("prototype") @Transactional(readOnly = true) public class FileItemProviderImpl extends DataGridItemProviderImpl<File> implements FileItemProvider, Serializable { private static final long serialVersionUID = 1L; private ServiceContext serviceContext; @Inject MappingService mappingService; @Autowired CriteriaQuery<FileDO> criteriaQuery; @Override public List<File> getPage(DataGrid<File> grid) { Criteria criteria = createCriteria(grid, "fileStatuses", "fileTypes"); criteriaQuery.setFullTextSearchColumns(new String[] { "display_filename", "filename" }); // Create the base query to limit to non deleted users within the user's scope. StringBuilder sb = new StringBuilder(); sb.append(" select f.* from file f, org_tree ot "); sb.append(" where ot.ancestor_org_id = :org_id "); sb.append(" and ot.org_id = f.org_id "); Collection<String> fileTypes = grid.getFilters().get("fileTypes"); Collection<String> fileStatuses = grid.getFilters().get("fileStatuses"); Collection<Long> fileTypeIds = Lists.newLinkedList(); for (String type : fileTypes) { fileTypeIds.add(Long.valueOf(type)); } if (!fileTypeIds.isEmpty()) { sb.append(" and ( file_type_id in (:fileTypeIds) )"); for (Long id : fileTypeIds) { criteria.getParameters().put("fileTypeIds", id); } } if (!fileStatuses.isEmpty()) { sb.append(" and ( status in (:fileStatuses) )"); for (String status : fileStatuses) { criteria.getParameters().put("fileStatuses", status); } } criteria.getParameters().put("org_id", serviceContext.getOrgId().toString()); sb.append(" order by f.request_date DESC "); criteriaQuery.setBaseSubSelect(sb.toString()); QueryResult<FileDO> result = criteriaQuery.getData(criteria, FileDO.class); setTotalNumberOfItems(result.getTotalRowCount()); return mappingService.mapFromDOList(result.getRows()); } @Override public void setServiceContext(ServiceContext serviceContext) { this.serviceContext = serviceContext; } }