Bug 189812 Exceptions occurs when specify two sorting conditions on a crosstab[1102]
Description: Exceptions occurs when specify two sorting conditions on a crosstab[1102] Build number: 2.2.0.v20070530-0630 Steps to reproduce: 1, Open the attached report design 2, Specify the sorting on the crosstab 3, One sorting is : Group Level: Product/PRODUCTLINE Key: CREDITLIMIT_Date/year_Product/PRODUCTLINE Column member valud: year 2003 4, The second sorting is as same as sorting one, but the year value is 2004 Expected result: Support multi sorting on one condition Actual result: Exception occurs Error Logs: org.eclipse.birt.report.service.api.ReportServiceException: Error happened while running the report; nested exception is: java.lang.ArrayIndexOutOfBoundsException: 1 Show Exception Stack Trace Hide Exception Stack Trace Stack Trace: org.eclipse.birt.data.engine.olap.data.impl.aggregation.sort.AggregationSortHelper.createMatchedAggrRow(AggregationSortHelper.java:131) org.eclipse.birt.data.engine.olap.data.impl.aggregation.sort.AggregationSortHelper.populateAggrDiskArray(AggregationSortHelper.java:87) org.eclipse.birt.data.engine.olap.data.impl.aggregation.sort.AggregationSortHelper.sort(AggregationSortHelper.java:53) org.eclipse.birt.data.engine.olap.data.impl.aggregation.sort.AggrSortHelper.sort(AggrSortHelper.java:114) org.eclipse.birt.data.engine.olap.data.api.CubeQueryExecutorHelper.applyAggrSort(CubeQueryExecutorHelper.java:448) org.eclipse.birt.data.engine.olap.data.api.CubeQueryExecutorHelper.execute(CubeQueryExecutorHelper.java:301) org.eclipse.birt.data.engine.olap.query.view.QueryExecutor.populateRs(QueryExecutor.java:129) org.eclipse.birt.data.engine.olap.query.view.QueryExecutor.execute
data/org.eclipse.birt.data.tests/test/org/eclipse/birt/data/engine/olap/api/CubeFeaturesTest.java
long countryEnd = ( (DimensionCursor) edge1.getDimensionCursor( )
					.get( 0 ) ).getEdgeEnd( );
			long cityEnd = ( (DimensionCursor) edge1.getDimensionCursor( )
					.get( 1 ) ).getEdgeEnd( );
			line += cursor.getObject( dist_total ) + "		";
			if ( cityEnd == edge1.getPosition( ) )
				line += "["+cursor.getObject( city_total )+"]" + "		";
			
			if ( countryEnd == edge1.getPosition( ) )
				line += "["+cursor.getObject( country_total )+"]" + "		";
			
		}
		line += "["+cursor.getObject( grand_total )+"]" + "		";
		output += "\n" + line;
		this.testPrint( output );
		this.checkOutputFile( );
	}
	private void printCube( CubeCursor cursor, List columnEdgeBindingNames, String rowEdgeBindingNames, String measureBindingNames ) throws Exception
	{
		this.printCube( cursor, columnEdgeBindingNames, rowEdgeBindingNames, measureBindingNames, null, null, null );
	}
	
	private void printCube( CubeCursor cursor, List columnEdgeBindingNames, String rowEdgeBindingNames, String measureBindingNames, String columnAggr, String rowAggr, String overallAggr ) throws Exception
	{
		EdgeCursor edge1 = (EdgeCursor) (cursor.getOrdinateEdge( ).get( 0 ));
		EdgeCursor edge2 = (EdgeCursor) (cursor.getOrdinateEdge( ).get( 1 ));
		String[] lines = new String[ edge1.getDimensionCursor( ).size( ) ];
		for ( int i = 0; i < lines.length; i++ )
		{
			lines[i] = "		";