@Override public String generateExpression( String expression, Map<? extends DimensionalItemObject, Double> valueMap, Map<String, Double> constantMap, Map<String, Integer> orgUnitCountMap, Integer days, MissingValueStrategy missingValueStrategy ) { return generateExpression( expression, valueMap, constantMap, orgUnitCountMap, days, missingValueStrategy, null ); }
@Override public Double getExpressionValue( Expression expression, Map<? extends DimensionalItemObject, Double> valueMap, Map<String, Double> constantMap, Map<String, Integer> orgUnitCountMap, Integer days ) { return getExpressionValue( expression, valueMap, constantMap, orgUnitCountMap, days, null ); }
@Override public Set<CategoryOptionCombo> getOptionCombosInExpression( String expression ) { return getIdObjectsInExpression( CATEGORY_OPTION_COMBO_OPERAND_PATTERN, expression, ( m ) -> categoryService.getCategoryOptionCombo( m.group( GROUP_CATEGORORY_OPTION_COMBO ) ) ); }
@Override public Double getIndicatorValue( Indicator indicator, Period period, Map<? extends DimensionalItemObject, Double> valueMap, Map<String, Double> constantMap, Map<String, Integer> orgUnitCountMap ) { IndicatorValue value = getIndicatorValueObject( indicator, period, valueMap, constantMap, orgUnitCountMap ); return value != null ? value.getValue() : null; }
@Override public Set<DimensionalItemObject> getDimensionalItemObjectsInIndicators( Collection<Indicator> indicators ) { Set<DimensionalItemObject> items = Sets.newHashSet(); for ( Indicator indicator : indicators ) { items.addAll( getDimensionalItemObjectsInExpression( indicator.getNumerator() ) ); items.addAll( getDimensionalItemObjectsInExpression( indicator.getDenominator() ) ); } return items; }
@Override public Set<OrganisationUnitGroup> getOrganisationUnitGroupsInIndicators( Collection<Indicator> indicators ) { Set<OrganisationUnitGroup> groups = new HashSet<>(); if ( indicators != null ) { for ( Indicator indicator : indicators ) { groups.addAll( getOrganisationUnitGroupsInExpression( indicator.getNumerator() ) ); groups.addAll( getOrganisationUnitGroupsInExpression( indicator.getDenominator() ) ); } } return groups; }
@Override @Transactional public void substituteExpressions( Collection<Indicator> indicators, Integer days ) { if ( indicators != null && !indicators.isEmpty() ) { Map<String, Constant> constants = new CachingMap<String, Constant>() .load( idObjectManager.getAllNoAcl( Constant.class ), c -> c.getUid() ); Map<String, OrganisationUnitGroup> orgUnitGroups = new CachingMap<String, OrganisationUnitGroup>() .load( idObjectManager.getAllNoAcl( OrganisationUnitGroup.class ), g -> g.getUid() ); for ( Indicator indicator : indicators ) { indicator.setExplodedNumerator( substituteExpression( indicator.getNumerator(), constants, orgUnitGroups, days ) ); indicator.setExplodedDenominator( substituteExpression( indicator.getDenominator(), constants, orgUnitGroups, days ) ); } } }
@Override public Set<DataElement> getDataElementsInExpression( String expression ) { return getIdObjectsInExpression( OPERAND_PATTERN, expression, ( m ) -> dataElementService.getDataElement( m.group( GROUP_DATA_ELEMENT ) ) ); }
@Override public Double getExpressionValue( Expression expression, Map<? extends DimensionalItemObject, Double> valueMap, Map<String, Double> constantMap, Map<String, Integer> orgUnitCountMap, Integer days, ListMap<String, Double> aggregateMap ) { String expressionString = generateExpression( expression.getExpression(), valueMap, constantMap, orgUnitCountMap, days, expression.getMissingValueStrategy(), aggregateMap ); return expressionString != null ? calculateExpression( expressionString ) : null; }
@Override public Set<OrganisationUnitGroup> getOrganisationUnitGroupsInExpression( String expression ) { return getIdObjectsInExpression( OU_GROUP_PATTERN, expression, ( m ) -> organisationUnitGroupService.getOrganisationUnitGroup( m.group( GROUP_ID ) ) ); }
final String denominatorExpression = generateExpression( indicator.getDenominator(), valueMap, constantMap, orgUnitCountMap, days, NEVER_SKIP ); final String numeratorExpression = generateExpression( indicator.getNumerator(), valueMap, constantMap, orgUnitCountMap, days, NEVER_SKIP );