Search in sources :

Example 6 with OptionalFilterBuilder

use of org.hisp.dhis.dataitem.query.shared.OptionalFilterBuilder in project dhis2-core by dhis2.

the class ProgramStageDataElementQuery method getStatement.

@Override
public String getStatement(final MapSqlParameterSource paramsMap) {
    final StringBuilder sql = new StringBuilder();
    sql.append("(");
    // Creating a temp translated table to be queried.
    sql.append(SPACED_SELECT + "* from (");
    if (hasNonBlankStringPresence(paramsMap, LOCALE)) {
        // Selecting translated names.
        sql.append(selectRowsContainingTranslatedName());
    } else {
        // Retrieving all rows ignoring translation as no locale is defined.
        sql.append(selectAllRowsIgnoringAnyTranslation());
    }
    sql.append(" group by program.name, program.shortname, item_name, " + COMMON_UIDS + ", item_valuetype, item_code, item_sharing, item_shortname," + " i18n_first_name, i18n_first_shortname, i18n_second_name, i18n_second_shortname");
    // Closing the temp table.
    sql.append(" ) t");
    sql.append(SPACED_WHERE);
    // Applying filters, ordering and limits.
    // Mandatory filters. They do not respect the root junction filtering.
    sql.append(always(sharingConditions("t.item_sharing", READ_ACCESS, paramsMap)));
    sql.append(" and");
    sql.append(ifSet(valueTypeFiltering("t.item_valuetype", paramsMap)));
    // Optional filters, based on the current root junction.
    final OptionalFilterBuilder optionalFilters = new OptionalFilterBuilder(paramsMap);
    optionalFilters.append(ifSet(displayNameFiltering("t.i18n_first_name", "t.i18n_second_name", paramsMap)));
    optionalFilters.append(ifSet(displayShortNameFiltering("t.i18n_first_shortname", "t.i18n_second_shortname", paramsMap)));
    optionalFilters.append(ifSet(nameFiltering("t.program_name", "t.item_name", paramsMap)));
    optionalFilters.append(ifSet(shortNameFiltering("t.program_shortname", "t.item_shortname", paramsMap)));
    optionalFilters.append(ifSet(programIdFiltering("t.program_uid", paramsMap)));
    optionalFilters.append(ifSet(uidFiltering("t.item_uid", paramsMap)));
    sql.append(ifAny(optionalFilters.toString()));
    final String identifiableStatement = identifiableTokenFiltering("t.item_uid", "t.item_code", "t.i18n_second_name", "t.i18n_first_name", paramsMap);
    if (isNotBlank(identifiableStatement)) {
        sql.append(rootJunction(paramsMap));
        sql.append(identifiableStatement);
    }
    sql.append(ifSet(ordering("t.i18n_first_name, t.i18n_second_name, t.item_uid", "t.program_name, t.item_name, t.item_uid", "t.i18n_first_shortname, i18n_second_shortname, t.item_uid", "t.program_name, t.item_shortname, t.item_uid", paramsMap)));
    sql.append(ifSet(maxLimit(paramsMap)));
    sql.append(")");
    final String fullStatement = sql.toString();
    log.trace("Full SQL: " + fullStatement);
    return fullStatement;
}
Also used : OptionalFilterBuilder(org.hisp.dhis.dataitem.query.shared.OptionalFilterBuilder)

Aggregations

OptionalFilterBuilder (org.hisp.dhis.dataitem.query.shared.OptionalFilterBuilder)6 Set (java.util.Set)1 Collectors.toSet (java.util.stream.Collectors.toSet)1 Slf4j (lombok.extern.slf4j.Slf4j)1 StringUtils.isNotBlank (org.apache.commons.lang3.StringUtils.isNotBlank)1 BaseIdentifiableObject (org.hisp.dhis.common.BaseIdentifiableObject)1 ValueType.getAggregatables (org.hisp.dhis.common.ValueType.getAggregatables)1 FilteringStatement.always (org.hisp.dhis.dataitem.query.shared.FilteringStatement.always)1 FilteringStatement.displayNameFiltering (org.hisp.dhis.dataitem.query.shared.FilteringStatement.displayNameFiltering)1 FilteringStatement.displayShortNameFiltering (org.hisp.dhis.dataitem.query.shared.FilteringStatement.displayShortNameFiltering)1 FilteringStatement.identifiableTokenFiltering (org.hisp.dhis.dataitem.query.shared.FilteringStatement.identifiableTokenFiltering)1 FilteringStatement.ifAny (org.hisp.dhis.dataitem.query.shared.FilteringStatement.ifAny)1 FilteringStatement.ifSet (org.hisp.dhis.dataitem.query.shared.FilteringStatement.ifSet)1 FilteringStatement.nameFiltering (org.hisp.dhis.dataitem.query.shared.FilteringStatement.nameFiltering)1 FilteringStatement.rootJunction (org.hisp.dhis.dataitem.query.shared.FilteringStatement.rootJunction)1 FilteringStatement.shortNameFiltering (org.hisp.dhis.dataitem.query.shared.FilteringStatement.shortNameFiltering)1 FilteringStatement.uidFiltering (org.hisp.dhis.dataitem.query.shared.FilteringStatement.uidFiltering)1 FilteringStatement.valueTypeFiltering (org.hisp.dhis.dataitem.query.shared.FilteringStatement.valueTypeFiltering)1 LimitStatement.maxLimit (org.hisp.dhis.dataitem.query.shared.LimitStatement.maxLimit)1 NameTranslationStatement.translationNamesColumnsFor (org.hisp.dhis.dataitem.query.shared.NameTranslationStatement.translationNamesColumnsFor)1