21#ifndef MAPPING_CONFIGURATION_FROM_XML_10_H_INCLUDED
22#define MAPPING_CONFIGURATION_FROM_XML_10_H_INCLUDED
43template <
typename DomNodeType>
65 const std::string& attribute_name,
66 const std::string& additional_info = {})
73 dom_node.getName() + additional_info +
" tag has no mandatory '" + attribute_name +
87 const std::string& attribute_name)
112 const auto pos = variable.find_first_of(
'.');
113 if (pos == std::string::npos || pos == variable.size() - 1) {
114 return {variable,
""};
117 return {variable.substr(0, pos), variable.substr(pos + 1, variable.size() - (pos + 1))};
128 const auto pos1 = function_call.find(
'(');
129 const auto pos2 = function_call.find(
')');
130 if (pos1 == std::string::npos || pos2 == std::string::npos || pos1 >= pos2) {
132 "Mapping10::parseFunctionParameter", {function_call},
"invalid function call");
134 else if (pos1 + 1 == pos2) {
138 return function_call.substr(pos1 + 1, pos2 - pos1 - 1);
168 static std::pair<datamodel::Assignment::FunctionCall, std::vector<datamodel::ParameterValue>>
170 const std::string& function_attribute,
173 constexpr auto update_counter =
"update_counter";
174 if (function_attribute ==
"simulation_time()") {
178 else if (function_attribute.find(
"trigger_counter") != std::string::npos) {
191 throw Error(
"Mapping10::createFunctionCall",
192 {target_name, function_attribute},
193 "function 'trigger_counter' has no positive "
194 "integer value as parameter");
205 else if (function_attribute.find(
"received") != std::string::npos) {
215 throw Error(
"Mapping10::createFunctionCall",
216 {target_name, function_attribute},
217 "function 'received' has no source name set as parameter");
221 throw Error(
"Mapping10::createFunctionCall",
222 {target_name, function_attribute},
223 "function=" + function_attribute +
" is unknown");
235 const std::string& target_name,
247 if (transformation) {
260 const auto function_call_values =
263 *to_name, function_call_values.first, function_call_values.second);
267 throw Error(
"Mapping10::createAssignment",
268 {dom_node.getName()},
269 "assignment has no valid attribute (constant function or from) set");
279 const auto time_value =
281 const auto unit_value =
293 const auto variable_name =
295 const auto operator_name =
300 source_value.name, source_value.value_name, *operator_name, *value});
310 const auto source_name =
323 if (*trigger_type ==
"signal") {
326 else if (*trigger_type ==
"data") {
329 else if (*trigger_type ==
"periodic") {
332 throw Error(
"Mapping10::createTrigger",
333 {dom_node.getName()},
334 "trigger type='" + *trigger_type +
"' is unsupported in mapping version 1.0");
351 std::list<DomNodeType> assignments;
352 if (dom_node.findNodes(
"assignment", assignments)) {
353 for (
const auto& current_assignment: assignments) {
354 target.getAssignments().emplace(
358 std::list<DomNodeType> triggers;
359 if (dom_node.findNodes(
"trigger", triggers)) {
360 for (
const auto& current_trigger: triggers) {
361 target.getTriggers().emplace(
createTrigger(current_trigger));
374 const std::string& property_name,
377 const auto property_value =
379 if (property_value) {
391 std::stringstream value;
392 std::list<DomNodeType> conversion_nodes;
393 dom_node.findNodes(
"conversion", conversion_nodes);
395 for (
const auto& current: conversion_nodes) {
403 current,
"from",
" within enum_table " + module_inst.
getName());
405 current,
"to",
" within enum_table " + module_inst.
getName());
406 value << *from <<
"=" << *to;
420 const auto type = dom_node.getName();
421 if (type ==
"polynomial") {
428 return module_instance;
430 else if (type ==
"enum_table") {
436 return module_instance;
438 throw Error(
"Mapping10::createModuleFromTransformation",
440 "unsupported transformation tag '" + type +
"'");
458 std::list<DomNodeType> source_nodes;
459 if (dom_node.findNodes(
"//sources/source", source_nodes)) {
460 for (
const auto& current_source_node: source_nodes) {
465 std::list<DomNodeType> target_nodes;
466 if (dom_node.findNodes(
"//targets/target", target_nodes)) {
467 for (
const auto& current_target_node: target_nodes) {
473 std::list<DomNodeType> transformation_nodes;
474 if (dom_node.findNodes(
"//transformations/*", transformation_nodes)) {
475 for (
const auto& current_transformation_node: transformation_nodes) {
481 if (!functions.contains(
"simulation_time")) {
486 if (!functions.contains(
"was_received")) {
491 if (!functions.contains(
"trigger_counter")) {
void emplace(DDL_TYPE_TO_ACCESS &&type_to_add)
emplaces the given item
Definition access_map.h:368
Datamodel assignment class used in Target.
Definition datamodel_configuration_items.h:912
ParameterValue::ConstValue ConstValue
ConstValue type.
Definition datamodel_configuration_items.h:941
ParameterValue::SourceValue SourceValue
SourceValue type.
Definition datamodel_configuration_items.h:937
Datamodel function class used in MappingConfiguration.
Definition datamodel_configuration_items.h:1314
const Properties & getProperties() const
Get the Properties.
const std::string & getName() const
Get the name.
The mapping configuration datamodel.
Definition datamodel_configuration.h:38
const Functions & getFunctions() const
Get the Functions.
const Targets & getTargets() const
Get the Targets.
void setHeader(const Header &header)
Set the Header object.
const Sources & getSources() const
Get the Sources.
Datamodel parameter value class used within Assignment.
Definition datamodel_configuration_items.h:654
Datamodel source class used in MappingConfiguration.
Definition datamodel_configuration_items.h:262
Datamodel target class within MappingConfiguration.
Definition datamodel_configuration_items.h:1155
Datamodel trigger class use within Target.
Definition datamodel_configuration_items.h:376
definition of the mapping namespace
Definition ddl.h:50
ddl::utility::Error Error
mapping error definition
Definition mapping_configuration_types.h:35
bool isInteger(const std::string &string_to_check) noexcept
Checks if the given string is an integer value.
definition of the ddl namespace
Definition codec.h:21
An optional template as long as the std::optional is not available here.
Definition access_optional.h:31
helper structure to create modules for compatibility reason.
Definition datamodel_xml_configurationfromxml_10.h:145
bool trigger_counter_function
trigger_counter in use
Definition datamodel_xml_configurationfromxml_10.h:157
bool was_received_function
was_received in use
Definition datamodel_xml_configurationfromxml_10.h:153
bool simulation_time_function
simulation_time function in use
Definition datamodel_xml_configurationfromxml_10.h:149
Factory to create a MappingConfiguration out of a XML based description. This factory uses a template...
Definition datamodel_xml_configurationfromxml_10.h:44
static datamodel::Trigger createTrigger(const DomNodeType &dom_node)
Create a Trigger object.
Definition datamodel_xml_configurationfromxml_10.h:320
static datamodel::Trigger createPeriodTrigger(const DomNodeType &dom_node)
Create a Trigger object as Trigger(Period)
Definition datamodel_xml_configurationfromxml_10.h:277
MappingConfigurationFromXMLFactoryBase< DomNodeType > xml_base_type
base factory type for xml reading
Definition datamodel_xml_configurationfromxml_10.h:48
static utility::Optional< T > getAttribute(const DomNodeType &dom_node, const std::string &attribute_name)
Get the attribute.
Definition datamodel_xml_configurationfromxml_10.h:86
static std::pair< datamodel::Assignment::FunctionCall, std::vector< datamodel::ParameterValue > > createFunctionCall(const std::string &target_name, const std::string &function_attribute, NeedFunctions &need_functions)
Create a compatibility module call out of function attribute in 1.0.
Definition datamodel_xml_configurationfromxml_10.h:169
static datamodel::Trigger createDataTrigger(const DomNodeType &dom_node)
Create a Trigger object as Trigger(Data)
Definition datamodel_xml_configurationfromxml_10.h:291
static datamodel::MappingConfiguration createConfiguration(const DomNodeType &dom_node, const datamodel::Header &header)
Creates a MappingConfiguration and read all sub node.
Definition datamodel_xml_configurationfromxml_10.h:450
static datamodel::Trigger createSourceTrigger(const DomNodeType &dom_node)
Create a Trigger object as Trigger(Source)
Definition datamodel_xml_configurationfromxml_10.h:308
static utility::Optional< std::string > parseFunctionParameter(const std::string &function_call)
Parse function call for parameter values.
Definition datamodel_xml_configurationfromxml_10.h:126
static datamodel::Assignment::SourceValue getAsSourceValue(const std::string &variable)
Get the given string as source value.
Definition datamodel_xml_configurationfromxml_10.h:110
static void setEnumTableProperty(const DomNodeType &dom_node, datamodel::Function &module_inst)
Set the Enum Table Property from the 1.0 definitions.
Definition datamodel_xml_configurationfromxml_10.h:389
static datamodel::Target createTarget(const DomNodeType &dom_node, NeedFunctions &need_functions)
Create a Target object.
Definition datamodel_xml_configurationfromxml_10.h:343
static utility::Optional< T > getAttributeMandatory(const DomNodeType &dom_node, const std::string &attribute_name, const std::string &additional_info={})
Get the mandatory attribute helper function.
Definition datamodel_xml_configurationfromxml_10.h:64
static datamodel::Source createSource(const DomNodeType &dom_node)
Create a Source object.
Definition datamodel_xml_configurationfromxml_10.h:98
static constexpr auto mapping_reading_version
Error message definition string.
Definition datamodel_xml_configurationfromxml_10.h:52
static datamodel::Assignment createAssignment(const DomNodeType &dom_node, const std::string &target_name, NeedFunctions &need_functions)
Create a Assignment.
Definition datamodel_xml_configurationfromxml_10.h:234
static void setOptionalProperty(const DomNodeType &dom_node, const std::string &property_name, datamodel::Function &module_instance)
Set the Optional Property into the data model of a module.
Definition datamodel_xml_configurationfromxml_10.h:373
static datamodel::Function createFunctionFromTransformation(const DomNodeType &dom_node)
Create a Module object from a tranformation defintion.
Definition datamodel_xml_configurationfromxml_10.h:417
Factory helper to create a MappingConfiguration out of a XML based description. This factory uses a t...
Definition datamodel_xml_configurationfromxml_base.h:48
FunctionCall type.
Definition datamodel_configuration_items.h:945
ConstValue type of the parameter.
Definition datamodel_configuration_items.h:694
InternalValue type of the parameter.
Definition datamodel_configuration_items.h:707
Data type of the trigger.
Definition datamodel_configuration_items.h:414
Period type of the trigger.
Definition datamodel_configuration_items.h:437
Source type of the trigger.
Definition datamodel_configuration_items.h:403