=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/DimensionType.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/DimensionType.java 2015-03-23 20:38:30 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/DimensionType.java 2015-03-24 11:45:27 +0000 @@ -48,5 +48,6 @@ CATEGORY, TRACKED_ENTITY_ATTRIBUTE, TRACKED_ENTITY_DATAELEMENT, + PROGRAM_INDICATOR, STATIC } === 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 2015-03-07 16:26:59 +0000 +++ dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/DataQueryParams.java 2015-03-24 11:45:27 +0000 @@ -94,6 +94,7 @@ public static final String DISPLAY_NAME_CATEGORYOPTIONCOMBO = "Category"; public static final String DISPLAY_NAME_PERIOD = "Period"; public static final String DISPLAY_NAME_ORGUNIT = "Organisation unit"; + public static final String DISPLAY_NAME_PROGRAM_INDICATOR = "Program indicator"; public static final String DISPLAY_NAME_LONGITUDE = "Longitude"; public static final String DISPLAY_NAME_LATITUDE = "Latitude"; @@ -514,7 +515,7 @@ return ( dimOpts != null && !dimOpts.isEmpty() ) || ( filterOpts != null && !filterOpts.isEmpty() ); } - + /** * Returns the period type of the first period specified as filter, or * null if there is no period filter. === 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 2015-03-24 11:19:25 +0000 +++ dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/data/DefaultAnalyticsService.java 2015-03-24 11:45:27 +0000 @@ -38,6 +38,7 @@ import static org.hisp.dhis.analytics.DataQueryParams.DISPLAY_NAME_LONGITUDE; import static org.hisp.dhis.analytics.DataQueryParams.DISPLAY_NAME_ORGUNIT; import static org.hisp.dhis.analytics.DataQueryParams.DISPLAY_NAME_PERIOD; +import static org.hisp.dhis.analytics.DataQueryParams.DISPLAY_NAME_PROGRAM_INDICATOR; import static org.hisp.dhis.analytics.DataQueryParams.KEY_DE_GROUP; import static org.hisp.dhis.common.DimensionalObject.CATEGORYOPTIONCOMBO_DIM_ID; import static org.hisp.dhis.common.DimensionalObject.DATAELEMENT_DIM_ID; @@ -47,6 +48,7 @@ import static org.hisp.dhis.common.DimensionalObject.INDICATOR_DIM_ID; import static org.hisp.dhis.common.DimensionalObject.LATITUDE_DIM_ID; import static org.hisp.dhis.common.DimensionalObject.LONGITUDE_DIM_ID; +import static org.hisp.dhis.common.DimensionalObject.PROGRAM_INDICATOR_DIM_ID; import static org.hisp.dhis.common.DimensionalObject.ORGUNIT_DIM_ID; import static org.hisp.dhis.common.DimensionalObject.PERIOD_DIM_ID; import static org.hisp.dhis.common.DimensionalObjectUtils.toDimension; @@ -132,6 +134,7 @@ import org.hisp.dhis.period.RelativePeriodEnum; import org.hisp.dhis.period.RelativePeriods; import org.hisp.dhis.period.comparator.AscendingPeriodEndDateComparator; +import org.hisp.dhis.program.ProgramIndicator; import org.hisp.dhis.reporttable.ReportTable; import org.hisp.dhis.setting.SystemSettingManager; import org.hisp.dhis.system.grid.ListGrid; @@ -1140,6 +1143,15 @@ return ListUtils.getList( object ); } + if ( PROGRAM_INDICATOR_DIM_ID.equals( dimension ) ) + { + List indicators = idObjectManager.getByUid( ProgramIndicator.class, items ); + + DimensionalObject object = new BaseDimensionalObject( PROGRAM_INDICATOR_DIM_ID, DimensionType.PROGRAM_INDICATOR, null, DISPLAY_NAME_PROGRAM_INDICATOR, indicators ); + + return ListUtils.getList( object ); + } + if ( LONGITUDE_DIM_ID.contains( dimension ) ) { DimensionalObject object = new BaseDimensionalObject( dimension, DimensionType.STATIC, null, DISPLAY_NAME_LONGITUDE, new ArrayList() ); === modified file 'dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/event/EventQueryParams.java' --- dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/event/EventQueryParams.java 2015-03-12 11:27:20 +0000 +++ dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/event/EventQueryParams.java 2015-03-24 11:45:27 +0000 @@ -29,6 +29,7 @@ */ import static org.hisp.dhis.common.DimensionalObject.PERIOD_DIM_ID; +import static org.hisp.dhis.common.DimensionalObject.PROGRAM_INDICATOR_DIM_ID; import java.util.ArrayList; import java.util.Date; @@ -233,6 +234,25 @@ return organisationUnitMode != null && organisationUnitMode.equalsIgnoreCase( mode ); } + /** + * Indicates whether any items or item filters are present. + */ + public boolean hasItemsOrItemFilters() + { + return !items.isEmpty() || !itemFilters.isEmpty(); + } + + /** + * Indicates whether program indicators are present as dimension or filter. + */ + public boolean hasProgramIndicators() + { + List dimOpts = getDimensionOptions( PROGRAM_INDICATOR_DIM_ID ); + List filterOpts = getFilterOptions( PROGRAM_INDICATOR_DIM_ID ); + + return ( dimOpts != null && !dimOpts.isEmpty() ) || ( filterOpts != null && !filterOpts.isEmpty() ); + } + public boolean hasStartEndDate() { return startDate != null && endDate != null; === modified file 'dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/event/data/DefaultEventQueryPlanner.java' --- dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/event/data/DefaultEventQueryPlanner.java 2015-03-05 15:38:58 +0000 +++ dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/event/data/DefaultEventQueryPlanner.java 2015-03-24 11:45:27 +0000 @@ -124,6 +124,11 @@ violation = "Start and end date or at least one period must be specified"; } + if ( params.hasProgramIndicators() && params.hasItemsOrItemFilters() ) + { + violation = "Data elements or attributs cannot be specified together with indicators"; + } + if ( params.getStartDate() != null && params.getEndDate() != null && params.getStartDate().after( params.getEndDate() ) ) { violation = "Start date is after end date: " + params.getStartDate() + " - " + params.getEndDate();