=== modified file 'dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/aggregation/dataelement/AverageBoolAggregator.java' --- dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/aggregation/dataelement/AverageBoolAggregator.java 2010-06-26 19:48:18 +0000 +++ dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/aggregation/dataelement/AverageBoolAggregator.java 2011-01-10 10:06:18 +0000 @@ -34,6 +34,7 @@ import java.util.Collection; import java.util.Date; import java.util.HashMap; +import java.util.HashSet; import java.util.Map; import java.util.Map.Entry; @@ -75,15 +76,15 @@ // DataElementAggregator implementation // ------------------------------------------------------------------------- - public Map getAggregatedValues( final Map operandIndexMap, + public Map getAggregatedValues( final Collection operands, final Period period, final OrganisationUnit unit, int unitLevel, final OrganisationUnitHierarchy hierarchy, String key ) { - if ( operandIndexMap == null || operandIndexMap.size() == 0 ) + if ( operands == null || operands.size() == 0 ) { return new HashMap(); } - final Collection crossTabValues = crossTabService.getCrossTabDataValues( operandIndexMap, + final Collection crossTabValues = crossTabService.getCrossTabDataValues( operands, aggregationCache.getIntersectingPeriods( period.getStartDate(), period.getEndDate() ), hierarchy.getChildren( unit.getId() ), key ); final Map entries = getAggregate( crossTabValues, period.getStartDate(), @@ -181,18 +182,18 @@ return totalSums; } - public Map getOperandIndexMap( Collection operands, PeriodType periodType, Map operandIndexMap ) + public Collection filterOperands( Collection operands, PeriodType periodType ) { - Map avgOperandIndexMap = new HashMap(); + Collection filteredOperands = new HashSet(); for ( final DataElementOperand operand : operands ) { if ( operand.getValueType().equals( VALUE_TYPE_BOOL ) && operand.getAggregationOperator().equals( AGGREGATION_OPERATOR_AVERAGE ) ) { - avgOperandIndexMap.put( operand, operandIndexMap.get( operand ) ); + filteredOperands.add( operand ); } } - return avgOperandIndexMap; + return filteredOperands; } } === modified file 'dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/aggregation/dataelement/AverageIntAggregator.java' --- dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/aggregation/dataelement/AverageIntAggregator.java 2010-12-02 21:52:11 +0000 +++ dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/aggregation/dataelement/AverageIntAggregator.java 2011-01-10 10:06:18 +0000 @@ -34,6 +34,7 @@ import java.util.Collection; import java.util.Date; import java.util.HashMap; +import java.util.HashSet; import java.util.Map; import java.util.Map.Entry; @@ -79,10 +80,10 @@ // DataElementAggregator implementation // ------------------------------------------------------------------------- - public Map getAggregatedValues( final Map operandIndexMap, + public Map getAggregatedValues( final Collection operands, final Period period, final OrganisationUnit unit, int unitLevel, OrganisationUnitHierarchy hierarchy, String key ) { - if ( operandIndexMap == null || operandIndexMap.size() == 0 ) + if ( operands == null || operands.size() == 0 ) { return new HashMap(); } @@ -97,7 +98,7 @@ for ( final Integer unitId : unitIds ) { final Collection crossTabValues = - crossTabService.getCrossTabDataValues( operandIndexMap, aggregationCache.getIntersectingPeriods( period.getStartDate(), period.getEndDate() ), unitId, key ); + crossTabService.getCrossTabDataValues( operands, aggregationCache.getIntersectingPeriods( period.getStartDate(), period.getEndDate() ), unitId, key ); final Map entries = getAggregate( crossTabValues, period.getStartDate(), period.getEndDate(), period.getStartDate(), period.getEndDate(), unitLevel ); // @@ -203,19 +204,19 @@ return totalSums; } - public Map getOperandIndexMap( Collection operands, PeriodType periodType, Map operandIndexMap ) + public Collection filterOperands( Collection operands, PeriodType periodType ) { - Map avgOperandIndexMap = new HashMap(); + Collection filteredOperands = new HashSet(); for ( final DataElementOperand operand : operands ) { if ( operand.getValueType().equals( VALUE_TYPE_INT ) && operand.getAggregationOperator().equals( AGGREGATION_OPERATOR_AVERAGE ) && operand.getFrequencyOrder() < periodType.getFrequencyOrder() ) { - avgOperandIndexMap.put( operand, operandIndexMap.get( operand ) ); + filteredOperands.add( operand ); } } - return avgOperandIndexMap; + return filteredOperands; } } === modified file 'dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/aggregation/dataelement/AverageIntSingleValueAggregator.java' --- dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/aggregation/dataelement/AverageIntSingleValueAggregator.java 2010-12-02 21:52:11 +0000 +++ dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/aggregation/dataelement/AverageIntSingleValueAggregator.java 2011-01-10 10:06:18 +0000 @@ -34,6 +34,7 @@ import java.util.Collection; import java.util.Date; import java.util.HashMap; +import java.util.HashSet; import java.util.Map; import java.util.Map.Entry; @@ -79,15 +80,15 @@ // DataElementAggregator implementation // ------------------------------------------------------------------------- - public Map getAggregatedValues( final Map operandIndexMap, + public Map getAggregatedValues( final Collection operands, final Period period, final OrganisationUnit unit, int unitLevel, OrganisationUnitHierarchy hierarchy, String key ) { - if ( operandIndexMap == null || operandIndexMap.size() == 0 ) + if ( operands == null || operands.size() == 0 ) { return new HashMap(); } - final Collection crossTabValues = crossTabService.getCrossTabDataValues( operandIndexMap, + final Collection crossTabValues = crossTabService.getCrossTabDataValues( operands, aggregationCache.getIntersectingPeriods( period.getStartDate(), period.getEndDate() ), hierarchy.getChildren( unit.getId() ), key ); final Map entries = getAggregate( crossTabValues, period.getStartDate(), @@ -175,19 +176,19 @@ return totalSums; } - public Map getOperandIndexMap( Collection operands, PeriodType periodType, Map operandIndexMap ) + public Collection filterOperands( Collection operands, PeriodType periodType ) { - Map avgOperandIndexMap = new HashMap(); + Collection filteredOperands = new HashSet(); for ( final DataElementOperand operand : operands ) { if ( operand.getValueType().equals( VALUE_TYPE_INT ) && operand.getAggregationOperator().equals( AGGREGATION_OPERATOR_AVERAGE ) && operand.getFrequencyOrder() >= periodType.getFrequencyOrder() ) { - avgOperandIndexMap.put( operand, operandIndexMap.get( operand ) ); + filteredOperands.add( operand ); } } - return avgOperandIndexMap; + return filteredOperands; } } === modified file 'dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/aggregation/dataelement/DataElementAggregator.java' --- dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/aggregation/dataelement/DataElementAggregator.java 2010-06-26 19:48:18 +0000 +++ dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/aggregation/dataelement/DataElementAggregator.java 2011-01-10 10:06:18 +0000 @@ -46,11 +46,11 @@ { final String TRUE = "true"; - Map getAggregatedValues( final Map operandIndexMap, + Map getAggregatedValues( final Collection operands, final Period period, final OrganisationUnit unit, int unitLevel, final OrganisationUnitHierarchy hierarchy, String key ); Map getAggregate( final Collection crossTabValues, final Date startDate, final Date endDate, final Date aggregationStartDate, final Date aggregationEndDate, int unitLevel ); - Map getOperandIndexMap( Collection operands, PeriodType periodType, Map operandIndexMap ); + Collection filterOperands( Collection operands, PeriodType periodType ); } === modified file 'dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/aggregation/dataelement/SumBoolAggregator.java' --- dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/aggregation/dataelement/SumBoolAggregator.java 2011-01-08 16:49:17 +0000 +++ dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/aggregation/dataelement/SumBoolAggregator.java 2011-01-10 10:06:18 +0000 @@ -35,6 +35,7 @@ import java.util.Collection; import java.util.Date; import java.util.HashMap; +import java.util.HashSet; import java.util.Map; import java.util.Map.Entry; @@ -76,15 +77,15 @@ // DataElementAggregator implementation // ------------------------------------------------------------------------- - public Map getAggregatedValues( final Map operandIndexMap, + public Map getAggregatedValues( final Collection operands, final Period period, final OrganisationUnit unit, int unitLevel, OrganisationUnitHierarchy hierarchy, String key ) { - if ( operandIndexMap == null || operandIndexMap.size() == 0 ) + if ( operands == null || operands.size() == 0 ) { return new HashMap(); } - final Collection crossTabValues = crossTabService.getCrossTabDataValues( operandIndexMap, + final Collection crossTabValues = crossTabService.getCrossTabDataValues( operands, aggregationCache.getIntersectingPeriods( period.getStartDate(), period.getEndDate() ), hierarchy.getChildren( unit.getId() ), key ); final Map entries = getAggregate( crossTabValues, period.getStartDate(), @@ -186,19 +187,19 @@ return totalSums; } - public Map getOperandIndexMap( Collection operands, PeriodType periodType, Map operandIndexMap ) + public Collection filterOperands( Collection operands, PeriodType periodType ) { - Map sumOperandIndexMap = new HashMap(); + Collection filteredOperands = new HashSet(); for ( final DataElementOperand operand : operands ) { if ( operand.getValueType().equals( VALUE_TYPE_BOOL ) && operand.getAggregationOperator().equals( AGGREGATION_OPERATOR_SUM ) && operand.getFrequencyOrder() <= periodType.getFrequencyOrder() ) // Ignore disaggregation { - sumOperandIndexMap.put( operand, operandIndexMap.get( operand ) ); + filteredOperands.add( operand ); } } - return sumOperandIndexMap; + return filteredOperands; } } === modified file 'dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/aggregation/dataelement/SumIntAggregator.java' --- dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/aggregation/dataelement/SumIntAggregator.java 2011-01-08 16:49:17 +0000 +++ dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/aggregation/dataelement/SumIntAggregator.java 2011-01-10 10:06:18 +0000 @@ -34,6 +34,7 @@ import java.util.Collection; import java.util.Date; import java.util.HashMap; +import java.util.HashSet; import java.util.Map; import java.util.Map.Entry; @@ -79,15 +80,15 @@ // DataElementAggregator implementation // ------------------------------------------------------------------------- - public Map getAggregatedValues( final Map operandIndexMap, + public Map getAggregatedValues( final Collection operands, final Period period, final OrganisationUnit unit, int unitLevel, OrganisationUnitHierarchy hierarchy, String key ) { - if ( operandIndexMap == null || operandIndexMap.size() == 0 ) + if ( operands == null || operands.size() == 0 ) { return new HashMap(); } - final Collection crossTabValues = crossTabService.getCrossTabDataValues( operandIndexMap, + final Collection crossTabValues = crossTabService.getCrossTabDataValues( operands, aggregationCache.getIntersectingPeriods( period.getStartDate(), period.getEndDate() ), hierarchy.getChildren( unit.getId() ), key ); final Map entries = getAggregate( crossTabValues, period.getStartDate(), @@ -197,19 +198,19 @@ return totalSums; } - public Map getOperandIndexMap( Collection operands, PeriodType periodType, Map operandIndexMap ) + public Collection filterOperands( Collection operands, PeriodType periodType ) { - Map sumOperandIndexMap = new HashMap(); + Collection filteredOperands = new HashSet(); for ( final DataElementOperand operand : operands ) { if ( operand.getValueType().equals( VALUE_TYPE_INT ) && operand.getAggregationOperator().equals( AGGREGATION_OPERATOR_SUM ) && operand.getFrequencyOrder() <= periodType.getFrequencyOrder() ) // Ignore disaggregation { - sumOperandIndexMap.put( operand, operandIndexMap.get( operand ) ); + filteredOperands.add( operand ); } } - return sumOperandIndexMap; + return filteredOperands; } } === modified file 'dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/calculateddataelement/DefaultCalculatedDataElementDataMart.java' --- dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/calculateddataelement/DefaultCalculatedDataElementDataMart.java 2010-12-02 22:32:52 +0000 +++ dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/calculateddataelement/DefaultCalculatedDataElementDataMart.java 2011-01-10 10:06:18 +0000 @@ -45,7 +45,6 @@ import org.hisp.dhis.dataelement.DataElementOperand; import org.hisp.dhis.datamart.aggregation.cache.AggregationCache; import org.hisp.dhis.datamart.aggregation.dataelement.DataElementAggregator; -import org.hisp.dhis.datamart.crosstab.CrossTabService; import org.hisp.dhis.jdbc.batchhandler.AggregatedDataValueBatchHandler; import org.hisp.dhis.organisationunit.OrganisationUnit; import org.hisp.dhis.organisationunit.OrganisationUnitHierarchy; @@ -93,13 +92,6 @@ { this.averageIntSingleValueAggregator = averageIntSingleValueAggregator; } - - private CrossTabService crossTabService; - - public void setCrossTabService( CrossTabService crossTabService ) - { - this.crossTabService = crossTabService; - } private DataElementCategoryService categoryService; @@ -129,8 +121,6 @@ public int exportCalculatedDataElements( final Collection calculatedDataElements, final Collection periods, final Collection organisationUnits, final Collection operands, String key ) { - final Map operandIndexMap = crossTabService.getOperandIndexMap( operands, key ); - final DataElementCategoryOptionCombo categoryOptionCombo = categoryService.getDefaultDataElementCategoryOptionCombo(); final BatchHandler batchHandler = batchHandlerFactory.createBatchHandler( AggregatedDataValueBatchHandler.class ).init(); @@ -149,17 +139,17 @@ { final PeriodType periodType = period.getPeriodType(); - final Map sumOperandIndexMap = sumIntAggregator.getOperandIndexMap( operands, periodType, operandIndexMap ); - final Map averageOperandIndexMap = averageIntAggregator.getOperandIndexMap( operands, periodType, operandIndexMap ); - final Map averageSingleValueOperandIndexMap = averageIntSingleValueAggregator.getOperandIndexMap( operands, periodType, operandIndexMap ); + final Collection sumOperands = sumIntAggregator.filterOperands( operands, periodType ); + final Collection averageOperands = averageIntAggregator.filterOperands( operands, periodType ); + final Collection averageSingleValueOperands = averageIntSingleValueAggregator.filterOperands( operands, periodType ); for ( final OrganisationUnit unit : organisationUnits ) { final int level = aggregationCache.getLevelOfOrganisationUnit( unit.getId() ); - final Map sumIntValueMap = sumIntAggregator.getAggregatedValues( sumOperandIndexMap, period, unit, level, hierarchy, key ); - final Map averageIntValueMap = averageIntAggregator.getAggregatedValues( averageOperandIndexMap, period, unit, level, hierarchy, key ); - final Map averageIntSingleValueMap = averageIntSingleValueAggregator.getAggregatedValues( averageSingleValueOperandIndexMap, period, unit, level, hierarchy, key ); + final Map sumIntValueMap = sumIntAggregator.getAggregatedValues( sumOperands, period, unit, level, hierarchy, key ); + final Map averageIntValueMap = averageIntAggregator.getAggregatedValues( averageOperands, period, unit, level, hierarchy, key ); + final Map averageIntSingleValueMap = averageIntSingleValueAggregator.getAggregatedValues( averageSingleValueOperands, period, unit, level, hierarchy, key ); final Map valueMap = new HashMap( sumIntValueMap ); valueMap.putAll( averageIntValueMap ); === modified file 'dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/crosstab/CrossTabService.java' --- dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/crosstab/CrossTabService.java 2011-01-09 21:24:40 +0000 +++ dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/crosstab/CrossTabService.java 2011-01-10 10:06:18 +0000 @@ -28,7 +28,6 @@ */ import java.util.Collection; -import java.util.Map; import org.hisp.dhis.dataelement.DataElementOperand; import org.hisp.dhis.datamart.CrossTabDataValue; @@ -76,15 +75,6 @@ void trimCrossTabTable( Collection operands, String key ); /** - * Provides a Map with information about the crosstab table where the key is - * the DataElementOperand and the value is the column index. - * - * @param operands the collection of DataElementOperands. - * @return a Map with information about the crosstab table. - */ - Map getOperandIndexMap( Collection operands, String key ); - - /** * Validates whether the number of columns in the crosstab table will be valid * for the current DBMS. * @@ -101,7 +91,7 @@ * @param sourceIds the source identifiers. * @return collection of CrossTabDataValues. */ - Collection getCrossTabDataValues( Map operandIndexMap, Collection periodIds, + Collection getCrossTabDataValues( Collection operands, Collection periodIds, Collection sourceIds, String key ); /** @@ -112,6 +102,6 @@ * @param sourceId the source identifier. * @return collection of CrossTabDataValues. */ - Collection getCrossTabDataValues( Map operandIndexMap, Collection periodIds, + Collection getCrossTabDataValues( Collection operands, Collection periodIds, int sourceId, String key ); } === modified file 'dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/crosstab/DefaultCrossTabService.java' --- dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/crosstab/DefaultCrossTabService.java 2011-01-09 21:24:40 +0000 +++ dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/crosstab/DefaultCrossTabService.java 2011-01-10 10:06:18 +0000 @@ -30,7 +30,6 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Collections; -import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; @@ -120,30 +119,22 @@ batchHandler.setTableName( CrossTabStore.TABLE_NAME + key ); batchHandler.init(); - Map map = null; - - List valueList = null; - - boolean hasValues = false; - - String value = null; - for ( final Integer periodId : periodIds ) { for ( final Integer sourceId : organisationUnitIds ) { - map = aggregatedDataValueService.getDataValueMap( periodId, sourceId ); + final Map map = aggregatedDataValueService.getDataValueMap( periodId, sourceId ); - valueList = new ArrayList( operandList.size() + 2 ); + final List valueList = new ArrayList( operandList.size() + 2 ); valueList.add( String.valueOf( periodId ) ); valueList.add( String.valueOf( sourceId ) ); - hasValues = false; + boolean hasValues = false; for ( DataElementOperand operand : operandList ) { - value = map.get( operand ); + String value = map.get( operand ); if ( value != null && value.length() > MAX_LENGTH ) { @@ -201,40 +192,21 @@ } } - public Map getOperandIndexMap( Collection operands, String key ) - { - final Map columnNameIndexMap = crossTabStore.getCrossTabTableColumns( key ); - - final Map operandMap = new HashMap(); - - for ( DataElementOperand operand : operands ) - { - final String col = operand.getColumnName(); - - if ( columnNameIndexMap.containsKey( col ) ) - { - operandMap.put( operand, columnNameIndexMap.get( col ) ); - } - } - - return operandMap; - } - public int validateCrossTabTable( Collection operands ) { return crossTabStore.validateCrossTabTable( operands ); } - public Collection getCrossTabDataValues( Map operandIndexMap, + public Collection getCrossTabDataValues( Collection operands, Collection periodIds, Collection sourceIds, String key ) { - return crossTabStore.getCrossTabDataValues( operandIndexMap, periodIds, sourceIds, key ); + return crossTabStore.getCrossTabDataValues( operands, periodIds, sourceIds, key ); } - public Collection getCrossTabDataValues( Map operandIndexMap, + public Collection getCrossTabDataValues( Collection operands, Collection periodIds, int sourceId, String key ) { - return crossTabStore.getCrossTabDataValues( operandIndexMap, periodIds, sourceId, key ); + return crossTabStore.getCrossTabDataValues( operands, periodIds, sourceId, key ); } // ------------------------------------------------------------------------- === modified file 'dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/crosstab/jdbc/CrossTabStore.java' --- dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/crosstab/jdbc/CrossTabStore.java 2011-01-08 16:27:43 +0000 +++ dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/crosstab/jdbc/CrossTabStore.java 2011-01-10 10:06:18 +0000 @@ -29,7 +29,6 @@ import java.util.Collection; import java.util.List; -import java.util.Map; import org.hisp.dhis.dataelement.DataElementOperand; import org.hisp.dhis.datamart.CrossTabDataValue; @@ -54,24 +53,11 @@ void createCrossTabTable( List operands, String key ); /** - * Retrieves a Map with information about the column names in the crosstab - * table where they key is the column name and the value is the column index. - * - * @return a Map with information about the columns in the crosstab table. - */ - Map getCrossTabTableColumns( String key ); - - /** * Drops the crosstab table. */ void dropCrossTabTable( String key ); /** - * Drops the trimmed crosstab table. - */ - void dropTrimmedCrossTabTable( String key ); - - /** * Renames the trimmed crosstab table to the regular crosstab table. */ void renameTrimmedCrossTabTable( String key ); @@ -101,7 +87,7 @@ * @param sourceIds the source identifiers. * @return collection of CrossTabDataValues. */ - Collection getCrossTabDataValues( Map operandIndexMap, Collection periodIds, + Collection getCrossTabDataValues( Collection operands, Collection periodIds, Collection sourceIds, String key ); /** @@ -112,6 +98,6 @@ * @param sourceId the source identifier. * @return collection of CrossTabDataValues. */ - Collection getCrossTabDataValues( Map operandIndexMap, Collection periodIds, + Collection getCrossTabDataValues( Collection operands, Collection periodIds, int sourceId, String key ); } === modified file 'dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/crosstab/jdbc/JDBCCrossTabStore.java' --- dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/crosstab/jdbc/JDBCCrossTabStore.java 2010-12-05 19:34:52 +0000 +++ dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/crosstab/jdbc/JDBCCrossTabStore.java 2011-01-10 10:06:18 +0000 @@ -30,13 +30,10 @@ import static org.hisp.dhis.system.util.TextUtils.getCommaDelimitedString; import java.sql.ResultSet; -import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.util.ArrayList; import java.util.Collection; -import java.util.HashMap; import java.util.List; -import java.util.Map; import org.amplecode.quick.StatementHolder; import org.amplecode.quick.StatementManager; @@ -102,39 +99,6 @@ holder.close(); } } - - public Map getCrossTabTableColumns( String key ) - { - final StatementHolder holder = statementManager.getHolder(); - - try - { - final String sql = "SELECT * FROM " + TABLE_NAME + key + " LIMIT 0"; - - final ResultSetMetaData metaData = holder.getStatement().executeQuery( sql ).getMetaData(); - - final Map columnIndexMap = new HashMap(); - - for ( int i = 0; i < metaData.getColumnCount(); i++ ) - { - final int index = i + 1; - - final String columnName = metaData.getColumnName( index ).toLowerCase(); - - columnIndexMap.put( columnName, index ); - } - - return columnIndexMap; - } - catch ( SQLException ex ) - { - throw new RuntimeException( "Failed to get crosstab table columns", ex ); - } - finally - { - holder.close(); - } - } public void dropCrossTabTable( String key ) { @@ -156,26 +120,6 @@ } } - public void dropTrimmedCrossTabTable( String key ) - { - final StatementHolder holder = statementManager.getHolder(); - - try - { - final String sql = "DROP TABLE IF EXISTS " + TABLE_NAME_TRIMMED + key; - - holder.getStatement().executeUpdate( sql ); - } - catch ( SQLException ex ) - { - throw new RuntimeException( "Failed to drop trimmed datavalue crosstab table", ex ); - } - finally - { - holder.close(); - } - } - public void renameTrimmedCrossTabTable( String key ) { final StatementHolder holder = statementManager.getHolder(); @@ -240,7 +184,7 @@ // CrossTabDataValue // ------------------------------------------------------------------------- - public Collection getCrossTabDataValues( Map operandIndexMap, + public Collection getCrossTabDataValues( Collection operands, Collection periodIds, Collection sourceIds, String key ) { final StatementHolder holder = statementManager.getHolder(); @@ -255,7 +199,7 @@ final ResultSet resultSet = holder.getStatement().executeQuery( sql ); - return getCrossTabDataValues( resultSet, operandIndexMap ); + return getCrossTabDataValues( resultSet, operands ); } catch ( SQLException ex ) { @@ -267,7 +211,8 @@ } } - public Collection getCrossTabDataValues( Map operandIndexMap, Collection periodIds, int sourceId, String key ) + public Collection getCrossTabDataValues( Collection operands, + Collection periodIds, int sourceId, String key ) { final StatementHolder holder = statementManager.getHolder(); @@ -281,7 +226,7 @@ final ResultSet resultSet = holder.getStatement().executeQuery( sql ); - return getCrossTabDataValues( resultSet, operandIndexMap ); + return getCrossTabDataValues( resultSet, operands ); } catch ( SQLException ex ) { @@ -297,7 +242,7 @@ // Supportive methods // ------------------------------------------------------------------------- - private Collection getCrossTabDataValues( ResultSet resultSet, Map operandIndexMap ) + private Collection getCrossTabDataValues( ResultSet resultSet, Collection operands ) throws SQLException { final Collection values = new ArrayList(); @@ -309,13 +254,15 @@ value.setPeriodId( resultSet.getInt( 1 ) ); value.setSourceId( resultSet.getInt( 2 ) ); - for ( Map.Entry entry : operandIndexMap.entrySet() ) + for ( DataElementOperand operand : operands ) { - String columnValue = resultSet.getString( entry.getValue() ); + final String columnName = operand.getColumnName(); + + final String columnValue = resultSet.getString( columnName ); if ( columnValue != null ) { - value.getValueMap().put( entry.getKey(), columnValue ); + value.getValueMap().put( operand, columnValue ); } } === 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-01-09 13:02:36 +0000 +++ dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/dataelement/DefaultDataElementDataMart.java 2011-01-10 10:06:18 +0000 @@ -39,7 +39,6 @@ import org.hisp.dhis.dataelement.DataElementOperand; import org.hisp.dhis.datamart.aggregation.cache.AggregationCache; import org.hisp.dhis.datamart.aggregation.dataelement.DataElementAggregator; -import org.hisp.dhis.datamart.crosstab.CrossTabService; import org.hisp.dhis.jdbc.batchhandler.AggregatedDataValueBatchHandler; import org.hisp.dhis.organisationunit.OrganisationUnit; import org.hisp.dhis.organisationunit.OrganisationUnitHierarchy; @@ -72,14 +71,7 @@ { this.batchHandlerFactory = batchHandlerFactory; } - - private CrossTabService crossTabService; - - public void setCrossTabService( CrossTabService crossTabService ) - { - this.crossTabService = crossTabService; - } - + private AggregationCache aggregationCache; public void setAggregationCache( AggregationCache aggregationCache ) @@ -94,8 +86,6 @@ public int exportDataValues( final Collection operands, final Collection periods, final Collection organisationUnits, final DataElementAggregator dataElementAggregator, String key ) { - final Map operandIndexMap = crossTabService.getOperandIndexMap( operands, key ); - final BatchHandler batchHandler = batchHandlerFactory.createBatchHandler( AggregatedDataValueBatchHandler.class ).init(); final OrganisationUnitHierarchy hierarchy = organisationUnitService.getOrganisationUnitHierarchy().prepareChildren( organisationUnits ); @@ -106,15 +96,15 @@ for ( final Period period : periods ) { - final Map currentOperandIndexMap = dataElementAggregator.getOperandIndexMap( operands, period.getPeriodType(), operandIndexMap ); + final Collection currentOperands = dataElementAggregator.filterOperands( operands, period.getPeriodType() ); - if ( currentOperandIndexMap != null && currentOperandIndexMap.size() > 0 ) + if ( currentOperands != null && currentOperands.size() > 0 ) { for ( final OrganisationUnit unit : organisationUnits ) { final int level = aggregationCache.getLevelOfOrganisationUnit( unit.getId() ); - final Map valueMap = dataElementAggregator.getAggregatedValues( currentOperandIndexMap, period, unit, level, hierarchy, key ); + final Map valueMap = dataElementAggregator.getAggregatedValues( currentOperands, period, unit, level, hierarchy, key ); for ( Entry entry : valueMap.entrySet() ) { === modified file 'dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/indicator/DefaultIndicatorDataMart.java' --- dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/indicator/DefaultIndicatorDataMart.java 2010-12-06 09:27:07 +0000 +++ dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/indicator/DefaultIndicatorDataMart.java 2011-01-10 10:06:18 +0000 @@ -43,7 +43,6 @@ import org.hisp.dhis.dataelement.DataElementOperand; import org.hisp.dhis.datamart.aggregation.cache.AggregationCache; import org.hisp.dhis.datamart.aggregation.dataelement.DataElementAggregator; -import org.hisp.dhis.datamart.crosstab.CrossTabService; import org.hisp.dhis.indicator.Indicator; import org.hisp.dhis.jdbc.batchhandler.AggregatedIndicatorValueBatchHandler; import org.hisp.dhis.options.SystemSettingManager; @@ -97,13 +96,6 @@ { this.averageIntSingleValueAggregator = averageIntSingleValueAggregator; } - - private CrossTabService crossTabService; - - public void setCrossTabService( CrossTabService crossTabService ) - { - this.crossTabService = crossTabService; - } private AggregationCache aggregationCache; @@ -133,8 +125,6 @@ public int exportIndicatorValues( final Collection indicators, final Collection periods, final Collection organisationUnits, final Collection operands, String key ) { - final Map operandIndexMap = crossTabService.getOperandIndexMap( operands, key ); - final BatchHandler batchHandler = batchHandlerFactory.createBatchHandler( AggregatedIndicatorValueBatchHandler.class ).init(); final OrganisationUnitHierarchy hierarchy = organisationUnitService.getOrganisationUnitHierarchy().prepareChildren( organisationUnits ); @@ -154,17 +144,17 @@ { final PeriodType periodType = period.getPeriodType(); - final Map sumOperandIndexMap = sumIntAggregator.getOperandIndexMap( operands, periodType, operandIndexMap ); - final Map averageOperandIndexMap = averageIntAggregator.getOperandIndexMap( operands, periodType, operandIndexMap ); - final Map averageSingleValueOperandIndexMap = averageIntSingleValueAggregator.getOperandIndexMap( operands, periodType, operandIndexMap ); + final Collection sumOperands = sumIntAggregator.filterOperands( operands, periodType ); + final Collection averageOperands = averageIntAggregator.filterOperands( operands, periodType ); + final Collection averageSingleValueOperands = averageIntSingleValueAggregator.filterOperands( operands, periodType ); for ( final OrganisationUnit unit : organisationUnits ) { final int level = aggregationCache.getLevelOfOrganisationUnit( unit.getId() ); - final Map sumIntValueMap = sumIntAggregator.getAggregatedValues( sumOperandIndexMap, period, unit, level, hierarchy, key ); - final Map averageIntValueMap = averageIntAggregator.getAggregatedValues( averageOperandIndexMap, period, unit, level, hierarchy, key ); - final Map averageIntSingleValueMap = averageIntSingleValueAggregator.getAggregatedValues( averageSingleValueOperandIndexMap, period, unit, level, hierarchy, key ); + final Map sumIntValueMap = sumIntAggregator.getAggregatedValues( sumOperands, period, unit, level, hierarchy, key ); + final Map averageIntValueMap = averageIntAggregator.getAggregatedValues( averageOperands, period, unit, level, hierarchy, key ); + final Map averageIntSingleValueMap = averageIntSingleValueAggregator.getAggregatedValues( averageSingleValueOperands, period, unit, level, hierarchy, key ); final Map valueMap = new HashMap( sumIntValueMap ); valueMap.putAll( averageIntValueMap ); === modified file 'dhis-2/dhis-services/dhis-service-datamart-default/src/main/resources/META-INF/dhis/beans.xml' --- dhis-2/dhis-services/dhis-service-datamart-default/src/main/resources/META-INF/dhis/beans.xml 2011-01-07 16:43:23 +0000 +++ dhis-2/dhis-services/dhis-service-datamart-default/src/main/resources/META-INF/dhis/beans.xml 2011-01-10 10:06:18 +0000 @@ -150,8 +150,6 @@ - @@ -168,8 +166,6 @@ ref="org.hisp.dhis.datamart.aggregation.dataelement.AverageIntAggregator"/> - - operandIndexMap = crossTabService.getOperandIndexMap( operands, key ); - - Collection values = crossTabService.getCrossTabDataValues( operandIndexMap, periodIds, organisationUnitIds, key ); + + Collection values = crossTabService.getCrossTabDataValues( operands, periodIds, organisationUnitIds, key ); assertNotNull( values ); @@ -215,29 +212,4 @@ crossTabService.trimCrossTabTable( operandsWithData, key ); } - - @Test - public void testGetOperandIndexMap() - { - crossTabService.populateCrossTabTable( operands, periodIds, organisationUnitIds, key ); - - Map operandIndexMap = crossTabService.getOperandIndexMap( operands, key ); - - assertEquals( operands.size(), operandIndexMap.size() ); - - Iterator iterator = operands.iterator(); - - int minIndex = 3; - int maxIndex = operands.size() + 2; - - while ( iterator.hasNext() ) - { - DataElementOperand operand = iterator.next(); - Integer index = operandIndexMap.get( operand ); - - assertNotNull( index ); - assertTrue( index >= minIndex ); - assertTrue( index <= maxIndex ); - } - } } === modified file 'dhis-2/dhis-services/dhis-service-datamart-default/src/test/java/org/hisp/dhis/datamart/crosstab/CrossTabStoreTest.java' --- dhis-2/dhis-services/dhis-service-datamart-default/src/test/java/org/hisp/dhis/datamart/crosstab/CrossTabStoreTest.java 2010-06-26 19:48:18 +0000 +++ dhis-2/dhis-services/dhis-service-datamart-default/src/test/java/org/hisp/dhis/datamart/crosstab/CrossTabStoreTest.java 2011-01-10 10:06:18 +0000 @@ -1,10 +1,7 @@ package org.hisp.dhis.datamart.crosstab; -import static junit.framework.Assert.assertEquals; - import java.util.ArrayList; import java.util.List; -import java.util.Map; import org.apache.commons.lang.RandomStringUtils; import org.hisp.dhis.DhisTest; @@ -46,22 +43,6 @@ // ------------------------------------------------------------------------- // Tests // ------------------------------------------------------------------------- - - @Test - public void testCreateGetCrossTabTable() - { - crossTabStore.createCrossTabTable( operands, key ); - - Map columnNames = crossTabStore.getCrossTabTableColumns( key ); - - assertEquals( 6, columnNames.size() ); - assertEquals( new Integer( 1 ), columnNames.get( "periodid" ) ); - assertEquals( new Integer( 2 ), columnNames.get( "sourceid" ) ); - assertEquals( new Integer( 3 ), columnNames.get( "de1_1" ) ); - assertEquals( new Integer( 4 ), columnNames.get( "de1_2" ) ); - assertEquals( new Integer( 5 ), columnNames.get( "de2_1" ) ); - assertEquals( new Integer( 6 ), columnNames.get( "de2_2" ) ); - } @Test public void testDropCrossTabTable() === modified file 'dhis-2/dhis-web/dhis-web-reporting/src/main/webapp/dhis-web-reporting/inputReportParamsForm.vm' --- dhis-2/dhis-web/dhis-web-reporting/src/main/webapp/dhis-web-reporting/inputReportParamsForm.vm 2011-01-10 09:32:53 +0000 +++ dhis-2/dhis-web/dhis-web-reporting/src/main/webapp/dhis-web-reporting/inputReportParamsForm.vm 2011-01-10 10:06:18 +0000 @@ -80,7 +80,7 @@ #if ( $mode == "table" ) #elseif ( $mode == "report" ) - + #end