diff options
author | Miklos Vajna <vmiklos@collabora.co.uk> | 2016-02-23 14:54:48 +0100 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.co.uk> | 2016-02-23 16:09:02 +0100 |
commit | aad8e562765b2981e76a008e3eca04058279469f (patch) | |
tree | 641f2c525db1f8cd7b5937c54cb7752f7963fe31 | |
parent | 633e9b9b66f1717a90db73ee6954c8145b934ecb (diff) |
sfx2 classification: add or update labels
Instead of just failing to add existing ones. Given that all "optional"
properties are also updated (typically to "" or "None"), no need to
remove properties.
Change-Id: I50e73ac1ca3d3b7d3b3650ec6abdc0ff8c156936
-rw-r--r-- | sfx2/source/view/classificationhelper.cxx | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/sfx2/source/view/classificationhelper.cxx b/sfx2/source/view/classificationhelper.cxx index 8c1d4b550e88..19325859a0a8 100644 --- a/sfx2/source/view/classificationhelper.cxx +++ b/sfx2/source/view/classificationhelper.cxx @@ -317,19 +317,32 @@ void SfxClassificationHelper::Impl::parsePolicy() m_aCategories = xClassificationParser->m_aCategories; } +bool lcl_containsProperty(const uno::Sequence<beans::Property>& rProperties, const OUString& rName) +{ + return std::find_if(rProperties.begin(), rProperties.end(), [&](const beans::Property& rProperty) + { + return rProperty.Name == rName; + }) != rProperties.end(); +} + void SfxClassificationHelper::Impl::pushToObjectShell() { uno::Reference<document::XDocumentProperties> xDocumentProperties = m_rObjectShell.getDocProperties(); uno::Reference<beans::XPropertyContainer> xPropertyContainer = xDocumentProperties->getUserDefinedProperties(); + uno::Reference<beans::XPropertySet> xPropertySet(xPropertyContainer, uno::UNO_QUERY); + uno::Sequence<beans::Property> aProperties = xPropertySet->getPropertySetInfo()->getProperties(); for (const std::pair<OUString, OUString>& rLabel : m_aLabels) { try { - xPropertyContainer->addProperty(rLabel.first, beans::PropertyAttribute::REMOVABLE, uno::makeAny(rLabel.second)); + if (lcl_containsProperty(aProperties, rLabel.first)) + xPropertySet->setPropertyValue(rLabel.first, uno::makeAny(rLabel.second)); + else + xPropertyContainer->addProperty(rLabel.first, beans::PropertyAttribute::REMOVABLE, uno::makeAny(rLabel.second)); } catch (const uno::Exception& rException) { - SAL_WARN("sfx.view", "pushToObjectShell() failed to add property " << rLabel.first << ": " << rException.Message); + SAL_WARN("sfx.view", "pushToObjectShell() failed for property " << rLabel.first << ": " << rException.Message); } } } |