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

Noel Grandin (via logerrit) logerrit at kemper.freedesktop.org
Wed Jan 8 11:19:43 UTC 2020


 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 <noelgrandin at gmail.com>
AuthorDate: Wed Jan 8 09:37:10 2020 +0200
Commit:     Noel Grandin <noel.grandin at 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.grandin at 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 );
         }
     }
 


More information about the Libreoffice-commits mailing list