summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNoel Grandin <noelgrandin@gmail.com>2020-01-08 09:37:10 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2020-01-08 12:19:13 +0100
commit7a9ce835c9e299042813cf328e283a2c9e5742bc (patch)
tree059c02e1fbf19f238328d2d41946739effc9b114
parent78d4e78c43f688a3617d659774d985d466bb39dc (diff)
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@collabora.co.uk>
-rw-r--r--dbaccess/source/filter/xml/xmlfilter.cxx113
-rw-r--r--dbaccess/source/filter/xml/xmlfilter.hxx6
-rw-r--r--xmloff/source/core/xmlimp.cxx2
3 files changed, 51 insertions, 70 deletions
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 );
}
}