Author: arielch
Date: Mon Feb 4 17:54:16 2013
New Revision: 1442201
URL: http://svn.apache.org/viewvc?rev=1442201&view=rev
Log:
Ensure UNO context propagation on drivers instantiation
Use a better approach than revision 1387711
Modified:
openoffice/trunk/main/connectivity/source/manager/mdrivermanager.cxx
openoffice/trunk/main/connectivity/source/manager/mdrivermanager.hxx
Modified: openoffice/trunk/main/connectivity/source/manager/mdrivermanager.cxx
URL:
http://svn.apache.org/viewvc/openoffice/trunk/main/connectivity/source/manager/mdrivermanager.cxx?rev=1442201&r1=1442200&r2=1442201&view=diff
==============================================================================
--- openoffice/trunk/main/connectivity/source/manager/mdrivermanager.cxx
(original)
+++ openoffice/trunk/main/connectivity/source/manager/mdrivermanager.cxx Mon
Feb 4 17:54:16 2013
@@ -119,6 +119,9 @@ Any SAL_CALL ODriverEnumeration::nextEle
/// an STL functor which ensures that a SdbcDriver described by a
DriverAccess is loaded
struct EnsureDriver : public ::std::unary_function< DriverAccess,
DriverAccess >
{
+ EnsureDriver( const Reference< XComponentContext > &rxContext )
+ : mxContext( rxContext ) {}
+
const DriverAccess& operator()( const DriverAccess&
_rDescriptor ) const
{
if ( !_rDescriptor.xDriver.is() )
@@ -126,9 +129,12 @@ Any SAL_CALL ODriverEnumeration::nextEle
if ( _rDescriptor.xComponentFactory.is() )
// we have a factory for it
const_cast< DriverAccess& >(
_rDescriptor ).xDriver = _rDescriptor.xDriver.query(
-
_rDescriptor.xComponentFactory->createInstanceWithContext(
_rDescriptor.xUNOContext ) );
+
_rDescriptor.xComponentFactory->createInstanceWithContext( mxContext ) );
return _rDescriptor;
}
+
+ private:
+ Reference< XComponentContext > mxContext;
};
//---------------------------------------------------------------------
@@ -150,7 +156,8 @@ Any SAL_CALL ODriverEnumeration::nextEle
/// an STL functor which loads a driver described by a DriverAccess,
and extracts the SdbcDriver
struct ExtractAfterLoad : public ExtractAfterLoad_BASE
{
- ExtractAfterLoad() : ExtractAfterLoad_BASE(
ExtractDriverFromAccess(), EnsureDriver() ) { }
+ ExtractAfterLoad( const Reference< XComponentContext > &rxContext )
+ : ExtractAfterLoad_BASE( ExtractDriverFromAccess(), EnsureDriver(
rxContext ) ) {}
};
//---------------------------------------------------------------------
@@ -338,7 +345,6 @@ void OSDBCDriverManager::bootstrapDriver
{ // yes -> no need to load the driver
immediately (load it later when needed)
aDriverDescriptor.sImplementationName =
xSI->getImplementationName();
aDriverDescriptor.xComponentFactory =
xFactory;
- aDriverDescriptor.xUNOContext = m_aContext.getUNOContext();
bValidDescriptor = sal_True;
m_aEventLogger.log( LogLevel::CONFIG,
@@ -523,7 +529,7 @@ Reference< XEnumeration > SAL_CALL OSDBC
ODriverEnumeration::DriverArray aDrivers;
// ensure that all our bootstrapped drivers are insatntiated
- ::std::for_each( m_aDriversBS.begin(), m_aDriversBS.end(),
EnsureDriver() );
+ ::std::for_each( m_aDriversBS.begin(), m_aDriversBS.end(),
EnsureDriver( m_aContext.getUNOContext() ) );
// copy the bootstrapped drivers
::std::transform(
@@ -704,13 +710,13 @@ Reference< XDriver > OSDBCDriverManager:
aFind = ::std::find_if(
m_aDriversBS.begin(), // begin of
search range
m_aDriversBS.end(), // end of
search range
- std::unary_compose< AcceptsURL, ExtractAfterLoad >(
AcceptsURL( _rURL ), ExtractAfterLoad() )
+ std::unary_compose< AcceptsURL, ExtractAfterLoad >(
AcceptsURL( _rURL ), ExtractAfterLoad( m_aContext.getUNOContext() ) )
// compose two functors: extract the driver from the access, then ask the
resulting driver for acceptance
);
} // if ( m_aDriversBS.find(sDriverFactoryName ) == m_aDriversBS.end()
)
else
{
- EnsureDriver aEnsure;
+ EnsureDriver aEnsure( m_aContext.getUNOContext() );
aEnsure(*aFind);
}
Modified: openoffice/trunk/main/connectivity/source/manager/mdrivermanager.hxx
URL:
http://svn.apache.org/viewvc/openoffice/trunk/main/connectivity/source/manager/mdrivermanager.hxx?rev=1442201&r1=1442200&r2=1442201&view=diff
==============================================================================
--- openoffice/trunk/main/connectivity/source/manager/mdrivermanager.hxx
(original)
+++ openoffice/trunk/main/connectivity/source/manager/mdrivermanager.hxx Mon
Feb 4 17:54:16 2013
@@ -50,12 +50,10 @@ namespace drivermanager
DECLARE_STL_USTRINGACCESS_MAP( SdbcDriver, DriverCollection );
typedef ::com::sun::star::uno::Reference<
::com::sun::star::lang::XSingleComponentFactory > DriverFactory;
- typedef ::com::sun::star::uno::Reference<
::com::sun::star::uno::XComponentContext > UNOContext;
struct DriverAccess
{
::rtl::OUString sImplementationName; /// the
implementation name of the driver
DriverFactory xComponentFactory;
/// the factory to create the driver component (if not already done so)
- UNOContext xUNOContext; /// ensure UNO
context propagation
SdbcDriver xDriver;
/// the driver itself
};