String valueType = requestedParam.getDataType();
	public Collection getSelectionListForCascadingGroup(			String parameterGroupName, Object[] groupKeyValues )			{		CascadingParameterGroupHandle parameterGroup = getCascadingParameterGroup( parameterGroupName );		if ( parameterGroup == null )			return null;		IResultIterator iter = (IResultIterator) dataCache.get( parameterGroup				.getName( ) );		if ( iter == null )			return null;		SlotHandle slotHandle = parameterGroup.getParameters( );		assert ( groupKeyValues.length < slotHandle.getCount( ) );		int skipLevel = groupKeyValues.length + 1;				ScalarParameterHandle requestedParam =  (ScalarParameterHandle) slotHandle.get( groupKeyValues.length ); // The parameters in parameterGroup must be scalar parameters.		int listLimit = requestedParam.getListlimit();        boolean fixedOrder = requestedParam.isFixedOrder();		String valueType = requestedParam.getDataType();		// We need to cache the expression object in function evaluateQuery and 		// use the cached object here instead of creating a new one because 		// according to DtE API for IResultIterator.getString, 		// the expression object must be the same object created at the time of preparation. 		// Actually, the prepare process will modify the expression object , only after which 		// the expression object can be used to get the real value from the result set. 		// If we create a new expression object here, it won't work.		ScriptExpression labelExpr = (ScriptExpression) labelMap				.get( parameterGroup.getName( ) + "_"						+ requestedParam.getName( ) );		ScriptExpression valueExpr = (ScriptExpression) valueMap				.get( parameterGroup.getName( ) + "_"						+ requestedParam.getName( ) );		ArrayList choices = new ArrayList( );		try				{			if ( skipLevel > 1 )				iter.findGroup( groupKeyValues );			int startGroupLevel = skipLevel -1;			int count = 0;			while ( iter.next( ) )			{				//startGroupLevel = iter.getStartingGroupLevel();				String label = (labelExpr != null ? iter.getString( labelExpr ) : null);				Object value = iter.getValue( valueExpr );				//value = convertToType( value, valueType );				choices.add( new SelectionChoice( label, value ) );				count++;				if ( ( listLimit != 0 ) && ( count >= listLimit ) )					break;				iter.skipToEnd( skipLevel );								int endGroupLevel = iter.getEndingGroupLevel();				if (endGroupLevel <= startGroupLevel)					{					break;					}				}			}		catch ( BirtException e )		{			e.printStackTrace( );		}        if(!fixedOrder)            Collections.sort(choices, new SelectionChoiceComparator(true));		return choices;	}