package net.techreadiness.plugin.service.reports; import java.sql.SQLException; import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Map.Entry; import javax.inject.Inject; import net.techreadiness.persistence.criteriaquery.QueryResult; import net.techreadiness.persistence.dao.OrgDAO; import net.techreadiness.persistence.domain.OrgDO; import net.techreadiness.persistence.domain.ScopeDO; import net.techreadiness.plugin.persistence.dao.SnapshotWindowDao; import net.techreadiness.plugin.persistence.report.BaseDataRetriever; import net.techreadiness.plugin.persistence.report.StaffAndPersonnelSurveyDataRetriever; import net.techreadiness.plugin.service.object.SnapshotOrg; import net.techreadiness.service.BaseServiceImpl; import net.techreadiness.service.OrganizationService; import net.techreadiness.service.ScopeService; import net.techreadiness.service.ServiceContext; import net.techreadiness.service.exception.ServiceException; import net.techreadiness.service.object.Org; import net.techreadiness.service.object.Scope; import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.collections.CollectionUtils; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.google.common.collect.Iterables; @Service @Transactional(readOnly = true) public class ReportsServiceImpl extends BaseServiceImpl implements ReportsService { @Inject @Qualifier("BaseDataRetriever") private BaseDataRetriever baseDataRetriever; @Inject ScopeService scopeService; @Inject OrganizationService organizationService; @Inject SnapshotWindowDao snapshotWindowDao; @Inject OrgDAO orgDAO; @Inject StaffAndPersonnelSurveyDataRetriever staffAndPersonnelSurveyDataRetriever; @Override public ScopeDO findScope(final String scopePathName) { final Scope scope = scopeService.getByScopePath(scopePathName); return getMappingService().map(scope); } @Override public OrgDO findRootOrg(ServiceContext context) { final Org organization = organizationService.getByCode(context, "readiness"); return getMappingService().map(organization); } @Override public Integer retrieveTotalCount(final Org org, final Scope scope) { final OrgDO orgDO = getMappingService().map(org); final ScopeDO scopeDO = getMappingService().map(scope); return baseDataRetriever.findTotalCount(orgDO, scopeDO); } @Override public QueryResult<Map<String, String>> retrieveSummaryForOrg(Long snapshowWindowId, Long orgId, MinimumRecommendedFlag minimumOrRecommendedFlag) { try { return baseDataRetriever.getSnapshotReportDataForOrg(snapshowWindowId, orgId, minimumOrRecommendedFlag); } catch (SQLException e) { throw new ServiceException(e); } } @Override public QueryResult<Map<String, String>> retrieveSummaryForChildOrgs(Long snapshotWindowId, Long orgId, MinimumRecommendedFlag minimumOrRecommendedFlag, boolean retrieveAll, Integer startingRow, Integer numberOfRows) { try { return baseDataRetriever.findSnapshotReportDataForChildOrgs(snapshotWindowId, orgId, minimumOrRecommendedFlag, retrieveAll, startingRow, numberOfRows); } catch (SQLException e) { throw new ServiceException(e); } } @Override public QueryResult<Map<String, String>> retrieveSummaryForDescendantOrgs(Long snapshotWindowId, Long orgId, MinimumRecommendedFlag minimumOrRecommendedFlag, boolean retrieveAll, Integer startingRow, Integer numberOfRows, Integer orgTreeDistance) { try { return baseDataRetriever.findSnapshotReportDataForDescendantOrgs(snapshotWindowId, orgId, minimumOrRecommendedFlag, retrieveAll, startingRow, numberOfRows, orgTreeDistance); } catch (SQLException e) { throw new ServiceException(e); } } @Override public List<Map<String, String>> retrieveMinimumRecommendedValues(Long snapshotWindowId) { try { return baseDataRetriever.findMinimumRecommendedValues(snapshotWindowId); } catch (SQLException e) { throw new ServiceException(e); } } @Override public List<Map<String, String>> retrieveSurveyQuestions() { return staffAndPersonnelSurveyDataRetriever.retrieveSurveyQuestions(); } @Override public QueryResult<Map<String, String>> retrieveSurveySummaryForOrg(Long snapshotWindowId, Long orgId, String surveyQuestionTypeCode) { try { return staffAndPersonnelSurveyDataRetriever.getSnapshotSurveyReportDataForOrg(snapshotWindowId, orgId, surveyQuestionTypeCode); } catch (SQLException e) { throw new ServiceException(e); } } @Override public QueryResult<Map<String, String>> retrieveSchoolExceptions(Long snapshotWindowId, Long orgId, String exceptionTypeCode, boolean retrieveAllRows, boolean retrieveFullDetails, Integer startingRow, Integer numberOfRows) { try { return baseDataRetriever.retrieveSchoolExceptions(snapshotWindowId, orgId, exceptionTypeCode, retrieveAllRows, retrieveFullDetails, startingRow, numberOfRows); } catch (SQLException e) { throw new ServiceException(e); } } @Override public QueryResult<Map<String, String>> retrieveSurveySummaryForChildOrgs(Long snapshotWindowId, Long orgId, String surveyQuestionTypeCode, boolean retrieveAll, Integer startingRow, Integer numberOfRows) { try { return staffAndPersonnelSurveyDataRetriever.findSnapshotSurveyReportDataForChildOrgs(snapshotWindowId, orgId, surveyQuestionTypeCode, retrieveAll, startingRow, numberOfRows); } catch (SQLException e) { throw new ServiceException(e); } } @Override public void createSnapshotRollup(Long snapshotWindowId, boolean fullRefresh) { baseDataRetriever.createSnapshotRollup(snapshotWindowId, fullRefresh); } @Override public QueryResult<Map<String, String>> retrieveProgressDataForChildOrgs(Collection<Long> snapshotWindowIds, Long orgId, MinimumRecommendedFlag minimumOrRecommendedFlag, boolean retrieveAll, Integer startingRow, Integer numberOfRows) { try { return baseDataRetriever.findProgressSnapshotReportDataForChildOrgs(snapshotWindowIds, orgId, minimumOrRecommendedFlag, retrieveAll, startingRow, numberOfRows); } catch (SQLException e) { throw new ServiceException(e); } } @Override public QueryResult<Map<String, String>> retrieveProgressDataForOrg(Collection<Long> snapshotWindowIds, Long orgId, MinimumRecommendedFlag minimumOrRecommendedFlag) { try { return baseDataRetriever .findProgressSnapshotReportDataForOrg(snapshotWindowIds, orgId, minimumOrRecommendedFlag); } catch (SQLException e) { throw new ServiceException(e); } } @Override public SnapshotOrg getSnapshotDataForOrg(Long snapshotWindowId, Long orgId, MinimumRecommendedFlag flag) { try { QueryResult<Map<String, String>> reportData = baseDataRetriever.getSnapshotReportDataForOrg(snapshotWindowId, orgId, flag); Collection<Map<String, String>> rows = reportData.getRows(); if (CollectionUtils.isEmpty(rows)) { return null; } Map<String, String> first = Iterables.getFirst(rows, Collections.<String, String> emptyMap()); SnapshotOrg org = new SnapshotOrg(); for (Entry<String, String> entry : first.entrySet()) { BeanUtils.setProperty(org, entry.getKey(), entry.getValue()); } return org; } catch (Exception e) { throw new ServiceException(e); } } }