Search in sources :

Example 1 with DESCENDANTS

use of org.hisp.dhis.common.OrganisationUnitSelectionMode.DESCENDANTS in project dhis2-core by dhis2.

the class HibernateDataValueStore method getDeflatedDataValues.

@Override
public List<DeflatedDataValue> getDeflatedDataValues(DataExportParams params) {
    SqlHelper sqlHelper = new SqlHelper(true);
    boolean joinOrgUnit = params.isOrderByOrgUnitPath() || params.hasOrgUnitLevel() || params.getOuMode() == DESCENDANTS || params.isIncludeDescendants();
    String sql = "select dv.dataelementid, dv.periodid, dv.sourceid" + ", dv.categoryoptioncomboid, dv.attributeoptioncomboid, dv.value" + ", dv.storedby, dv.created, dv.lastupdated, dv.comment, dv.followup, dv.deleted" + (joinOrgUnit ? ", ou.path" : "") + " from datavalue dv";
    String where = "";
    List<DataElementOperand> queryDeos = getQueryDataElementOperands(params);
    if (queryDeos != null) {
        List<Long> deIdList = queryDeos.stream().map(de -> de.getDataElement().getId()).collect(Collectors.toList());
        List<Long> cocIdList = queryDeos.stream().map(de -> de.getCategoryOptionCombo() == null ? null : de.getCategoryOptionCombo().getId()).collect(Collectors.toList());
        sql += " join " + statementBuilder.literalLongLongTable(deIdList, cocIdList, "deo", "deid", "cocid") + " on deo.deid = dv.dataelementid and (deo.cocid is null or deo.cocid::bigint = dv.categoryoptioncomboid)";
    } else if (params.hasDataElements()) {
        String dataElementIdList = getCommaDelimitedString(getIdentifiers(params.getDataElements()));
        where += sqlHelper.whereAnd() + "dv.dataelementid in (" + dataElementIdList + ")";
    }
    if (params.hasPeriods()) {
        String periodIdList = getCommaDelimitedString(getIdentifiers(params.getPeriods()));
        where += sqlHelper.whereAnd() + "dv.periodid in (" + periodIdList + ")";
    } else if (params.hasPeriodTypes() || params.hasStartEndDate() || params.hasIncludedDate()) {
        sql += " join period p on p.periodid = dv.periodid";
        if (params.hasPeriodTypes()) {
            sql += " join periodtype pt on pt.periodtypeid = p.periodtypeid";
            String periodTypeIdList = getCommaDelimitedString(params.getPeriodTypes().stream().map(o -> o.getId()).collect(Collectors.toList()));
            where += sqlHelper.whereAnd() + "pt.periodtypeid in (" + periodTypeIdList + ")";
        }
        if (params.hasStartEndDate()) {
            where += sqlHelper.whereAnd() + "p.startdate >= '" + DateUtils.getMediumDateString(params.getStartDate()) + "'" + " and p.enddate <= '" + DateUtils.getMediumDateString(params.getStartDate()) + "'";
        } else if (params.hasIncludedDate()) {
            where += sqlHelper.whereAnd() + "p.startdate <= '" + DateUtils.getMediumDateString(params.getIncludedDate()) + "'" + " and p.enddate >= '" + DateUtils.getMediumDateString(params.getIncludedDate()) + "'";
        }
    }
    if (joinOrgUnit) {
        sql += " join organisationunit ou on ou.organisationunitid = dv.sourceid";
    }
    if (params.hasOrgUnitLevel()) {
        where += sqlHelper.whereAnd() + "ou.hierarchylevel " + (params.isIncludeDescendants() ? ">" : "") + "= " + params.getOrgUnitLevel();
    }
    if (params.hasOrganisationUnits()) {
        if (params.getOuMode() == DESCENDANTS) {
            where += sqlHelper.whereAnd() + "(";
            for (OrganisationUnit parent : params.getOrganisationUnits()) {
                where += sqlHelper.or() + "ou.path like '" + parent.getPath() + "%'";
            }
            where += " )";
        } else {
            String orgUnitIdList = getCommaDelimitedString(getIdentifiers(params.getOrganisationUnits()));
            where += sqlHelper.whereAnd() + "dv.sourceid in (" + orgUnitIdList + ")";
        }
    }
    if (params.hasAttributeOptionCombos()) {
        String aocIdList = getCommaDelimitedString(getIdentifiers(params.getAttributeOptionCombos()));
        where += sqlHelper.whereAnd() + "dv.attributeoptioncomboid in (" + aocIdList + ")";
    }
    if (params.hasCogDimensionConstraints() || params.hasCoDimensionConstraints()) {
        sql += " join categoryoptioncombos_categoryoptions cc on dv.attributeoptioncomboid = cc.categoryoptioncomboid";
        if (params.hasCoDimensionConstraints()) {
            String coDimConstraintsList = getCommaDelimitedString(getIdentifiers(params.getCoDimensionConstraints()));
            where += sqlHelper.whereAnd() + "cc.categoryoptionid in (" + coDimConstraintsList + ") ";
        }
        if (params.hasCogDimensionConstraints()) {
            String cogDimConstraintsList = getCommaDelimitedString(getIdentifiers(params.getCogDimensionConstraints()));
            sql += " join categoryoptiongroupmembers cogm on cc.categoryoptionid = cogm.categoryoptionid";
            where += sqlHelper.whereAnd() + "cogm.categoryoptiongroupid in (" + cogDimConstraintsList + ")";
        }
    }
    if (params.hasLastUpdated()) {
        where += sqlHelper.whereAnd() + "dv.lastupdated >= " + DateUtils.getMediumDateString(params.getLastUpdated());
    }
    if (!params.isIncludeDeleted()) {
        where += sqlHelper.whereAnd() + "dv.deleted is false";
    }
    sql += where;
    if (params.isOrderByOrgUnitPath()) {
        sql += " order by ou.path";
    }
    SqlRowSet rowSet = jdbcTemplate.queryForRowSet(sql);
    List<DeflatedDataValue> result = new ArrayList<>();
    while (rowSet.next()) {
        Integer dataElementId = rowSet.getInt(1);
        Integer periodId = rowSet.getInt(2);
        Integer organisationUnitId = rowSet.getInt(3);
        Integer categoryOptionComboId = rowSet.getInt(4);
        Integer attributeOptionComboId = rowSet.getInt(5);
        String value = rowSet.getString(6);
        String storedBy = rowSet.getString(7);
        Date created = rowSet.getDate(8);
        Date lastUpdated = rowSet.getDate(9);
        String comment = rowSet.getString(10);
        boolean followup = rowSet.getBoolean(11);
        boolean deleted = rowSet.getBoolean(12);
        String sourcePath = joinOrgUnit ? rowSet.getString(13) : null;
        DeflatedDataValue ddv = new DeflatedDataValue(dataElementId, periodId, organisationUnitId, categoryOptionComboId, attributeOptionComboId, value, storedBy, created, lastUpdated, comment, followup, deleted);
        ddv.setSourcePath(sourcePath);
        if (params.hasBlockingQueue()) {
            if (!addToBlockingQueue(params.getBlockingQueue(), ddv)) {
                // Abort
                return result;
            }
        } else {
            result.add(ddv);
        }
    }
    if (params.hasBlockingQueue()) {
        addToBlockingQueue(params.getBlockingQueue(), END_OF_DDV_DATA);
    }
    log.debug(result.size() + " DeflatedDataValues returned from: " + sql);
    return result;
}
Also used : HibernateGenericStore(org.hisp.dhis.hibernate.HibernateGenericStore) IdentifiableObjectUtils.getIdentifiers(org.hisp.dhis.common.IdentifiableObjectUtils.getIdentifiers) Date(java.util.Date) DeflatedDataValue(org.hisp.dhis.datavalue.DeflatedDataValue) Function(java.util.function.Function) ArrayList(java.util.ArrayList) JdbcTemplate(org.springframework.jdbc.core.JdbcTemplate) DataElement(org.hisp.dhis.dataelement.DataElement) Predicate(javax.persistence.criteria.Predicate) CriteriaBuilder(javax.persistence.criteria.CriteriaBuilder) Query(org.hibernate.query.Query) DataExportParams(org.hisp.dhis.datavalue.DataExportParams) ApplicationEventPublisher(org.springframework.context.ApplicationEventPublisher) SqlRowSet(org.springframework.jdbc.support.rowset.SqlRowSet) Repository(org.springframework.stereotype.Repository) TextUtils.getCommaDelimitedString(org.hisp.dhis.commons.util.TextUtils.getCommaDelimitedString) Root(javax.persistence.criteria.Root) SqlHelper(org.hisp.dhis.commons.util.SqlHelper) Period(org.hisp.dhis.period.Period) DataValueStore(org.hisp.dhis.datavalue.DataValueStore) DataElementOperand(org.hisp.dhis.dataelement.DataElementOperand) SessionFactory(org.hibernate.SessionFactory) DESCENDANTS(org.hisp.dhis.common.OrganisationUnitSelectionMode.DESCENDANTS) Set(java.util.Set) BlockingQueue(java.util.concurrent.BlockingQueue) StatementBuilder(org.hisp.dhis.jdbc.StatementBuilder) Collectors(java.util.stream.Collectors) TextUtils.removeLastOr(org.hisp.dhis.commons.util.TextUtils.removeLastOr) OrganisationUnit(org.hisp.dhis.organisationunit.OrganisationUnit) List(java.util.List) Slf4j(lombok.extern.slf4j.Slf4j) CategoryOptionCombo(org.hisp.dhis.category.CategoryOptionCombo) PeriodStore(org.hisp.dhis.period.PeriodStore) DataValue(org.hisp.dhis.datavalue.DataValue) DateUtils(org.hisp.dhis.util.DateUtils) SqlRowSet(org.springframework.jdbc.support.rowset.SqlRowSet) DataElementOperand(org.hisp.dhis.dataelement.DataElementOperand) OrganisationUnit(org.hisp.dhis.organisationunit.OrganisationUnit) SqlHelper(org.hisp.dhis.commons.util.SqlHelper) ArrayList(java.util.ArrayList) TextUtils.getCommaDelimitedString(org.hisp.dhis.commons.util.TextUtils.getCommaDelimitedString) Date(java.util.Date) DeflatedDataValue(org.hisp.dhis.datavalue.DeflatedDataValue)

Aggregations

ArrayList (java.util.ArrayList)1 Date (java.util.Date)1 List (java.util.List)1 Set (java.util.Set)1 BlockingQueue (java.util.concurrent.BlockingQueue)1 Function (java.util.function.Function)1 Collectors (java.util.stream.Collectors)1 CriteriaBuilder (javax.persistence.criteria.CriteriaBuilder)1 Predicate (javax.persistence.criteria.Predicate)1 Root (javax.persistence.criteria.Root)1 Slf4j (lombok.extern.slf4j.Slf4j)1 SessionFactory (org.hibernate.SessionFactory)1 Query (org.hibernate.query.Query)1 CategoryOptionCombo (org.hisp.dhis.category.CategoryOptionCombo)1 IdentifiableObjectUtils.getIdentifiers (org.hisp.dhis.common.IdentifiableObjectUtils.getIdentifiers)1 DESCENDANTS (org.hisp.dhis.common.OrganisationUnitSelectionMode.DESCENDANTS)1 SqlHelper (org.hisp.dhis.commons.util.SqlHelper)1 TextUtils.getCommaDelimitedString (org.hisp.dhis.commons.util.TextUtils.getCommaDelimitedString)1 TextUtils.removeLastOr (org.hisp.dhis.commons.util.TextUtils.removeLastOr)1 DataElement (org.hisp.dhis.dataelement.DataElement)1