source, reportContext );
source, context );
	IOdaDataSourceDesign newExtendedDataSource( OdaDataSourceHandle source ) 			throws BirtException	{		OdaDataSourceDesign dteSource = new OdaDataSourceDesign( source				.getQualifiedName( ) );		IBaseDataSourceEventHandler eventHandler = new DataSourceScriptExecutor(				source, reportContext );		dteSource.setEventHandler( eventHandler );		// Adapt base class properties		adaptBaseDataSource( source, dteSource );		// Adapt extended data source elements		// validate that a required attribute is specified		String driverName = source.getExtensionID( );		if ( driverName == null || driverName.length( ) == 0 )		{			throw new EngineException(					"Missing extenion id in data source definition, " + source.getName( ) ); //$NON-NLS-1$		}		dteSource.setExtensionID( driverName );		// static ROM properties defined by the ODA driver extension		Map staticProps = getExtensionProperties( source, source				.getExtensionPropertyDefinitionList( ) );		if ( staticProps != null && !staticProps.isEmpty( ) )		{			Iterator propNamesItr = staticProps.keySet( ).iterator( );			while ( propNamesItr.hasNext( ) )			{				String propName = (String)propNamesItr.next( );				assert ( propName != null );				String propValue;				// If property binding expression exists, use its evaluation result				String bindingExpr =source.getPropertyBinding( propName );				if ( needPropertyBinding( )						&& bindingExpr != null && bindingExpr.length( ) > 0 )				{					propValue = evaluatePropertyBindingExpr( bindingExpr );				}				else				{					propValue = ( String ) staticProps.get( propName );				}								dteSource.addPublicProperty( ( String ) propName, propValue );			}		}		// private driver properties / private runtime data		Iterator elmtIter = source.privateDriverPropertiesIterator( );		if ( elmtIter != null )		{			while ( elmtIter.hasNext( ) )			{				ExtendedPropertyHandle modelProp = ( ExtendedPropertyHandle ) elmtIter						.next( );				dteSource.addPrivateProperty( modelProp.getName( ),							modelProp.getValue( ) );			}		}		return dteSource;	}