diff options
Diffstat (limited to 'desktop/source/deployment/registry/configuration/dp_configuration.cxx')
-rwxr-xr-x[-rw-r--r--] | desktop/source/deployment/registry/configuration/dp_configuration.cxx | 132 |
1 files changed, 86 insertions, 46 deletions
diff --git a/desktop/source/deployment/registry/configuration/dp_configuration.cxx b/desktop/source/deployment/registry/configuration/dp_configuration.cxx index 88f5279d61..ecb9859769 100644..100755 --- a/desktop/source/deployment/registry/configuration/dp_configuration.cxx +++ b/desktop/source/deployment/registry/configuration/dp_configuration.cxx @@ -132,15 +132,21 @@ class BackendImpl : public ::dp_registry::backend::PackageRegistryBackend void configmgrini_verify_init( Reference<XCommandEnvironment> const & xCmdEnv ); void configmgrini_flush( Reference<XCommandEnvironment> const & xCmdEnv ); - - bool addToConfigmgrIni( bool isSchema, OUString const & url, + + /* The paramter isURL is false in the case of adding the conf:ini-entry + value from the backend db. This entry already contains the path as it + is used in the configmgr.ini. + */ + bool addToConfigmgrIni( bool isSchema, bool isURL, OUString const & url, Reference<XCommandEnvironment> const & xCmdEnv ); bool removeFromConfigmgrIni( bool isSchema, OUString const & url, Reference<XCommandEnvironment> const & xCmdEnv ); void addDataToDb(OUString const & url, ConfigurationBackendDb::Data const & data); ::boost::optional<ConfigurationBackendDb::Data> readDataFromDb(OUString const & url); - OUString deleteDataFromDb(OUString const & url); + void revokeEntryFromDb(OUString const & url); + bool hasActiveEntry(OUString const & url); + bool activateEntry(OUString const & url); public: BackendImpl( Sequence<Any> const & args, @@ -149,6 +155,9 @@ public: // XPackageRegistry virtual Sequence< Reference<deployment::XPackageTypeInfo> > SAL_CALL getSupportedPackageTypes() throw (RuntimeException); + virtual void SAL_CALL packageRemoved(OUString const & url, OUString const & mediaType) + throw (deployment::DeploymentException, + uno::RuntimeException); using PackageRegistryBackend::disposing; }; @@ -240,20 +249,28 @@ void BackendImpl::addDataToDb( return data; } -OUString BackendImpl::deleteDataFromDb(OUString const & url) +void BackendImpl::revokeEntryFromDb(OUString const & url) { - OUString url2(url); - if (m_backendDb.get()) { - boost::optional< ConfigurationBackendDb::Data > data( - m_backendDb->getEntry(url)); - if (data) { - url2 = expandUnoRcTerm(data->iniEntry); - } - m_backendDb->removeEntry(url); - } - return url2; + if (m_backendDb.get()) + m_backendDb->revokeEntry(url); +} + +bool BackendImpl::hasActiveEntry(OUString const & url) +{ + if (m_backendDb.get()) + return m_backendDb->hasActiveEntry(url); + return false; +} + +bool BackendImpl::activateEntry(OUString const & url) +{ + if (m_backendDb.get()) + return m_backendDb->activateEntry(url); + return false; } + + // XPackageRegistry //______________________________________________________________________________ Sequence< Reference<deployment::XPackageTypeInfo> > @@ -261,6 +278,13 @@ BackendImpl::getSupportedPackageTypes() throw (RuntimeException) { return m_typeInfos; } +void BackendImpl::packageRemoved(OUString const & url, OUString const & /*mediaType*/) + throw (deployment::DeploymentException, + uno::RuntimeException) +{ + if (m_backendDb.get()) + m_backendDb->removeEntry(url); +} // PackageRegistryBackend //______________________________________________________________________________ @@ -447,10 +471,10 @@ void BackendImpl::configmgrini_flush( } //______________________________________________________________________________ -bool BackendImpl::addToConfigmgrIni( bool isSchema, OUString const & url_, +bool BackendImpl::addToConfigmgrIni( bool isSchema, bool isURL, OUString const & url_, Reference<XCommandEnvironment> const & xCmdEnv ) { - const OUString rcterm( dp_misc::makeRcTerm(url_) ); + const OUString rcterm( isURL ? dp_misc::makeRcTerm(url_) : url_ ); const ::osl::MutexGuard guard( getMutex() ); configmgrini_verify_init( xCmdEnv ); t_stringlist & rSet = getFiles(isSchema); @@ -499,6 +523,7 @@ bool BackendImpl::removeFromConfigmgrIni( // Package //______________________________________________________________________________ + BackendImpl * BackendImpl::PackageImpl::getMyBackend() const { BackendImpl * pBackend = static_cast<BackendImpl *>(m_myBackend.get()); @@ -524,7 +549,7 @@ BackendImpl::PackageImpl::isRegistered_( const rtl::OUString url(getURL()); bool bReg = false; - if (that->readDataFromDb(getURL())) + if (that->hasActiveEntry(getURL())) bReg = true; if (!bReg) //fallback for user extension registered in berkeley DB @@ -667,38 +692,48 @@ void BackendImpl::PackageImpl::processPackage_( if (doRegisterPackage) { - ConfigurationBackendDb::Data data; - if (!m_isSchema) + if (getMyBackend()->activateEntry(getURL())) { - const OUString sModFolder = that->createFolder(OUString(), xCmdEnv); - bool out_replaced = false; - url = replaceOrigin(url, sModFolder, xCmdEnv, out_replaced); - if (out_replaced) - data.dataUrl = sModFolder; - else - deleteTempFolder(sModFolder); + ::boost::optional<ConfigurationBackendDb::Data> data = that->readDataFromDb(url); + OSL_ASSERT(data); + that->addToConfigmgrIni( m_isSchema, false, data->iniEntry, xCmdEnv ); } - //No need for live-deployment for bundled extension, because OOo - //restarts after installation - if (that->m_eContext != CONTEXT_BUNDLED - && !startup) + else { - if (m_isSchema) + ConfigurationBackendDb::Data data; + if (!m_isSchema) { - com::sun::star::configuration::Update::get( - that->m_xComponentContext)->insertExtensionXcsFile( - that->m_eContext == CONTEXT_SHARED, expandUnoRcUrl(url)); + const OUString sModFolder = that->createFolder(OUString(), xCmdEnv); + bool out_replaced = false; + url = replaceOrigin(url, sModFolder, xCmdEnv, out_replaced); + if (out_replaced) + data.dataUrl = sModFolder; + else + deleteTempFolder(sModFolder); } - else + //No need for live-deployment for bundled extension, because OOo + //restarts after installation + if (that->m_eContext != CONTEXT_BUNDLED + && that->m_eContext != CONTEXT_BUNDLED_PREREG + && !startup) { - com::sun::star::configuration::Update::get( - that->m_xComponentContext)->insertExtensionXcuFile( - that->m_eContext == CONTEXT_SHARED, expandUnoRcUrl(url)); + if (m_isSchema) + { + com::sun::star::configuration::Update::get( + that->m_xComponentContext)->insertExtensionXcsFile( + that->m_eContext == CONTEXT_SHARED, expandUnoRcUrl(url)); + } + else + { + com::sun::star::configuration::Update::get( + that->m_xComponentContext)->insertExtensionXcuFile( + that->m_eContext == CONTEXT_SHARED, expandUnoRcUrl(url)); + } } + that->addToConfigmgrIni( m_isSchema, true, url, xCmdEnv ); + data.iniEntry = dp_misc::makeRcTerm(url); + that->addDataToDb(getURL(), data); } - that->addToConfigmgrIni( m_isSchema, url, xCmdEnv ); - data.iniEntry = dp_misc::makeRcTerm(url); - that->addDataToDb(getURL(), data); } else // revoke { @@ -731,7 +766,7 @@ void BackendImpl::PackageImpl::processPackage_( else deleteTempFolder(sModFolder); } - that->addToConfigmgrIni(schema, url_replaced, xCmdEnv); + that->addToConfigmgrIni(schema, true, url_replaced, xCmdEnv); data.iniEntry = dp_misc::makeRcTerm(url_replaced); that->addDataToDb(url2, data); } @@ -749,12 +784,17 @@ void BackendImpl::PackageImpl::processPackage_( OSL_ASSERT(0); } } - url = that->deleteDataFromDb(url); - if (!m_isSchema) { + + ::boost::optional<ConfigurationBackendDb::Data> data = that->readDataFromDb(url); + //If an xcu file was life deployed then always a data entry is written. + //If the xcu file was already in the configmr.ini then there is also + //a data entry + if (!m_isSchema && data) + { com::sun::star::configuration::Update::get( - that->m_xComponentContext)->removeExtensionXcuFile( - expandUnoRcUrl(url)); + that->m_xComponentContext)->removeExtensionXcuFile(expandUnoRcTerm(data->iniEntry)); } + that->revokeEntryFromDb(url); } } |