sw/source/uibase/uno/loktxdoc.cxx |   94 ++++++++++++++++----------------------
 1 file changed, 40 insertions(+), 54 deletions(-)

New commits:
commit 001a00db065692a698d956f5731944921c71a198
Author:     Mike Kaganski <mike.kagan...@collabora.com>
AuthorDate: Thu Jun 12 10:38:08 2025 +0500
Commit:     Mike Kaganski <mike.kagan...@collabora.com>
CommitDate: Thu Jun 12 22:30:10 2025 +0200

    Refactor ExtractDocumentStructures core code for better extensibility
    
    Change-Id: If3062e2b0d7f9767ed7f6f7f2384534df3a28d67
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/186395
    Reviewed-by: Miklos Vajna <vmik...@collabora.com>
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com>
    (cherry picked from commit 60c61dfa74177365488cb01b0ff1b17da0719289)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/186434
    Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com>
    Tested-by: Jenkins

diff --git a/sw/source/uibase/uno/loktxdoc.cxx 
b/sw/source/uibase/uno/loktxdoc.cxx
index 518d33dc1b72..203a96bb2ce1 100644
--- a/sw/source/uibase/uno/loktxdoc.cxx
+++ b/sw/source/uibase/uno/loktxdoc.cxx
@@ -414,23 +414,13 @@ void GetField(tools::JsonWriter& rJsonWriter, SwDocShell* 
pDocShell,
     rJsonWriter.put("name", rRefmark.GetRefName().toString());
 }
 
-/// Implements getCommandValues(".uno:ExtractDocumentStructures").
-///
-/// Parameters:
-///
-/// - filter: To filter what document structure types to extract
-///   now, only contentcontrol is supported.
-void GetDocStructure(tools::JsonWriter& rJsonWriter, SwDocShell* /*pDocShell*/,
-                     const std::map<OUString, OUString>& rArguments,
-                     const uno::Reference<container::XIndexAccess>& 
xContentControls)
+/// Implements getCommandValues(".uno:ExtractDocumentStructures") for content 
controls
+void GetDocStructureContentControls(tools::JsonWriter& rJsonWriter, const 
SwDocShell* pDocShell)
 {
-    auto it = rArguments.find(u"filter"_ustr);
-    if (it != rArguments.end())
-    {
-        // If filter is present but we are filtering not to contentcontrols
-        if (!it->second.equals(u"contentcontrol"_ustr))
-            return;
-    }
+    uno::Reference<container::XIndexAccess> xContentControls
+        = pDocShell->GetBaseModel()->getContentControls();
+    if (!xContentControls)
+        return;
 
     int iCCcount = xContentControls->getCount();
 
@@ -530,17 +520,13 @@ void GetDocStructure(tools::JsonWriter& rJsonWriter, 
SwDocShell* /*pDocShell*/,
     }
 }
 
-void GetDocStructureCharts(tools::JsonWriter& rJsonWriter, SwDocShell* 
/*pDocShell*/,
-                           const std::map<OUString, OUString>& rArguments,
-                           const uno::Reference<container::XIndexAccess>& 
xEmbeddeds)
+/// Implements getCommandValues(".uno:ExtractDocumentStructures") for charts
+void GetDocStructureCharts(tools::JsonWriter& rJsonWriter, const SwDocShell* 
pDocShell)
 {
-    auto it = rArguments.find(u"filter"_ustr);
-    if (it != rArguments.end())
-    {
-        // If filter is present but we are filtering not to charts
-        if (!it->second.equals(u"charts"_ustr))
-            return;
-    }
+    uno::Reference<container::XIndexAccess> xEmbeddeds(
+        pDocShell->GetBaseModel()->getEmbeddedObjects(), uno::UNO_QUERY);
+    if (!xEmbeddeds)
+        return;
 
     sal_Int32 nEOcount = xEmbeddeds->getCount();
 
@@ -648,25 +634,11 @@ void GetDocStructureCharts(tools::JsonWriter& 
rJsonWriter, SwDocShell* /*pDocShe
     }
 }
 
-void GetDocStructureDocProps(tools::JsonWriter& rJsonWriter, const SwDocShell* 
pDocShell,
-                             const std::map<OUString, OUString>& rArguments)
+/// Implements getCommandValues(".uno:ExtractDocumentStructures") for document 
properties
+void GetDocStructureDocProps(tools::JsonWriter& rJsonWriter, const SwDocShell* 
pDocShell)
 {
-    auto it = rArguments.find(u"filter"_ustr);
-    if (it != rArguments.end())
-    {
-        // If filter is present but we are filtering not to document properties
-        if (!it->second.equals(u"docprops"_ustr))
-            return;
-    }
-
-    uno::Reference<document::XDocumentPropertiesSupplier> 
xDocumentPropsSupplier(
-        pDocShell->GetModel(), uno::UNO_QUERY);
-    if (!xDocumentPropsSupplier.is())
-        return;
-
-    //uno::Reference<document::XDocumentProperties> xDocProps();
     uno::Reference<document::XDocumentProperties2> xDocProps(
-        xDocumentPropsSupplier->getDocumentProperties(), uno::UNO_QUERY);
+        pDocShell->GetBaseModel()->getDocumentProperties(), uno::UNO_QUERY);
     if (!xDocProps.is())
         return;
 
@@ -850,6 +822,30 @@ void GetDocStructureDocProps(tools::JsonWriter& 
rJsonWriter, const SwDocShell* p
     }
 }
 
+/// Implements getCommandValues(".uno:ExtractDocumentStructures").
+///
+/// Parameters:
+///
+/// - filter: To filter what document structure types to extract
+void GetDocStructure(tools::JsonWriter& rJsonWriter, const SwDocShell* 
pDocShell,
+                     const std::map<OUString, OUString>& rArguments)
+{
+    auto commentsNode = rJsonWriter.startNode("DocStructure");
+
+    OUString filter;
+    if (auto it = rArguments.find(u"filter"_ustr); it != rArguments.end())
+        filter = it->second;
+
+    if (filter.isEmpty() || filter == "charts")
+        GetDocStructureCharts(rJsonWriter, pDocShell);
+
+    if (filter.isEmpty() || filter == "contentcontrol")
+        GetDocStructureContentControls(rJsonWriter, pDocShell);
+
+    if (filter.isEmpty() || filter == "docprops")
+        GetDocStructureDocProps(rJsonWriter, pDocShell);
+}
+
 /// Implements getCommandValues(".uno:Sections").
 ///
 /// Parameters:
@@ -942,17 +938,7 @@ void SwXTextDocument::getCommandValues(tools::JsonWriter& 
rJsonWriter, std::stri
     }
     else if (o3tl::starts_with(rCommand, aExtractDocStructure))
     {
-        auto commentsNode = rJsonWriter.startNode("DocStructure");
-
-        uno::Reference<container::XIndexAccess> 
xEmbeddeds(getEmbeddedObjects(), uno::UNO_QUERY);
-        if (xEmbeddeds.is())
-        {
-            GetDocStructureCharts(rJsonWriter, m_pDocShell, aMap, xEmbeddeds);
-        }
-
-        uno::Reference<container::XIndexAccess> xContentControls = 
getContentControls();
-        GetDocStructure(rJsonWriter, m_pDocShell, aMap, xContentControls);
-        GetDocStructureDocProps(rJsonWriter, m_pDocShell, aMap);
+        GetDocStructure(rJsonWriter, m_pDocShell, aMap);
     }
     else if (o3tl::starts_with(rCommand, aLayout))
     {

Reply via email to