.addDimension( new BaseDimensionalObject( DATA_X_DIM_ID, DimensionType.DATA_X, dataElements ) ); builder.addDimension( new BaseDimensionalObject( CATEGORYOPTIONCOMBO_DIM_ID, DimensionType.CATEGORY_OPTION_COMBO, categoryOptionCombos ) ); builder.addDimension( new BaseDimensionalObject( ATTRIBUTEOPTIONCOMBO_DIM_ID, DimensionType.ATTRIBUTE_OPTION_COMBO, attributeOptionCobos ) );
/** * Generates a mapping of permutations keys (organisation unit id or null) * and mappings of organisation unit group and counts. * * @param params the {@link DataQueryParams}. * @param indicators the indicators for which formulas to scan for organisation * unit groups. * @return a map of maps. */ private Map<String, Map<String, Integer>> getOrgUnitTargetMap( DataQueryParams params, Collection<Indicator> indicators ) { Set<OrganisationUnitGroup> orgUnitGroups = expressionParserService.getIndicatorOrgUnitGroups( indicators ); if ( orgUnitGroups.isEmpty() ) { return null; } DataQueryParams orgUnitTargetParams = DataQueryParams.newBuilder( params ) .pruneToDimensionType( DimensionType.ORGANISATION_UNIT ) .addDimension( new BaseDimensionalObject( DimensionalObject.ORGUNIT_GROUP_DIM_ID, DimensionType.ORGANISATION_UNIT_GROUP, new ArrayList<DimensionalItemObject>( orgUnitGroups ) ) ) .withSkipPartitioning( true ).build(); Map<String, Double> orgUnitCountMap = getAggregatedOrganisationUnitTargetMap( orgUnitTargetParams ); return DataQueryParams.getPermutationOrgUnitGroupCountMap( orgUnitCountMap ); }
@Override public DataQueryParams getFromAnalyticalObject( AnalyticalObject object ) { Assert.notNull( object, "Analytical object cannot be null" ); DataQueryParams.Builder params = DataQueryParams.newBuilder(); I18nFormat format = i18nManager.getI18nFormat(); IdScheme idScheme = IdScheme.UID; Date date = object.getRelativePeriodDate(); String userOrgUnit = object.getRelativeOrganisationUnit() != null ? object.getRelativeOrganisationUnit().getUid() : null; List<OrganisationUnit> userOrgUnits = getUserOrgUnits( null, userOrgUnit ); object.populateAnalyticalProperties(); for ( DimensionalObject column : object.getColumns() ) { params.addDimension( getDimension( column.getDimension(), getDimensionalItemIds( column.getItems() ), date, userOrgUnits, format, false, false, idScheme ) ); } for ( DimensionalObject row : object.getRows() ) { params.addDimension( getDimension( row.getDimension(), getDimensionalItemIds( row.getItems() ), date, userOrgUnits, format, false, false, idScheme ) ); } for ( DimensionalObject filter : object.getFilters() ) { params.addFilter( getDimension( filter.getDimension(), getDimensionalItemIds( filter.getItems() ), date, userOrgUnits, format, false, false, idScheme ) ); } return params .withCompletedOnly( object.isCompletedOnly() ) .withTimeField( object.getTimeField() ) .build(); }
/** * Performs pre-handling of the given query and returns the immutable, * handled query. If the query has a single indicator as item for the data * filter, the filter is set as a dimension and removed as a filter. * * @param params the {@link DataQueryParams}. * @return a {@link DataQueryParams}. */ private DataQueryParams preHandleQuery( DataQueryParams params ) { if ( params.hasSingleIndicatorAsDataFilter() || params.hasSingleReportingRateAsDataFilter() ) { DimensionalObject dx = params.getFilter( DATA_X_DIM_ID ); params = DataQueryParams.newBuilder( params ) .addDimension( dx ) .removeFilter( DATA_X_DIM_ID ) .addProcessingHint( ProcessingHint.SINGLE_INDICATOR_REPORTING_RATE_FILTER_ITEM ).build(); } return params; }