sw/inc/rdfhelper.hxx | 4 ++++ sw/source/core/doc/rdfhelper.cxx | 9 +++++++++ sw/source/core/edit/edfcol.cxx | 4 ++++ 3 files changed, 17 insertions(+)
New commits: commit 8a5a9e05cce756e9f7aa11b86972939a8a70a839 Author: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> Date: Fri Nov 10 13:06:51 2017 +0900 TSCP: bail out quickly in paragraph classification check on save Before saving a document we need to check that the document level classification is at the higher or same level as the individual paragraph level classification is. The trouble here is tha this can be quite a costly operation, so bail out quickly if we don't detect that no paragraph classification has been applied to the content by checking if we have the RDF metadata present or not. Change-Id: Iaef29de7e138937a5c1881cf34c9075fb37ba87d Reviewed-on: https://gerrit.libreoffice.org/44573 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Tomaž Vajngerl <qui...@gmail.com> diff --git a/sw/inc/rdfhelper.hxx b/sw/inc/rdfhelper.hxx index 33c10eece3ed..bf72a5be40be 100644 --- a/sw/inc/rdfhelper.hxx +++ b/sw/inc/rdfhelper.hxx @@ -45,6 +45,10 @@ public: const css::uno::Reference<css::rdf::XResource>& xSubject, const OUString& rKey, const OUString& rValue); + /// Check if a graph of type rType exists. + static bool hasMetadataGraph(const css::uno::Reference<css::frame::XModel>& xModel, + const OUString& rType); + /// Remove an (XResource, key, value) statement in the graph of type rType, if it exists. static void removeStatement(const css::uno::Reference<css::frame::XModel>& xModel, const OUString& rType, diff --git a/sw/source/core/doc/rdfhelper.cxx b/sw/source/core/doc/rdfhelper.cxx index 3e146c80db39..4834dd2a5a12 100644 --- a/sw/source/core/doc/rdfhelper.cxx +++ b/sw/source/core/doc/rdfhelper.cxx @@ -73,6 +73,15 @@ void SwRDFHelper::addStatement(const css::uno::Reference<css::frame::XModel>& xM xGraph->addStatement(xSubject, xKey, xValue); } +bool SwRDFHelper::hasMetadataGraph(const css::uno::Reference<css::frame::XModel>& xModel, const OUString& rType) +{ + uno::Reference<uno::XComponentContext> xComponentContext(comphelper::getProcessComponentContext()); + uno::Reference<rdf::XURI> xType = rdf::URI::create(xComponentContext, rType); + uno::Reference<rdf::XDocumentMetadataAccess> xDocumentMetadataAccess(xModel, uno::UNO_QUERY); + uno::Sequence< uno::Reference<rdf::XURI> > aGraphNames = xDocumentMetadataAccess->getMetadataGraphsWithType(xType); + return aGraphNames.hasElements(); +} + void SwRDFHelper::removeStatement(const css::uno::Reference<css::frame::XModel>& xModel, const OUString& rType, const css::uno::Reference<css::rdf::XResource>& xSubject, diff --git a/sw/source/core/edit/edfcol.cxx b/sw/source/core/edit/edfcol.cxx index fc7ffcfa9b86..00fb5766c836 100644 --- a/sw/source/core/edit/edfcol.cxx +++ b/sw/source/core/edit/edfcol.cxx @@ -2035,6 +2035,10 @@ void SwEditShell::ClassifyDocPerHighestParagraphClass() if (!pDocShell) return; + // bail out as early as possible if we don't have paragraph classification + if (!SwRDFHelper::hasMetadataGraph(pDocShell->GetBaseModel(), MetaNS)) + return; + SfxClassificationHelper aHelper(pDocShell->getDocProperties()); const OUString sHighestParaClass = lcl_GetHighestClassificationParagraphClass(GetCursor());
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits