flatten SwXMLTextBlocks::GetMacroTable

Change-Id: Ie3fcb4bb350796b10d0e10aadc58d57b71d480a3
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/86475
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
diff --git a/sw/source/core/swg/SwXMLTextBlocks1.cxx b/sw/source/core/swg/SwXMLTextBlocks1.cxx
index 782284c..36a69ff 100644
--- a/sw/source/core/swg/SwXMLTextBlocks1.cxx
+++ b/sw/source/core/swg/SwXMLTextBlocks1.cxx
@@ -168,100 +168,90 @@ ErrCode SwXMLTextBlocks::GetMacroTable( sal_uInt16 nIdx,
    m_aLong = m_aNames[nIdx]->aLong;
    aPackageName = m_aNames[nIdx]->aPackageName;

    ErrCode nRet = ERRCODE_NONE;

    // open stream in proper sub-storage
    CloseFile();
    nRet = OpenFile();
    if ( ERRCODE_NONE == nRet )
    if ( OpenFile() != ERRCODE_NONE )
        return ERR_SWG_READ_ERROR;

    try
    {
        xRoot = xBlkRoot->openStorageElement( aPackageName, embed::ElementModes::READ );
        bool bOasis = SotStorage::GetVersion( xRoot ) > SOFFICE_FILEFORMAT_60;

        uno::Reference < io::XStream > xDocStream = xRoot->openStreamElement(
            "atevent.xml", embed::ElementModes::READ );
        OSL_ENSURE(xDocStream.is(), "Can't create stream");
        if ( !xDocStream.is() )
            return ERR_SWG_READ_ERROR;

        uno::Reference<io::XInputStream> xInputStream = xDocStream->getInputStream();

        // prepare ParserInputSrouce
        xml::sax::InputSource aParserInput;
        aParserInput.sSystemId = m_aName;
        aParserInput.aInputStream = xInputStream;

        // get service factory
        uno::Reference< uno::XComponentContext > xContext =
            comphelper::getProcessComponentContext();

        // get parser
        uno::Reference< xml::sax::XParser > xParser = xml::sax::Parser::create( xContext );

        // create descriptor and reference to it. Either
        // both or neither must be kept because of the
        // reference counting!
        SvMacroTableEventDescriptor* pDescriptor =
            new SvMacroTableEventDescriptor(aAutotextEvents);
        uno::Reference<XNameReplace> xReplace = pDescriptor;
        Sequence<Any> aFilterArguments( 1 );
        aFilterArguments[0] <<= xReplace;

        // get filter
        OUString sFilterComponent = bOasis
            ? OUString("com.sun.star.comp.Writer.XMLOasisAutotextEventsImporter")
            : OUString("com.sun.star.comp.Writer.XMLAutotextEventsImporter");
        uno::Reference< xml::sax::XDocumentHandler > xFilter(
            xContext->getServiceManager()->createInstanceWithArgumentsAndContext(
                sFilterComponent, aFilterArguments, xContext),
            UNO_QUERY );
        OSL_ENSURE( xFilter.is(), "can't instantiate autotext-events filter");
        if ( !xFilter.is() )
            return ERR_SWG_READ_ERROR;

        // connect parser and filter
        xParser->setDocumentHandler( xFilter );

        // parse the stream
        try
        {
            xRoot = xBlkRoot->openStorageElement( aPackageName, embed::ElementModes::READ );
            bool bOasis = SotStorage::GetVersion( xRoot ) > SOFFICE_FILEFORMAT_60;

            uno::Reference < io::XStream > xDocStream = xRoot->openStreamElement(
                "atevent.xml", embed::ElementModes::READ );
            OSL_ENSURE(xDocStream.is(), "Can't create stream");
            if ( xDocStream.is() )
            {
                uno::Reference<io::XInputStream> xInputStream = xDocStream->getInputStream();

                // prepare ParserInputSrouce
                xml::sax::InputSource aParserInput;
                aParserInput.sSystemId = m_aName;
                aParserInput.aInputStream = xInputStream;

                // get service factory
                uno::Reference< uno::XComponentContext > xContext =
                    comphelper::getProcessComponentContext();

                // get parser
                uno::Reference< xml::sax::XParser > xParser = xml::sax::Parser::create( xContext );

                // create descriptor and reference to it. Either
                // both or neither must be kept because of the
                // reference counting!
                SvMacroTableEventDescriptor* pDescriptor =
                    new SvMacroTableEventDescriptor(aAutotextEvents);
                uno::Reference<XNameReplace> xReplace = pDescriptor;
                Sequence<Any> aFilterArguments( 1 );
                aFilterArguments[0] <<= xReplace;

                // get filter
                OUString sFilterComponent = bOasis
                    ? OUString("com.sun.star.comp.Writer.XMLOasisAutotextEventsImporter")
                    : OUString("com.sun.star.comp.Writer.XMLAutotextEventsImporter");
                uno::Reference< xml::sax::XDocumentHandler > xFilter(
                    xContext->getServiceManager()->createInstanceWithArgumentsAndContext(
                        sFilterComponent, aFilterArguments, xContext),
                    UNO_QUERY );
                OSL_ENSURE( xFilter.is(),
                            "can't instantiate atevent filter");
                if ( xFilter.is() )
                {
                    // connect parser and filter
                    xParser->setDocumentHandler( xFilter );

                    // parse the stream
                    try
                    {
                        xParser->parseStream( aParserInput );
                    }
                    catch( xml::sax::SAXParseException& )
                    {
                        // workaround for #83452#: SetSize doesn't work
                        // nRet = ERR_SWG_READ_ERROR;
                    }
                    catch( xml::sax::SAXException& )
                    {
                        nRet = ERR_SWG_READ_ERROR;
                    }
                    catch( io::IOException& )
                    {
                        nRet = ERR_SWG_READ_ERROR;
                    }

                    // and finally, copy macro into table
                    if (ERRCODE_NONE == nRet)
                        pDescriptor->copyMacrosIntoTable(rMacroTable);
                }
                else
                    nRet = ERR_SWG_READ_ERROR;
            }
            else
                nRet = ERR_SWG_READ_ERROR;
            xParser->parseStream( aParserInput );
        }
        catch( uno::Exception& )
        catch( xml::sax::SAXParseException& )
        {
            nRet = ERR_SWG_READ_ERROR;
            // workaround for #83452#: SetSize doesn't work
            // nRet = ERR_SWG_READ_ERROR;
        }
        catch( xml::sax::SAXException& )
        {
            return ERR_SWG_READ_ERROR;
        }
        catch( io::IOException& )
        {
            return ERR_SWG_READ_ERROR;
        }

        // and finally, copy macro into table
        pDescriptor->copyMacrosIntoTable(rMacroTable);
    }
    else
        nRet = ERR_SWG_READ_ERROR;
    catch( uno::Exception& )
    {
        TOOLS_WARN_EXCEPTION("sw", "");
        return ERR_SWG_READ_ERROR;
    }

    // success!
    return nRet;
    return ERRCODE_NONE;
}

ErrCode SwXMLTextBlocks::GetBlockText( const OUString& rShort, OUString& rText )