[Libreoffice-commits] core.git: 2 commits - dbaccess/source

Miklos Vajna vmiklos at collabora.co.uk
Mon Jun 8 00:55:12 PDT 2015


 dbaccess/source/core/dataaccess/databasecontext.cxx  |   21 +++++++++++++------
 dbaccess/source/core/dataaccess/databasedocument.cxx |    5 +++-
 2 files changed, 19 insertions(+), 7 deletions(-)

New commits:
commit cd33c5355f7c334e385595ba29adaa7844b252e2
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Mon Jun 8 09:41:18 2015 +0200

    dbaccess: avoid pointless ucbhelper::Content instance in case of embedding
    
    Change-Id: Ibc3d7a0d9b3373f17aa8d1da081946814904e6d5

diff --git a/dbaccess/source/core/dataaccess/databasecontext.cxx b/dbaccess/source/core/dataaccess/databasecontext.cxx
index 775ecb6..32c63a1 100644
--- a/dbaccess/source/core/dataaccess/databasecontext.cxx
+++ b/dbaccess/source/core/dataaccess/databasecontext.cxx
@@ -320,11 +320,14 @@ Reference< XInterface > ODatabaseContext::loadObjectFromURL(const OUString& _rNa
     bool bEmbeddedDataSource = _sURL.startsWithIgnoreAsciiCase("vnd.sun.star.pkg:");
     try
     {
-        ::ucbhelper::Content aContent( _sURL, NULL, comphelper::getProcessComponentContext() );
-        if ( !aContent.isDocument() && !bEmbeddedDataSource )
-            throw InteractiveIOException(
-                _sURL, *this, InteractionClassification_ERROR, IOErrorCode_NO_FILE
-            );
+        if (!bEmbeddedDataSource)
+        {
+            ::ucbhelper::Content aContent( _sURL, NULL, comphelper::getProcessComponentContext() );
+            if ( !aContent.isDocument() )
+                throw InteractiveIOException(
+                    _sURL, *this, InteractionClassification_ERROR, IOErrorCode_NO_FILE
+                );
+        }
     }
     catch ( const InteractiveIOException& e )
     {
commit 4101949b2a9fcf399a1fa10c2547f745a24f5a3d
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Mon Jun 8 09:40:51 2015 +0200

    dbaccess: set correct BaseURI for vnd.sun.star.pkg:// URLs on load
    
    With this, in case the embedded data source definition has an URL like:
    
    <db:file-based-database xlink:href="../../calc-data-source.ods/" db:media-type="application/vnd.oasis.opendocument.spreadsheet"/>
    
    That's resolved to
    file:///path/to/directory/of/Writer/doc/calc-data-source.ods correctly.
    
    Change-Id: Ieb67f9f5ae104689c6dadc14ec84c66bec70a687

diff --git a/dbaccess/source/core/dataaccess/databasecontext.cxx b/dbaccess/source/core/dataaccess/databasecontext.cxx
index 6dd2efe..775ecb6 100644
--- a/dbaccess/source/core/dataaccess/databasecontext.cxx
+++ b/dbaccess/source/core/dataaccess/databasecontext.cxx
@@ -317,10 +317,10 @@ Reference< XInterface > ODatabaseContext::loadObjectFromURL(const OUString& _rNa
     if ( aURL.GetProtocol() == INetProtocol::NotValid )
         throw NoSuchElementException( _rName, *this );
 
+    bool bEmbeddedDataSource = _sURL.startsWithIgnoreAsciiCase("vnd.sun.star.pkg:");
     try
     {
         ::ucbhelper::Content aContent( _sURL, NULL, comphelper::getProcessComponentContext() );
-        bool bEmbeddedDataSource = _sURL.startsWithIgnoreAsciiCase("vnd.sun.star.pkg:");
         if ( !aContent.isDocument() && !bEmbeddedDataSource )
             throw InteractiveIOException(
                 _sURL, *this, InteractionClassification_ERROR, IOErrorCode_NO_FILE
@@ -363,6 +363,12 @@ Reference< XInterface > ODatabaseContext::loadObjectFromURL(const OUString& _rNa
         aArgs.put( "URL", _sURL );
         aArgs.put( "MacroExecutionMode", MacroExecMode::USE_CONFIG );
         aArgs.put( "InteractionHandler", task::InteractionHandler::createWithParent(m_aContext, 0) );
+        if (bEmbeddedDataSource)
+        {
+            // In this case the host contains the real path, and the the path is the embedded stream name.
+            OUString sBaseURI = aURL.GetHost(INetURLObject::DECODE_WITH_CHARSET) + aURL.GetURLPath(INetURLObject::DECODE_WITH_CHARSET);
+            aArgs.put("BaseURI", sBaseURI);
+        }
 
         Sequence< PropertyValue > aResource( aArgs.getPropertyValues() );
         xLoad->load( aResource );
diff --git a/dbaccess/source/core/dataaccess/databasedocument.cxx b/dbaccess/source/core/dataaccess/databasedocument.cxx
index 43aa283..8c82907 100644
--- a/dbaccess/source/core/dataaccess/databasedocument.cxx
+++ b/dbaccess/source/core/dataaccess/databasedocument.cxx
@@ -502,7 +502,10 @@ void ODatabaseDocument::impl_import_nolck_throw( const Reference< XComponentCont
     lcl_extractAndStartStatusIndicator( _rResource, xStatusIndicator, aFilterCreationArgs );
 
      uno::Reference< beans::XPropertySet > xInfoSet( comphelper::GenericPropertySet_CreateInstance( new comphelper::PropertySetInfo( aExportInfoMap ) ) );
-    xInfoSet->setPropertyValue("BaseURI", uno::makeAny(_rResource.getOrDefault("URL",OUString())));
+    OUString sBaseURI = _rResource.getOrDefault("BaseURI", OUString());
+    if (sBaseURI.isEmpty())
+        sBaseURI = _rResource.getOrDefault("URL",OUString());
+    xInfoSet->setPropertyValue("BaseURI", uno::makeAny(sBaseURI));
     xInfoSet->setPropertyValue("StreamName", uno::makeAny(OUString("content.xml")));
 
     const sal_Int32 nCount = aFilterCreationArgs.getLength();


More information about the Libreoffice-commits mailing list