diff options
Diffstat (limited to 'embeddedobj/source/commonembedding/persistence.cxx')
-rw-r--r-- | embeddedobj/source/commonembedding/persistence.cxx | 52 |
1 files changed, 41 insertions, 11 deletions
diff --git a/embeddedobj/source/commonembedding/persistence.cxx b/embeddedobj/source/commonembedding/persistence.cxx index 4a057f85f085..cbba5324be88 100644 --- a/embeddedobj/source/commonembedding/persistence.cxx +++ b/embeddedobj/source/commonembedding/persistence.cxx @@ -723,12 +723,33 @@ void OCommonEmbeddedObject::SwitchDocToStorage_Impl( const uno::Reference< docum m_xRecoveryStorage.clear(); } +namespace { -void OCommonEmbeddedObject::StoreDocToStorage_Impl( const uno::Reference< embed::XStorage >& xStorage, - sal_Int32 nStorageFormat, - const OUString& aBaseURL, - const OUString& aHierarchName, - bool bAttachToTheStorage ) +OUString getStringPropertyValue( const uno::Sequence<beans::PropertyValue>& rProps, const OUString& rName ) +{ + OUString aStr; + + for (sal_Int32 i = 0; i < rProps.getLength(); ++i) + { + if (rProps[i].Name == rName) + { + rProps[i].Value >>= aStr; + break; + } + } + + return aStr; +} + +} + +void OCommonEmbeddedObject::StoreDocToStorage_Impl( + const uno::Reference<embed::XStorage>& xStorage, + const uno::Sequence<beans::PropertyValue>& rMediaArgs, + const uno::Sequence<beans::PropertyValue>& rObjArgs, + sal_Int32 nStorageFormat, + const OUString& aHierarchName, + bool bAttachToTheStorage ) { SAL_WARN_IF( !xStorage.is(), "embeddedobj.common", "No storage is provided for storing!" ); @@ -742,6 +763,8 @@ void OCommonEmbeddedObject::StoreDocToStorage_Impl( const uno::Reference< embed: xDoc = uno::Reference< document::XStorageBasedDocument >( m_pDocHolder->GetComponent(), uno::UNO_QUERY ); } + OUString aBaseURL = GetBaseURLFrom_Impl(rMediaArgs, rObjArgs); + if ( xDoc.is() ) { OUString aFilterName = GetFilterName( nStorageFormat ); @@ -750,13 +773,17 @@ void OCommonEmbeddedObject::StoreDocToStorage_Impl( const uno::Reference< embed: if ( aFilterName.isEmpty() ) throw io::IOException(); // TODO: - uno::Sequence< beans::PropertyValue > aArgs( 3 ); + uno::Sequence<beans::PropertyValue> aArgs(5); aArgs[0].Name = "FilterName"; aArgs[0].Value <<= aFilterName; - aArgs[2].Name = "DocumentBaseURL"; - aArgs[2].Value <<= aBaseURL; aArgs[1].Name = "HierarchicalDocumentName"; aArgs[1].Value <<= aHierarchName; + aArgs[2].Name = "DocumentBaseURL"; + aArgs[2].Value <<= aBaseURL; + aArgs[3].Name = "SourceShellID"; + aArgs[3].Value <<= getStringPropertyValue(rObjArgs, "SourceShellID"); + aArgs[4].Name = "DestinationShellID"; + aArgs[4].Value <<= getStringPropertyValue(rObjArgs, "DestinationShellID"); xDoc->storeToStorage( xStorage, aArgs ); if ( bAttachToTheStorage ) @@ -1237,7 +1264,8 @@ void SAL_CALL OCommonEmbeddedObject::storeToEntry( const uno::Reference< embed:: aGuard.clear(); // TODO/LATER: support hierarchical name for embedded objects in embedded objects - StoreDocToStorage_Impl( xSubStorage, nTargetStorageFormat, GetBaseURLFrom_Impl( lArguments, lObjArgs ), sEntName, false ); + StoreDocToStorage_Impl( + xSubStorage, lArguments, lObjArgs, nTargetStorageFormat, sEntName, false ); aGuard.reset(); if ( bSwitchBackToLoaded ) @@ -1374,7 +1402,8 @@ void SAL_CALL OCommonEmbeddedObject::storeAsEntry( const uno::Reference< embed:: { aGuard.clear(); // TODO/LATER: support hierarchical name for embedded objects in embedded objects - StoreDocToStorage_Impl( xSubStorage, nTargetStorageFormat, GetBaseURLFrom_Impl( lArguments, lObjArgs ), sEntName, false ); + StoreDocToStorage_Impl( + xSubStorage, lArguments, lObjArgs, nTargetStorageFormat, sEntName, false ); aGuard.reset(); if ( bSwitchBackToLoaded ) @@ -1599,7 +1628,8 @@ void SAL_CALL OCommonEmbeddedObject::storeOwn() } aGuard.clear(); - StoreDocToStorage_Impl( m_xObjectStorage, nStorageFormat, GetBaseURL_Impl(), m_aEntryName, true ); + uno::Sequence<beans::PropertyValue> aEmpty; + StoreDocToStorage_Impl( m_xObjectStorage, aEmpty, aEmpty, nStorageFormat, m_aEntryName, true ); aGuard.reset(); } |