sw/inc/dbmgr.hxx | 4 ++++ sw/source/core/doc/doc.cxx | 4 ++++ sw/source/uibase/dbui/dbmgr.cxx | 14 ++++++++++++++ 3 files changed, 22 insertions(+)
New commits: commit 358a7ca728dced8ca41ad79a7c54a6c2408807b1 Author: Miklos Vajna <vmik...@collabora.co.uk> Date: Fri May 8 14:58:55 2015 +0200 Add SwDBManager::LoadAndRegisterEmbeddedDataSource With this, if a .odt document has an embedded data source definition, referred as EmbeddedDatabaseName in settings.xml, then that data source gets registered when opening the document. Change-Id: Ibd836fe11c0e74e8ea10e357886e6266e9ba0db0 diff --git a/sw/inc/dbmgr.hxx b/sw/inc/dbmgr.hxx index d420a8a..e5f719c 100644 --- a/sw/inc/dbmgr.hxx +++ b/sw/inc/dbmgr.hxx @@ -77,6 +77,7 @@ class SwXMailMerge; class SwMailMergeConfigItem; class SwCalc; class INetURLObject; +class SwDocShell; enum DBManagerOptions { @@ -369,6 +370,9 @@ public: static OUString LoadAndRegisterDataSource(const OUString& rURI, const OUString *pPrefix = 0, const OUString *pDestDir = 0, const ::com::sun::star::uno::Reference < ::com::sun::star::beans::XPropertySet > *pSettings = 0); + /// Load the embedded data source of the document and also register it. + void LoadAndRegisterEmbeddedDataSource(const SwDBData& rData, const SwDocShell& rDocShell); + /** try to get the data source from the given connection through the XChild interface. If this is not possible, the data source will be created through its name. @param _xConnection diff --git a/sw/source/core/doc/doc.cxx b/sw/source/core/doc/doc.cxx index 80de11e..4886e29 100644 --- a/sw/source/core/doc/doc.cxx +++ b/sw/source/core/doc/doc.cxx @@ -38,6 +38,7 @@ #include <DocumentLayoutManager.hxx> #include <DocumentExternalDataManager.hxx> #include <UndoManager.hxx> +#include <dbmgr.hxx> #include <hintids.hxx> #include <tools/globname.hxx> #include <svx/svxids.hrc> @@ -493,6 +494,9 @@ void SwDoc::ChgDBData(const SwDBData& rNewData) { if( rNewData != maDBData ) { + if (maDBData.sEmbeddedName != rNewData.sEmbeddedName && GetDocShell()) + mpDBManager->LoadAndRegisterEmbeddedDataSource(rNewData, *GetDocShell()); + maDBData = rNewData; getIDocumentState().SetModified(); } diff --git a/sw/source/uibase/dbui/dbmgr.cxx b/sw/source/uibase/dbui/dbmgr.cxx index 0574eb4..042a0bd 100644 --- a/sw/source/uibase/dbui/dbmgr.cxx +++ b/sw/source/uibase/dbui/dbmgr.cxx @@ -2624,6 +2624,20 @@ OUString SwDBManager::LoadAndRegisterDataSource(const OUString &rURI, const OUSt return LoadAndRegisterDataSource( type, aURLAny, pSettings, rURI, pPrefix, pDestDir ); } +void SwDBManager::LoadAndRegisterEmbeddedDataSource(const SwDBData& rData, const SwDocShell& rDocShell) +{ + uno::Reference<sdb::XDatabaseContext> xDatabaseContext = sdb::DatabaseContext::create(comphelper::getProcessComponentContext()); + + if (xDatabaseContext->hasByName(rData.sDataSource)) + xDatabaseContext->revokeObject(rData.sDataSource); + + INetURLObject aURLObject(rDocShell.GetMedium()->GetURLObject()); + aURLObject.SetMark(rData.sEmbeddedName); + OUString aURL = aURLObject.GetMainURL(INetURLObject::DECODE_WITH_CHARSET); + uno::Reference<uno::XInterface> xDataSource(xDatabaseContext->getByName(aURL), uno::UNO_QUERY); + xDatabaseContext->registerObject(rData.sDataSource, xDataSource); +} + void SwDBManager::ExecuteFormLetter( SwWrtShell& rSh, const Sequence<PropertyValue>& rProperties, bool bWithDataSourceBrowser) _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits