← Back to team overview

dhis2-devs team mailing list archive

[Branch ~dhis2-devs-core/dhis2/trunk] Rev 19454: Analytics, adding program indicators to getFromUrl method

 

------------------------------------------------------------
revno: 19454
committer: Lars Helge Overland <larshelge@xxxxxxxxx>
branch nick: dhis2
timestamp: Thu 2015-06-18 16:35:18 +0200
message:
  Analytics, adding program indicators to getFromUrl method
modified:
  dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/BaseAnalyticalObject.java
  dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/BaseDimensionalObject.java
  dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/DimensionType.java
  dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/DimensionalObject.java
  dhis-2/dhis-api/src/test/java/org/hisp/dhis/common/BaseAnalyticalObjectTest.java
  dhis-2/dhis-api/src/test/java/org/hisp/dhis/common/DimensionalObjectTest.java
  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/data/DefaultAnalyticsService.java
  dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/dimension/DefaultDimensionService.java
  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/data/DefaultEventQueryPlanner.java
  dhis-2/dhis-services/dhis-service-analytics/src/test/java/org/hisp/dhis/analytics/event/data/EventAnalyticsServiceTest.java
  dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/adx/DefaultADXDataService.java


--
lp:dhis2
https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk

Your team DHIS 2 developers is subscribed to branch lp:dhis2.
To unsubscribe from this branch go to https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk/+edit-subscription
=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/BaseAnalyticalObject.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/BaseAnalyticalObject.java	2015-05-27 13:54:41 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/BaseAnalyticalObject.java	2015-06-18 14:35:18 +0000
@@ -393,7 +393,7 @@
             {
                 TrackedEntityAttributeDimension tead = attributes.get( dimension );
 
-                return new BaseDimensionalObject( dimension, DimensionType.TRACKED_ENTITY_ATTRIBUTE, null, tead.getDisplayName(), tead.getLegendSet(), tead.getFilter() );
+                return new BaseDimensionalObject( dimension, DimensionType.PROGRAM_ATTRIBUTE, null, tead.getDisplayName(), tead.getLegendSet(), tead.getFilter() );
             }
 
             // Tracked entity data element
@@ -409,7 +409,7 @@
             {
                 TrackedEntityDataElementDimension tedd = dataElements.get( dimension );
 
-                return new BaseDimensionalObject( dimension, DimensionType.TRACKED_ENTITY_DATAELEMENT, null, tedd.getDisplayName(), tedd.getLegendSet(), tedd.getFilter() );
+                return new BaseDimensionalObject( dimension, DimensionType.PROGRAM_DATAELEMENT, null, tedd.getDisplayName(), tedd.getLegendSet(), tedd.getFilter() );
             }
         }
 
@@ -606,7 +606,7 @@
             {
                 TrackedEntityAttributeDimension tead = attributes.get( dimension );
 
-                objects.add( new BaseDimensionalObject( dimension, DimensionType.TRACKED_ENTITY_ATTRIBUTE, null, tead.getDisplayName(), tead.getLegendSet(), tead.getFilter() ) );
+                objects.add( new BaseDimensionalObject( dimension, DimensionType.PROGRAM_ATTRIBUTE, null, tead.getDisplayName(), tead.getLegendSet(), tead.getFilter() ) );
             }
 
             // Tracked entity data element
@@ -622,7 +622,7 @@
             {
                 TrackedEntityDataElementDimension tedd = dataElements.get( dimension );
 
-                objects.add( new BaseDimensionalObject( dimension, DimensionType.TRACKED_ENTITY_DATAELEMENT, null, tedd.getDisplayName(), tedd.getLegendSet(), tedd.getFilter() ) );
+                objects.add( new BaseDimensionalObject( dimension, DimensionType.PROGRAM_DATAELEMENT, null, tedd.getDisplayName(), tedd.getLegendSet(), tedd.getFilter() ) );
             }
         }
 

=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/BaseDimensionalObject.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/BaseDimensionalObject.java	2015-06-16 16:07:21 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/BaseDimensionalObject.java	2015-06-18 14:35:18 +0000
@@ -162,8 +162,8 @@
     public AnalyticsType getAnalyticsType()
     {
         return
-            DimensionType.TRACKED_ENTITY_ATTRIBUTE.equals( dimensionType ) ||
-            DimensionType.TRACKED_ENTITY_DATAELEMENT.equals( dimensionType ) ?
+            DimensionType.PROGRAM_ATTRIBUTE.equals( dimensionType ) ||
+            DimensionType.PROGRAM_DATAELEMENT.equals( dimensionType ) ?
             AnalyticsType.EVENT : AnalyticsType.AGGREGATE;
     }
 

=== 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-06-17 14:52:34 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/DimensionType.java	2015-06-18 14:35:18 +0000
@@ -37,6 +37,7 @@
     DATAELEMENT,
     DATASET,
     DATAELEMENT_OPERAND,
+    PROGRAM_INDICATOR,
     PROGRAM_DATAELEMENT,
     PROGRAM_ATTRIBUTE,
     DATA_X,
@@ -48,8 +49,5 @@
     DATAELEMENT_GROUPSET,
     ORGANISATIONUNIT_GROUPSET,
     CATEGORY,
-    TRACKED_ENTITY_ATTRIBUTE,
-    TRACKED_ENTITY_DATAELEMENT,
-    PROGRAM_INDICATOR,
     STATIC
 }

=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/DimensionalObject.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/DimensionalObject.java	2015-06-17 14:52:34 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/DimensionalObject.java	2015-06-18 14:35:18 +0000
@@ -53,13 +53,13 @@
     final String DATAELEMENT_DIM_ID = "de";
     final String DATASET_DIM_ID = "ds";
     final String DATAELEMENT_OPERAND_ID = "dc";
+    final String PROGRAM_INDICATOR_DIM_ID = "pi";
     final String PROGRAM_DATAELEMENT_DIM_ID = "pd";
     final String PROGRAM_ATTRIBUTE_DIM_ID = "pa";
     final String CATEGORYOPTIONCOMBO_DIM_ID = "co";
     final String PERIOD_DIM_ID = "pe";
     final String ORGUNIT_DIM_ID = "ou";
     final String ORGUNIT_GROUP_DIM_ID = "oug"; // Used for org unit target
-    final String PROGRAM_INDICATOR_DIM_ID = "pin";
     final String ITEM_DIM_ID = "item";
 
     final String OU_MODE_SELECTED = "selected"; //TODO replace with OrganisationUnitSelectionMode
@@ -88,8 +88,8 @@
         put( DimensionType.DATAELEMENT_GROUPSET, DataElementGroupSet.class );
         put( DimensionType.ORGANISATIONUNIT_GROUPSET, OrganisationUnitGroupSet.class );
         put( DimensionType.CATEGORYOPTION_GROUPSET, CategoryOptionGroupSet.class );
-        put( DimensionType.TRACKED_ENTITY_ATTRIBUTE, TrackedEntityAttribute.class );
-        put( DimensionType.TRACKED_ENTITY_DATAELEMENT, DataElement.class );        
+        put( DimensionType.PROGRAM_ATTRIBUTE, TrackedEntityAttribute.class );
+        put( DimensionType.PROGRAM_DATAELEMENT, DataElement.class );        
     } };
     
     /**

=== modified file 'dhis-2/dhis-api/src/test/java/org/hisp/dhis/common/BaseAnalyticalObjectTest.java'
--- dhis-2/dhis-api/src/test/java/org/hisp/dhis/common/BaseAnalyticalObjectTest.java	2015-02-25 20:40:28 +0000
+++ dhis-2/dhis-api/src/test/java/org/hisp/dhis/common/BaseAnalyticalObjectTest.java	2015-06-18 14:35:18 +0000
@@ -125,7 +125,7 @@
         
         assertNotNull( dim );
         assertEquals( tea.getDimension(), dim.getDimension() );
-        assertEquals( DimensionType.TRACKED_ENTITY_ATTRIBUTE, dim.getDimensionType() );
+        assertEquals( DimensionType.PROGRAM_ATTRIBUTE, dim.getDimensionType() );
         assertEquals( AnalyticsType.EVENT, dim.getAnalyticsType() );
         assertEquals( tead.getFilter(), dim.getFilter() );
     }

=== modified file 'dhis-2/dhis-api/src/test/java/org/hisp/dhis/common/DimensionalObjectTest.java'
--- dhis-2/dhis-api/src/test/java/org/hisp/dhis/common/DimensionalObjectTest.java	2015-02-25 20:40:28 +0000
+++ dhis-2/dhis-api/src/test/java/org/hisp/dhis/common/DimensionalObjectTest.java	2015-06-18 14:35:18 +0000
@@ -44,11 +44,11 @@
     @Test
     public void testGetFilterItemsAsList()
     {
-        BaseDimensionalObject objectA = new BaseDimensionalObject( "dimA", DimensionType.TRACKED_ENTITY_DATAELEMENT, null, null, null, "IN:uidA;uidB;uidC" );
+        BaseDimensionalObject objectA = new BaseDimensionalObject( "dimA", DimensionType.PROGRAM_DATAELEMENT, null, null, null, "IN:uidA;uidB;uidC" );
         List<String> expectedA = new ArrayList<>( Arrays.asList( "uidA", "uidB", "uidC" ) );
         assertEquals( expectedA, objectA.getFilterItemsAsList() );
         
-        BaseDimensionalObject objectB = new BaseDimensionalObject( "dimA", DimensionType.TRACKED_ENTITY_DATAELEMENT, null, null, null, "EQ:uidA" );
+        BaseDimensionalObject objectB = new BaseDimensionalObject( "dimA", DimensionType.PROGRAM_DATAELEMENT, null, null, null, "EQ:uidA" );
         assertEquals( null, objectB.getFilterItemsAsList() );
     }
 }

=== 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-06-18 10:54:01 +0000
+++ dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/DataQueryParams.java	2015-06-18 14:35:18 +0000
@@ -44,6 +44,7 @@
 import static org.hisp.dhis.common.DimensionalObject.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.DimensionalObject.PROGRAM_INDICATOR_DIM_ID;
 import static org.hisp.dhis.common.DimensionalObject.PROGRAM_DATAELEMENT_DIM_ID;
 import static org.hisp.dhis.common.DimensionalObject.PROGRAM_ATTRIBUTE_DIM_ID;
 import static org.hisp.dhis.common.NameableObjectUtils.asList;
@@ -103,7 +104,6 @@
     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";
 
@@ -111,11 +111,11 @@
     public static final int CO_IN_INDEX = 1;
     
     public static final List<String> DATA_DIMS = Arrays.asList( 
-        INDICATOR_DIM_ID, DATAELEMENT_DIM_ID, DATAELEMENT_OPERAND_ID, DATASET_DIM_ID, PROGRAM_DATAELEMENT_DIM_ID, PROGRAM_ATTRIBUTE_DIM_ID );
+        INDICATOR_DIM_ID, DATAELEMENT_DIM_ID, DATAELEMENT_OPERAND_ID, DATASET_DIM_ID, PROGRAM_INDICATOR_DIM_ID, PROGRAM_DATAELEMENT_DIM_ID, PROGRAM_ATTRIBUTE_DIM_ID );
     public static final List<String> FIXED_DIMS = Arrays.asList( 
-        DATA_X_DIM_ID, INDICATOR_DIM_ID, DATAELEMENT_DIM_ID, DATASET_DIM_ID, PROGRAM_DATAELEMENT_DIM_ID, PROGRAM_ATTRIBUTE_DIM_ID, PERIOD_DIM_ID, ORGUNIT_DIM_ID );
+        DATA_X_DIM_ID, INDICATOR_DIM_ID, DATAELEMENT_DIM_ID, DATASET_DIM_ID, PROGRAM_INDICATOR_DIM_ID, PROGRAM_DATAELEMENT_DIM_ID, PROGRAM_ATTRIBUTE_DIM_ID, PERIOD_DIM_ID, ORGUNIT_DIM_ID );
     private static final List<String> DIMENSION_PERMUTATION_IGNORE_DIMS = Arrays.asList( 
-        INDICATOR_DIM_ID, DATAELEMENT_DIM_ID, CATEGORYOPTIONCOMBO_DIM_ID, DATASET_DIM_ID, PROGRAM_DATAELEMENT_DIM_ID, PROGRAM_ATTRIBUTE_DIM_ID );    
+        INDICATOR_DIM_ID, DATAELEMENT_DIM_ID, CATEGORYOPTIONCOMBO_DIM_ID, DATASET_DIM_ID, PROGRAM_INDICATOR_DIM_ID, PROGRAM_DATAELEMENT_DIM_ID, PROGRAM_ATTRIBUTE_DIM_ID );    
     public static final List<DimensionType> COMPLETENESS_DIMENSION_TYPES = Arrays.asList( 
         DATASET, PERIOD, ORGANISATIONUNIT, ORGANISATIONUNIT_GROUPSET, CATEGORYOPTION_GROUPSET );
     private static final List<DimensionType> COMPLETENESS_TARGET_DIMENSION_TYPES = Arrays.asList( 
@@ -286,6 +286,7 @@
         if ( !dimensions.contains( new BaseDimensionalObject( DATAELEMENT_DIM_ID ) ) ||
             dimensions.contains( new BaseDimensionalObject( INDICATOR_DIM_ID ) ) ||
             dimensions.contains( new BaseDimensionalObject( DATASET_DIM_ID ) ) ||
+            dimensions.contains( new BaseDimensionalObject( PROGRAM_INDICATOR_DIM_ID ) ) ||
             dimensions.contains( new BaseDimensionalObject( PROGRAM_DATAELEMENT_DIM_ID ) ) ||
             dimensions.contains( new BaseDimensionalObject( PROGRAM_ATTRIBUTE_DIM_ID ) ) )
         {
@@ -360,6 +361,7 @@
             new BaseDimensionalObject( INDICATOR_DIM_ID ),
             new BaseDimensionalObject( DATAELEMENT_DIM_ID ),
             new BaseDimensionalObject( DATASET_DIM_ID ),
+            new BaseDimensionalObject( PROGRAM_INDICATOR_DIM_ID ),
             new BaseDimensionalObject( PROGRAM_DATAELEMENT_DIM_ID ),
             new BaseDimensionalObject( PROGRAM_ATTRIBUTE_DIM_ID ) ) );
         
@@ -464,7 +466,7 @@
     /**
      * Removes the dimensions with the given identifiers.
      */
-    public DataQueryParams removeDimensions( Set<String> dimension )
+    public DataQueryParams removeDimensions( Collection<String> dimension )
     {
         if ( dimension != null )
         {
@@ -1599,6 +1601,16 @@
         setOrganisationUnits( getList( organisationUnit ) );
     }
 
+    public List<NameableObject> getProgramIndicators()
+    {
+        return getDimensionOptions( PROGRAM_INDICATOR_DIM_ID );
+    }
+
+    public void setProgramIndicators( List<? extends NameableObject> programIndicators )
+    {
+        setDimensionOptions( PROGRAM_INDICATOR_DIM_ID, DimensionType.PROGRAM_INDICATOR, null, asList( programIndicators ) );
+    }
+    
     public List<NameableObject> getProgramDataElements()
     {
         return getDimensionOptions( PROGRAM_DATAELEMENT_DIM_ID );

=== 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-06-18 10:54:01 +0000
+++ dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/data/DefaultAnalyticsService.java	2015-06-18 14:35:18 +0000
@@ -32,16 +32,15 @@
 import static org.hisp.dhis.analytics.AnalyticsTableManager.COMPLETENESS_TABLE_NAME;
 import static org.hisp.dhis.analytics.AnalyticsTableManager.COMPLETENESS_TARGET_TABLE_NAME;
 import static org.hisp.dhis.analytics.AnalyticsTableManager.ORGUNIT_TARGET_TABLE_NAME;
+import static org.hisp.dhis.analytics.DataQueryParams.COMPLETENESS_DIMENSION_TYPES;
 import static org.hisp.dhis.analytics.DataQueryParams.DISPLAY_NAME_CATEGORYOPTIONCOMBO;
 import static org.hisp.dhis.analytics.DataQueryParams.DISPLAY_NAME_DATA_X;
 import static org.hisp.dhis.analytics.DataQueryParams.DISPLAY_NAME_LATITUDE;
 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.DX_INDEX;
 import static org.hisp.dhis.analytics.DataQueryParams.KEY_DE_GROUP;
-import static org.hisp.dhis.analytics.DataQueryParams.COMPLETENESS_DIMENSION_TYPES;
-import static org.hisp.dhis.analytics.DataQueryParams.DX_INDEX;
 import static org.hisp.dhis.common.DimensionalObject.CATEGORYOPTIONCOMBO_DIM_ID;
 import static org.hisp.dhis.common.DimensionalObject.DATAELEMENT_DIM_ID;
 import static org.hisp.dhis.common.DimensionalObject.DATASET_DIM_ID;
@@ -52,9 +51,9 @@
 import static org.hisp.dhis.common.DimensionalObject.LONGITUDE_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.DimensionalObject.PROGRAM_ATTRIBUTE_DIM_ID;
+import static org.hisp.dhis.common.DimensionalObject.PROGRAM_DATAELEMENT_DIM_ID;
 import static org.hisp.dhis.common.DimensionalObject.PROGRAM_INDICATOR_DIM_ID;
-import static org.hisp.dhis.common.DimensionalObject.PROGRAM_DATAELEMENT_DIM_ID;
-import static org.hisp.dhis.common.DimensionalObject.PROGRAM_ATTRIBUTE_DIM_ID;
 import static org.hisp.dhis.common.DimensionalObjectUtils.toDimension;
 import static org.hisp.dhis.common.IdentifiableObjectUtils.getLocalPeriodIdentifier;
 import static org.hisp.dhis.common.IdentifiableObjectUtils.getLocalPeriodIdentifiers;
@@ -115,6 +114,9 @@
 import org.hisp.dhis.common.MapMap;
 import org.hisp.dhis.common.NameableObject;
 import org.hisp.dhis.common.NameableObjectUtils;
+import org.hisp.dhis.commons.collection.ListUtils;
+import org.hisp.dhis.commons.collection.UniqueArrayList;
+import org.hisp.dhis.commons.util.DebugUtils;
 import org.hisp.dhis.constant.ConstantService;
 import org.hisp.dhis.dataelement.CategoryOptionGroup;
 import org.hisp.dhis.dataelement.CategoryOptionGroupSet;
@@ -148,14 +150,11 @@
 import org.hisp.dhis.setting.SystemSettingManager;
 import org.hisp.dhis.system.grid.ListGrid;
 import org.hisp.dhis.system.util.MathUtils;
+import org.hisp.dhis.system.util.SystemUtils;
+import org.hisp.dhis.trackedentity.TrackedEntityAttribute;
 import org.hisp.dhis.user.CurrentUserService;
 import org.hisp.dhis.user.User;
-import org.hisp.dhis.commons.util.DebugUtils;
-import org.hisp.dhis.commons.collection.ListUtils;
-import org.hisp.dhis.system.util.SystemUtils;
-import org.hisp.dhis.trackedentity.TrackedEntityAttribute;
 import org.hisp.dhis.util.Timer;
-import org.hisp.dhis.commons.collection.UniqueArrayList;
 import org.springframework.beans.factory.annotation.Autowired;
 
 import com.google.common.collect.Lists;
@@ -298,7 +297,7 @@
         if ( !params.getIndicators().isEmpty() )
         {
             DataQueryParams dataSourceParams = params.instance();
-            dataSourceParams.removeDimensions( DATAELEMENT_DIM_ID, DATASET_DIM_ID, PROGRAM_DATAELEMENT_DIM_ID, PROGRAM_ATTRIBUTE_DIM_ID );
+            dataSourceParams.removeDimensions( DATAELEMENT_DIM_ID, DATASET_DIM_ID, PROGRAM_INDICATOR_DIM_ID, PROGRAM_DATAELEMENT_DIM_ID, PROGRAM_ATTRIBUTE_DIM_ID );
 
             List<Indicator> indicators = asTypedList( dataSourceParams.getIndicators() );
 
@@ -368,7 +367,7 @@
         if ( !params.getDataElements().isEmpty() )
         {
             DataQueryParams dataSourceParams = params.instance();
-            dataSourceParams.removeDimensions( INDICATOR_DIM_ID, DATASET_DIM_ID, PROGRAM_DATAELEMENT_DIM_ID, PROGRAM_ATTRIBUTE_DIM_ID );
+            dataSourceParams.removeDimensions( INDICATOR_DIM_ID, DATASET_DIM_ID, PROGRAM_INDICATOR_DIM_ID, PROGRAM_DATAELEMENT_DIM_ID, PROGRAM_ATTRIBUTE_DIM_ID );
 
             Map<String, Object> aggregatedDataMap = getAggregatedDataValueMapObjectTyped( dataSourceParams );
 
@@ -398,7 +397,7 @@
 
             DataQueryParams dataSourceParams = params.instance();
             dataSourceParams.ignoreDataApproval(); // No approval for reporting rates
-            dataSourceParams.removeDimensions( INDICATOR_DIM_ID, DATAELEMENT_DIM_ID, PROGRAM_DATAELEMENT_DIM_ID, PROGRAM_ATTRIBUTE_DIM_ID );
+            dataSourceParams.removeDimensions( INDICATOR_DIM_ID, DATAELEMENT_DIM_ID, PROGRAM_INDICATOR_DIM_ID, PROGRAM_DATAELEMENT_DIM_ID, PROGRAM_ATTRIBUTE_DIM_ID );
             dataSourceParams.setAggregationType( AggregationType.COUNT );
 
             if ( !COMPLETENESS_DIMENSION_TYPES.containsAll( dataSourceParams.getDimensionTypes() ) )
@@ -972,6 +971,7 @@
             List<NameableObject> dataElements = new ArrayList<>();
             List<NameableObject> dataSets = new ArrayList<>();
             List<NameableObject> operandDataElements = new ArrayList<>();
+            List<NameableObject> programIndicators = new ArrayList<>();
             List<NameableObject> programDataElements = new ArrayList<>();
             List<NameableObject> programAttributes = new ArrayList<>();
 
@@ -1007,7 +1007,8 @@
                     dataElements.add( de );
                     continue itemLoop;
                 }
-                else if ( de != null && DataElementDomain.TRACKER.equals( de.getDomainType() ) )
+                
+                if ( de != null && DataElementDomain.TRACKER.equals( de.getDomainType() ) )
                 {
                     programDataElements.add( de );
                     continue itemLoop;
@@ -1029,6 +1030,14 @@
                     continue itemLoop;
                 }
                 
+                ProgramIndicator pi = idObjectManager.get( ProgramIndicator.class, uid );
+                
+                if ( pi != null )
+                {
+                    programIndicators.add( pi );
+                    continue itemLoop;
+                }
+                
                 TrackedEntityAttribute pa = idObjectManager.get( TrackedEntityAttribute.class, uid );
                 
                 if ( pa != null )
@@ -1069,6 +1078,11 @@
                 dataDimensions.add( new BaseDimensionalObject( CATEGORYOPTIONCOMBO_DIM_ID, DimensionType.CATEGORY_OPTION_COMBO, new ArrayList<NameableObject>() ) );
             }
             
+            if ( !programIndicators.isEmpty() )
+            {
+                dataDimensions.add( new BaseDimensionalObject( PROGRAM_INDICATOR_DIM_ID, DimensionType.PROGRAM_INDICATOR, programIndicators ) );
+            }
+            
             if ( !programDataElements.isEmpty() )
             {
                 dataDimensions.add( new BaseDimensionalObject( PROGRAM_DATAELEMENT_DIM_ID, DimensionType.PROGRAM_DATAELEMENT, programDataElements ) );
@@ -1079,7 +1093,8 @@
                 dataDimensions.add( new BaseDimensionalObject( PROGRAM_ATTRIBUTE_DIM_ID, DimensionType.PROGRAM_ATTRIBUTE, programAttributes ) );
             }
             
-            if ( indicators.isEmpty() && dataElements.isEmpty() && dataSets.isEmpty() && operandDataElements.isEmpty() && programDataElements.isEmpty() && programAttributes.isEmpty() )
+            if ( indicators.isEmpty() && dataElements.isEmpty() && dataSets.isEmpty() && operandDataElements.isEmpty() && 
+                programDataElements.isEmpty() && programAttributes.isEmpty() && programIndicators.isEmpty() )
             {
                 throw new IllegalQueryException( "Dimension dx is present in query without any valid dimension options" );
             }
@@ -1227,15 +1242,6 @@
             return Lists.newArrayList( object );
         }
 
-        if ( PROGRAM_INDICATOR_DIM_ID.equals( dimension ) )
-        {
-            List<ProgramIndicator> indicators = idObjectManager.getByUid( ProgramIndicator.class, items );
-            
-            DimensionalObject object = new BaseDimensionalObject( PROGRAM_INDICATOR_DIM_ID, DimensionType.PROGRAM_INDICATOR, null, DISPLAY_NAME_PROGRAM_INDICATOR, indicators );
-            
-            return Lists.newArrayList( object );
-        }
-        
         if ( LONGITUDE_DIM_ID.contains( dimension ) )
         {
             DimensionalObject object = new BaseDimensionalObject( dimension, DimensionType.STATIC, null, DISPLAY_NAME_LONGITUDE, new ArrayList<NameableObject>() );
@@ -1340,8 +1346,7 @@
 
         if ( !dataElements.isEmpty() )
         {
-            DataQueryParams dataSourceParams = params.instance().removeDimensions( 
-                INDICATOR_DIM_ID, DATAELEMENT_DIM_ID, DATASET_DIM_ID, PROGRAM_DATAELEMENT_DIM_ID, PROGRAM_ATTRIBUTE_DIM_ID );
+            DataQueryParams dataSourceParams = params.instance().removeDimensions( DataQueryParams.DATA_DIMS );
             
             dataSourceParams.getDimensions().add( DX_INDEX, new BaseDimensionalObject( 
                 DATAELEMENT_DIM_ID, DimensionType.DATAELEMENT, dataElements ) );
@@ -1367,8 +1372,7 @@
 
         if ( !dataElements.isEmpty() )
         {
-            DataQueryParams dataSourceParams = params.instance().removeDimensions( 
-                INDICATOR_DIM_ID, DATAELEMENT_DIM_ID, DATASET_DIM_ID, PROGRAM_DATAELEMENT_DIM_ID, PROGRAM_ATTRIBUTE_DIM_ID );
+            DataQueryParams dataSourceParams = params.instance().removeDimensions( DataQueryParams.DATA_DIMS );
             
             dataSourceParams.getDimensions().add( DataQueryParams.DX_INDEX, new BaseDimensionalObject( 
                 DATAELEMENT_DIM_ID, DimensionType.DATAELEMENT, dataElements ) );

=== modified file 'dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/dimension/DefaultDimensionService.java'
--- dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/dimension/DefaultDimensionService.java	2015-06-15 13:44:20 +0000
+++ dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/dimension/DefaultDimensionService.java	2015-06-18 14:35:18 +0000
@@ -47,6 +47,7 @@
 import org.hisp.dhis.dataelement.DataElementCategoryDimension;
 import org.hisp.dhis.dataelement.DataElementCategoryOption;
 import org.hisp.dhis.dataelement.DataElementCategoryService;
+import org.hisp.dhis.dataelement.DataElementDomain;
 import org.hisp.dhis.dataelement.DataElementGroup;
 import org.hisp.dhis.dataelement.DataElementGroupSet;
 import org.hisp.dhis.dataelement.DataElementOperandService;
@@ -155,16 +156,16 @@
         
         if ( tea != null )
         {
-            tea.setDimensionType( DimensionType.TRACKED_ENTITY_ATTRIBUTE );
+            tea.setDimensionType( DimensionType.PROGRAM_ATTRIBUTE );
             return tea;
         }
         
-        DataElement tde = identifiableObjectManager.get( DataElement.class, uid );
+        DataElement pde = identifiableObjectManager.get( DataElement.class, uid );
         
-        if ( tde != null )
+        if ( pde != null && DataElementDomain.TRACKER.equals( pde.getDomainType() ) )
         {
-            tde.setDimensionType( DimensionType.TRACKED_ENTITY_DATAELEMENT );
-            return tde;
+            pde.setDimensionType( DimensionType.PROGRAM_DATAELEMENT );
+            return pde;
         }
         
         return null;
@@ -267,14 +268,14 @@
         
         if ( tea != null )
         {
-            return DimensionType.TRACKED_ENTITY_ATTRIBUTE;
+            return DimensionType.PROGRAM_ATTRIBUTE;
         }
         
-        DataElement de = identifiableObjectManager.get( DataElement.class, uid );
+        DataElement pde = identifiableObjectManager.get( DataElement.class, uid );
         
-        if ( de != null )
+        if ( pde != null && DataElementDomain.TRACKER.equals( pde.getDomainType() ) )
         {
-            return DimensionType.TRACKED_ENTITY_DATAELEMENT;
+            return DimensionType.PROGRAM_DATAELEMENT;
         }
 
         final Map<String, DimensionType> dimObjectTypeMap = new HashMap<>();
@@ -533,7 +534,7 @@
                 {
                     object.getCategoryOptionGroups().addAll( identifiableObjectManager.getByUidOrdered( CategoryOptionGroup.class, uids ) );
                 }
-                else if ( TRACKED_ENTITY_ATTRIBUTE.equals( type ) )
+                else if ( PROGRAM_ATTRIBUTE.equals( type ) )
                 {
                     TrackedEntityAttributeDimension attributeDimension = new TrackedEntityAttributeDimension();
                     attributeDimension.setAttribute( identifiableObjectManager.get( TrackedEntityAttribute.class, dimensionId ) );
@@ -542,7 +543,7 @@
                     
                     object.getAttributeDimensions().add( attributeDimension );
                 }
-                else if ( TRACKED_ENTITY_DATAELEMENT.equals( type ) )
+                else if ( PROGRAM_DATAELEMENT.equals( type ) )
                 {
                     TrackedEntityDataElementDimension dataElementDimension = new TrackedEntityDataElementDimension();
                     dataElementDimension.setDataElement( identifiableObjectManager.get( DataElement.class, dimensionId ) );

=== 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-06-17 14:52:34 +0000
+++ dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/event/EventQueryParams.java	2015-06-18 14:35:18 +0000
@@ -29,9 +29,8 @@
  */
 
 import static org.hisp.dhis.common.DimensionalObject.PERIOD_DIM_ID;
-import static org.hisp.dhis.common.DimensionalObject.PROGRAM_INDICATOR_DIM_ID;
+import static org.hisp.dhis.common.DimensionalObject.PROGRAM_ATTRIBUTE_DIM_ID;
 import static org.hisp.dhis.common.DimensionalObject.PROGRAM_DATAELEMENT_DIM_ID;
-import static org.hisp.dhis.common.DimensionalObject.PROGRAM_ATTRIBUTE_DIM_ID;
 
 import java.util.ArrayList;
 import java.util.Date;
@@ -47,13 +46,13 @@
 import org.hisp.dhis.common.NameableObject;
 import org.hisp.dhis.common.NameableObjectUtils;
 import org.hisp.dhis.common.QueryItem;
+import org.hisp.dhis.commons.collection.ListUtils;
 import org.hisp.dhis.dataelement.DataElement;
 import org.hisp.dhis.legend.Legend;
 import org.hisp.dhis.option.OptionSet;
 import org.hisp.dhis.organisationunit.OrganisationUnit;
 import org.hisp.dhis.period.Period;
 import org.hisp.dhis.trackedentity.TrackedEntityAttribute;
-import org.hisp.dhis.commons.collection.ListUtils;
 
 /**
  * @author Lars Helge Overland
@@ -296,17 +295,6 @@
         return !items.isEmpty() || !itemFilters.isEmpty();
     }
 
-    /**
-     * Indicates whether program indicators are present as dimension or filter.
-     */
-    public boolean hasProgramIndicators()
-    {
-        List<NameableObject> dimOpts = getDimensionOptions( PROGRAM_INDICATOR_DIM_ID );
-        List<NameableObject> 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-06-14 17:51:03 +0000
+++ dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/event/data/DefaultEventQueryPlanner.java	2015-06-18 14:35:18 +0000
@@ -124,11 +124,6 @@
             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();

=== modified file 'dhis-2/dhis-services/dhis-service-analytics/src/test/java/org/hisp/dhis/analytics/event/data/EventAnalyticsServiceTest.java'
--- dhis-2/dhis-services/dhis-service-analytics/src/test/java/org/hisp/dhis/analytics/event/data/EventAnalyticsServiceTest.java	2015-06-13 21:26:59 +0000
+++ dhis-2/dhis-services/dhis-service-analytics/src/test/java/org/hisp/dhis/analytics/event/data/EventAnalyticsServiceTest.java	2015-06-18 14:35:18 +0000
@@ -312,7 +312,7 @@
         
         assertNotNull( dim );
         assertEquals( tea.getDimension(), dim.getDimension() );
-        assertEquals( DimensionType.TRACKED_ENTITY_ATTRIBUTE, dim.getDimensionType() );
+        assertEquals( DimensionType.PROGRAM_ATTRIBUTE, dim.getDimensionType() );
         assertEquals( AnalyticsType.EVENT, dim.getAnalyticsType() );
         assertEquals( tead.getFilter(), dim.getFilter() );
         

=== modified file 'dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/adx/DefaultADXDataService.java'
--- dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/adx/DefaultADXDataService.java	2015-06-18 13:24:57 +0000
+++ dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/adx/DefaultADXDataService.java	2015-06-18 14:35:18 +0000
@@ -32,27 +32,37 @@
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.io.StringWriter;
+import java.nio.charset.StandardCharsets;
 import java.util.HashMap;
 import java.util.Map;
+
 import org.apache.commons.io.IOUtils;
+
 import java.util.logging.Level;
 import java.util.logging.Logger;
+
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
+
 import org.w3c.dom.Document;
+
 import static javax.xml.stream.XMLStreamConstants.START_ELEMENT;
+
 import javax.xml.stream.XMLStreamException;
+
 import org.amplecode.staxwax.factory.XMLFactory;
 import org.hisp.dhis.dxf2.common.ImportOptions;
 import org.hisp.dhis.dxf2.datavalueset.DataExportParams;
 import org.hisp.dhis.dxf2.datavalueset.DataValueSetService;
 import org.hisp.dhis.dxf2.importsummary.ImportSummaries;
 import org.amplecode.staxwax.reader.XMLReader;
+
 import javax.xml.stream.XMLStreamReader;
 import javax.xml.transform.Transformer;
 import javax.xml.transform.TransformerFactory;
 import javax.xml.transform.dom.DOMSource;
 import javax.xml.transform.stream.StreamResult;
+
 import org.hisp.dhis.dxf2.importsummary.ImportStatus;
 import org.hisp.dhis.dxf2.importsummary.ImportSummary;
 import org.hisp.dhis.period.Period;
@@ -106,7 +116,7 @@
                 StreamResult result = new StreamResult(writer);
                 transformer.transform( source, result );
                 // create an inputstream for the String
-                InputStream dxfIn = IOUtils.toInputStream(result.toString(), "UTF-8" );
+                InputStream dxfIn = IOUtils.toInputStream( result.toString(), StandardCharsets.UTF_8 );
                 
                 // pass off to the dxf2 datavalueset service
                 importSummaries.addImportSummary( dataValueSetService.saveDataValueSet( dxfIn, importOptions ) );