diff options
author | Stephan Bergmann <sb@openoffice.org> | 2001-02-06 09:57:43 +0000 |
---|---|---|
committer | Stephan Bergmann <sb@openoffice.org> | 2001-02-06 09:57:43 +0000 |
commit | cef571f86ff53e1da988d072c6e60ef32872f277 (patch) | |
tree | dc91ebdf1263a5424bae85dc2669f27c2fe757ba | |
parent | 0db63e9b716920cdddfeecbb2c257f9d18457c0a (diff) |
#83365# Allow empty content provider service names.
-rw-r--r-- | ucbhelper/source/provider/configureucb.cxx | 21 | ||||
-rw-r--r-- | ucbhelper/source/provider/registerucb.cxx | 43 | ||||
-rw-r--r-- | ucbhelper/source/provider/registerucb.hxx | 6 |
3 files changed, 36 insertions, 34 deletions
diff --git a/ucbhelper/source/provider/configureucb.cxx b/ucbhelper/source/provider/configureucb.cxx index 3828f7b6a4e2..bef81f9c6682 100644 --- a/ucbhelper/source/provider/configureucb.cxx +++ b/ucbhelper/source/provider/configureucb.cxx @@ -2,9 +2,9 @@ * * $RCSfile: configureucb.cxx,v $ * - * $Revision: 1.2 $ + * $Revision: 1.3 $ * - * last change: $Author: sb $ $Date: 2000-11-09 13:23:55 $ + * last change: $Author: sb $ $Date: 2001-02-06 10:57:43 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -218,16 +218,15 @@ configureUcb( &aProviderArguments)) { ContentProviderRegistrationInfo aInfo; - registerAtUcb(rManager, - rServiceFactory, - aIt->ServiceName, - aProviderArguments, - aIt->URLTemplate, - &aInfo); - VOS_ENSURE(aInfo.m_xProvider.is(), - "ucb::configureUcb(): Bad content provider"); + bool bSuccess = registerAtUcb(rManager, + rServiceFactory, + aIt->ServiceName, + aProviderArguments, + aIt->URLTemplate, + &aInfo); + VOS_ENSURE(bSuccess, "ucb::configureUcb(): Bad content provider"); - if (pInfos) + if (bSuccess && pInfos) pInfos->push_back(aInfo); } else diff --git a/ucbhelper/source/provider/registerucb.cxx b/ucbhelper/source/provider/registerucb.cxx index 80a4d992d9f4..e41764cca619 100644 --- a/ucbhelper/source/provider/registerucb.cxx +++ b/ucbhelper/source/provider/registerucb.cxx @@ -2,9 +2,9 @@ * * $RCSfile: registerucb.cxx,v $ * - * $Revision: 1.3 $ + * $Revision: 1.4 $ * - * last change: $Author: sb $ $Date: 2000-11-15 13:40:44 $ + * last change: $Author: sb $ $Date: 2001-02-06 10:57:43 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -97,7 +97,7 @@ namespace ucb { // //============================================================================ -void +bool registerAtUcb( uno::Reference< star::ucb::XContentProviderManager > const & rManager, uno::Reference< lang::XMultiServiceFactory > const & rServiceFactory, @@ -119,26 +119,27 @@ registerAtUcb( copy(RTL_CONSTASCII_LENGTH("{noproxy}")) : rArguments); - uno::Reference< star::ucb::XContentProviderFactory > xProxyFactory; + // First, try to instantiate proxy for provider: + uno::Reference< star::ucb::XContentProvider > xProvider; if (!bNoProxy) + { + uno::Reference< star::ucb::XContentProviderFactory > xProxyFactory; try { xProxyFactory = uno::Reference< star::ucb::XContentProviderFactory >( rServiceFactory-> createInstance( - rtl::OUString::createFromAscii( - "com.sun.star.ucb." - "ContentProviderProxyFactory")), + rtl::OUString( + RTL_CONSTASCII_USTRINGPARAM( + "com.sun.star.ucb.ContentProviderProxyFactory"))), uno::UNO_QUERY); } - catch (uno::RuntimeException const &) { throw; } catch (uno::Exception const &) {} - - // First, try to instantiate proxy for provider: - uno::Reference< star::ucb::XContentProvider > xProvider; - if (xProxyFactory.is()) - xProvider = xProxyFactory->createContentProvider(rName); + VOS_ENSURE(xProxyFactory.is(), "No ContentProviderProxyFactory"); + if (xProxyFactory.is()) + xProvider = xProxyFactory->createContentProvider(rName); + } // Then, try to instantiate provider directly: if (!xProvider.is()) @@ -160,10 +161,9 @@ registerAtUcb( uno::Reference< star::ucb::XContentProvider > xInstance; try { - xInstance - = xParameterized->registerInstance(rTemplate, - aProviderArguments, - true); + xInstance = xParameterized->registerInstance(rTemplate, + aProviderArguments, + true); //@@@ if this call replaces an old instance, the commit-or- // rollback code below will not work } @@ -173,10 +173,12 @@ registerAtUcb( xProvider = xInstance; } + bool bSuccess = false; if (rManager.is() && xProvider.is()) try { rManager->registerContentProvider(xProvider, rTemplate, true); + bSuccess = true; } catch (star::ucb::DuplicateProviderException const &) { @@ -187,7 +189,6 @@ registerAtUcb( aProviderArguments); } catch (lang::IllegalArgumentException const &) {} - xOriginalProvider = 0; } catch (...) { @@ -198,15 +199,17 @@ registerAtUcb( aProviderArguments); } catch (lang::IllegalArgumentException const &) {} + catch (uno::RuntimeException const &) {} throw; } - if (pInfo) + if (bSuccess && pInfo) { pInfo->m_xProvider = xOriginalProvider; pInfo->m_aArguments = aProviderArguments; pInfo->m_aTemplate = rTemplate; } + return bSuccess; } //============================================================================ @@ -240,7 +243,7 @@ deregisterFromUcb( xProvider = xInstance; } - if (rManager.is() && xProvider.is()) + if (rManager.is()) rManager->deregisterContentProvider(xProvider, rInfo.m_aTemplate); //@@@ if this fails, a roll-back of deregisterInstance() is // missing diff --git a/ucbhelper/source/provider/registerucb.hxx b/ucbhelper/source/provider/registerucb.hxx index 99bc7dee7965..61388886da4d 100644 --- a/ucbhelper/source/provider/registerucb.hxx +++ b/ucbhelper/source/provider/registerucb.hxx @@ -2,9 +2,9 @@ * * $RCSfile: registerucb.hxx,v $ * - * $Revision: 1.1 $ + * $Revision: 1.2 $ * - * last change: $Author: sb $ $Date: 2000-11-09 13:23:55 $ + * last change: $Author: sb $ $Date: 2001-02-06 10:57:43 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -96,7 +96,7 @@ struct ContentProviderRegistrationInfo; @param pInfo If not null, this output parameter is filled with information about the (atemptively) registered provider. */ -void +bool registerAtUcb( com::sun::star::uno::Reference< com::sun::star::ucb::XContentProviderManager > const & |