=== modified file 'dhis-2/dhis-support/dhis-support-commons/src/main/java/org/hisp/dhis/commons/util/ExpressionUtils.java' --- dhis-2/dhis-support/dhis-support-commons/src/main/java/org/hisp/dhis/commons/util/ExpressionUtils.java 2015-07-19 16:36:56 +0000 +++ dhis-2/dhis-support/dhis-support-commons/src/main/java/org/hisp/dhis/commons/util/ExpressionUtils.java 2015-08-21 12:47:08 +0000 @@ -33,6 +33,7 @@ import org.apache.commons.jexl2.JexlEngine; import org.apache.commons.jexl2.JexlException; import org.apache.commons.jexl2.MapContext; +import org.apache.commons.lang3.StringUtils; import java.util.HashMap; import java.util.Map; @@ -48,6 +49,8 @@ private static final JexlEngine JEXL = new JexlEngine(); private static final Map EL_SQL_MAP = new HashMap<>(); + private static final String IGNORED_KEYWORDS_REGEX = + "SUM|sum|AVERAGE|average|COUNT|count|STDDEV|stddev|VARIANCE|variance|MIN|min|MAX|max|NONE|none"; private static final Pattern NUMERIC_PATTERN = Pattern.compile( "^(-?0|-?[1-9]\\d*)(\\.\\d+)?(E(-)?\\d+)?$" ); @@ -78,6 +81,8 @@ */ public static Object evaluate( String expression, Map vars ) { + expression = expression.replaceAll( IGNORED_KEYWORDS_REGEX, StringUtils.EMPTY ); + Expression exp = JEXL.createExpression( expression ); JexlContext context = vars != null ? new MapContext( vars ) : new MapContext(); === modified file 'dhis-2/dhis-support/dhis-support-system/src/test/java/org/hisp/dhis/system/util/ExpressionUtilsTest.java' --- dhis-2/dhis-support/dhis-support-system/src/test/java/org/hisp/dhis/system/util/ExpressionUtilsTest.java 2015-07-19 16:36:56 +0000 +++ dhis-2/dhis-support/dhis-support-system/src/test/java/org/hisp/dhis/system/util/ExpressionUtilsTest.java 2015-08-21 12:47:08 +0000 @@ -157,10 +157,13 @@ assertTrue( ExpressionUtils.isValid( "d2:zing(1)", null ) ); assertTrue( ExpressionUtils.isValid( "(d2:zing(1)+d2:zing(1))*50/1", null ) ); assertTrue( ExpressionUtils.isValid( "1/(1/100)", null ) ); + assertTrue( ExpressionUtils.isValid( "SUM(1)", null ) ); + assertTrue( ExpressionUtils.isValid( "average(2+1)", null ) ); assertFalse( ExpressionUtils.isValid( "2 a 3", null ) ); assertFalse( ExpressionUtils.isValid( "v2 + 3", vars ) ); assertFalse( ExpressionUtils.isValid( "4 + abc", vars ) ); assertFalse( ExpressionUtils.isValid( "'goat' == goat", null ) ); + assertFalse( ExpressionUtils.isValid( "aver(2+1)", null ) ); } } === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-program/src/main/webapp/dhis-web-maintenance-program/addProgramIndicator.vm' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-program/src/main/webapp/dhis-web-maintenance-program/addProgramIndicator.vm 2015-08-21 02:55:35 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-program/src/main/webapp/dhis-web-maintenance-program/addProgramIndicator.vm 2015-08-21 12:47:08 +0000 @@ -73,7 +73,7 @@ - + === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-program/src/main/webapp/dhis-web-maintenance-program/updateProgramIndicator.vm' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-program/src/main/webapp/dhis-web-maintenance-program/updateProgramIndicator.vm 2015-08-21 02:55:35 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-program/src/main/webapp/dhis-web-maintenance-program/updateProgramIndicator.vm 2015-08-21 12:47:08 +0000 @@ -73,6 +73,7 @@ +