diff options
author | Miklos Vajna <vmiklos@collabora.com> | 2022-01-20 21:02:35 +0100 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.com> | 2022-01-21 08:51:01 +0100 |
commit | 4871cae48c1c9f522a0c0cc85a852b0568ca31e6 (patch) | |
tree | f4f98dc69c0ad28f9bfda7d85a315c4c62549f2d /desktop/source/lib | |
parent | b438a4502d2b388012b0744374e86d1ff0543e8d (diff) |
comphelper: move JsonToPropertyValues() from desktop/
Because filter/ code will need this in a bit, and that can't depend on
desktop/.
Change-Id: I07f0f8ef30942a2d11388c6721c7f277e117bfba
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/128709
Tested-by: Jenkins
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
Diffstat (limited to 'desktop/source/lib')
-rw-r--r-- | desktop/source/lib/init.cxx | 123 |
1 files changed, 1 insertions, 122 deletions
diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx index 5836fb7e5b4c..3370779df25d 100644 --- a/desktop/source/lib/init.cxx +++ b/desktop/source/lib/init.cxx @@ -76,9 +76,6 @@ #include <com/sun/star/lang/Locale.hpp> #include <com/sun/star/lang/XComponent.hpp> #include <com/sun/star/lang/XMultiServiceFactory.hpp> -#include <com/sun/star/reflection/theCoreReflection.hpp> -#include <com/sun/star/reflection/XIdlClass.hpp> -#include <com/sun/star/reflection/XIdlReflection.hpp> #include <com/sun/star/style/XStyleFamiliesSupplier.hpp> #include <com/sun/star/util/URLTransformer.hpp> #include <com/sun/star/datatransfer/clipboard/XClipboard.hpp> @@ -369,130 +366,12 @@ static OUString getAbsoluteURL(const char* pURL) return OUString(); } -static uno::Any jsonToUnoAny(const boost::property_tree::ptree& aTree) -{ - uno::Any aAny; - uno::Any aValue; - sal_Int32 nFields; - uno::Reference< reflection::XIdlField > aField; - boost::property_tree::ptree aNodeNull, aNodeValue, aNodeField; - const std::string& rType = aTree.get<std::string>("type", ""); - const std::string& rValue = aTree.get<std::string>("value", ""); - uno::Sequence< uno::Reference< reflection::XIdlField > > aFields; - uno::Reference< reflection:: XIdlClass > xIdlClass = - css::reflection::theCoreReflection::get(comphelper::getProcessComponentContext())->forName(OUString::fromUtf8(rType.c_str())); - if (xIdlClass.is()) - { - uno::TypeClass aTypeClass = xIdlClass->getTypeClass(); - xIdlClass->createObject(aAny); - aFields = xIdlClass->getFields(); - nFields = aFields.getLength(); - aNodeValue = aTree.get_child("value", aNodeNull); - if (nFields > 0 && aNodeValue != aNodeNull) - { - for (sal_Int32 itField = 0; itField < nFields; ++itField) - { - aField = aFields[itField]; - aNodeField = aNodeValue.get_child(aField->getName().toUtf8().getStr(), aNodeNull); - if (aNodeField != aNodeNull) - { - aValue = jsonToUnoAny(aNodeField); - aField->set(aAny, aValue); - } - } - } - else if (!rValue.empty()) - { - if (aTypeClass == uno::TypeClass_VOID) - aAny.clear(); - else if (aTypeClass == uno::TypeClass_BYTE) - aAny <<= static_cast<sal_Int8>(OString(rValue.c_str()).toInt32()); - else if (aTypeClass == uno::TypeClass_BOOLEAN) - aAny <<= OString(rValue.c_str()).toBoolean(); - else if (aTypeClass == uno::TypeClass_SHORT) - aAny <<= static_cast<sal_Int16>(OString(rValue.c_str()).toInt32()); - else if (aTypeClass == uno::TypeClass_UNSIGNED_SHORT) - aAny <<= static_cast<sal_uInt16>(OString(rValue.c_str()).toUInt32()); - else if (aTypeClass == uno::TypeClass_LONG) - aAny <<= OString(rValue.c_str()).toInt32(); - else if (aTypeClass == uno::TypeClass_UNSIGNED_LONG) - aAny <<= static_cast<sal_uInt32>(OString(rValue.c_str()).toInt32()); - else if (aTypeClass == uno::TypeClass_FLOAT) - aAny <<= OString(rValue.c_str()).toFloat(); - else if (aTypeClass == uno::TypeClass_DOUBLE) - aAny <<= OString(rValue.c_str()).toDouble(); - else if (aTypeClass == uno::TypeClass_STRING) - aAny <<= OUString::fromUtf8(rValue.c_str()); - } - } - return aAny; -} - std::vector<beans::PropertyValue> desktop::jsonToPropertyValuesVector(const char* pJSON) { std::vector<beans::PropertyValue> aArguments; if (pJSON && pJSON[0] != '\0') { - boost::property_tree::ptree aTree, aNodeNull, aNodeValue; - std::stringstream aStream(pJSON); - boost::property_tree::read_json(aStream, aTree); - - for (const auto& rPair : aTree) - { - const std::string& rType = rPair.second.get<std::string>("type", ""); - const std::string& rValue = rPair.second.get<std::string>("value", ""); - - beans::PropertyValue aValue; - aValue.Name = OUString::fromUtf8(rPair.first.c_str()); - if (rType == "string") - aValue.Value <<= OUString::fromUtf8(rValue.c_str()); - else if (rType == "boolean") - aValue.Value <<= OString(rValue.c_str()).toBoolean(); - else if (rType == "float") - aValue.Value <<= OString(rValue.c_str()).toFloat(); - else if (rType == "long") - aValue.Value <<= OString(rValue.c_str()).toInt32(); - else if (rType == "short") - aValue.Value <<= sal_Int16(OString(rValue.c_str()).toInt32()); - else if (rType == "unsigned short") - aValue.Value <<= sal_uInt16(OString(rValue.c_str()).toUInt32()); - else if (rType == "int64") - aValue.Value <<= OString(rValue.c_str()).toInt64(); - else if (rType == "int32") - aValue.Value <<= OString(rValue.c_str()).toInt32(); - else if (rType == "int16") - aValue.Value <<= sal_Int16(OString(rValue.c_str()).toInt32()); - else if (rType == "uint64") - aValue.Value <<= OString(rValue.c_str()).toUInt64(); - else if (rType == "uint32") - aValue.Value <<= OString(rValue.c_str()).toUInt32(); - else if (rType == "uint16") - aValue.Value <<= sal_uInt16(OString(rValue.c_str()).toUInt32()); - else if (rType == "[]byte") - { - aNodeValue = rPair.second.get_child("value", aNodeNull); - if (aNodeValue != aNodeNull && aNodeValue.size() == 0) - { - uno::Sequence< sal_Int8 > aSeqByte(reinterpret_cast<const sal_Int8*>(rValue.c_str()), rValue.size()); - aValue.Value <<= aSeqByte; - } - } - else if (rType == "[]any") - { - aNodeValue = rPair.second.get_child("value", aNodeNull); - if (aNodeValue != aNodeNull && !aNodeValue.empty()) - { - uno::Sequence< uno::Any > aSeq(aNodeValue.size()); - std::transform(aNodeValue.begin(), aNodeValue.end(), aSeq.getArray(), - [](const auto& rSeqPair) - { return jsonToUnoAny(rSeqPair.second); }); - aValue.Value <<= aSeq; - } - } - else - SAL_WARN("desktop.lib", "jsonToPropertyValuesVector: unhandled type '"<<rType<<"'"); - aArguments.push_back(aValue); - } + aArguments = comphelper::JsonToPropertyValues(pJSON); } return aArguments; } |