=== 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 2015-12-08 21:44:36 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/expression/ExpressionService.java 2015-12-10 11:14:51 +0000 @@ -179,14 +179,6 @@ Map constantMap, Map orgUnitCountMap, Integer days, Set incompleteValues ); /** - * Returns the uids of the data element totals in the given expression. - * - * @param expression the expression. - * @return a set of data element uids. - */ - Set getDataElementTotalUids( String expression ); - - /** * Returns all data elements included in the given expression string. * * @param expression the expression string. === modified file 'dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/AnalyticsSecurityManager.java' --- dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/AnalyticsSecurityManager.java 2015-01-17 07:41:26 +0000 +++ dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/AnalyticsSecurityManager.java 2015-12-10 10:41:17 +0000 @@ -38,7 +38,7 @@ /** * Decides whether the current user has privileges to execute the given query. * - * @param params the data query params. + * @param params the data query parameters. * @throws IllegalQueryException if the current user does not have privileges * to execute the given query. */ @@ -48,19 +48,23 @@ * Adds relevant data approval levels to the given query if system is configured * to hide unapproved data from analytics and if there are relevant approval * levels for current user. Populates the approvalLevels property of the given - * query and sets the level poperty of each related organisation unit. + * query and sets the level property of each related organisation unit. * - * @param params the data query params. + * @param params the data query parameters. + * @throws IllegalQueryException is the specified approval level does not exist. */ void applyDataApprovalConstraints( DataQueryParams params ); /** - * Applies dimension constraints to the given params. Dimension constraints + * Applies dimension constraints to the given parameters. Dimension constraints * with all accessible dimension items will be added as filters to this query. * If current user has no dimension constraints, no action is taken. If the * constraint dimensions are already specified with accessible items in the * query, no action is taken. If the current user does not have accessible * items in any dimension constraint, an IllegalQueryException is thrown. + * + * @param pamrams the data query parameters. + * @throws IllegalQueryException is the specified approval level does not exist. */ void applyDimensionConstraints( DataQueryParams params ); } === modified file 'dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/data/DefaultAnalyticsService.java' --- dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/data/DefaultAnalyticsService.java 2015-12-10 09:51:53 +0000 +++ dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/data/DefaultAnalyticsService.java 2015-12-10 10:41:17 +0000 @@ -181,7 +181,18 @@ queryPlanner.validate( params ); params.conform(); - + + return getAggregatedDataValueGridInternal( params ); + } + + /** + * Returns a grid with aggregated data. + * + * @param params the data query parameters. + * @return a grid with aggregated data. + */ + private Grid getAggregatedDataValueGridInternal( DataQueryParams params ) + { // --------------------------------------------------------------------- // Headers // --------------------------------------------------------------------- === 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 2015-12-09 17:42:58 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/expression/DefaultExpressionService.java 2015-12-10 11:14:51 +0000 @@ -55,6 +55,7 @@ import org.hisp.dhis.common.DimensionalItemObject; import org.hisp.dhis.common.GenericStore; import org.hisp.dhis.common.ListMap; +import org.hisp.dhis.common.RegexUtils; import org.hisp.dhis.common.exception.InvalidIdentifierReferenceException; import org.hisp.dhis.constant.Constant; import org.hisp.dhis.constant.ConstantService; @@ -316,25 +317,7 @@ return groupsInExpression; } - - @Override - public Set getDataElementTotalUids( String expression ) - { - Set uids = new HashSet<>(); - - if ( expression != null ) - { - final Matcher matcher = DATA_ELEMENT_TOTAL_PATTERN.matcher( expression ); - - while ( matcher.find() ) - { - uids.add( matcher.group( 1 ) ); - } - } - - return uids; - } - + @Override @Transactional public Set getOptionCombosInExpression( String expression ) @@ -694,8 +677,8 @@ for ( ValidationRule rule : validationRules ) { - dataElementTotals.addAll( getDataElementTotalUids( rule.getLeftSide().getExpression() ) ); - dataElementTotals.addAll( getDataElementTotalUids( rule.getRightSide().getExpression() ) ); + dataElementTotals.addAll( RegexUtils.getMatches( DATA_ELEMENT_TOTAL_PATTERN, rule.getLeftSide().getExpression(), 1 ) ); + dataElementTotals.addAll( RegexUtils.getMatches( DATA_ELEMENT_TOTAL_PATTERN, rule.getRightSide().getExpression(), 1 ) ); } if ( !dataElementTotals.isEmpty() ) @@ -713,7 +696,7 @@ } } } - + private String explodeExpression( String expression, ListMap dataElementOptionComboMap ) { if ( expression == null || expression.isEmpty() ) @@ -991,8 +974,7 @@ // ------------------------------------------------------------------------- // Supportive methods // ------------------------------------------------------------------------- - - + private boolean operandIsTotal( Matcher matcher ) { return matcher != null && StringUtils.trimToEmpty( matcher.group( 2 ) ).isEmpty(); === modified file 'dhis-2/dhis-services/dhis-service-core/src/test/java/org/hisp/dhis/expression/ExpressionServiceTest.java' --- dhis-2/dhis-services/dhis-service-core/src/test/java/org/hisp/dhis/expression/ExpressionServiceTest.java 2015-12-09 17:24:33 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/test/java/org/hisp/dhis/expression/ExpressionServiceTest.java 2015-12-10 11:14:51 +0000 @@ -327,19 +327,6 @@ } @Test - public void testGetDataElementTotalUids() - { - Set uids = new HashSet<>(); - Set empty = new HashSet<>(); - - uids.add( dataElementB.getUid() ); - uids.add( dataElementC.getUid() ); - - assertEquals( uids, expressionService.getDataElementTotalUids( expressionG ) ); - assertEquals( empty, expressionService.getDataElementTotalUids( expressionA ) ); - } - - @Test public void testGetOperandsInExpression() { Set operands = expressionService.getOperandsInExpression( expressionA );