odiDSQuery.setParameterDefnAndValBindings( getMergedParameters(odaDataSet,  getQueryScope(),false ) );
odiDSQuery.setParameterHints( resolveDataSetParameters( false ) );
	    private Collection getParameterMetaData( ) throws DataException		{			// Create the data set runtime			dataSet = newDataSetRuntime();			assert dataSet != null;			OdaDataSetRuntime odaDataSet = (OdaDataSetRuntime) dataSet;			dataSource = findDataSource( );			openDataSource( );						// Run beforeOpen script now so the script can modify the DataSetRuntime properties			dataSet.beforeOpen();			// Create and populate odi query			odiQuery = createOdiQuery( );			IDataSourceQuery odiDSQuery = (IDataSourceQuery) odiQuery;			assert odiDSQuery != null;						// assign driver properties and parameter hints; these are the only			// information we need from the data set to get param metadata		    addProperty( odiDSQuery, odaDataSet.getPublicProperties() );		    addProperty( odiDSQuery, odaDataSet.getPrivateProperties() );		 			    odiDSQuery.setParameterDefnAndValBindings( getMergedParameters(odaDataSet,  getQueryScope(),false ) );		    		    // Prepare odi query; parameter metadata is available after the prepare call			prepareOdiQuery( );						assert odiPreparedQuery != null;	        Collection odiParamsInfo = odiPreparedQuery.getParameterMetaData();	        if ( odiParamsInfo == null || odiParamsInfo.isEmpty() )	            return null;	        	        // iterates thru the most up-to-date collection, and	        // wraps each of the ODI parameter metadata object	        ArrayList paramMetaDataList = new ArrayList( odiParamsInfo.size() );	        Iterator odiParamMDIter = odiParamsInfo.iterator();	        while ( odiParamMDIter.hasNext() )	        {	        	IParameterMetaData odiMetaData = 	                (IParameterMetaData) odiParamMDIter.next();	        	ParameterMetaData apiMetaData = new ParameterMetaData( odiMetaData );	            paramMetaDataList.add( apiMetaData );	        }	        return paramMetaDataList;		}