dbaccess/source/filter/xml/xmlfilter.cxx | 113 +++++++++++++------------------ dbaccess/source/filter/xml/xmlfilter.hxx | 6 - xmloff/source/core/xmlimp.cxx | 2 3 files changed, 51 insertions(+), 70 deletions(-)
New commits: commit 7a9ce835c9e299042813cf328e283a2c9e5742bc Author: Noel Grandin <noelgran...@gmail.com> AuthorDate: Wed Jan 8 09:37:10 2020 +0200 Commit: Noel Grandin <noel.gran...@collabora.co.uk> CommitDate: Wed Jan 8 12:19:13 2020 +0100 make ODBFilter return a fast context And (*) use the fast parser already inside ODBFilter (*) pass around ODBFilter explicitly to make the code easier to read Change-Id: Ib0dd24e530b32b5edb94f150390df1e405c3efb9 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/86248 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk> diff --git a/dbaccess/source/filter/xml/xmlfilter.cxx b/dbaccess/source/filter/xml/xmlfilter.cxx index 2dc7c17fefc3..d0b93e21f80d 100644 --- a/dbaccess/source/filter/xml/xmlfilter.cxx +++ b/dbaccess/source/filter/xml/xmlfilter.cxx @@ -39,7 +39,7 @@ #include <xmloff/txtimp.hxx> #include <xmloff/nmspmap.hxx> #include <com/sun/star/xml/sax/InputSource.hpp> -#include <com/sun/star/xml/sax/Parser.hpp> +#include <com/sun/star/xml/sax/FastParser.hpp> #include <com/sun/star/xml/sax/SAXParseException.hpp> #include <xmloff/ProgressBarHelper.hxx> #include <sfx2/docfile.hxx> @@ -84,7 +84,7 @@ static ErrCode ReadThroughComponent( const uno::Reference<XInputStream>& xInputStream, const uno::Reference<XComponent>& xModelComponent, const uno::Reference<XComponentContext> & rxContext, - const uno::Reference< XDocumentHandler >& _xFilter ) + ODBFilter& _rFilter ) { OSL_ENSURE(xInputStream.is(), "input stream missing"); OSL_ENSURE(xModelComponent.is(), "document missing"); @@ -94,26 +94,13 @@ static ErrCode ReadThroughComponent( InputSource aParserInput; aParserInput.aInputStream = xInputStream; - // get parser - uno::Reference< XParser > xParser = Parser::create(rxContext); - SAL_INFO("dbaccess", "parser created" ); - - // get filter - OSL_ENSURE( _xFilter.is(), "Can't instantiate filter component." ); - if( !_xFilter.is() ) - return ErrCode(1); - - // connect parser and filter - xParser->setDocumentHandler( _xFilter ); - // connect model and filter - uno::Reference < XImporter > xImporter( _xFilter, UNO_QUERY ); - xImporter->setTargetDocument( xModelComponent ); + _rFilter.setTargetDocument( xModelComponent ); // finally, parser the stream try { - xParser->parseStream( aParserInput ); + _rFilter.parseStream( aParserInput ); } catch (const SAXParseException&) { @@ -147,7 +134,7 @@ static ErrCode ReadThroughComponent( const char* pStreamName, const char* pCompatibilityStreamName, const uno::Reference<XComponentContext> & rxContext, - const uno::Reference< XDocumentHandler >& _xFilter) + ODBFilter& _rFilter) { OSL_ENSURE( xStorage.is(), "Need storage!"); OSL_ENSURE(nullptr != pStreamName, "Please, please, give me a name!"); @@ -192,7 +179,7 @@ static ErrCode ReadThroughComponent( return ReadThroughComponent( xInputStream ,xModelComponent ,rxContext - ,_xFilter ); + ,_rFilter ); } // TODO/LATER: better error handling @@ -371,7 +358,7 @@ bool ODBFilter::implImport( const Sequence< PropertyValue >& rDescriptor ) ,"settings.xml" ,"Settings.xml" ,GetComponentContext() - ,this + ,*this ); if ( nRet == ERRCODE_NONE ) @@ -380,7 +367,7 @@ bool ODBFilter::implImport( const Sequence< PropertyValue >& rDescriptor ) ,"content.xml" ,"Content.xml" ,GetComponentContext() - ,this + ,*this ); bRet = nRet == ERRCODE_NONE; @@ -413,10 +400,8 @@ namespace { class DBXMLDocumentSettingsContext : public SvXMLImportContext { public: - DBXMLDocumentSettingsContext(SvXMLImport & rImport, - sal_uInt16 const nPrefix, - const OUString& rLocalName) - : SvXMLImportContext(rImport, nPrefix, rLocalName) + DBXMLDocumentSettingsContext(SvXMLImport & rImport) + : SvXMLImportContext(rImport) { } @@ -430,15 +415,20 @@ public: } return nullptr; } + virtual void SAL_CALL startFastElement( sal_Int32 /*nElement*/, + const css::uno::Reference< css::xml::sax::XFastAttributeList >& ) override {} + virtual uno::Reference< xml::sax::XFastContextHandler > SAL_CALL createFastChildContext( + sal_Int32 /*nElement*/, const uno::Reference< xml::sax::XFastAttributeList >& /*xAttrList*/ ) override + { + return nullptr; + } }; class DBXMLDocumentStylesContext : public SvXMLImportContext { public: - DBXMLDocumentStylesContext(SvXMLImport & rImport, - sal_uInt16 const nPrefix, - const OUString& rLocalName) - : SvXMLImportContext(rImport, nPrefix, rLocalName) + DBXMLDocumentStylesContext(SvXMLImport & rImport) + : SvXMLImportContext(rImport) { } @@ -466,6 +456,13 @@ public: return pContext; } + virtual void SAL_CALL startFastElement( sal_Int32 /*nElement*/, + const css::uno::Reference< css::xml::sax::XFastAttributeList >& ) override {} + virtual uno::Reference< xml::sax::XFastContextHandler > SAL_CALL createFastChildContext( + sal_Int32 /*nElement*/, const uno::Reference< xml::sax::XFastAttributeList >& /*xAttrList*/ ) override + { + return nullptr; + } }; class DBXMLDocumentBodyContext : public SvXMLImportContext @@ -496,10 +493,8 @@ public: class DBXMLDocumentContentContext : public SvXMLImportContext { public: - DBXMLDocumentContentContext(SvXMLImport & rImport, - sal_uInt16 const nPrefix, - const OUString& rLocalName) - : SvXMLImportContext(rImport, nPrefix, rLocalName) + DBXMLDocumentContentContext(SvXMLImport & rImport) + : SvXMLImportContext(rImport) { } @@ -529,35 +524,43 @@ public: return pContext; } + virtual void SAL_CALL startFastElement( sal_Int32 /*nElement*/, + const css::uno::Reference< css::xml::sax::XFastAttributeList >& ) override {} + virtual uno::Reference< xml::sax::XFastContextHandler > SAL_CALL createFastChildContext( + sal_Int32 /*nElement*/, const uno::Reference< xml::sax::XFastAttributeList >& /*xAttrList*/ ) override + { + return nullptr; + } }; } -SvXMLImportContext* ODBFilter::CreateDocumentContext(sal_uInt16 const nPrefix, - const OUString& rLocalName, - const uno::Reference< css::xml::sax::XAttributeList >& xAttrList ) +SvXMLImportContext* ODBFilter::CreateFastContext(sal_Int32 nElement, + const ::css::uno::Reference< ::css::xml::sax::XFastAttributeList >& xAttrList ) { SvXMLImportContext *pContext = nullptr; - const SvXMLTokenMap& rTokenMap = GetDocElemTokenMap(); - switch( rTokenMap.Get( nPrefix, rLocalName ) ) + switch( nElement ) { - case XML_TOK_DOC_SETTINGS: + case XML_ELEMENT(OFFICE, XML_DOCUMENT_SETTINGS): + case XML_ELEMENT(OOO, XML_DOCUMENT_SETTINGS): GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP ); - pContext = new DBXMLDocumentSettingsContext(*this, nPrefix, rLocalName); + pContext = new DBXMLDocumentSettingsContext(*this); break; - case XML_TOK_DOC_STYLES: - pContext = new DBXMLDocumentStylesContext(*this, nPrefix, rLocalName); + case XML_ELEMENT(OFFICE, XML_DOCUMENT_STYLES): + case XML_ELEMENT(OOO, XML_DOCUMENT_STYLES): + pContext = new DBXMLDocumentStylesContext(*this); break; - case XML_TOK_DOC_CONTENT: - pContext = new DBXMLDocumentContentContext(*this, nPrefix, rLocalName); + case XML_ELEMENT(OFFICE, XML_DOCUMENT_CONTENT): + case XML_ELEMENT(OOO, XML_DOCUMENT_CONTENT): + pContext = new DBXMLDocumentContentContext(*this); break; default: break; } if ( !pContext ) - pContext = SvXMLImport::CreateDocumentContext( nPrefix, rLocalName, xAttrList ); + pContext = SvXMLImport::CreateFastContext( nElement, xAttrList ); return pContext; } @@ -614,26 +617,6 @@ void ODBFilter::fillPropertyMap(const Any& _rValue,TPropertyNameMap& _rMap) } - -const SvXMLTokenMap& ODBFilter::GetDocElemTokenMap() const -{ - if (!m_pDocElemTokenMap) - { - static const SvXMLTokenMapEntry aElemTokenMap[]= - { - { XML_NAMESPACE_OFFICE, XML_DOCUMENT_SETTINGS, XML_TOK_DOC_SETTINGS }, - { XML_NAMESPACE_OOO, XML_DOCUMENT_SETTINGS, XML_TOK_DOC_SETTINGS }, - { XML_NAMESPACE_OFFICE, XML_DOCUMENT_STYLES, XML_TOK_DOC_STYLES }, - { XML_NAMESPACE_OOO, XML_DOCUMENT_STYLES, XML_TOK_DOC_STYLES }, - { XML_NAMESPACE_OFFICE, XML_DOCUMENT_CONTENT, XML_TOK_DOC_CONTENT }, - { XML_NAMESPACE_OOO, XML_DOCUMENT_CONTENT, XML_TOK_DOC_CONTENT }, - XML_TOKEN_MAP_END - }; - m_pDocElemTokenMap.reset(new SvXMLTokenMap( aElemTokenMap )); - } - return *m_pDocElemTokenMap; -} - const SvXMLTokenMap& ODBFilter::GetDocContentElemTokenMap() const { if (!m_pDocContentElemTokenMap) diff --git a/dbaccess/source/filter/xml/xmlfilter.hxx b/dbaccess/source/filter/xml/xmlfilter.hxx index 87704d2ade8a..b8929caa56d6 100644 --- a/dbaccess/source/filter/xml/xmlfilter.hxx +++ b/dbaccess/source/filter/xml/xmlfilter.hxx @@ -98,9 +98,8 @@ public: protected: // SvXMLImport - virtual SvXMLImportContext *CreateDocumentContext(sal_uInt16 nPrefix, - const OUString& rLocalName, - const css::uno::Reference< css::xml::sax::XAttributeList >& xAttrList ) override; + virtual SvXMLImportContext *CreateFastContext(sal_Int32 Element, + const ::css::uno::Reference< ::css::xml::sax::XFastAttributeList >& xAttrList ) override; virtual ~ODBFilter() throw() override; public: @@ -128,7 +127,6 @@ public: const TPropertyNameMap& getQuerySettings() const { return m_aQuerySettings;} - const SvXMLTokenMap& GetDocElemTokenMap() const; const SvXMLTokenMap& GetDocContentElemTokenMap() const; const SvXMLTokenMap& GetDatabaseElemTokenMap() const; const SvXMLTokenMap& GetDataSourceElemTokenMap() const; diff --git a/xmloff/source/core/xmlimp.cxx b/xmloff/source/core/xmlimp.cxx index 65016341d2de..0d9ea09be9f5 100644 --- a/xmloff/source/core/xmlimp.cxx +++ b/xmloff/source/core/xmlimp.cxx @@ -744,7 +744,7 @@ void SAL_CALL SvXMLImport::startElement( const OUString& rName, Sequence < OUString > aParams { rName }; SetError( XMLERROR_FLAG_SEVERE|XMLERROR_UNKNOWN_ROOT, - aParams, "Root element unknown", xDummyLocator ); + aParams, "Root element " + aLocalName + " unknown", xDummyLocator ); } } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits