=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/expression/ExpressionService.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/expression/ExpressionService.java 2011-09-16 07:53:59 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/expression/ExpressionService.java 2011-09-24 12:01:19 +0000 @@ -155,6 +155,14 @@ String convertExpression( String expression, Map dataElementMapping, Map categoryOptionComboMapping ); /** + * Filters indicators from the given collection where the numerator and / + * or the denominator are invalid. + * + * @param indicators collection of Indicators. + */ + void filterInvalidIndicators( Collection indicators ); + + /** * Tests whether the expression is valid. Returns a positive value if the * expression is valid, or a negative value if not. * === modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/expression/DefaultExpressionService.java' --- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/expression/DefaultExpressionService.java 2011-09-16 07:53:59 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/expression/DefaultExpressionService.java 2011-09-24 12:01:19 +0000 @@ -36,6 +36,7 @@ import java.util.Collection; import java.util.HashSet; +import java.util.Iterator; import java.util.Map; import java.util.Set; import java.util.regex.Matcher; @@ -283,6 +284,26 @@ return operandsInExpression; } + + public void filterInvalidIndicators( Collection indicators ) + { + if ( indicators != null ) + { + Iterator iterator = indicators.iterator(); + + while ( iterator.hasNext() ) + { + Indicator indicator = iterator.next(); + + if ( !expressionIsValid( indicator.getNumerator() ).equals( VALID ) || + !expressionIsValid( indicator.getDenominator() ).equals( VALID ) ) + { + iterator.remove(); + log.warn( "Indicator is invalid: " + indicator ); + } + } + } + } public String expressionIsValid( String formula ) { === modified file 'dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/engine/DefaultDataMartEngine.java' --- dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/engine/DefaultDataMartEngine.java 2011-09-23 22:39:54 +0000 +++ dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/engine/DefaultDataMartEngine.java 2011-09-24 12:01:19 +0000 @@ -169,8 +169,10 @@ Collection periods = periodService.getPeriods( periodIds ); Collection organisationUnits = organisationUnitService.getOrganisationUnits( organisationUnitIds ); Collection dataElements = dataElementService.getDataElements( dataElementIds ); - dataElements = FilterUtils.filter( dataElements, new AggregatableDataElementFilter() ); - + + FilterUtils.filter( dataElements, new AggregatableDataElementFilter() ); + expressionService.filterInvalidIndicators( indicators ); + // --------------------------------------------------------------------- // Explode indicator expressions // ---------------------------------------------------------------------