=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/aggregation/AggregatedDataValue.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/aggregation/AggregatedDataValue.java 2011-12-06 19:12:08 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/aggregation/AggregatedDataValue.java 2011-12-06 19:40:38 +0000 @@ -53,7 +53,7 @@ private int organisationUnitId; - private int groupId; + private int organisationUnitGroupId; private int level; @@ -183,14 +183,14 @@ this.organisationUnitId = organisationUnitId; } - public int getGroupId() + public int getOrganisationUnitGroupId() { - return groupId; + return organisationUnitGroupId; } - public void setGroupId( int groupId ) + public void setOrganisationUnitGroupId( int organisationUnitGroupId ) { - this.groupId = groupId; + this.organisationUnitGroupId = organisationUnitGroupId; } public int getPeriodId() === modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/aggregation/AggregatedIndicatorValue.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/aggregation/AggregatedIndicatorValue.java 2011-12-06 19:12:08 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/aggregation/AggregatedIndicatorValue.java 2011-12-06 19:40:38 +0000 @@ -51,7 +51,7 @@ private int organisationUnitId; - private int groupId; + private int organisationUnitGroupId; private int level; @@ -231,14 +231,14 @@ this.organisationUnitId = organisationUnitId; } - public int getGroupId() + public int getOrganisationUnitGroupId() { - return groupId; + return organisationUnitGroupId; } - public void setGroupId( int groupId ) + public void setOrganisationUnitGroupId( int organisationUnitGroupId ) { - this.groupId = groupId; + this.organisationUnitGroupId = organisationUnitGroupId; } public int getPeriodId() === modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/AggregatedValue.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/AggregatedValue.java 2011-12-06 19:12:08 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/AggregatedValue.java 2011-12-06 19:40:38 +0000 @@ -40,7 +40,7 @@ int getOrganisationUnitId(); - int getGroupId(); + int getOrganisationUnitGroupId(); double getValue(); } === modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/completeness/DataSetCompletenessResult.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/completeness/DataSetCompletenessResult.java 2011-12-06 19:12:08 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/completeness/DataSetCompletenessResult.java 2011-12-06 19:40:38 +0000 @@ -55,7 +55,7 @@ private int organisationUnitId; - private int groupId; + private int organisationUnitGroupId; // ------------------------------------------------------------------------- // Properties 2 @@ -251,14 +251,14 @@ this.organisationUnitId = organisationUnitId; } - public int getGroupId() + public int getOrganisationUnitGroupId() { - return groupId; + return organisationUnitGroupId; } - public void setGroupId( int groupId ) + public void setOrganisationUnitGroupId( int organisationUnitGroupId ) { - this.groupId = groupId; + this.organisationUnitGroupId = organisationUnitGroupId; } // ------------------------------------------------------------------------- === modified file 'dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/dataelement/DataElementDataMart.java' --- dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/dataelement/DataElementDataMart.java 2011-07-01 11:20:25 +0000 +++ dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/dataelement/DataElementDataMart.java 2011-12-06 19:40:38 +0000 @@ -30,9 +30,12 @@ import java.util.Collection; import java.util.concurrent.Future; +import org.amplecode.quick.BatchHandler; +import org.hisp.dhis.aggregation.AggregatedDataValue; import org.hisp.dhis.dataelement.DataElementOperand; import org.hisp.dhis.datamart.DataElementOperandList; import org.hisp.dhis.organisationunit.OrganisationUnit; +import org.hisp.dhis.organisationunit.OrganisationUnitGroup; import org.hisp.dhis.period.Period; /** @@ -41,5 +44,6 @@ public interface DataElementDataMart { Future exportDataValues( Collection operands, Collection periods, - Collection organisationUnits, DataElementOperandList operandList, String key ); + Collection organisationUnits, Collection organisationUnitGroups, + DataElementOperandList operandList, Class> clazz, String key ); } === modified file 'dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/dataelement/DefaultDataElementDataMart.java' --- dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/dataelement/DefaultDataElementDataMart.java 2011-12-03 17:32:57 +0000 +++ dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/dataelement/DefaultDataElementDataMart.java 2011-12-06 19:40:38 +0000 @@ -27,8 +27,8 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +import static org.hisp.dhis.datamart.crosstab.jdbc.CrossTabStore.AGGREGATEDDATA_CACHE_PREFIX; import static org.hisp.dhis.system.util.MathUtils.getRounded; -import static org.hisp.dhis.datamart.crosstab.jdbc.CrossTabStore.*; import java.util.Collection; import java.util.HashMap; @@ -46,9 +46,9 @@ import org.hisp.dhis.datamart.DataElementOperandList; import org.hisp.dhis.datamart.aggregation.cache.AggregationCache; import org.hisp.dhis.datamart.aggregation.dataelement.DataElementAggregator; -import org.hisp.dhis.jdbc.batchhandler.AggregatedDataValueBatchHandler; import org.hisp.dhis.jdbc.batchhandler.GenericBatchHandler; import org.hisp.dhis.organisationunit.OrganisationUnit; +import org.hisp.dhis.organisationunit.OrganisationUnitGroup; import org.hisp.dhis.organisationunit.OrganisationUnitHierarchy; import org.hisp.dhis.organisationunit.OrganisationUnitService; import org.hisp.dhis.period.Period; @@ -144,11 +144,12 @@ @Async public Future exportDataValues( Collection operands, Collection periods, - Collection organisationUnits, DataElementOperandList operandList, String key ) + Collection organisationUnits, Collection organisationUnitGroups, + DataElementOperandList operandList, Class> clazz, String key ) { statementManager.initialise(); // Running in separate thread - final BatchHandler batchHandler = batchHandlerFactory.createBatchHandler( AggregatedDataValueBatchHandler.class ).init(); + final BatchHandler batchHandler = batchHandlerFactory.createBatchHandler( clazz ).init(); final BatchHandler cacheHandler = inMemoryBatchHandlerFactory.createBatchHandler( GenericBatchHandler.class ).setTableName( AGGREGATEDDATA_CACHE_PREFIX + key ).init(); @@ -166,46 +167,50 @@ final Collection sumBoolOperands = sumBoolAggregator.filterOperands( operands, period.getPeriodType() ); final Collection averageBoolOperands = averageBoolAggregator.filterOperands( operands, period.getPeriodType() ); - for ( final OrganisationUnit unit : organisationUnits ) + for ( OrganisationUnitGroup group : organisationUnitGroups ) { - operandList.init( period, unit ); - - final int level = aggregationCache.getLevelOfOrganisationUnit( unit.getId() ); - - final Collection orgUnitChildren = hierarchy.getChildren( unit.getId() ); - - valueMap.clear(); - valueMap.putAll( sumIntAggregator.getAggregatedValues( sumIntOperands, period, level, orgUnitChildren, key ) ); - valueMap.putAll( averageIntAggregator.getAggregatedValues( averageIntOperands, period, level, orgUnitChildren, key ) ); - valueMap.putAll( averageIntSingleValueAggregator.getAggregatedValues( averageIntSingleValueOperands, period, level, orgUnitChildren, key ) ); - valueMap.putAll( sumBoolAggregator.getAggregatedValues( sumBoolOperands, period, level, orgUnitChildren, key ) ); - valueMap.putAll( averageBoolAggregator.getAggregatedValues( averageBoolOperands, period, level, orgUnitChildren, key ) ); - - if ( valueMap.size() > 0 ) - { - for ( Entry entry : valueMap.entrySet() ) - { - aggregatedValue.clear(); - - final double value = getRounded( entry.getValue(), DECIMALS ); - - aggregatedValue.setDataElementId( entry.getKey().getDataElementId() ); - aggregatedValue.setCategoryOptionComboId( entry.getKey().getOptionComboId() ); - aggregatedValue.setPeriodId( period.getId() ); - aggregatedValue.setPeriodTypeId( period.getPeriodType().getId() ); - aggregatedValue.setOrganisationUnitId( unit.getId() ); - aggregatedValue.setLevel( level ); - aggregatedValue.setValue( value ); - - batchHandler.addObject( aggregatedValue ); - - operandList.addValue( entry.getKey(), value ); - } - } - - if ( operandList.hasValues() ) - { - cacheHandler.addObject( operandList.getList() ); + for ( final OrganisationUnit unit : organisationUnits ) + { + operandList.init( period, unit ); + + final int level = aggregationCache.getLevelOfOrganisationUnit( unit.getId() ); + + final Collection orgUnitChildren = hierarchy.getChildren( unit.getId() ); + + valueMap.clear(); + valueMap.putAll( sumIntAggregator.getAggregatedValues( sumIntOperands, period, level, orgUnitChildren, key ) ); + valueMap.putAll( averageIntAggregator.getAggregatedValues( averageIntOperands, period, level, orgUnitChildren, key ) ); + valueMap.putAll( averageIntSingleValueAggregator.getAggregatedValues( averageIntSingleValueOperands, period, level, orgUnitChildren, key ) ); + valueMap.putAll( sumBoolAggregator.getAggregatedValues( sumBoolOperands, period, level, orgUnitChildren, key ) ); + valueMap.putAll( averageBoolAggregator.getAggregatedValues( averageBoolOperands, period, level, orgUnitChildren, key ) ); + + if ( valueMap.size() > 0 ) + { + for ( Entry entry : valueMap.entrySet() ) + { + aggregatedValue.clear(); + + final double value = getRounded( entry.getValue(), DECIMALS ); + + aggregatedValue.setDataElementId( entry.getKey().getDataElementId() ); + aggregatedValue.setCategoryOptionComboId( entry.getKey().getOptionComboId() ); + aggregatedValue.setPeriodId( period.getId() ); + aggregatedValue.setPeriodTypeId( period.getPeriodType().getId() ); + aggregatedValue.setOrganisationUnitId( unit.getId() ); + aggregatedValue.setOrganisationUnitGroupId( group.getId() ); + aggregatedValue.setLevel( level ); + aggregatedValue.setValue( value ); + + batchHandler.addObject( aggregatedValue ); + + operandList.addValue( entry.getKey(), value ); + } + } + + if ( operandList.hasValues() ) + { + cacheHandler.addObject( operandList.getList() ); + } } } === 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-12-05 18:54:20 +0000 +++ dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/engine/DefaultDataMartEngine.java 2011-12-06 19:40:38 +0000 @@ -48,7 +48,9 @@ import org.hisp.dhis.expression.ExpressionService; import org.hisp.dhis.indicator.Indicator; import org.hisp.dhis.indicator.IndicatorService; +import org.hisp.dhis.jdbc.batchhandler.AggregatedDataValueBatchHandler; import org.hisp.dhis.organisationunit.OrganisationUnit; +import org.hisp.dhis.organisationunit.OrganisationUnitGroup; import org.hisp.dhis.organisationunit.OrganisationUnitService; import org.hisp.dhis.period.Period; import org.hisp.dhis.period.PeriodService; @@ -68,6 +70,11 @@ public class DefaultDataMartEngine implements DataMartEngine { + private static final Set DUMMY_ORG_UNIT_GROUPS = new HashSet() + { { + add( new OrganisationUnitGroup( "" ) ); + } }; + // ------------------------------------------------------------------------- // Dependencies // ------------------------------------------------------------------------- @@ -290,7 +297,8 @@ for ( List organisationUnitPage : organisationUnitPages ) { - futures.add( dataElementDataMart.exportDataValues( allOperands, periods, organisationUnitPage, new DataElementOperandList( indicatorOperands ), key ) ); + futures.add( dataElementDataMart.exportDataValues( allOperands, periods, organisationUnitPage, + DUMMY_ORG_UNIT_GROUPS, new DataElementOperandList( indicatorOperands ), AggregatedDataValueBatchHandler.class, key ) ); } ConcurrentUtils.waitForCompletion( futures ); === modified file 'dhis-2/dhis-support/dhis-support-jdbc/src/main/java/org/hisp/dhis/jdbc/batchhandler/AggregatedOrgUnitDataValueBatchHandler.java' --- dhis-2/dhis-support/dhis-support-jdbc/src/main/java/org/hisp/dhis/jdbc/batchhandler/AggregatedOrgUnitDataValueBatchHandler.java 2011-12-06 19:12:08 +0000 +++ dhis-2/dhis-support/dhis-support-jdbc/src/main/java/org/hisp/dhis/jdbc/batchhandler/AggregatedOrgUnitDataValueBatchHandler.java 2011-12-06 19:40:38 +0000 @@ -68,7 +68,7 @@ statementBuilder.setUniqueValue( value.getDataElementId() ); statementBuilder.setUniqueValue( value.getPeriodId() ); statementBuilder.setUniqueValue( value.getOrganisationUnitId() ); - statementBuilder.setUniqueValue( value.getGroupId() ); + statementBuilder.setUniqueValue( value.getOrganisationUnitGroupId() ); } protected void setColumns() @@ -90,7 +90,7 @@ statementBuilder.setValue( value.getPeriodId() ); statementBuilder.setValue( value.getPeriodTypeId() ); statementBuilder.setValue( value.getOrganisationUnitId() ); - statementBuilder.setValue( value.getGroupId() ); + statementBuilder.setValue( value.getOrganisationUnitGroupId() ); statementBuilder.setValue( value.getLevel() ); statementBuilder.setValue( value.getValue() ); } === modified file 'dhis-2/dhis-support/dhis-support-jdbc/src/main/java/org/hisp/dhis/jdbc/batchhandler/AggregatedOrgUnitIndicatorValueBatchHandler.java' --- dhis-2/dhis-support/dhis-support-jdbc/src/main/java/org/hisp/dhis/jdbc/batchhandler/AggregatedOrgUnitIndicatorValueBatchHandler.java 2011-12-06 19:12:08 +0000 +++ dhis-2/dhis-support/dhis-support-jdbc/src/main/java/org/hisp/dhis/jdbc/batchhandler/AggregatedOrgUnitIndicatorValueBatchHandler.java 2011-12-06 19:40:38 +0000 @@ -68,7 +68,7 @@ statementBuilder.setUniqueValue( value.getIndicatorId() ); statementBuilder.setUniqueValue( value.getPeriodId() ); statementBuilder.setUniqueValue( value.getOrganisationUnitId() ); - statementBuilder.setUniqueValue( value.getGroupId() ); + statementBuilder.setUniqueValue( value.getOrganisationUnitGroupId() ); } protected void setColumns() @@ -92,7 +92,7 @@ statementBuilder.setValue( value.getPeriodId() ); statementBuilder.setValue( value.getPeriodTypeId() ); statementBuilder.setValue( value.getOrganisationUnitId() ); - statementBuilder.setValue( value.getGroupId() ); + statementBuilder.setValue( value.getOrganisationUnitGroupId() ); statementBuilder.setValue( value.getLevel() ); statementBuilder.setValue( value.getAnnualized() ); statementBuilder.setValue( value.getFactor() );