[Libreoffice-commits] core.git: include/sfx2 sfx2/source sw/source

Miklos Vajna vmiklos at collabora.co.uk
Tue May 17 11:17:02 UTC 2016


 include/sfx2/classificationhelper.hxx     |    2 
 sfx2/source/view/classificationhelper.cxx |  116 ++++++++++++++++--------------
 sw/source/core/edit/edfcol.cxx            |   14 ++-
 3 files changed, 75 insertions(+), 57 deletions(-)

New commits:
commit f935bf47d1928f3b4df9cde600ce365cd63e485d
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Tue May 17 12:01:57 2016 +0200

    sfx2 classification: do not hardcode policy type in SfxClassificationParser
    
    TSCP_BAILSv1 says:
    
    "{type} designates the type of a policy. In BAILS 1.0, the recognized
    string values are: ExportControl, NationalSecurity and
    IntellectualProperty"
    
    Previously {type} was always assumed to be IntellectualProperty. Change
    the parser to not hardcode the policy type anymore; also change the
    getter for the string constants to not contain this prefix.
    
    SfxClassificationHelper::Impl still doesn't support multiple policy
    types, though.
    
    Change-Id: If52b40577f1c5751dacb83617fb28862d9d5bdb3
    Reviewed-on: https://gerrit.libreoffice.org/25055
    Reviewed-by: Miklos Vajna <vmiklos at collabora.co.uk>
    Tested-by: Jenkins <ci at libreoffice.org>

diff --git a/include/sfx2/classificationhelper.hxx b/include/sfx2/classificationhelper.hxx
index 5cf0cdd..0ece553 100644
--- a/include/sfx2/classificationhelper.hxx
+++ b/include/sfx2/classificationhelper.hxx
@@ -75,6 +75,8 @@ public:
     static const OUString& PROP_DOCFOOTER();
     /// Brief text formatted as a watermark on each document's page.
     static const OUString& PROP_DOCWATERMARK();
+    /// Get the property prefix for the IntellectualProperty policy type.
+    static const OUString& PROP_PREFIX_INTELLECTUALPROPERTY();
 };
 
 #endif
diff --git a/sfx2/source/view/classificationhelper.cxx b/sfx2/source/view/classificationhelper.cxx
index 5c581d5..0bc615f 100644
--- a/sfx2/source/view/classificationhelper.cxx
+++ b/sfx2/source/view/classificationhelper.cxx
@@ -42,13 +42,13 @@ namespace
 
 const OUString& PROP_BACNAME()
 {
-    static OUString sProp("urn:bails:IntellectualProperty:BusinessAuthorizationCategory:Name");
+    static OUString sProp("BusinessAuthorizationCategory:Name");
     return sProp;
 }
 
 const OUString& PROP_STARTVALIDITY()
 {
-    static OUString sProp("urn:bails:IntellectualProperty:Authorization:StartValidity");
+    static OUString sProp("Authorization:StartValidity");
     return sProp;
 }
 
@@ -60,13 +60,13 @@ const OUString& PROP_NONE()
 
 const OUString& PROP_IMPACTSCALE()
 {
-    static OUString sProp("urn:bails:IntellectualProperty:Impact:Scale");
+    static OUString sProp("Impact:Scale");
     return sProp;
 }
 
 const OUString& PROP_IMPACTLEVEL()
 {
-    static OUString sProp("urn:bails:IntellectualProperty:Impact:Level:Confidentiality");
+    static OUString sProp("Impact:Level:Confidentiality");
     return sProp;
 }
 
@@ -178,39 +178,39 @@ throw (xml::sax::SAXException, uno::RuntimeException, std::exception)
             m_aCategories.push_back(SfxClassificationCategory());
             SfxClassificationCategory& rCategory = m_aCategories.back();
             rCategory.m_aName = aName;
-            rCategory.m_aLabels["urn:bails:IntellectualProperty:PolicyAuthority:Name"] = m_aPolicyAuthorityName;
-            rCategory.m_aLabels["urn:bails:IntellectualProperty:Policy:Name"] = m_aPolicyName;
-            rCategory.m_aLabels["urn:bails:IntellectualProperty:BusinessAuthorization:Identifier"] = m_aProgramID;
-            rCategory.m_aLabels["urn:bails:IntellectualProperty:BusinessAuthorizationCategory:Identifier"] = aIdentifier;
+            rCategory.m_aLabels["PolicyAuthority:Name"] = m_aPolicyAuthorityName;
+            rCategory.m_aLabels["Policy:Name"] = m_aPolicyName;
+            rCategory.m_aLabels["BusinessAuthorization:Identifier"] = m_aProgramID;
+            rCategory.m_aLabels["BusinessAuthorizationCategory:Identifier"] = aIdentifier;
 
             // Also initialize defaults.
-            rCategory.m_aLabels["urn:bails:IntellectualProperty:PolicyAuthority:Identifier"] = PROP_NONE();
-            rCategory.m_aLabels["urn:bails:IntellectualProperty:PolicyAuthority:Country"] = PROP_NONE();
-            rCategory.m_aLabels["urn:bails:IntellectualProperty:Policy:Identifier"] = PROP_NONE();
-            rCategory.m_aLabels["urn:bails:IntellectualProperty:BusinessAuthorization:Name"] = PROP_NONE();
-            rCategory.m_aLabels["urn:bails:IntellectualProperty:BusinessAuthorization:Locator"] = PROP_NONE();
-            rCategory.m_aLabels["urn:bails:IntellectualProperty:BusinessAuthorizationCategory:Identifier:OID"] = PROP_NONE();
-            rCategory.m_aLabels["urn:bails:IntellectualProperty:BusinessAuthorizationCategory:Locator"] = PROP_NONE();
-            rCategory.m_aLabels["urn:bails:IntellectualProperty:BusinessAuthorization:Locator"] = PROP_NONE();
-            rCategory.m_aLabels["urn:bails:IntellectualProperty:MarkingPrecedence"] = PROP_NONE();
-            rCategory.m_aLabels["urn:bails:IntellectualProperty:Marking:general-summary"].clear();
-            rCategory.m_aLabels["urn:bails:IntellectualProperty:Marking:general-warning-statement"].clear();
-            rCategory.m_aLabels["urn:bails:IntellectualProperty:Marking:general-warning-statement:ext:2"].clear();
-            rCategory.m_aLabels["urn:bails:IntellectualProperty:Marking:general-warning-statement:ext:3"].clear();
-            rCategory.m_aLabels["urn:bails:IntellectualProperty:Marking:general-warning-statement:ext:4"].clear();
-            rCategory.m_aLabels["urn:bails:IntellectualProperty:Marking:general-distribution-statement"].clear();
-            rCategory.m_aLabels["urn:bails:IntellectualProperty:Marking:general-distribution-statement:ext:2"].clear();
-            rCategory.m_aLabels["urn:bails:IntellectualProperty:Marking:general-distribution-statement:ext:3"].clear();
-            rCategory.m_aLabels["urn:bails:IntellectualProperty:Marking:general-distribution-statement:ext:4"].clear();
+            rCategory.m_aLabels["PolicyAuthority:Identifier"] = PROP_NONE();
+            rCategory.m_aLabels["PolicyAuthority:Country"] = PROP_NONE();
+            rCategory.m_aLabels["Policy:Identifier"] = PROP_NONE();
+            rCategory.m_aLabels["BusinessAuthorization:Name"] = PROP_NONE();
+            rCategory.m_aLabels["BusinessAuthorization:Locator"] = PROP_NONE();
+            rCategory.m_aLabels["BusinessAuthorizationCategory:Identifier:OID"] = PROP_NONE();
+            rCategory.m_aLabels["BusinessAuthorizationCategory:Locator"] = PROP_NONE();
+            rCategory.m_aLabels["BusinessAuthorization:Locator"] = PROP_NONE();
+            rCategory.m_aLabels["MarkingPrecedence"] = PROP_NONE();
+            rCategory.m_aLabels["Marking:general-summary"].clear();
+            rCategory.m_aLabels["Marking:general-warning-statement"].clear();
+            rCategory.m_aLabels["Marking:general-warning-statement:ext:2"].clear();
+            rCategory.m_aLabels["Marking:general-warning-statement:ext:3"].clear();
+            rCategory.m_aLabels["Marking:general-warning-statement:ext:4"].clear();
+            rCategory.m_aLabels["Marking:general-distribution-statement"].clear();
+            rCategory.m_aLabels["Marking:general-distribution-statement:ext:2"].clear();
+            rCategory.m_aLabels["Marking:general-distribution-statement:ext:3"].clear();
+            rCategory.m_aLabels["Marking:general-distribution-statement:ext:4"].clear();
             rCategory.m_aLabels[SfxClassificationHelper::PROP_DOCHEADER()].clear();
             rCategory.m_aLabels[SfxClassificationHelper::PROP_DOCFOOTER()].clear();
             rCategory.m_aLabels[SfxClassificationHelper::PROP_DOCWATERMARK()].clear();
-            rCategory.m_aLabels["urn:bails:IntellectualProperty:Marking:email-first-line-of-text"].clear();
-            rCategory.m_aLabels["urn:bails:IntellectualProperty:Marking:email-last-line-of-text"].clear();
-            rCategory.m_aLabels["urn:bails:IntellectualProperty:Marking:email-subject-prefix"].clear();
-            rCategory.m_aLabels["urn:bails:IntellectualProperty:Marking:email-subject-suffix"].clear();
+            rCategory.m_aLabels["Marking:email-first-line-of-text"].clear();
+            rCategory.m_aLabels["Marking:email-last-line-of-text"].clear();
+            rCategory.m_aLabels["Marking:email-subject-prefix"].clear();
+            rCategory.m_aLabels["Marking:email-subject-suffix"].clear();
             rCategory.m_aLabels[PROP_STARTVALIDITY()] = PROP_NONE();
-            rCategory.m_aLabels["urn:bails:IntellectualProperty:Authorization:StopValidity"] = PROP_NONE();
+            rCategory.m_aLabels["Authorization:StopValidity"] = PROP_NONE();
             m_pCategory = &rCategory;
         }
     }
@@ -261,10 +261,10 @@ void SAL_CALL SfxClassificationParser::endElement(const OUString& rName) throw (
             rLabels[PROP_IMPACTLEVEL()] = m_aConfidentalityValue;
             // Set the two other type of levels as well, if they're not set
             // yet: they're optional in BAF, but not in BAILS.
-            if (rLabels.find("urn:bails:IntellectualProperty:Impact:Level:Integrity") == rLabels.end())
-                rLabels["urn:bails:IntellectualProperty:Impact:Level:Integrity"] = m_aConfidentalityValue;
-            if (rLabels.find("urn:bails:IntellectualProperty:Impact:Level:Availability") == rLabels.end())
-                rLabels["urn:bails:IntellectualProperty:Impact:Level:Availability"] = m_aConfidentalityValue;
+            if (rLabels.find("Impact:Level:Integrity") == rLabels.end())
+                rLabels["Impact:Level:Integrity"] = m_aConfidentalityValue;
+            if (rLabels.find("Impact:Level:Availability") == rLabels.end())
+                rLabels["Impact:Level:Availability"] = m_aConfidentalityValue;
         }
     }
     else if (rName == "baf:Identifier")
@@ -359,7 +359,15 @@ void SfxClassificationHelper::Impl::parsePolicy()
     {
         SAL_WARN("sfx.view", "parsePolicy() failed: " << rException.Message);
     }
-    m_aCategories = xClassificationParser->m_aCategories;
+    m_aCategories.clear();
+    for (const SfxClassificationCategory& rCategory : xClassificationParser->m_aCategories)
+    {
+        SfxClassificationCategory aCategory;
+        aCategory.m_aName = rCategory.m_aName;
+        for (const auto& rLabel : rCategory.m_aLabels)
+            aCategory.m_aLabels[PROP_PREFIX_INTELLECTUALPROPERTY() + rLabel.first] = rLabel.second;
+        m_aCategories.push_back(aCategory);
+    }
 }
 
 bool lcl_containsProperty(const uno::Sequence<beans::Property>& rProperties, const OUString& rName)
@@ -391,7 +399,7 @@ void SfxClassificationHelper::Impl::pushToDocumentProperties()
     uno::Reference<beans::XPropertySet> xPropertySet(xPropertyContainer, uno::UNO_QUERY);
     uno::Sequence<beans::Property> aProperties = xPropertySet->getPropertySetInfo()->getProperties();
     std::map<OUString, OUString> aLabels = m_aCategory.m_aLabels;
-    aLabels[PROP_BACNAME()] = m_aCategory.m_aName;
+    aLabels[PROP_PREFIX_INTELLECTUALPROPERTY() + PROP_BACNAME()] = m_aCategory.m_aName;
     for (const auto& rLabel : aLabels)
     {
         try
@@ -501,7 +509,7 @@ SfxClassificationHelper::SfxClassificationHelper(const uno::Reference<document::
         OUString aValue;
         if (aAny >>= aValue)
         {
-            if (rProperty.Name == PROP_BACNAME())
+            if (rProperty.Name == (PROP_PREFIX_INTELLECTUALPROPERTY() + PROP_BACNAME()))
                 m_pImpl->m_aCategory.m_aName = aValue;
             else
                 m_pImpl->m_aCategory.m_aLabels[rProperty.Name] = aValue;
@@ -520,11 +528,11 @@ const OUString& SfxClassificationHelper::GetBACName()
 
 bool SfxClassificationHelper::HasImpactLevel()
 {
-    std::map<OUString, OUString>::iterator it = m_pImpl->m_aCategory.m_aLabels.find(PROP_IMPACTSCALE());
+    std::map<OUString, OUString>::iterator it = m_pImpl->m_aCategory.m_aLabels.find(PROP_PREFIX_INTELLECTUALPROPERTY() + PROP_IMPACTSCALE());
     if (it == m_pImpl->m_aCategory.m_aLabels.end())
         return false;
 
-    it = m_pImpl->m_aCategory.m_aLabels.find(PROP_IMPACTLEVEL());
+    it = m_pImpl->m_aCategory.m_aLabels.find(PROP_PREFIX_INTELLECTUALPROPERTY() + PROP_IMPACTLEVEL());
     if (it == m_pImpl->m_aCategory.m_aLabels.end())
         return false;
 
@@ -533,7 +541,7 @@ bool SfxClassificationHelper::HasImpactLevel()
 
 bool SfxClassificationHelper::HasDocumentHeader()
 {
-    std::map<OUString, OUString>::iterator it = m_pImpl->m_aCategory.m_aLabels.find(SfxClassificationHelper::PROP_DOCHEADER());
+    std::map<OUString, OUString>::iterator it = m_pImpl->m_aCategory.m_aLabels.find(PROP_PREFIX_INTELLECTUALPROPERTY() + PROP_DOCHEADER());
     if (it == m_pImpl->m_aCategory.m_aLabels.end() || it->second.isEmpty())
         return false;
 
@@ -542,7 +550,7 @@ bool SfxClassificationHelper::HasDocumentHeader()
 
 bool SfxClassificationHelper::HasDocumentFooter()
 {
-    std::map<OUString, OUString>::iterator it = m_pImpl->m_aCategory.m_aLabels.find(SfxClassificationHelper::PROP_DOCFOOTER());
+    std::map<OUString, OUString>::iterator it = m_pImpl->m_aCategory.m_aLabels.find(PROP_PREFIX_INTELLECTUALPROPERTY() + PROP_DOCFOOTER());
     if (it == m_pImpl->m_aCategory.m_aLabels.end() || it->second.isEmpty())
         return false;
 
@@ -553,12 +561,12 @@ basegfx::BColor SfxClassificationHelper::GetImpactLevelColor()
 {
     basegfx::BColor aRet;
 
-    std::map<OUString, OUString>::iterator it = m_pImpl->m_aCategory.m_aLabels.find(PROP_IMPACTSCALE());
+    std::map<OUString, OUString>::iterator it = m_pImpl->m_aCategory.m_aLabels.find(PROP_PREFIX_INTELLECTUALPROPERTY() + PROP_IMPACTSCALE());
     if (it == m_pImpl->m_aCategory.m_aLabels.end())
         return aRet;
     OUString aScale = it->second;
 
-    it = m_pImpl->m_aCategory.m_aLabels.find(PROP_IMPACTLEVEL());
+    it = m_pImpl->m_aCategory.m_aLabels.find(PROP_PREFIX_INTELLECTUALPROPERTY() + PROP_IMPACTLEVEL());
     if (it == m_pImpl->m_aCategory.m_aLabels.end())
         return aRet;
     OUString aLevel = it->second;
@@ -603,12 +611,12 @@ sal_Int32 SfxClassificationHelper::GetImpactLevel()
 {
     sal_Int32 nRet = -1;
 
-    std::map<OUString, OUString>::iterator it = m_pImpl->m_aCategory.m_aLabels.find(PROP_IMPACTSCALE());
+    std::map<OUString, OUString>::iterator it = m_pImpl->m_aCategory.m_aLabels.find(PROP_PREFIX_INTELLECTUALPROPERTY() + PROP_IMPACTSCALE());
     if (it == m_pImpl->m_aCategory.m_aLabels.end())
         return nRet;
     OUString aScale = it->second;
 
-    it = m_pImpl->m_aCategory.m_aLabels.find(PROP_IMPACTLEVEL());
+    it = m_pImpl->m_aCategory.m_aLabels.find(PROP_PREFIX_INTELLECTUALPROPERTY() + PROP_IMPACTLEVEL());
     if (it == m_pImpl->m_aCategory.m_aLabels.end())
         return nRet;
     OUString aLevel = it->second;
@@ -640,7 +648,7 @@ sal_Int32 SfxClassificationHelper::GetImpactLevel()
 
 OUString SfxClassificationHelper::GetImpactScale()
 {
-    std::map<OUString, OUString>::iterator it = m_pImpl->m_aCategory.m_aLabels.find(PROP_IMPACTSCALE());
+    std::map<OUString, OUString>::iterator it = m_pImpl->m_aCategory.m_aLabels.find(PROP_PREFIX_INTELLECTUALPROPERTY() + PROP_IMPACTSCALE());
     if (it != m_pImpl->m_aCategory.m_aLabels.end())
         return it->second;
 
@@ -649,7 +657,7 @@ OUString SfxClassificationHelper::GetImpactScale()
 
 OUString SfxClassificationHelper::GetDocumentWatermark()
 {
-    std::map<OUString, OUString>::iterator it = m_pImpl->m_aCategory.m_aLabels.find(SfxClassificationHelper::PROP_DOCWATERMARK());
+    std::map<OUString, OUString>::iterator it = m_pImpl->m_aCategory.m_aLabels.find(PROP_PREFIX_INTELLECTUALPROPERTY() + PROP_DOCWATERMARK());
     if (it != m_pImpl->m_aCategory.m_aLabels.end())
         return it->second;
 
@@ -713,19 +721,25 @@ void SfxClassificationHelper::UpdateInfobar(SfxViewFrame& rViewFrame)
 
 const OUString& SfxClassificationHelper::PROP_DOCHEADER()
 {
-    static OUString sProp("urn:bails:IntellectualProperty:Marking:document-header");
+    static OUString sProp("Marking:document-header");
     return sProp;
 }
 
 const OUString& SfxClassificationHelper::PROP_DOCFOOTER()
 {
-    static OUString sProp("urn:bails:IntellectualProperty:Marking:document-footer");
+    static OUString sProp("Marking:document-footer");
     return sProp;
 }
 
 const OUString& SfxClassificationHelper::PROP_DOCWATERMARK()
 {
-    static OUString sProp("urn:bails:IntellectualProperty:Marking:document-watermark");
+    static OUString sProp("Marking:document-watermark");
+    return sProp;
+}
+
+const OUString& SfxClassificationHelper::PROP_PREFIX_INTELLECTUALPROPERTY()
+{
+    static OUString sProp("urn:bails:IntellectualProperty:");
     return sProp;
 }
 
diff --git a/sw/source/core/edit/edfcol.cxx b/sw/source/core/edit/edfcol.cxx
index 86b2883..4ed3dbc 100644
--- a/sw/source/core/edit/edfcol.cxx
+++ b/sw/source/core/edit/edfcol.cxx
@@ -218,11 +218,11 @@ void SwEditShell::SetClassification(const OUString& rName)
 
             if (bHeaderIsNeeded)
             {
-                if (!lcl_hasField(xHeaderText, aServiceName, SfxClassificationHelper::PROP_DOCHEADER()))
+                if (!lcl_hasField(xHeaderText, aServiceName, SfxClassificationHelper::PROP_PREFIX_INTELLECTUALPROPERTY() + SfxClassificationHelper::PROP_DOCHEADER()))
                 {
                     // Append a field to the end of the header text.
                     uno::Reference<beans::XPropertySet> xField(xMultiServiceFactory->createInstance(aServiceName), uno::UNO_QUERY);
-                    xField->setPropertyValue(UNO_NAME_NAME, uno::makeAny(SfxClassificationHelper::PROP_DOCHEADER()));
+                    xField->setPropertyValue(UNO_NAME_NAME, uno::makeAny(SfxClassificationHelper::PROP_PREFIX_INTELLECTUALPROPERTY() + SfxClassificationHelper::PROP_DOCHEADER()));
                     uno::Reference<text::XTextContent> xTextContent(xField, uno::UNO_QUERY);
                     xHeaderText->insertTextContent(xHeaderText->getEnd(), xTextContent, /*bAbsorb=*/false);
                 }
@@ -231,7 +231,8 @@ void SwEditShell::SetClassification(const OUString& rName)
             if (bWatermarkIsNeeded || bHadWatermark)
             {
                 OUString aShapeServiceName = "com.sun.star.drawing.CustomShape";
-                uno::Reference<drawing::XShape> xWatermark = lcl_getWatermark(xHeaderText, aShapeServiceName, SfxClassificationHelper::PROP_DOCWATERMARK());
+                static const OUString sWatermark = SfxClassificationHelper::PROP_PREFIX_INTELLECTUALPROPERTY() + SfxClassificationHelper::PROP_DOCWATERMARK();
+                uno::Reference<drawing::XShape> xWatermark = lcl_getWatermark(xHeaderText, aShapeServiceName, sWatermark);
 
                 bool bDeleteWatermark = bHadWatermark && !bWatermarkIsNeeded;
                 if (xWatermark.is())
@@ -344,7 +345,7 @@ void SwEditShell::SetClassification(const OUString& rName)
                     xPropertySet->setPropertyValue("CustomShapeGeometry", uno::makeAny(comphelper::containerToSequence(aGeomPropVec)));
 
                     uno::Reference<container::XNamed> xNamed(xShape, uno::UNO_QUERY);
-                    xNamed->setName(SfxClassificationHelper::PROP_DOCWATERMARK());
+                    xNamed->setName(SfxClassificationHelper::PROP_PREFIX_INTELLECTUALPROPERTY() + SfxClassificationHelper::PROP_DOCWATERMARK());
                     xLockable->removeActionLock();
                 }
             }
@@ -361,11 +362,12 @@ void SwEditShell::SetClassification(const OUString& rName)
             // If the footer already contains a document header field, no need to do anything.
             uno::Reference<text::XText> xFooterText;
             xPageStyle->getPropertyValue(UNO_NAME_FOOTER_TEXT) >>= xFooterText;
-            if (!lcl_hasField(xFooterText, aServiceName, SfxClassificationHelper::PROP_DOCFOOTER()))
+            static OUString sFooter = SfxClassificationHelper::PROP_PREFIX_INTELLECTUALPROPERTY() + SfxClassificationHelper::PROP_DOCFOOTER();
+            if (!lcl_hasField(xFooterText, aServiceName, sFooter))
             {
                 // Append a field to the end of the footer text.
                 uno::Reference<beans::XPropertySet> xField(xMultiServiceFactory->createInstance(aServiceName), uno::UNO_QUERY);
-                xField->setPropertyValue(UNO_NAME_NAME, uno::makeAny(SfxClassificationHelper::PROP_DOCFOOTER()));
+                xField->setPropertyValue(UNO_NAME_NAME, uno::makeAny(sFooter));
                 uno::Reference<text::XTextContent> xTextContent(xField, uno::UNO_QUERY);
                 xFooterText->insertTextContent(xFooterText->getEnd(), xTextContent, /*bAbsorb=*/false);
             }


More information about the Libreoffice-commits mailing list