Search in sources :

Example 1 with LOCALE

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

the class DataElementQuery 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 item_name, item_uid, item_valuetype, item_code, item_domaintype, 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 ");
    // ONLY aggregates
    sql.append(always("t.item_domaintype = 'AGGREGATE'"));
    // Optional filters, based on the current root junction.
    final OptionalFilterBuilder optionalFilters = new OptionalFilterBuilder(paramsMap);
    final Set<String> aggregatableTypes = getAggregatables().stream().map(type -> type.name()).collect(toSet());
    // consider the domainType = 'AGGREGATE'. Very specific to DataElements.
    if (paramsMap != null && paramsMap.hasValue(VALUE_TYPES) && paramsMap.getValue(VALUE_TYPES) != null && !((Set) paramsMap.getValue(VALUE_TYPES)).containsAll(aggregatableTypes)) {
        optionalFilters.append(ifSet(valueTypeFiltering("t.item_valuetype", paramsMap)));
    }
    optionalFilters.append(ifSet(displayNameFiltering("t.i18n_first_name", paramsMap)));
    optionalFilters.append(ifSet(displayShortNameFiltering("t.i18n_first_shortname", paramsMap)));
    optionalFilters.append(ifSet(nameFiltering("t.item_name", paramsMap)));
    optionalFilters.append(ifSet(shortNameFiltering("t.item_shortname", 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_first_name", null, 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.item_name, t.item_uid", "t.i18n_first_shortname, t.i18n_second_shortname, t.item_uid", "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 : FilteringStatement.nameFiltering(org.hisp.dhis.dataitem.query.shared.FilteringStatement.nameFiltering) LimitStatement.maxLimit(org.hisp.dhis.dataitem.query.shared.LimitStatement.maxLimit) MapSqlParameterSource(org.springframework.jdbc.core.namedparam.MapSqlParameterSource) FilteringStatement.uidFiltering(org.hisp.dhis.dataitem.query.shared.FilteringStatement.uidFiltering) NameTranslationStatement.translationNamesColumnsFor(org.hisp.dhis.dataitem.query.shared.NameTranslationStatement.translationNamesColumnsFor) ValueType.getAggregatables(org.hisp.dhis.common.ValueType.getAggregatables) FilteringStatement.displayShortNameFiltering(org.hisp.dhis.dataitem.query.shared.FilteringStatement.displayShortNameFiltering) ParamPresenceChecker.hasNonBlankStringPresence(org.hisp.dhis.dataitem.query.shared.ParamPresenceChecker.hasNonBlankStringPresence) LOCALE(org.hisp.dhis.dataitem.query.shared.QueryParam.LOCALE) SPACED_WHERE(org.hisp.dhis.dataitem.query.shared.StatementUtil.SPACED_WHERE) FilteringStatement.always(org.hisp.dhis.dataitem.query.shared.FilteringStatement.always) FilteringStatement.displayNameFiltering(org.hisp.dhis.dataitem.query.shared.FilteringStatement.displayNameFiltering) FilteringStatement.valueTypeFiltering(org.hisp.dhis.dataitem.query.shared.FilteringStatement.valueTypeFiltering) Collectors.toSet(java.util.stream.Collectors.toSet) FilteringStatement.rootJunction(org.hisp.dhis.dataitem.query.shared.FilteringStatement.rootJunction) BaseIdentifiableObject(org.hisp.dhis.common.BaseIdentifiableObject) READ_ACCESS(org.hisp.dhis.dataitem.query.shared.UserAccessStatement.READ_ACCESS) Set(java.util.Set) FilteringStatement.ifSet(org.hisp.dhis.dataitem.query.shared.FilteringStatement.ifSet) FilteringStatement.shortNameFiltering(org.hisp.dhis.dataitem.query.shared.FilteringStatement.shortNameFiltering) VALUE_TYPES(org.hisp.dhis.dataitem.query.shared.QueryParam.VALUE_TYPES) UserAccessStatement.sharingConditions(org.hisp.dhis.dataitem.query.shared.UserAccessStatement.sharingConditions) FilteringStatement.ifAny(org.hisp.dhis.dataitem.query.shared.FilteringStatement.ifAny) SPACED_SELECT(org.hisp.dhis.dataitem.query.shared.StatementUtil.SPACED_SELECT) OptionalFilterBuilder(org.hisp.dhis.dataitem.query.shared.OptionalFilterBuilder) Slf4j(lombok.extern.slf4j.Slf4j) Component(org.springframework.stereotype.Component) StringUtils.isNotBlank(org.apache.commons.lang3.StringUtils.isNotBlank) PROGRAM_ID(org.hisp.dhis.dataitem.query.shared.QueryParam.PROGRAM_ID) OrderingStatement.ordering(org.hisp.dhis.dataitem.query.shared.OrderingStatement.ordering) NameTranslationStatement.translationNamesJoinsOn(org.hisp.dhis.dataitem.query.shared.NameTranslationStatement.translationNamesJoinsOn) FilteringStatement.identifiableTokenFiltering(org.hisp.dhis.dataitem.query.shared.FilteringStatement.identifiableTokenFiltering) Collectors.toSet(java.util.stream.Collectors.toSet) Set(java.util.Set) FilteringStatement.ifSet(org.hisp.dhis.dataitem.query.shared.FilteringStatement.ifSet) OptionalFilterBuilder(org.hisp.dhis.dataitem.query.shared.OptionalFilterBuilder)

Example 2 with LOCALE

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

the class FilteringHelper method setFilteringParams.

/**
 * Sets the filtering defined by filters list into the paramsMap.
 *
 * @param filters the source of filtering params
 * @param paramsMap the map that will receive the filtering params
 * @param currentUser the current user logged
 */
public static void setFilteringParams(final Set<String> filters, final WebOptions options, final MapSqlParameterSource paramsMap, final User currentUser) {
    final Locale currentLocale = defaultIfNull(getUserSetting(DB_LOCALE), getUserSetting(UI_LOCALE));
    if (currentLocale != null && isNotBlank(currentLocale.getLanguage())) {
        paramsMap.addValue(LOCALE, trimToEmpty(currentLocale.getLanguage()));
    }
    final String ilikeName = extractValueFromFilter(filters, NAME_ILIKE);
    if (StringUtils.isNotEmpty(ilikeName)) {
        paramsMap.addValue(NAME, wrap(addIlikeReplacingCharacters(ilikeName), "%"));
    }
    final String ilikeDisplayName = extractValueFromFilter(filters, DISPLAY_NAME_ILIKE);
    if (StringUtils.isNotEmpty(ilikeDisplayName)) {
        paramsMap.addValue(DISPLAY_NAME, wrap(addIlikeReplacingCharacters(ilikeDisplayName), "%"));
    }
    final String ilikeShortName = extractValueFromFilter(filters, SHORT_NAME_ILIKE);
    if (StringUtils.isNotEmpty(ilikeShortName)) {
        paramsMap.addValue(SHORT_NAME, wrap(addIlikeReplacingCharacters(ilikeShortName), "%"));
    }
    final String ilikeDisplayShortName = extractValueFromFilter(filters, DISPLAY_SHORT_NAME_ILIKE);
    if (StringUtils.isNotEmpty(ilikeDisplayShortName)) {
        paramsMap.addValue(DISPLAY_SHORT_NAME, wrap(addIlikeReplacingCharacters(ilikeDisplayShortName), "%"));
    }
    final String equalId = extractValueFromFilter(filters, ID_EQUAL, true);
    if (isNotBlank(equalId)) {
        paramsMap.addValue(UID, equalId);
    }
    final String rootJunction = options.getRootJunction().name();
    if (isNotBlank(rootJunction)) {
        paramsMap.addValue(ROOT_JUNCTION, rootJunction);
    }
    final String identifiableToken = extractValueFromFilter(filters, IDENTIFIABLE_TOKEN);
    if (identifiableToken != null) {
        final List<String> wordsAsTokens = getTokens(identifiableToken);
        if (CollectionUtils.isNotEmpty(wordsAsTokens)) {
            paramsMap.addValue(IDENTIFIABLE_TOKEN_COMPARISON, StringUtils.join(wordsAsTokens, ","));
        }
    }
    if (containsFilterWithAnyOfPrefixes(filters, VALUE_TYPE_EQUAL.getCombination(), VALUE_TYPE_IN.getCombination())) {
        final Set<String> valueTypesFilter = extractAllValueTypesFromFilters(filters);
        assertThatValueTypeFilterHasOnlyAggregatableTypes(valueTypesFilter, filters);
        paramsMap.addValue(VALUE_TYPES, extractAllValueTypesFromFilters(filters));
    } else {
        // Includes all value types.
        paramsMap.addValue(VALUE_TYPES, getAggregatables().stream().map(type -> type.name()).collect(toSet()));
    }
    final String programId = extractValueFromFilter(filters, PROGRAM_ID_EQUAL, true);
    // Add program id filtering id, if present.
    if (isNotBlank(programId)) {
        paramsMap.addValue(PROGRAM_ID, programId);
    }
    // Add user group filtering, when present.
    if (currentUser != null && CollectionUtils.isNotEmpty(currentUser.getGroups())) {
        final Set<String> userGroupUids = currentUser.getGroups().stream().filter(group -> group != null).map(group -> trimToEmpty(group.getUid())).collect(toSet());
        paramsMap.addValue(USER_GROUP_UIDS, "{" + join(",", userGroupUids) + "}");
    }
}
Also used : Locale(java.util.Locale) StringUtils.trimToEmpty(org.apache.commons.lang3.StringUtils.trimToEmpty) ValueType(org.hisp.dhis.common.ValueType) TokenUtils.getTokens(org.hisp.dhis.query.operators.TokenUtils.getTokens) UserContext.getUserSetting(org.hisp.dhis.common.UserContext.getUserSetting) StringUtils(org.apache.commons.lang3.StringUtils) ErrorMessage(org.hisp.dhis.feedback.ErrorMessage) ValueType.fromString(org.hisp.dhis.common.ValueType.fromString) ValueType.getAggregatables(org.hisp.dhis.common.ValueType.getAggregatables) Locale(java.util.Locale) LOCALE(org.hisp.dhis.dataitem.query.shared.QueryParam.LOCALE) FilterValidator.containsFilterWithAnyOfPrefixes(org.hisp.dhis.webapi.controller.dataitem.validator.FilterValidator.containsFilterWithAnyOfPrefixes) SHORT_NAME(org.hisp.dhis.dataitem.query.shared.QueryParam.SHORT_NAME) UI_LOCALE(org.hisp.dhis.user.UserSettingKey.UI_LOCALE) Collectors.toSet(java.util.stream.Collectors.toSet) VALUE_TYPE_EQUAL(org.hisp.dhis.webapi.controller.dataitem.Filter.Combination.VALUE_TYPE_EQUAL) ArrayUtils.isNotEmpty(org.apache.commons.lang3.ArrayUtils.isNotEmpty) QueryableDataItem(org.hisp.dhis.dataitem.query.QueryableDataItem) NAME(org.hisp.dhis.dataitem.query.shared.QueryParam.NAME) BaseIdentifiableObject(org.hisp.dhis.common.BaseIdentifiableObject) Set(java.util.Set) E2014(org.hisp.dhis.feedback.ErrorCode.E2014) StringUtils.substringBetween(org.apache.commons.lang3.StringUtils.substringBetween) StringUtils.wrap(org.apache.commons.lang3.StringUtils.wrap) SHORT_NAME_ILIKE(org.hisp.dhis.webapi.controller.dataitem.Filter.Combination.SHORT_NAME_ILIKE) StringUtils.deleteWhitespace(org.apache.commons.lang3.StringUtils.deleteWhitespace) DISPLAY_NAME_ILIKE(org.hisp.dhis.webapi.controller.dataitem.Filter.Combination.DISPLAY_NAME_ILIKE) List(java.util.List) StringUtils.isNotBlank(org.apache.commons.lang3.StringUtils.isNotBlank) NAME_ILIKE(org.hisp.dhis.webapi.controller.dataitem.Filter.Combination.NAME_ILIKE) IDENTIFIABLE_TOKEN(org.hisp.dhis.webapi.controller.dataitem.Filter.Combination.IDENTIFIABLE_TOKEN) PROGRAM_ID(org.hisp.dhis.dataitem.query.shared.QueryParam.PROGRAM_ID) Filter(org.hisp.dhis.webapi.controller.dataitem.Filter) DISPLAY_NAME(org.hisp.dhis.dataitem.query.shared.QueryParam.DISPLAY_NAME) ROOT_JUNCTION(org.hisp.dhis.dataitem.query.shared.QueryParam.ROOT_JUNCTION) WebOptions(org.hisp.dhis.webapi.webdomain.WebOptions) DIMENSION_TYPE_IN(org.hisp.dhis.webapi.controller.dataitem.Filter.Combination.DIMENSION_TYPE_IN) DISPLAY_SHORT_NAME(org.hisp.dhis.dataitem.query.shared.QueryParam.DISPLAY_SHORT_NAME) StatementUtil.addIlikeReplacingCharacters(org.hisp.dhis.dataitem.query.shared.StatementUtil.addIlikeReplacingCharacters) MapSqlParameterSource(org.springframework.jdbc.core.namedparam.MapSqlParameterSource) ObjectUtils.defaultIfNull(org.apache.commons.lang3.ObjectUtils.defaultIfNull) IllegalQueryException(org.hisp.dhis.common.IllegalQueryException) PROGRAM_ID_EQUAL(org.hisp.dhis.webapi.controller.dataitem.Filter.Combination.PROGRAM_ID_EQUAL) CollectionUtils(org.apache.commons.collections4.CollectionUtils) HashSet(java.util.HashSet) StringUtils.contains(org.apache.commons.lang3.StringUtils.contains) Enums.getIfPresent(com.google.common.base.Enums.getIfPresent) String.join(java.lang.String.join) E2016(org.hisp.dhis.feedback.ErrorCode.E2016) USER_GROUP_UIDS(org.hisp.dhis.dataitem.query.shared.QueryParam.USER_GROUP_UIDS) EMPTY(org.apache.commons.lang3.StringUtils.EMPTY) User(org.hisp.dhis.user.User) DIMENSION_TYPE_EQUAL(org.hisp.dhis.webapi.controller.dataitem.Filter.Combination.DIMENSION_TYPE_EQUAL) StringUtils.split(org.apache.commons.lang3.StringUtils.split) ID_EQUAL(org.hisp.dhis.webapi.controller.dataitem.Filter.Combination.ID_EQUAL) VALUE_TYPE_IN(org.hisp.dhis.webapi.controller.dataitem.Filter.Combination.VALUE_TYPE_IN) DB_LOCALE(org.hisp.dhis.user.UserSettingKey.DB_LOCALE) Iterator(java.util.Iterator) VALUE_TYPES(org.hisp.dhis.dataitem.query.shared.QueryParam.VALUE_TYPES) DISPLAY_SHORT_NAME_ILIKE(org.hisp.dhis.webapi.controller.dataitem.Filter.Combination.DISPLAY_SHORT_NAME_ILIKE) FilterValidator.filterHasPrefix(org.hisp.dhis.webapi.controller.dataitem.validator.FilterValidator.filterHasPrefix) Collectors.toList(java.util.stream.Collectors.toList) EnumUtils.getEnumMap(org.apache.commons.lang3.EnumUtils.getEnumMap) IDENTIFIABLE_TOKEN_COMPARISON(org.hisp.dhis.dataitem.query.shared.QueryParam.IDENTIFIABLE_TOKEN_COMPARISON) UID(org.hisp.dhis.dataitem.query.shared.QueryParam.UID) ValueType.fromString(org.hisp.dhis.common.ValueType.fromString)

Aggregations

Set (java.util.Set)2 Collectors.toSet (java.util.stream.Collectors.toSet)2 StringUtils.isNotBlank (org.apache.commons.lang3.StringUtils.isNotBlank)2 BaseIdentifiableObject (org.hisp.dhis.common.BaseIdentifiableObject)2 ValueType.getAggregatables (org.hisp.dhis.common.ValueType.getAggregatables)2 LOCALE (org.hisp.dhis.dataitem.query.shared.QueryParam.LOCALE)2 PROGRAM_ID (org.hisp.dhis.dataitem.query.shared.QueryParam.PROGRAM_ID)2 VALUE_TYPES (org.hisp.dhis.dataitem.query.shared.QueryParam.VALUE_TYPES)2 MapSqlParameterSource (org.springframework.jdbc.core.namedparam.MapSqlParameterSource)2 Enums.getIfPresent (com.google.common.base.Enums.getIfPresent)1 String.join (java.lang.String.join)1 HashSet (java.util.HashSet)1 Iterator (java.util.Iterator)1 List (java.util.List)1 Locale (java.util.Locale)1 Collectors.toList (java.util.stream.Collectors.toList)1 Slf4j (lombok.extern.slf4j.Slf4j)1 CollectionUtils (org.apache.commons.collections4.CollectionUtils)1 ArrayUtils.isNotEmpty (org.apache.commons.lang3.ArrayUtils.isNotEmpty)1 EnumUtils.getEnumMap (org.apache.commons.lang3.EnumUtils.getEnumMap)1