=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/Grid.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/Grid.java 2013-12-31 09:05:21 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/Grid.java 2014-01-07 15:52:34 +0000 @@ -219,6 +219,13 @@ Grid removeCurrentWriteRow(); /** + * Indicates whether meta data exists and contains the given key. + * + * @param key the meta data key. + */ + boolean hasMetaDataKey( String key ); + + /** * Limits the grid from top by the given argument number. * * @param limit the top limit, must be greater than zero to have an effect. @@ -283,6 +290,15 @@ Grid substituteMetaData( Map metaDataMap ); /** + * Substitutes the values in the meta columns with the mapped value in the + * meta-data map for the column with the given index. + * + * @param columnIndex the index of the column to substitute. + * @param metaDataMap meta-data map of keys and substitutions. + */ + Grid substituteMetaData( int columnIndex, Map metaDataMap ); + + /** * Adds a set of headers based on the column names of the given SQL result set. * * @param rs the result set. === modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/organisationunit/OrganisationUnit.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/organisationunit/OrganisationUnit.java 2013-11-28 13:52:05 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/organisationunit/OrganisationUnit.java 2014-01-07 15:52:34 +0000 @@ -631,6 +631,25 @@ return builder.toString(); } + public String getParentNameGraph( boolean includeThis ) + { + StringBuilder builder = new StringBuilder(); + + List ancestors = getAncestors(); + + for ( OrganisationUnit unit : ancestors ) + { + builder.append( "/" ).append( unit.getName() ); + } + + if ( includeThis ) + { + builder.append( "/" ).append( name ); + } + + return builder.toString(); + } + public Set getAllDataSets() { Set allDataSets = new HashSet( dataSets ); @@ -662,6 +681,25 @@ return map; } + /** + * Returns a mapping between the uid and the uid parent graph of the given + * organisation units. + */ + public static Map getParentNameGraphMap( List organisationUnits, boolean includeThis ) + { + Map map = new HashMap(); + + if ( organisationUnits != null ) + { + for ( OrganisationUnit unit : organisationUnits ) + { + map.put( unit.getName(), unit.getParentNameGraph( includeThis ) ); + } + } + + return map; + } + // ------------------------------------------------------------------------- // Getters and setters // ------------------------------------------------------------------------- === modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/reporttable/ReportTable.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/reporttable/ReportTable.java 2013-12-31 09:05:21 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/reporttable/ReportTable.java 2014-01-07 15:52:34 +0000 @@ -573,6 +573,7 @@ * @param paramColumns whether to include report parameter columns. * @return a grid. */ + @SuppressWarnings("unchecked") public Grid getGrid( Grid grid, Map valueMap, boolean paramColumns ) { valueMap = new HashMap( valueMap ); @@ -704,6 +705,17 @@ grid.limitGrid( topLimit ); } + // --------------------------------------------------------------------- + // Show hierarchy option + // --------------------------------------------------------------------- + + if ( showHierarchy && rowDimensions.indexOf( ORGUNIT_DIM_ID ) != -1 && grid.hasMetaDataKey( "ouNameHierarchy" ) ) + { + int ouNameIndex = ( rowDimensions.indexOf( ORGUNIT_DIM_ID ) * 4 ) + 1; // Ou name position + Map hierarchyNameMap = (Map) grid.getMetaData().get( "ouNameHierarchy" ); + grid.substituteMetaData( ouNameIndex, hierarchyNameMap ); + } + return grid; } === modified file 'dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/AnalyticsService.java' --- dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/AnalyticsService.java 2013-12-31 09:05:21 +0000 +++ dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/AnalyticsService.java 2014-01-07 15:52:34 +0000 @@ -96,6 +96,7 @@ final String NAMES_META_KEY = "names"; final String PAGER_META_KEY = "pager"; final String OU_HIERARCHY_KEY = "ouHierarchy"; + final String OU_NAME_HIERARCHY_KEY = "ouNameHierarchy"; /** * Generates aggregated values for the given query. @@ -153,11 +154,12 @@ * in the hierarchy. * @param ignoreLimit whether to ignore the max number of cells limit. * @param hideEmptyRows whether to hide rows without data values, applis to table layout. + * @param showHierarchy whether to show the org unit hierarchy together with the name. * @param format the i18n format. * @return a data query parameter object created based on the given URL info. */ - DataQueryParams getFromUrl( Set dimensionParams, Set filterParams, AggregationType aggregationType, - String measureCriteria, boolean skipMeta, boolean skipRounding, boolean hierarchyMeta, boolean ignoreLimit, boolean hideEmptyRows, I18nFormat format ); + DataQueryParams getFromUrl( Set dimensionParams, Set filterParams, AggregationType aggregationType, String measureCriteria, + boolean skipMeta, boolean skipRounding, boolean hierarchyMeta, boolean ignoreLimit, boolean hideEmptyRows, boolean showHierarchy, I18nFormat format ); /** * Creates a data query parameter object from the given BaseAnalyticalObject. === 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-12-31 09:18:11 +0000 +++ dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/DataQueryParams.java 2014-01-07 15:52:34 +0000 @@ -142,6 +142,12 @@ */ private boolean hideEmptyRows; + /** + * Indicates whether the org unit hierarchy path should be displayed with the + * org unit names on rows. + */ + private boolean showHierarchy; + // ------------------------------------------------------------------------- // Transient properties // ------------------------------------------------------------------------- @@ -1117,6 +1123,16 @@ this.hideEmptyRows = hideEmptyRows; } + public boolean isShowHierarchy() + { + return showHierarchy; + } + + public void setShowHierarchy( boolean showHierarchy ) + { + this.showHierarchy = showHierarchy; + } + // ------------------------------------------------------------------------- // Get and set methods for transient properties // ------------------------------------------------------------------------- === 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 2013-12-31 09:05:21 +0000 +++ dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/data/DefaultAnalyticsService.java 2014-01-07 15:52:34 +0000 @@ -56,6 +56,7 @@ import static org.hisp.dhis.organisationunit.OrganisationUnit.KEY_USER_ORGUNIT_CHILDREN; import static org.hisp.dhis.organisationunit.OrganisationUnit.KEY_USER_ORGUNIT_GRANDCHILDREN; import static org.hisp.dhis.organisationunit.OrganisationUnit.getParentGraphMap; +import static org.hisp.dhis.organisationunit.OrganisationUnit.getParentNameGraphMap; import static org.hisp.dhis.period.PeriodType.getPeriodTypeFromIsoString; import static org.hisp.dhis.reporttable.ReportTable.IRT2D; import static org.hisp.dhis.reporttable.ReportTable.addIfEmpty; @@ -401,6 +402,11 @@ metaData.put( OU_HIERARCHY_KEY, getParentGraphMap( asTypedList( params.getDimensionOrFilter( ORGUNIT_DIM_ID ), OrganisationUnit.class ) ) ); } + if ( params.isShowHierarchy() ) + { + metaData.put( OU_NAME_HIERARCHY_KEY, getParentNameGraphMap( asTypedList( params.getDimensionOrFilter( ORGUNIT_DIM_ID ), OrganisationUnit.class ), true ) ); + } + grid.setMetaData( metaData ); } @@ -420,8 +426,6 @@ queryPlanner.validateTableLayout( params, columns, rows ); - Map valueMap = getAggregatedDataValueMapping( params ); - ReportTable reportTable = new ReportTable(); List tableColumns = new ArrayList(); @@ -455,8 +459,13 @@ reportTable.setTitle( IdentifiableObjectUtils.join( params.getFilterItems() ) ); reportTable.setHideEmptyRows( params.isHideEmptyRows() ); - - return reportTable.getGrid( new ListGrid(), valueMap, false ); + reportTable.setShowHierarchy( params.isShowHierarchy() ); + + Grid grid = getAggregatedDataValues( params ); + + Map valueMap = getAggregatedDataValueMapping( grid ); + + return reportTable.getGrid( new ListGrid( grid.getMetaData() ), valueMap, false ); } @Override @@ -464,6 +473,19 @@ { Grid grid = getAggregatedDataValues( params ); + return getAggregatedDataValueMapping( grid ); + } + + /** + * Generates a mapping where the key represents the dimensional item identifiers + * concatenated by "-" and the value is the corresponding aggregated data value + * based on the given grid. + * + * @param grid the grid. + * @return a mapping between item identifiers and aggregated values. + */ + private Map getAggregatedDataValueMapping( Grid grid ) + { Map map = new HashMap(); int metaCols = grid.getWidth() - 1; @@ -588,7 +610,7 @@ @Override public DataQueryParams getFromUrl( Set dimensionParams, Set filterParams, AggregationType aggregationType, - String measureCriteria, boolean skipMeta, boolean skipRounding, boolean hierarchyMeta, boolean ignoreLimit, boolean hideEmptyRows, I18nFormat format ) + String measureCriteria, boolean skipMeta, boolean skipRounding, boolean hierarchyMeta, boolean ignoreLimit, boolean hideEmptyRows, boolean showHierarchy, I18nFormat format ) { DataQueryParams params = new DataQueryParams(); @@ -632,6 +654,7 @@ params.setSkipRounding( skipRounding ); params.setHierarchyMeta( hierarchyMeta ); params.setHideEmptyRows( hideEmptyRows ); + params.setShowHierarchy( showHierarchy ); return params; } === modified file 'dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/data/MockAnalyticsService.java' --- dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/data/MockAnalyticsService.java 2013-12-31 09:05:21 +0000 +++ dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/data/MockAnalyticsService.java 2014-01-07 15:52:34 +0000 @@ -81,7 +81,7 @@ @Override public DataQueryParams getFromUrl( Set dimensionParams, Set filterParams, AggregationType aggregationType, - String measureCriteria, boolean skipMeta, boolean skipRounding, boolean hierarchyMeta, boolean hideEmptyRows, boolean ignoreLimit, I18nFormat format ) + String measureCriteria, boolean skipMeta, boolean skipRounding, boolean hierarchyMeta, boolean ignoreLimit, boolean hideEmptyRows, boolean showHierarchy, I18nFormat format ) { throw new NotImplementedException(); } === modified file 'dhis-2/dhis-services/dhis-service-analytics/src/test/java/org/hisp/dhis/analytics/data/AnalyticsServiceTest.java' --- dhis-2/dhis-services/dhis-service-analytics/src/test/java/org/hisp/dhis/analytics/data/AnalyticsServiceTest.java 2013-12-31 09:05:21 +0000 +++ dhis-2/dhis-services/dhis-service-analytics/src/test/java/org/hisp/dhis/analytics/data/AnalyticsServiceTest.java 2014-01-07 15:52:34 +0000 @@ -164,7 +164,7 @@ Set filterParams = new HashSet(); filterParams.add( "ou:" + ouA.getUid() + ";" + ouB.getUid() + ";" + ouC.getUid() + ";" + ouD.getUid() + ";" + ouE.getUid() ); - DataQueryParams params = analyticsService.getFromUrl( dimensionParams, filterParams, null, null, false, false, false, false, false, null ); + DataQueryParams params = analyticsService.getFromUrl( dimensionParams, filterParams, null, null, false, false, false, false, false, false, null ); assertEquals( 4, params.getDataElements().size() ); assertEquals( 3, params.getPeriods().size() ); @@ -181,7 +181,7 @@ Set filterParams = new HashSet(); filterParams.add( "ou:" + ouA.getUid() ); - DataQueryParams params = analyticsService.getFromUrl( dimensionParams, filterParams, null, null, false, false, false, false, false, null ); + DataQueryParams params = analyticsService.getFromUrl( dimensionParams, filterParams, null, null, false, false, false, false, false, false, null ); assertEquals( 4, params.getDataElements().size() ); assertEquals( 1, params.getFilterOrganisationUnits().size() ); @@ -197,7 +197,7 @@ Set filterParams = new HashSet(); filterParams.add( "ou:" + ouA.getUid() + ";" + ouB.getUid() ); - DataQueryParams params = analyticsService.getFromUrl( dimensionParams, filterParams, null, null, false, false, false, false, false, null ); + DataQueryParams params = analyticsService.getFromUrl( dimensionParams, filterParams, null, null, false, false, false, false, false, false, null ); assertEquals( 4, params.getDataElements().size() ); assertEquals( 12, params.getPeriods().size() ); @@ -212,7 +212,7 @@ dimensionParams.add( "dx:" + deA.getUid() + ";" + deB.getUid() ); dimensionParams.add( "pe:2011;2012" ); - DataQueryParams params = analyticsService.getFromUrl( dimensionParams, null, null, null, false, false, false, false, false, null ); + DataQueryParams params = analyticsService.getFromUrl( dimensionParams, null, null, null, false, false, false, false, false, false, null ); assertEquals( 1, params.getOrganisationUnits().size() ); assertEquals( 2, params.getDataElements().size() ); @@ -227,7 +227,7 @@ dimensionParams.add( "dx:" + deA.getUid() + ";" + deB.getUid() ); dimensionParams.add( "pe:2011;2012" ); - DataQueryParams params = analyticsService.getFromUrl( dimensionParams, null, null, null, false, false, false, false, false, null ); + DataQueryParams params = analyticsService.getFromUrl( dimensionParams, null, null, null, false, false, false, false, false, false, null ); assertEquals( 2, params.getOrganisationUnits().size() ); assertEquals( 2, params.getDataElements().size() ); @@ -241,7 +241,7 @@ dimensionParams.add( "dx" ); dimensionParams.add( "pe:2012,2012S1,2012S2" ); - analyticsService.getFromUrl( dimensionParams, null, null, null, false, false, false, false, false, null ); + analyticsService.getFromUrl( dimensionParams, null, null, null, false, false, false, false, false, false, null ); } @Test( expected = IllegalQueryException.class ) @@ -251,7 +251,7 @@ dimensionParams.add( "dx:" + BASE_UID + "A;" + BASE_UID + "B;" + BASE_UID + "C;" + BASE_UID + "D" ); dimensionParams.add( "pe" ); - analyticsService.getFromUrl( dimensionParams, null, null, null, false, false, false, false, false, null ); + analyticsService.getFromUrl( dimensionParams, null, null, null, false, false, false, false, false, false, null ); } @Test( expected = IllegalQueryException.class ) @@ -261,7 +261,7 @@ dimensionParams.add( "dx:" + BASE_UID + "A;" + BASE_UID + "B;" + BASE_UID + "C;" + BASE_UID + "D" ); dimensionParams.add( "ou" ); - analyticsService.getFromUrl( dimensionParams, null, null, null, false, false, false, false, false, null ); + analyticsService.getFromUrl( dimensionParams, null, null, null, false, false, false, false, false, false, null ); } @Test( expected = IllegalQueryException.class ) @@ -271,7 +271,7 @@ dimensionParams.add( "dx:" + BASE_UID + "A;" + BASE_UID + "B;" + BASE_UID + "C;" + BASE_UID + "D" ); dimensionParams.add( "yebo:2012,2012S1,2012S2" ); - analyticsService.getFromUrl( dimensionParams, null, null, null, false, false, false, false, false, null ); + analyticsService.getFromUrl( dimensionParams, null, null, null, false, false, false, false, false, false, null ); } @Test === modified file 'dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/grid/ListGrid.java' --- dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/grid/ListGrid.java 2013-12-31 09:05:21 +0000 +++ dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/grid/ListGrid.java 2014-01-07 15:52:34 +0000 @@ -116,9 +116,19 @@ */ public ListGrid() { - headers = new ArrayList(); - metaData = new HashMap(); - grid = new ArrayList>(); + this.headers = new ArrayList(); + this.metaData = new HashMap(); + this.grid = new ArrayList>(); + } + + /** + * @param metaData meta data. + */ + public ListGrid( Map metaData ) + { + this.headers = new ArrayList(); + this.metaData = metaData; + this.grid = new ArrayList>(); } // --------------------------------------------------------------------- @@ -424,6 +434,11 @@ return this; } + public boolean hasMetaDataKey( String key ) + { + return metaData != null && metaData.containsKey( key ); + } + public Grid limitGrid( int limit ) { if ( limit < 0 ) @@ -611,24 +626,36 @@ { // Column cells - List col = getColumn( colIndex ); - - for ( int rowIndex = 0; rowIndex < col.size(); rowIndex++ ) - { - Object object = col.get( rowIndex ); - - Object meta = metaDataMap.get( object ); - - if ( meta != null ) - { - grid.get( rowIndex ).set( colIndex, meta ); - } - } + substituteMetaData( colIndex, metaDataMap ); } } return this; } + + public Grid substituteMetaData( int columnIndex, Map metaDataMap ) + { + if ( metaDataMap == null ) + { + return this; + } + + List col = getColumn( columnIndex ); + + for ( int rowIndex = 0; rowIndex < col.size(); rowIndex++ ) + { + Object object = col.get( rowIndex ); + + Object meta = metaDataMap.get( object ); + + if ( meta != null ) + { + grid.get( rowIndex ).set( columnIndex, meta ); + } + } + + return this; + } // ------------------------------------------------------------------------- // JRDataSource implementation === modified file 'dhis-2/dhis-support/dhis-support-system/src/test/java/org/hisp/dhis/system/grid/GridTest.java' --- dhis-2/dhis-support/dhis-support-system/src/test/java/org/hisp/dhis/system/grid/GridTest.java 2013-12-31 09:05:21 +0000 +++ dhis-2/dhis-support/dhis-support-system/src/test/java/org/hisp/dhis/system/grid/GridTest.java 2014-01-07 13:11:09 +0000 @@ -126,6 +126,28 @@ assertEquals( "TwentyOne", gridA.getValue( 1, 0 ) ); assertEquals( "TwentyTwo", gridA.getValue( 1, 1 ) ); } + + @Test + public void testSubstituteMetaDataForIndex() + { + Map metaData = new HashMap(); + metaData.put( 11, "Eleven" ); + metaData.put( 12, "Twelve" ); + metaData.put( 21, "TwentyOne" ); + metaData.put( 22, "TwentyTwo" ); + + assertEquals( 11, gridA.getValue( 0, 0 ) ); + assertEquals( 12, gridA.getValue( 0, 1 ) ); + assertEquals( 21, gridA.getValue( 1, 0 ) ); + assertEquals( 22, gridA.getValue( 1, 1 ) ); + + gridA.substituteMetaData( 1, metaData ); + + assertEquals( 11, gridA.getValue( 0, 0 ) ); + assertEquals( "Twelve", gridA.getValue( 0, 1 ) ); + assertEquals( 21, gridA.getValue( 1, 0 ) ); + assertEquals( "TwentyTwo", gridA.getValue( 1, 1 ) ); + } @Test public void testGetHeight() === modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/AnalyticsController.java' --- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/AnalyticsController.java 2013-12-31 09:05:21 +0000 +++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/AnalyticsController.java 2014-01-07 15:52:34 +0000 @@ -86,12 +86,14 @@ @RequestParam(required = false) boolean ignoreLimit, @RequestParam(required = false) boolean tableLayout, @RequestParam(required = false) boolean hideEmptyRows, + @RequestParam(required = false) boolean showHierarchy, @RequestParam(required = false) String columns, @RequestParam(required = false) String rows, Model model, HttpServletResponse response ) throws Exception { - DataQueryParams params = analyticsService.getFromUrl( dimension, filter, aggregationType, measureCriteria, skipMeta, skipRounding, hierarchyMeta, ignoreLimit, hideEmptyRows, i18nManager.getI18nFormat() ); + DataQueryParams params = analyticsService.getFromUrl( dimension, filter, aggregationType, measureCriteria, + skipMeta, skipRounding, hierarchyMeta, ignoreLimit, hideEmptyRows, showHierarchy, i18nManager.getI18nFormat() ); contextUtils.configureResponse( response, ContextUtils.CONTENT_TYPE_JSON, CacheStrategy.RESPECT_SYSTEM_SETTING ); Grid grid = analyticsService.getAggregatedDataValues( params, tableLayout, getDimensionsFromParam( columns ), getDimensionsFromParam( rows ) ); @@ -112,12 +114,14 @@ @RequestParam(required = false) boolean ignoreLimit, @RequestParam(required = false) boolean tableLayout, @RequestParam(required = false) boolean hideEmptyRows, + @RequestParam(required = false) boolean showHierarchy, @RequestParam(required = false) String columns, @RequestParam(required = false) String rows, Model model, HttpServletResponse response ) throws Exception { - DataQueryParams params = analyticsService.getFromUrl( dimension, filter, aggregationType, measureCriteria, skipMeta, skipRounding, hierarchyMeta, ignoreLimit, hideEmptyRows, i18nManager.getI18nFormat() ); + DataQueryParams params = analyticsService.getFromUrl( dimension, filter, aggregationType, measureCriteria, + skipMeta, skipRounding, hierarchyMeta, ignoreLimit, hideEmptyRows, showHierarchy, i18nManager.getI18nFormat() ); contextUtils.configureResponse( response, ContextUtils.CONTENT_TYPE_XML, CacheStrategy.RESPECT_SYSTEM_SETTING ); Grid grid = analyticsService.getAggregatedDataValues( params, tableLayout, getDimensionsFromParam( columns ), getDimensionsFromParam( rows ) ); @@ -136,12 +140,14 @@ @RequestParam(required = false) boolean ignoreLimit, @RequestParam(required = false) boolean tableLayout, @RequestParam(required = false) boolean hideEmptyRows, + @RequestParam(required = false) boolean showHierarchy, @RequestParam(required = false) String columns, @RequestParam(required = false) String rows, Model model, HttpServletResponse response ) throws Exception { - DataQueryParams params = analyticsService.getFromUrl( dimension, filter, aggregationType, measureCriteria, skipMeta, skipRounding, hierarchyMeta, ignoreLimit, hideEmptyRows, i18nManager.getI18nFormat() ); + DataQueryParams params = analyticsService.getFromUrl( dimension, filter, aggregationType, measureCriteria, + skipMeta, skipRounding, hierarchyMeta, ignoreLimit, hideEmptyRows, showHierarchy, i18nManager.getI18nFormat() ); contextUtils.configureResponse( response, ContextUtils.CONTENT_TYPE_HTML, CacheStrategy.RESPECT_SYSTEM_SETTING ); Grid grid = analyticsService.getAggregatedDataValues( params, tableLayout, getDimensionsFromParam( columns ), getDimensionsFromParam( rows ) ); @@ -160,12 +166,14 @@ @RequestParam(required = false) boolean ignoreLimit, @RequestParam(required = false) boolean tableLayout, @RequestParam(required = false) boolean hideEmptyRows, + @RequestParam(required = false) boolean showHierarchy, @RequestParam(required = false) String columns, @RequestParam(required = false) String rows, Model model, HttpServletResponse response ) throws Exception { - DataQueryParams params = analyticsService.getFromUrl( dimension, filter, aggregationType, measureCriteria, skipMeta, skipRounding, hierarchyMeta, ignoreLimit, hideEmptyRows, i18nManager.getI18nFormat() ); + DataQueryParams params = analyticsService.getFromUrl( dimension, filter, aggregationType, measureCriteria, + skipMeta, skipRounding, hierarchyMeta, ignoreLimit, hideEmptyRows, showHierarchy, i18nManager.getI18nFormat() ); contextUtils.configureResponse( response, ContextUtils.CONTENT_TYPE_CSV, CacheStrategy.RESPECT_SYSTEM_SETTING, "data.csv", true ); Grid grid = analyticsService.getAggregatedDataValues( params, tableLayout, getDimensionsFromParam( columns ), getDimensionsFromParam( rows ) ); @@ -184,12 +192,14 @@ @RequestParam(required = false) boolean ignoreLimit, @RequestParam(required = false) boolean tableLayout, @RequestParam(required = false) boolean hideEmptyRows, + @RequestParam(required = false) boolean showHierarchy, @RequestParam(required = false) String columns, @RequestParam(required = false) String rows, Model model, HttpServletResponse response ) throws Exception { - DataQueryParams params = analyticsService.getFromUrl( dimension, filter, aggregationType, measureCriteria, skipMeta, skipRounding, hierarchyMeta, ignoreLimit, hideEmptyRows, i18nManager.getI18nFormat() ); + DataQueryParams params = analyticsService.getFromUrl( dimension, filter, aggregationType, measureCriteria, + skipMeta, skipRounding, hierarchyMeta, ignoreLimit, hideEmptyRows, showHierarchy, i18nManager.getI18nFormat() ); contextUtils.configureResponse( response, ContextUtils.CONTENT_TYPE_EXCEL, CacheStrategy.RESPECT_SYSTEM_SETTING, "data.xls", true ); Grid grid = analyticsService.getAggregatedDataValues( params, tableLayout, getDimensionsFromParam( columns ), getDimensionsFromParam( rows ) ); @@ -208,12 +218,14 @@ @RequestParam(required = false) boolean ignoreLimit, @RequestParam(required = false) boolean tableLayout, @RequestParam(required = false) boolean hideEmptyRows, + @RequestParam(required = false) boolean showHierarchy, @RequestParam(required = false) String columns, @RequestParam(required = false) String rows, Model model, HttpServletResponse response ) throws Exception { - DataQueryParams params = analyticsService.getFromUrl( dimension, filter, null, null, true, false, false, false, false, i18nManager.getI18nFormat() ); + DataQueryParams params = analyticsService.getFromUrl( dimension, filter, null, null, + true, false, false, false, false, false, i18nManager.getI18nFormat() ); contextUtils.configureResponse( response, ContextUtils.CONTENT_TYPE_XML, CacheStrategy.RESPECT_SYSTEM_SETTING, "data.jrxml", false ); Grid grid = analyticsService.getAggregatedDataValues( params );