=== modified file 'dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/DataQueryParams.java' --- dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/DataQueryParams.java 2013-03-08 13:39:50 +0000 +++ dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/DataQueryParams.java 2013-03-08 14:51:55 +0000 @@ -74,7 +74,7 @@ public static final int MAX_DIM_OPT_PERM = 5000; - private static final List COMPLETENESS_DIMENSION_TYTPES = Arrays.asList( DATASET, ORGANISATIONUNIT, ORGANISATIONUNIT_GROUPSET ); + private static final List COMPLETENESS_DIMENSION_TYPES = Arrays.asList( DATASET, ORGANISATIONUNIT, ORGANISATIONUNIT_GROUPSET ); private static final DimensionItem[] DIM_OPT_ARR = new DimensionItem[0]; private static final DimensionItem[][] DIM_OPT_2D_ARR = new DimensionItem[0][]; @@ -83,6 +83,8 @@ private List filters = new ArrayList(); + private ListMap filterMap = new ListMap(); + private AggregationType aggregationType; private Map measureCriteria = new HashMap(); @@ -188,7 +190,7 @@ for ( int i = 0; i < dimensions.size(); i++ ) { - if ( COMPLETENESS_DIMENSION_TYTPES.contains( dimensions.get( i ).getType() ) ) + if ( COMPLETENESS_DIMENSION_TYPES.contains( dimensions.get( i ).getType() ) ) { indexes.add( i ); } @@ -206,7 +208,7 @@ for ( int i = 0; i < filters.size(); i++ ) { - if ( COMPLETENESS_DIMENSION_TYTPES.contains( filters.get( i ).getType() ) ) + if ( COMPLETENESS_DIMENSION_TYPES.contains( filters.get( i ).getType() ) ) { indexes.add( i ); } @@ -707,6 +709,16 @@ this.filters = filters; } + public ListMap getFilterMap() + { + return filterMap; + } + + public void setFilterMap( ListMap filterMap ) + { + this.filterMap = filterMap; + } + public AggregationType getAggregationType() { return aggregationType; @@ -780,18 +792,6 @@ return getDimensionOptions( key ) != null ? getDimensionOptions( key ) : getFilterOptions( key ); } - public void resetDimensionOrFilter( Dimension dimension, List options ) - { - if ( dimensions.contains( dimension ) ) - { - setDimensionOptions( dimension.getDimension(), dimension.getType(), dimension.getDimensionName(), options ); - } - else if ( filters.contains( dimension ) ) - { - setFilterOptions( dimension.getDimension(), dimension.getType(), dimension.getDimensionName(), options ); - } - } - public boolean hasDimensionOrFilter( String key ) { return dimensions.indexOf( new Dimension( key ) ) != -1 || filters.indexOf( new Dimension( key ) ) != -1; === modified file 'dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/data/DefaultQueryPlanner.java' --- dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/data/DefaultQueryPlanner.java 2013-03-08 13:39:50 +0000 +++ dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/data/DefaultQueryPlanner.java 2013-03-08 14:51:55 +0000 @@ -192,7 +192,7 @@ // Group by data element // --------------------------------------------------------------------- - queries = splitByDimensionOrFilter( queries, DataQueryParams.DATAELEMENT_DIM_ID, optimalQueries ); + queries = splitByDimension( queries, DataQueryParams.DATAELEMENT_DIM_ID, optimalQueries ); if ( queries.size() >= optimalQueries ) { @@ -203,7 +203,7 @@ // Group by organisation unit // --------------------------------------------------------------------- - queries = splitByDimensionOrFilter( queries, DataQueryParams.ORGUNIT_DIM_ID, optimalQueries ); + queries = splitByDimension( queries, DataQueryParams.ORGUNIT_DIM_ID, optimalQueries ); return queries; } @@ -220,7 +220,7 @@ /** * Splits the given list of queries in sub queries on the given dimension. */ - private List splitByDimensionOrFilter( List queries, String dimension, int optimalQueries ) + private List splitByDimension( List queries, String dimension, int optimalQueries ) { int optimalForSubQuery = MathUtils.divideToFloor( optimalQueries, queries.size() ); @@ -228,28 +228,32 @@ for ( DataQueryParams query : queries ) { - List values = query.getDimensionOrFilter( dimension ); - - if ( values == null || values.isEmpty() ) + Dimension dim = query.getDimension( dimension ); + + List values = null; + + if ( dim == null || ( values = dim.getItems() ) == null || values.isEmpty() ) { subQueries.add( new DataQueryParams( query ) ); continue; } - Dimension dim = query.getDimension( dimension ); - List> valuePages = new PaginatedList( values ).setNumberOfPages( optimalForSubQuery ).getPages(); for ( List valuePage : valuePages ) { DataQueryParams subQuery = new DataQueryParams( query ); - subQuery.resetDimensionOrFilter( dim, valuePage ); + subQuery.setDimensionOptions( dim.getDimension(), dim.getType(), dim.getDimensionName(), valuePage ); subQueries.add( subQuery ); } } return subQueries; } + + // ------------------------------------------------------------------------- + // Supportive - group by methods + // ------------------------------------------------------------------------- /** * Groups the given query into sub queries based on its periods and which @@ -456,6 +460,10 @@ return queries; } + + // ------------------------------------------------------------------------- + // Supportive - get mapping methods + // ------------------------------------------------------------------------- /** * Creates a mapping between period type name and period for the given periods.