=== 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 2013-05-26 14:06:51 +0000 +++ dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/data/DefaultAnalyticsService.java 2013-05-27 19:21:48 +0000 @@ -274,7 +274,11 @@ // --------------------------------------------------------------------- if ( params.getDataSets() != null ) - { + { + // ----------------------------------------------------------------- + // Get complete data set registrations + // ----------------------------------------------------------------- + DataQueryParams dataSourceParams = new DataQueryParams( params ); dataSourceParams.removeDimension( INDICATOR_DIM_ID ); dataSourceParams.removeDimension( DATAELEMENT_DIM_ID ); @@ -282,40 +286,49 @@ Map aggregatedDataMap = getAggregatedCompletenessValueMap( dataSourceParams ); - DataQueryParams dataTargetParams = new DataQueryParams( params ); - dataTargetParams.setDimensions( ListUtils.getAll( dataTargetParams.getDimensions(), dataTargetParams.getCompletenessDimensionIndexes() ) ); - dataTargetParams.setFilters( ListUtils.getAll( dataTargetParams.getFilters(), dataTargetParams.getCompletenessFilterIndexes() ) ); - dataTargetParams.setAggregationType( AggregationType.COUNT ); - dataTargetParams.setSkipPartitioning( true ); - - Map targetMap = getAggregatedCompletenessTargetMap( dataTargetParams ); - - Map dsPtMap = dataSourceParams.getDataSetPeriodTypeMap(); - + // ----------------------------------------------------------------- + // Get completeness targets + // ----------------------------------------------------------------- + + List completenessDimIndexes = dataSourceParams.getCompletenessDimensionIndexes(); + List completenessFilterIndexes = dataSourceParams.getCompletenessFilterIndexes(); + + DataQueryParams targetParams = new DataQueryParams( dataSourceParams ); + + targetParams.setDimensions( ListUtils.getAtIndexes( targetParams.getDimensions(), completenessDimIndexes ) ); + targetParams.setFilters( ListUtils.getAtIndexes( targetParams.getFilters(), completenessFilterIndexes ) ); + targetParams.setSkipPartitioning( true ); + + Map targetMap = getAggregatedCompletenessTargetMap( targetParams ); + Integer periodIndex = dataSourceParams.getPeriodDimensionIndex(); Integer dataSetIndex = dataSourceParams.getDataSetDimensionIndex(); - - List completenessDimIndexes = dataTargetParams.getCompletenessDimensionIndexes(); - + + Map dsPtMap = dataSourceParams.getDataSetPeriodTypeMap(); + + // ----------------------------------------------------------------- + // Join data maps, calculate completeness and add to grid + // ----------------------------------------------------------------- + for ( Map.Entry entry : aggregatedDataMap.entrySet() ) { - List row = new ArrayList( Arrays.asList( entry.getKey().split( DIMENSION_SEP ) ) ); + List dataRow = new ArrayList( Arrays.asList( entry.getKey().split( DIMENSION_SEP ) ) ); - List targetRow = ListUtils.getAll( row, completenessDimIndexes ); + List targetRow = ListUtils.getAtIndexes( dataRow, completenessDimIndexes ); String targetKey = StringUtils.join( targetRow, DIMENSION_SEP ); Double target = targetMap.get( targetKey ); if ( target != null && entry.getValue() != null ) { - PeriodType queryPt = PeriodType.getPeriodTypeFromIsoString( row.get( periodIndex ) ); - PeriodType dataPt = dsPtMap.get( row.get( dataSetIndex ) ); + PeriodType queryPt = PeriodType.getPeriodTypeFromIsoString( dataRow.get( periodIndex ) ); + PeriodType dataPt = dsPtMap.get( dataRow.get( dataSetIndex ) ); target = target * queryPt.getPeriodSpan( dataPt ); double value = entry.getValue() * PERCENT / target; grid.addRow(); - grid.addValues( row.toArray() ); + grid.addValues( dataRow.toArray() ); grid.addValue( MathUtils.getRounded( value, 1 ) ); } } === modified file 'dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/ListUtils.java' --- dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/ListUtils.java 2013-02-22 17:24:41 +0000 +++ dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/ListUtils.java 2013-05-27 19:21:48 +0000 @@ -81,7 +81,7 @@ * @param list the list to select from. * @param indexes the indexes of the elements in the list to select. */ - public static List getAll( List list, List indexes ) + public static List getAtIndexes( List list, List indexes ) { List elements = new ArrayList();