1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
10 #ifndef INCLUDED_SFX2_CLASSIFICATIONHELPER_HXX
11 #define INCLUDED_SFX2_CLASSIFICATIONHELPER_HXX
14 #include <string_view>
17 #include <o3tl/string_view.hxx>
18 #include <rtl/ustring.hxx>
19 #include <sfx2/dllapi.h>
20 #include <sfx2/infobar.hxx>
22 namespace com::sun::star::beans
24 class XPropertyContainer
;
26 namespace com::sun::star::document
28 class XDocumentProperties
;
33 /// Return code of SfxClassificationHelper::CheckPaste().
34 enum class SfxClassificationCheckPasteResult
37 TargetDocNotClassified
= 2,
38 DocClassificationTooLow
= 3
41 /// Specifies a policy type, to be used with SetBACName(). Getters always use IntellectualProperty for now.
42 enum class SfxClassificationPolicyType
46 IntellectualProperty
= 3
49 /// Shared code to handle Business Authorization Identification and Labeling Scheme (BAILS) properties.
50 class SFX2_DLLPUBLIC SfxClassificationHelper
52 class SAL_DLLPRIVATE Impl
;
53 std::unique_ptr
<Impl
> m_pImpl
;
56 /// Does the document have any BAILS properties?
57 static bool IsClassified(
58 const css::uno::Reference
<css::document::XDocumentProperties
>& xDocumentProperties
);
59 /// Checks if pasting from xSource to xDestination would leak information.
60 static SfxClassificationCheckPasteResult
61 CheckPaste(const css::uno::Reference
<css::document::XDocumentProperties
>& xSource
,
62 const css::uno::Reference
<css::document::XDocumentProperties
>& xDestination
);
63 /// Wrapper around CheckPaste(): informs the user if necessary and finds out if the paste can be continued or not.
64 static bool ShowPasteInfo(SfxClassificationCheckPasteResult eResult
);
66 SfxClassificationHelper(
67 const css::uno::Reference
<css::document::XDocumentProperties
>& xDocumentProperties
,
68 bool bUseLocalizedPolicy
= true);
69 ~SfxClassificationHelper();
70 /// Get the currently selected category for eType.
71 const OUString
& GetBACName(SfxClassificationPolicyType eType
) const;
72 /// Return all possible valid category names, based on the policy.
73 std::vector
<OUString
> GetBACNames();
74 /// Return all possible valid category identifiers, based on the policy.
75 std::vector
<OUString
> GetBACIdentifiers();
76 /// Get the currently selected category abbreviation for eType. Returns full name if no abbreviation defined.
77 const OUString
& GetAbbreviatedBACName(const OUString
& sFullName
);
78 /// Get the currently selected category for the identifier.
79 OUString
GetBACNameForIdentifier(std::u16string_view sIdentifier
);
80 /// Return all possible valid abbreviated category names, based on the policy.
81 std::vector
<OUString
> GetAbbreviatedBACNames();
82 /// Setting this sets all the other properties, based on the policy.
83 void SetBACName(const OUString
& rName
, SfxClassificationPolicyType eType
);
84 /// Returns the class with the higher priority (based on sensitivity).
85 OUString
GetHigherClass(const OUString
& first
, const OUString
& second
);
86 /// If GetImpactScale() and GetImpactLevel*() will return something meaningful.
87 bool HasImpactLevel();
88 InfobarType
GetImpactLevelType();
89 /// Larger value means more confidential.
90 sal_Int32
GetImpactLevel();
91 /// Comparing the GetImpactLevel() result is only meaningful when the impact scale is the same.
92 OUString
GetImpactScale();
93 OUString
GetDocumentWatermark();
94 /// The selected category has some content for the document header.
95 bool HasDocumentHeader();
96 /// The selected category has some content for the document footer.
97 bool HasDocumentFooter();
98 void UpdateInfobar(SfxViewFrame
& rViewFrame
);
100 std::vector
<OUString
> const& GetMarkings() const;
101 std::vector
<OUString
> const& GetIntellectualPropertyParts() const;
102 std::vector
<OUString
> const& GetIntellectualPropertyPartNumbers() const;
104 /// Does a best-effort conversion of rType to SfxClassificationPolicyType.
105 static SfxClassificationPolicyType
stringToPolicyType(std::u16string_view rType
);
106 /// Returns the string representation of a SfxClassificationPolicyType element.
107 static const OUString
& policyTypeToString(SfxClassificationPolicyType eType
);
109 /// Brief text located at the top of each document's pages.
110 static const OUString
& PROP_DOCHEADER();
111 /// Brief text located at the bottom of each document's pages.
112 static const OUString
& PROP_DOCFOOTER();
113 /// Brief text formatted as a watermark on each document's page.
114 static const OUString
& PROP_DOCWATERMARK();
115 /// Get the property prefix for the IntellectualProperty policy type.
116 static const OUString
& PROP_PREFIX_INTELLECTUALPROPERTY();
118 static SfxClassificationPolicyType
getPolicyType();
123 /// Specifies the origin: either defined by the BAF policy or manual via. the advanced classification dialog
124 enum class ClassificationCreationOrigin
131 class ClassificationKeyCreator
134 const SfxClassificationPolicyType m_ePolicyType
;
135 const OUString m_sPolicy
;
136 sal_Int32 m_nTextNumber
;
137 sal_Int32 m_nIPPartNumber
;
138 sal_Int32 m_nMarkingNumber
;
140 OUString
const& getPolicyKey() const { return m_sPolicy
; }
143 ClassificationKeyCreator(SfxClassificationPolicyType ePolicyType
)
144 : m_ePolicyType(ePolicyType
)
145 , m_sPolicy(SfxClassificationHelper::policyTypeToString(m_ePolicyType
))
148 , m_nMarkingNumber(1)
152 OUString
makeTextKey() const { return getPolicyKey() + "Custom:Text"; }
154 OUString
makeNumberedTextKey()
156 return makeTextKey() + ":n" + OUString::number(m_nTextNumber
++);
159 bool isMarkingTextKey(std::u16string_view aKey
) const
161 return o3tl::starts_with(aKey
, makeTextKey());
164 OUString
makeCategoryNameKey() const
166 return getPolicyKey() + "BusinessAuthorizationCategory:Name";
169 bool isCategoryNameKey(std::u16string_view aKey
) const
171 return o3tl::starts_with(aKey
, makeCategoryNameKey());
174 OUString
makeCategoryIdentifierKey() const
176 return getPolicyKey() + "BusinessAuthorizationCategory:Identifier";
179 bool isCategoryIdentifierKey(std::u16string_view aKey
) const
181 return o3tl::starts_with(aKey
, makeCategoryIdentifierKey());
184 OUString
makeMarkingKey() const { return getPolicyKey() + "Custom:Marking"; }
186 OUString
makeNumberedMarkingKey()
188 return makeMarkingKey() + ":n" + OUString::number(m_nMarkingNumber
++);
191 bool isMarkingKey(std::u16string_view aKey
) const
193 return o3tl::starts_with(aKey
, makeMarkingKey());
196 OUString
makeIntellectualPropertyPartKey() const
198 return getPolicyKey() + "Custom:IntellectualPropertyPart";
201 OUString
makeNumberedIntellectualPropertyPartKey()
203 return makeIntellectualPropertyPartKey() + ":n" + OUString::number(m_nIPPartNumber
++);
206 bool isIntellectualPropertyPartKey(std::u16string_view aKey
) const
208 return o3tl::starts_with(aKey
, makeIntellectualPropertyPartKey());
211 OUString
makeFullTextualRepresentationKey() const
213 return getPolicyKey() + "Custom:FullTexturalRepresentation";
216 /// Classification creation origin key
217 OUString
makeCreationOriginKey() const { return getPolicyKey() + "CreationOrigin"; }
220 SFX2_DLLPUBLIC
sfx::ClassificationCreationOrigin
getCreationOriginProperty(
221 css::uno::Reference
<css::beans::XPropertyContainer
> const& rxPropertyContainer
,
222 sfx::ClassificationKeyCreator
const& rKeyCreator
);
227 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */