@@ -96,6 +96,19 @@ void oms::Values::getFilteredUnitDefinitionsToSSD(std::map<std::string, std::map
9696 }
9797}
9898
99+ void oms::Values::getFilteredEnumerationDefinitionsToSSD (std::map<std::string, std::map<std::string, std::string>>& enumerationDefinitions)
100+ {
101+ if (modeldescriptionTypeDefinitions.empty ())
102+ return ;
103+
104+ for (const auto &it: modeldescriptionTypeDefinitions)
105+ {
106+ auto enumType = enumerationDefinitions.find (it.first );
107+ if (enumType == enumerationDefinitions.end ())
108+ enumerationDefinitions[it.first ] = it.second ;
109+ }
110+ }
111+
99112oms_status_enu_t oms::Values::setInteger (const ComRef& cref, int value)
100113{
101114 integerStartValues[cref] = value;
@@ -575,6 +588,16 @@ std::string oms::Values::getUnitFromModeldescription(ComRef& cref) const
575588 return " " ;
576589}
577590
591+ std::string oms::Values::getEnumerationTypeFromModeldescription (ComRef& cref) const
592+ {
593+ // search in modelDescription.xml
594+ auto enumType = modeldescriptionEnumeration.find (cref);
595+ if (enumType != modeldescriptionEnumeration.end ())
596+ return enumType->second ;
597+
598+ return " " ;
599+ }
600+
578601oms_status_enu_t oms::Values::getIntegerFromModeldescription (const ComRef& cref, int & value)
579602{
580603 // search in modelDescription.xml
@@ -1486,6 +1509,29 @@ void oms::Values::importUnitDefinitions(const pugi::xml_node& node)
14861509 }
14871510}
14881511
1512+ void oms::Values::importEnumerationDefinitions (const pugi::xml_node& node, std::string& enumTypename)
1513+ {
1514+
1515+ if (!node)
1516+ return ;
1517+
1518+ pugi::xml_node enumeration = node.child (oms::ssp::Draft20180219::ssd::enumerations);
1519+
1520+ for (pugi::xml_node enumItems = enumeration.child (oms::ssp::Version1_0::ssc::enumeration_type); enumItems; enumItems = enumItems.next_sibling (oms::ssp::Version1_0::ssc::enumeration_type))
1521+ {
1522+ // entry found
1523+ if (enumItems.attribute (" name" ).as_string () == enumTypename)
1524+ {
1525+ std::map<std::string, std::string> enumerationItems;
1526+ for (pugi::xml_node enumItem = enumItems.child (oms::ssp::Version1_0::ssc::enum_item); enumItem; enumItem = enumItem.next_sibling (oms::ssp::Version1_0::ssc::enum_item))
1527+ {
1528+ enumerationItems[enumItem.attribute (" name" ).as_string ()] = enumItem.attribute (" value" ).as_string ();
1529+ }
1530+ modeldescriptionTypeDefinitions[enumTypename] = enumerationItems;
1531+ }
1532+ }
1533+ }
1534+
14891535oms_status_enu_t oms::Values::parseModelDescription (const filesystem::path& root, std::string& guid_)
14901536{
14911537
@@ -1513,6 +1559,21 @@ oms_status_enu_t oms::Values::parseModelDescription(const filesystem::path& root
15131559 for (pugi::xml_node_iterator it = node.begin (); it != node.end (); ++it)
15141560 {
15151561 std::string name = it->name ();
1562+ if (name == " TypeDefinitions" )
1563+ {
1564+ pugi::xml_node simpleType = it->child (" SimpleType" );
1565+ pugi::xml_node Enumeration = simpleType.child (" Enumeration" );
1566+ if (Enumeration)
1567+ {
1568+ std::map<std::string, std::string> enumerationItems;
1569+ for (pugi::xml_node enumItem = Enumeration.child (" Item" ); enumItem; enumItem = enumItem.next_sibling (" Item" ))
1570+ {
1571+ // std::cout << "\n loop: " << enumItem.attribute("name").as_string() << "==>" << enumItem.attribute("value").as_string();
1572+ enumerationItems[enumItem.attribute (" name" ).as_string ()] = enumItem.attribute (" value" ).as_string ();
1573+ }
1574+ modeldescriptionTypeDefinitions[simpleType.attribute (" name" ).as_string ()] = enumerationItems;
1575+ }
1576+ }
15161577 if (name == " UnitDefinitions" )
15171578 {
15181579 // std::cout << "\nParse Unit Definitions";
@@ -1563,6 +1624,10 @@ oms_status_enu_t oms::Values::parseModelDescription(const filesystem::path& root
15631624 {
15641625 modelDescriptionBooleanStartValues[scalarVariable.attribute (" name" ).as_string ()] = scalarVariable.child (" Boolean" ).attribute (" start" ).as_bool ();
15651626 }
1627+ if (strlen (scalarVariable.child (" Enumeration" ).attribute (" declaredType" ).as_string ()) != 0 )
1628+ {
1629+ modeldescriptionEnumeration[scalarVariable.attribute (" name" ).as_string ()] = scalarVariable.child (" Enumeration" ).attribute (" declaredType" ).as_string ();
1630+ }
15661631 }
15671632 }
15681633 if (name == " ModelStructure" )
0 commit comments