=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/dataelement/DataElementGroupSet.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/dataelement/DataElementGroupSet.java 2013-02-13 03:57:52 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/dataelement/DataElementGroupSet.java 2013-03-20 12:40:07 +0000 @@ -27,12 +27,11 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonView; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper; -import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; -import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + import org.hisp.dhis.common.BaseIdentifiableObject; import org.hisp.dhis.common.DxfNamespaces; import org.hisp.dhis.common.IdentifiableObject; @@ -41,10 +40,12 @@ import org.hisp.dhis.common.view.DetailedView; import org.hisp.dhis.common.view.ExportView; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.List; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonView; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement; /** * DataElementGroupSet is a set of DataElementGroups. It is by default === 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-14 13:07:10 +0000 +++ dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/DataQueryParams.java 2013-03-20 12:40:07 +0000 @@ -1009,7 +1009,13 @@ } } - //TODO filters? + for ( Dimension filter : filters ) + { + if ( DimensionType.DATAELEMENT_GROUPSET.equals( filter.getType() ) ) + { + list.add( filter ); + } + } return list; } === 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-20 09:35:04 +0000 +++ dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/data/DefaultQueryPlanner.java 2013-03-20 12:40:07 +0000 @@ -31,9 +31,12 @@ import static org.hisp.dhis.analytics.AggregationType.AVERAGE_INT; import static org.hisp.dhis.analytics.AggregationType.AVERAGE_INT_DISAGGREGATION; import static org.hisp.dhis.analytics.AggregationType.SUM; -import static org.hisp.dhis.analytics.DataQueryParams.*; +import static org.hisp.dhis.analytics.DataQueryParams.CATEGORYOPTIONCOMBO_DIM_ID; import static org.hisp.dhis.analytics.DataQueryParams.INDICATOR_DIM_ID; +import static org.hisp.dhis.analytics.DataQueryParams.LEVEL_PREFIX; import static org.hisp.dhis.analytics.DataQueryParams.MAX_DIM_OPT_PERM; +import static org.hisp.dhis.analytics.DataQueryParams.ORGUNIT_DIM_ID; +import static org.hisp.dhis.analytics.DataQueryParams.PERIOD_DIM_ID; import static org.hisp.dhis.dataelement.DataElement.AGGREGATION_OPERATOR_AVERAGE; import static org.hisp.dhis.dataelement.DataElement.AGGREGATION_OPERATOR_SUM; import static org.hisp.dhis.dataelement.DataElement.VALUE_TYPE_BOOL; @@ -42,8 +45,8 @@ import java.util.Collection; import java.util.List; +import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.apache.commons.logging.Log; import org.hisp.dhis.analytics.AggregationType; import org.hisp.dhis.analytics.DataQueryParams; import org.hisp.dhis.analytics.Dimension; @@ -54,6 +57,7 @@ import org.hisp.dhis.common.IdentifiableObject; import org.hisp.dhis.common.ListMap; import org.hisp.dhis.dataelement.DataElement; +import org.hisp.dhis.dataelement.DataElementGroup; import org.hisp.dhis.organisationunit.OrganisationUnit; import org.hisp.dhis.organisationunit.OrganisationUnitService; import org.hisp.dhis.period.Period; @@ -418,20 +422,24 @@ * aggregation period type. Average bool means that the data elements have the * average aggregation operator and the bool value type. * + * If no data elements are present, the aggregation type will be determined + * based on the first data element in the first data element group in the + * first data element group set in the query. + * * If the aggregation type is already set/overridden in the request, the - * query will be returned unchanged. If there are no dimension items specified - * the aggregation type will fall back to sum. + * query will be returned unchanged. If there are no data elements or data + * element group sets specified the aggregation type will fall back to sum. */ private List groupByAggregationType( DataQueryParams params ) { List queries = new ArrayList(); - + if ( params.getAggregationType() != null ) { queries.add( new DataQueryParams( params ) ); return queries; } - + if ( params.getDataElements() != null && !params.getDataElements().isEmpty() ) { PeriodType periodType = PeriodType.getPeriodTypeByName( params.getPeriodType() ); @@ -446,6 +454,25 @@ queries.add( query ); } } + else if ( params.getDataElementGroupSets() != null && !params.getDataElementGroupSets().isEmpty() ) + { + Dimension degs = params.getDataElementGroupSets().get( 0 ); + DataElementGroup deg = (DataElementGroup) ( degs.hasItems() ? degs.getItems().get( 0 ) : null ); + + DataQueryParams query = new DataQueryParams( params ); + + if ( deg != null && !deg.getMembers().isEmpty() ) + { + PeriodType periodType = PeriodType.getPeriodTypeByName( params.getPeriodType() ); + query.setAggregationType( getAggregationType( deg.getValueType(), deg.getAggregationOperator(), periodType, deg.getPeriodType() ) ); + } + else + { + query.setAggregationType( SUM ); + } + + queries.add( query ); + } else { DataQueryParams query = new DataQueryParams( params ); @@ -534,7 +561,7 @@ { DataElement de = (DataElement) element; - AggregationType aggregationType = getAggregationType( de, de.getType(), de.getAggregationOperator(), aggregationPeriodType, de.getPeriodType() ); + AggregationType aggregationType = getAggregationType( de.getType(), de.getAggregationOperator(), aggregationPeriodType, de.getPeriodType() ); map.putValue( aggregationType, de ); } @@ -546,7 +573,7 @@ * Puts the given element into the map according to the value type, aggregation * operator, aggregation period type and data period type. */ - private AggregationType getAggregationType( IdentifiableObject element, String valueType, String aggregationOperator, + private AggregationType getAggregationType( String valueType, String aggregationOperator, PeriodType aggregationPeriodType, PeriodType dataPeriodType ) { AggregationType aggregationType = null; === modified file 'dhis-2/dhis-support/dhis-support-hibernate/src/main/resources/ehcache.xml' --- dhis-2/dhis-support/dhis-support-hibernate/src/main/resources/ehcache.xml 2013-02-05 10:03:40 +0000 +++ dhis-2/dhis-support/dhis-support-hibernate/src/main/resources/ehcache.xml 2013-03-20 12:40:07 +0000 @@ -132,17 +132,17 @@ - + - + - + - + @@ -162,7 +162,7 @@ - + === modified file 'dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/Timer.java' --- dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/Timer.java 2012-08-29 10:00:16 +0000 +++ dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/Timer.java 2013-03-20 12:40:07 +0000 @@ -55,12 +55,7 @@ long endTime = System.nanoTime(); long time = ( endTime - startTime ) / 1000; - - if ( !printDisabled ) - { - System.out.println( msg + ": " + time + " micros" ); - } - + return time; } === modified file 'dhis-2/dhis-support/dhis-support-system/src/test/java/org/hisp/dhis/system/util/DateUtilsTest.java' --- dhis-2/dhis-support/dhis-support-system/src/test/java/org/hisp/dhis/system/util/DateUtilsTest.java 2012-12-21 12:59:39 +0000 +++ dhis-2/dhis-support/dhis-support-system/src/test/java/org/hisp/dhis/system/util/DateUtilsTest.java 2013-03-20 12:40:07 +0000 @@ -58,10 +58,4 @@ assertEquals( "10 mar 2010", convertDate( "2010-03-10" ).toLowerCase() ); assertEquals( "Invalid", convertDate( "Invalid" ) ); } - - @Test - public void testGetSecondsUntilTomorrow() - { - System.out.println( DateUtils.getSecondsUntilTomorrow( 3 ) ); - } } === modified file 'resources/sql/div.sql' --- resources/sql/div.sql 2013-02-07 13:00:56 +0000 +++ resources/sql/div.sql 2013-03-20 12:40:07 +0000 @@ -119,6 +119,27 @@ or cast(substring(coordinates from '\[(.+?\..+?),.+?\..+?\]') as double precision) > 43 ); +-- Identify empty groups + +select 'Data element group' as type, o.name as name +from dataelementgroup o +where not exists ( + select * from dataelementgroupmembers + where dataelementgroupid=o.dataelementgroupid) +union all +select 'Indicator group' as type, o.name as name +from indicatorgroup o +where not exists ( + select * from indicatorgroupmembers + where indicatorgroupid=o.indicatorgroupid) +union all +select 'Organisation unit group' as type, o.name as name +from orgunitgroup o +where not exists ( + select * from orgunitgroupmembers + where orgunitgroupid=o.orgunitgroupid) +order by type,name; + -- Populate dashboards for all users (7666 is userinfoid for target dashboard, replace with preferred id) insert into usersetting (userinfoid, name, value)