From e77ace694e255a13d302f16be2ddc1c41e5ee5a5 Mon Sep 17 00:00:00 2001 From: Christoph Pohl <christoph.pohl@kit.edu> Date: Mon, 13 Feb 2023 13:04:35 +0100 Subject: [PATCH] Fix doubling of namespaces in component config --- .../PropertyDefinitionVisitors.cpp | 58 ++++++++----------- .../PropertyDefinitionVisitors.h | 9 +-- 2 files changed, 26 insertions(+), 41 deletions(-) diff --git a/source/RobotAPI/libraries/aron_component_config/PropertyDefinitionVisitors.cpp b/source/RobotAPI/libraries/aron_component_config/PropertyDefinitionVisitors.cpp index 8f68b47f1..ee7d67c73 100644 --- a/source/RobotAPI/libraries/aron_component_config/PropertyDefinitionVisitors.cpp +++ b/source/RobotAPI/libraries/aron_component_config/PropertyDefinitionVisitors.cpp @@ -54,7 +54,7 @@ namespace armarx::aron::component_config { INPUT_GUARD(i); auto value = data::Int::DynamicCastAndCheck(i); - auto name = joinNamespaces(namespaces_) + pathToName(i); + auto name = global_namespace_ + pathToName(i); property_user_->getProperty(value->getValue(), name); } @@ -63,7 +63,7 @@ namespace armarx::aron::component_config { INPUT_GUARD(f); auto value = data::Float::DynamicCastAndCheck(f); - auto name = joinNamespaces(namespaces_) + pathToName(f); + auto name = global_namespace_ + pathToName(f); property_user_->getProperty(value->getValue(), name); } @@ -72,7 +72,7 @@ namespace armarx::aron::component_config { INPUT_GUARD(d); auto value = data::Double::DynamicCastAndCheck(d); - auto name = joinNamespaces(namespaces_) + pathToName(d); + auto name = global_namespace_ + pathToName(d); property_user_->getProperty(value->getValue(), name); } @@ -81,7 +81,7 @@ namespace armarx::aron::component_config { INPUT_GUARD(b); auto value = data::Bool::DynamicCastAndCheck(b); - auto name = joinNamespaces(namespaces_) + pathToName(b); + auto name = global_namespace_ + pathToName(b); property_user_->getProperty(value->getValue(), name); } @@ -90,7 +90,7 @@ namespace armarx::aron::component_config { INPUT_GUARD(string); auto value = data::String::DynamicCastAndCheck(string); - auto name = joinNamespaces(namespaces_) + pathToName(string); + auto name = global_namespace_ + pathToName(string); auto property = property_user_->getProperty<std::string>(name); if (not property.getValue().empty()) { @@ -107,7 +107,7 @@ namespace armarx::aron::component_config { ARMARX_TRACE; in_list_ = true; - const auto& name = joinNamespaces(namespaces_) + pathToName(o); + const auto& name = global_namespace_ + pathToName(o); const auto& type = type::List::DynamicCast(t)->getAcceptedType()->getDescriptor(); if (std::find(implementedListDescriptors.begin(), implementedListDescriptors.end(), type) == implementedListDescriptors.end()) @@ -145,7 +145,7 @@ namespace armarx::aron::component_config { ARMARX_TRACE; auto data = data::Int::DynamicCastAndCheck(enumData); - auto name = joinNamespaces(namespaces_) + pathToName(enumData); + auto name = global_namespace_ + pathToName(enumData); property_user_->getProperty(data->getValue(), name); } @@ -168,7 +168,7 @@ namespace armarx::aron::component_config { ARMARX_TRACE; in_list_ = true; - const auto& name = joinNamespaces(namespaces_) + pathToName(o); + const auto& name = global_namespace_ + pathToName(o); const auto& type = type::Dict::DynamicCast(t)->getAcceptedType()->getDescriptor(); if (std::find(implementedListDescriptors.begin(), implementedListDescriptors.end(), type) == implementedListDescriptors.end()) @@ -247,15 +247,10 @@ namespace armarx::aron::component_config { INPUT_GUARD(i); auto t = type::Object::DynamicCastAndCheck(j); - namespaces_.emplace_back(t->getObjectNameWithoutNamespace()); - } - - void - PropertyDefinitionGetterVisitor::visitObjectOnExit(std::shared_ptr<data::Variant>& i, - const std::shared_ptr<type::Variant>& j) - { - INPUT_GUARD(i); - namespaces_.pop_back(); + if (global_namespace_.empty()) + { + global_namespace_ = t->getObjectNameWithoutNamespace() + "."; + } } PropertyDefinitionSetterVisitor::PropertyDefinitionSetterVisitor( @@ -268,7 +263,7 @@ namespace armarx::aron::component_config PropertyDefinitionSetterVisitor::visitAronVariant(const data::IntPtr& i, const type::IntPtr&) { INPUT_GUARD(i); - auto name = joinNamespaces(namespaces_) + pathToName(i); + auto name = global_namespace_ + pathToName(i); property_definitions_->defineOptionalProperty<int>(name, i->getValue()); } @@ -277,7 +272,7 @@ namespace armarx::aron::component_config const type::FloatPtr&) { INPUT_GUARD(f); - auto name = joinNamespaces(namespaces_) + pathToName(f); + auto name = global_namespace_ + pathToName(f); property_definitions_->defineOptionalProperty<float>(name, f->getValue()); } @@ -286,7 +281,7 @@ namespace armarx::aron::component_config const type::DoublePtr&) { INPUT_GUARD(d); - auto name = joinNamespaces(namespaces_) + pathToName(d); + auto name = global_namespace_ + pathToName(d); property_definitions_->defineOptionalProperty<double>(name, d->getValue()); } @@ -294,7 +289,7 @@ namespace armarx::aron::component_config PropertyDefinitionSetterVisitor::visitAronVariant(const data::BoolPtr& b, const type::BoolPtr&) { INPUT_GUARD(b); - auto name = joinNamespaces(namespaces_) + pathToName(b); + auto name = global_namespace_ + pathToName(b); property_definitions_->defineOptionalProperty<bool>(name, b->getValue()); } @@ -303,7 +298,7 @@ namespace armarx::aron::component_config const type::StringPtr& type) { INPUT_GUARD(string); - auto name = joinNamespaces(namespaces_) + pathToName(string); + auto name = global_namespace_ + pathToName(string); property_definitions_->defineOptionalProperty<std::string>(name, string->getValue()); } @@ -312,7 +307,7 @@ namespace armarx::aron::component_config const type::IntEnumPtr& t) { INPUT_GUARD(i); - auto name = joinNamespaces(namespaces_) + pathToName(i); + auto name = global_namespace_ + pathToName(i); property_definitions_->defineOptionalProperty<int>(name, i->getValue()) .map(t->getAcceptedValueMap()); } @@ -324,7 +319,7 @@ namespace armarx::aron::component_config ARMARX_TRACE; ARMARX_CHECK_NOT_NULL(l); in_list_ = true; - const auto& name = joinNamespaces(namespaces_) + pathToName(l); + const auto& name = global_namespace_ + pathToName(l); const auto& type = t->getAcceptedType()->getDescriptor(); if (std::find(implementedListDescriptors.begin(), implementedListDescriptors.end(), type) == implementedListDescriptors.end()) @@ -356,7 +351,7 @@ namespace armarx::aron::component_config { ARMARX_TRACE; in_list_ = true; - const auto& name = joinNamespaces(namespaces_) + pathToName(d); + const auto& name = global_namespace_ + pathToName(d); const auto& type = t->getAcceptedType()->getDescriptor(); if (std::find(implementedListDescriptors.begin(), implementedListDescriptors.end(), type) == implementedListDescriptors.end()) @@ -391,15 +386,10 @@ namespace armarx::aron::component_config const type::ObjectPtr& type) { INPUT_GUARD(obj); - namespaces_.emplace_back(type->getObjectNameWithoutNamespace()); - } - - void - PropertyDefinitionSetterVisitor::visitAronVariantOnExit(const data::DictPtr& obj, - const type::ObjectPtr& type) - { - INPUT_GUARD(obj); - namespaces_.pop_back(); + if (global_namespace_.empty()) + { + global_namespace_ = type->getObjectNameWithoutNamespace() + "."; + } } } // namespace armarx::aron::component_config diff --git a/source/RobotAPI/libraries/aron_component_config/PropertyDefinitionVisitors.h b/source/RobotAPI/libraries/aron_component_config/PropertyDefinitionVisitors.h index 5a22cb245..3d4890414 100644 --- a/source/RobotAPI/libraries/aron_component_config/PropertyDefinitionVisitors.h +++ b/source/RobotAPI/libraries/aron_component_config/PropertyDefinitionVisitors.h @@ -59,12 +59,9 @@ namespace armarx::aron::component_config void visitAronVariantOnEnter(const data::DictPtr& ptr, const type::ObjectPtr& objectPtr) override; - void visitAronVariantOnExit(const data::DictPtr& ptr, - const type::ObjectPtr& objectPtr) override; - private: std::experimental::observer_ptr<PropertyDefinitionContainer> property_definitions_; - std::vector<std::string> namespaces_; + std::string global_namespace_{""}; std::atomic<bool> in_list_{false}; }; @@ -108,13 +105,11 @@ namespace armarx::aron::component_config void visitObjectOnEnter(DataInput& elementData, TypeInput& elementType) override; - void visitObjectOnExit(DataInput& elementData, TypeInput& elementType) override; - void visitIntEnum(DataInput& elementData, TypeInput& elementType) override; private: std::experimental::observer_ptr<const armarx::PropertyUser> property_user_; - std::vector<std::string> namespaces_; + std::string global_namespace_{""}; std::atomic<bool> in_list_; }; -- GitLab