package net.techreadiness.plugin.action.snapshot;
import java.io.Serializable;
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.plugin.persistence.domain.SnapshotWindowDO;
import net.techreadiness.plugin.service.object.SnapshotWindow;
import net.techreadiness.plugin.service.reports.ReportsService;
import net.techreadiness.service.ServiceContext;
import net.techreadiness.service.common.DataGrid;
import net.techreadiness.service.common.DataGridItemProviderImpl;
import net.techreadiness.service.object.mapping.MappingService;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
@Component
@org.springframework.context.annotation.Scope("prototype")
@Transactional(readOnly = true)
public class SnapshotItemProviderImpl extends DataGridItemProviderImpl<SnapshotWindow> implements SnapshotItemProvider,
Serializable {
private static final long serialVersionUID = 1L;
private ServiceContext serviceContext;
@Inject
MappingService mappingService;
@Inject
CriteriaQuery<SnapshotWindowDO> criteriaQuery;
@Override
public List<SnapshotWindow> getPage(DataGrid<SnapshotWindow> grid) {
Criteria criteria = createCriteria(grid);
criteriaQuery.setFullTextSearchColumns(new String[] { "name" });
StringBuilder sb = new StringBuilder("select sw.* from readiness.snapshot_window sw ");
sb.append("where sw.scope_id = :scopeId ");
sb.append("and sw.name != :name");
criteriaQuery.setBaseSubSelect(sb.toString());
criteria.getParameters().put("scopeId", serviceContext.getScopeId());
criteria.getParameters().put("name", ReportsService.DEFAULT_SNAPSHOT_WINDOW);
QueryResult<SnapshotWindowDO> result = criteriaQuery.getData(criteria, SnapshotWindowDO.class);
setTotalNumberOfItems(result.getTotalRowCount());
return mappingService.mapFromDOList(result.getRows());
}
@Override
public void setServiceContext(ServiceContext serviceContext) {
this.serviceContext = serviceContext;
}
}