public void doGroupFiltering( Context cx, boolean canDoGroupFiltering )
public void doGroupFiltering( Context cx )
	public void doGroupFiltering( Context cx, boolean canDoGroupFiltering )			throws DataException	{		List groupLevels = new ArrayList( );		List expressionList = new ArrayList( );		populateGroupFilteringExpressions( expressionList, groupLevels );		if ( expressionList.size( ) > 0 )		{			if ( !canDoGroupFiltering )				throw new DataException( ResourceConstants.GROUP_FILTERING_IS_NOT_ALLOWED_IN_GIVEN_QUERY );			this.groupProcessor.calculateExpressionList( expressionList,					groupLevels,					IExpressionProcessor.FILTER_ON_GROUP_EXPR );			// The groupBoundaryInfos gotten here has not be sorted yet.			ArrayList[] groupBoundaryInfos = this.groupProcessor.getGroupCalculationUtil( )					.getGroupInformationUtil( )					.getGroupBoundaryInfos( );			populateFiltersInGroupBoundaryInfoSets( cx, groupBoundaryInfos );			groupBoundaryInfos = this.groupProcessor.getGroupCalculationUtil( )					.filterGroupBoundaryInfos( groupBoundaryInfos );			OrderingInfo odInfo = this.groupProcessor.getGroupCalculationUtil( )					.getGroupInformationUtil( )					.getOrderingInfo( groupBoundaryInfos );			this.populator.reSetSmartCacheUsingOrderingInfo( odInfo );		}	}