sfx2/source/doc/objstor.cxx |  113 +++++++-------------------------------------
 1 file changed, 20 insertions(+), 93 deletions(-)

New commits:
commit 37941abfd6940fdb87b23e5fa8da24173a8951a7
Author:     Mike Kaganski <[email protected]>
AuthorDate: Tue Dec 2 19:47:01 2025 +0500
Commit:     Mike Kaganski <[email protected]>
CommitDate: Sat Dec 6 13:53:44 2025 +0100

    Simplify SfxObjectShell::ExportTo using comphelper::SequenceAsHashMap
    
    Change-Id: I9deb701621afe284ac8acf9e31df338a718dcc62
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/195143
    Tested-by: Jenkins
    Reviewed-by: Mike Kaganski <[email protected]>

diff --git a/sfx2/source/doc/objstor.cxx b/sfx2/source/doc/objstor.cxx
index 9c23ef5fd8b1..5fcc7a09790e 100644
--- a/sfx2/source/doc/objstor.cxx
+++ b/sfx2/source/doc/objstor.cxx
@@ -2824,110 +2824,37 @@ bool SfxObjectShell::ExportTo( SfxMedium& rMedium )
         SfxItemSet& rItems = rMedium.GetItemSet();
         TransformItems( SID_SAVEASDOC, rItems, aOldArgs );
 
-        const css::beans::PropertyValue * pOldValue = aOldArgs.getConstArray();
-        css::uno::Sequence < css::beans::PropertyValue > aArgs ( 
aOldArgs.getLength() );
-        css::beans::PropertyValue * pNewValue = aArgs.getArray();
-
         // put in the REAL file name, and copy all PropertyValues
-        static constexpr OUString sOutputStream ( u"OutputStream"_ustr  );
-        static constexpr OUString sStream ( u"StreamForOutput"_ustr  );
-        bool bHasOutputStream = false;
-        bool bHasStream = false;
-        bool bHasBaseURL = false;
-        bool bHasFilterName = false;
-        bool bIsRedactMode = false;
-        bool bIsPreview = false;
-        std::optional<OUString> oConversionRequestOrigin;
-        sal_Int32 nEnd = aOldArgs.getLength();
-
-        for ( sal_Int32 i = 0; i < nEnd; i++ )
-        {
-            pNewValue[i] = pOldValue[i];
-            if ( pOldValue[i].Name == "FileName" )
-                pNewValue[i].Value <<= rMedium.GetName();
-            else if ( pOldValue[i].Name == sOutputStream )
-                bHasOutputStream = true;
-            else if ( pOldValue[i].Name == sStream )
-                bHasStream = true;
-            else if ( pOldValue[i].Name == "DocumentBaseURL" )
-                bHasBaseURL = true;
-            else if( pOldValue[i].Name == "FilterName" )
-                bHasFilterName = true;
-        }
+        comphelper::SequenceAsHashMap aNewArgs(aOldArgs);
+        comphelper::SequenceAsHashMap aMediumArgs(rMedium.GetArgs());
 
-        const css::uno::Sequence<css::beans::PropertyValue>& rMediumArgs = 
rMedium.GetArgs();
-        for ( sal_Int32 i = 0; i < rMediumArgs.getLength(); i++ )
-        {
-            if( rMediumArgs[i].Name == "IsPreview" )
-                rMediumArgs[i].Value >>= bIsPreview;
-            else if (rMediumArgs[i].Name == "ConversionRequestOrigin")
-            {
-                if (OUString s; rMediumArgs[i].Value >>= s)
-                    oConversionRequestOrigin = s;
-            }
-        }
+        if (aNewArgs.contains(u"FileName"_ustr))
+            aNewArgs[u"FileName"_ustr] <<= rMedium.GetName();
+
+        if (aMediumArgs.getUnpackedValueOrDefault(u"IsPreview"_ustr, false))
+            aNewArgs[u"IsPreview"_ustr] <<= true;
+
+        if (aMediumArgs.contains(u"ConversionRequestOrigin"_ustr))
+            aNewArgs[u"ConversionRequestOrigin"_ustr] = 
aMediumArgs[u"ConversionRequestOrigin"_ustr];
 
         // FIXME: Handle this inside TransformItems()
         if (rItems.GetItemState(SID_IS_REDACT_MODE) == SfxItemState::SET)
-            bIsRedactMode = true;
+            aNewArgs[u"IsRedactMode"_ustr] <<= true;
 
-        if ( !bHasOutputStream )
-        {
-            aArgs.realloc ( ++nEnd );
-            auto pArgs = aArgs.getArray();
-            pArgs[nEnd-1].Name = sOutputStream;
-            pArgs[nEnd-1].Value <<= css::uno::Reference < 
css::io::XOutputStream > ( new utl::OOutputStreamWrapper ( 
*rMedium.GetOutStream() ) );
-        }
+        if (!aNewArgs.contains(u"OutputStream"_ustr))
+            aNewArgs[u"OutputStream"_ustr] <<= 
uno::Reference<io::XOutputStream>(new 
utl::OOutputStreamWrapper(*rMedium.GetOutStream()));
 
         // add stream as well, for OOX export and maybe others
-        if ( !bHasStream )
-        {
-            aArgs.realloc ( ++nEnd );
-            auto pArgs = aArgs.getArray();
-            pArgs[nEnd-1].Name = sStream;
-            pArgs[nEnd-1].Value <<= css::uno::Reference < css::io::XStream > ( 
new utl::OStreamWrapper ( *rMedium.GetOutStream() ) );
-        }
-
-        if ( !bHasBaseURL )
-        {
-            aArgs.realloc ( ++nEnd );
-            auto pArgs = aArgs.getArray();
-            pArgs[nEnd-1].Name = "DocumentBaseURL";
-            pArgs[nEnd-1].Value <<= rMedium.GetBaseURL( true );
-        }
-
-        if( !bHasFilterName )
-        {
-            aArgs.realloc( ++nEnd );
-            auto pArgs = aArgs.getArray();
-            pArgs[nEnd-1].Name = "FilterName";
-            pArgs[nEnd-1].Value <<= aFilterName;
-        }
+        if (!aNewArgs.contains(u"StreamForOutput"_ustr))
+            aNewArgs[u"StreamForOutput"_ustr] <<= 
uno::Reference<io::XStream>(new utl::OStreamWrapper(*rMedium.GetOutStream()));
 
-        if (bIsRedactMode)
-        {
-            aArgs.realloc( ++nEnd );
-            auto pArgs = aArgs.getArray();
-            pArgs[nEnd-1].Name = "IsRedactMode";
-            pArgs[nEnd-1].Value <<= bIsRedactMode;
-        }
+        if (!aNewArgs.contains(u"DocumentBaseURL"_ustr))
+            aNewArgs[u"DocumentBaseURL"_ustr] <<= rMedium.GetBaseURL(true);
 
-        if (bIsPreview)
-        {
-            aArgs.realloc( ++nEnd );
-            auto pArgs = aArgs.getArray();
-            pArgs[nEnd-1].Name = "IsPreview";
-            pArgs[nEnd-1].Value <<= bIsPreview;
-        }
-        if (oConversionRequestOrigin)
-        {
-            aArgs.realloc( ++nEnd );
-            auto pArgs = aArgs.getArray();
-            pArgs[nEnd-1].Name = u"ConversionRequestOrigin"_ustr;
-            pArgs[nEnd-1].Value <<= *oConversionRequestOrigin;
-        }
+        if (!aNewArgs.contains(u"FilterName"_ustr))
+            aNewArgs[u"FilterName"_ustr] <<= aFilterName;
 
-        return xFilter->filter( aArgs );
+        return xFilter->filter(aNewArgs.getAsConstPropertyValueList());
         }
         catch (const css::uno::RuntimeException&)
         {

Reply via email to