private QueryItem getQueryItemFromDimension( String dimension, Program program ) { String[] split = dimension.split( ITEM_SEP ); String item = split[0]; LegendSet legendSet = split.length > 1 && split[1] != null ? legendSetService.getLegendSet( split[1] ) : null; DataElement de = dataElementService.getDataElement( item ); if ( de != null && program.containsDataElement( de ) ) { ValueType valueType = legendSet != null ? ValueType.TEXT : de.getValueType(); return new QueryItem( de, legendSet, valueType, de.getAggregationType(), de.getOptionSet() ); } TrackedEntityAttribute at = attributeService.getTrackedEntityAttribute( item ); if ( at != null && program.containsAttribute( at ) ) { ValueType valueType = legendSet != null ? ValueType.TEXT : at.getValueType(); return new QueryItem( at, legendSet, valueType, at.getAggregationType(), at.getOptionSet() ); } ProgramIndicator pi = programIndicatorService.getProgramIndicatorByUid( item ); if ( pi != null && program.getProgramIndicators().contains( pi ) ) { return new QueryItem( pi, legendSet, ValueType.NUMBER, pi.getAggregationType(), null ); } throw new IllegalQueryException( "Item identifier does not reference any data element, attribute or indicator part of the program: " + item ); }