addPropertyConfigurationId( this );
	public OdaDataSourceAdapter( OdaDataSourceHandle source, Scriptable propBindingScope) 		throws BirtException	{		super(source.getQualifiedName());		bindingScope = propBindingScope;		// Adapt base class properties		DataAdapterUtil.adaptBaseDataSource( source, this );		// Adapt extended data source elements		// validate that a required attribute is specified		String driverName = source.getExtensionID( );		if ( driverName == null || driverName.length( ) == 0 )		{			throw new AdapterException( ResourceConstants.DATASOURCE_EXID_ERROR,					source.getName( ) );		}		setExtensionID( driverName );		// static ROM properties defined by the ODA driver extension		Map staticProps = DataAdapterUtil.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 ( bindingScope != null && bindingExpr != null						&& bindingExpr.length( ) > 0 )				{					propValue = JavascriptEvalUtil.evaluateScript( null, bindingScope, 							bindingExpr, "property binding", 0 ).toString();				} else				{					propValue = ( String ) staticProps.get( propName );				}				addPublicProperty( propName, propValue );			}		}		// private driver properties / private runtime data		Iterator elmtIter = source.privateDriverPropertiesIterator( );		if ( elmtIter != null )		{			while ( elmtIter.hasNext( ) )			{				ExtendedPropertyHandle modelProp = ( ExtendedPropertyHandle ) elmtIter						.next( );				addPrivateProperty( modelProp.getName( ), modelProp						.getValue( ) );			}		}	}