@@ -514,37 +514,48 @@ oms_status_enu_t oms::System::importFromSSD(const pugi::xml_node& node, const st
514514 }
515515 else if (name == oms::ssp::Version1_0::ssd::parameter_bindings)
516516 {
517- // check for multiple ssv files or parameter bindings
518- for (pugi::xml_node parameterBindingNode = it->child (oms::ssp::Version1_0::ssd::parameter_binding); parameterBindingNode; parameterBindingNode = parameterBindingNode.next_sibling (oms::ssp::Version1_0::ssd::parameter_binding))
517+ std::string parent_node = it->parent ().parent ().name ();
518+ // top level parameter bindings belonging to <ssd:SystemStructureDescription> provided either as inline or .ssv files
519+ if (parent_node == oms::ssp::Draft20180219::ssd::system_structure_description)
519520 {
520- std::string ssvFileSource = parameterBindingNode.attribute (" source" ).as_string ();
521-
522- // set parameter bindings associated with the system
523- if (ssvFileSource.empty ()) // inline parameterBinding
524- {
525- std::string tempdir = getModel ()->getTempDirectory ();
526- if (oms_status_ok != values.importFromSSD (*it, sspVersion, tempdir))
527- return logError (" Failed to import " + std::string (oms::ssp::Version1_0::ssd::parameter_bindings));
528- }
529- else
521+ // check for multiple ssv files or parameter bindings
522+ for (pugi::xml_node parameterBindingNode = it->child (oms::ssp::Version1_0::ssd::parameter_binding); parameterBindingNode; parameterBindingNode = parameterBindingNode.next_sibling (oms::ssp::Version1_0::ssd::parameter_binding))
530523 {
531- // store the ssv and ssm files and process it later while handling the connection, so all the components are loaded
532- pugi::xml_node parameterMapping = parameterBindingNode.child (oms::ssp::Version1_0::ssd::parameter_mapping);
524+ std::string ssvFileSource = parameterBindingNode.attribute (" source" ).as_string ();
533525
534- // check for parameterMapping (e.g) <ssd:ParameterMapping>
535- if (parameterMapping)
526+ // set parameter bindings associated with the system
527+ if (ssvFileSource. empty ()) // inline parameterBinding
536528 {
537- // parameterMapping provided
538- std::string ssmFileSource = parameterMapping. attribute ( " source " ). as_string ();
539- startValuesFileSources[ssvFileSource] = ssmFileSource ;
529+ std::string tempdir = getModel ()-> getTempDirectory ();
530+ if (oms_status_ok != values. importFromSSD (*it, sspVersion, tempdir))
531+ return logError ( " Failed to import " + std::string (oms::ssp::Version1_0::ssd::parameter_bindings)) ;
540532 }
541533 else
542534 {
543- // no parameterMapping
544- startValuesFileSources[ssvFileSource] = " " ;
535+ // store the ssv and ssm files and process it later while handling the connection, so all the components are loaded
536+ pugi::xml_node parameterMapping = parameterBindingNode.child (oms::ssp::Version1_0::ssd::parameter_mapping);
537+
538+ // check for parameterMapping (e.g) <ssd:ParameterMapping>
539+ if (parameterMapping)
540+ {
541+ // parameterMapping provided
542+ std::string ssmFileSource = parameterMapping.attribute (" source" ).as_string ();
543+ startValuesFileSources[ssvFileSource] = ssmFileSource;
544+ }
545+ else
546+ {
547+ // no parameterMapping
548+ startValuesFileSources[ssvFileSource] = " " ;
549+ }
545550 }
546551 }
547552 }
553+ else
554+ // heirarchial level parameter bindings belonging to <ssd:Elements> provided either as inline or .ssv files
555+ {
556+ if (oms_status_ok != values.importFromSSD (*it, sspVersion, getModel ()->getTempDirectory ()))
557+ return logError (" Failed to import " + std::string (oms::ssp::Version1_0::ssd::parameter_bindings));
558+ }
548559 }
549560 else if (name == oms::ssp::Draft20180219::ssd::connections)
550561 {
@@ -2364,7 +2375,7 @@ oms_status_enu_t oms::System::importStartValuesFromSSV()
23642375 // check for parameter mapping file ".ssm file"
23652376 if (!file.second .empty ())
23662377 {
2367- importParamterMappingFromSSM (file.second , mappedEntry);
2378+ importParameterMappingFromSSM (file.second , mappedEntry);
23682379 importStartValuesFromSSVHelper (file.first , mappedEntry);
23692380 }
23702381 else
@@ -2478,7 +2489,7 @@ oms_status_enu_t oms::System::importStartValuesFromSSVHelper(std::string fileNam
24782489 return oms_status_ok;
24792490}
24802491
2481- oms_status_enu_t oms::System::importParamterMappingFromSSM (std::string fileName, std::multimap<ComRef, ComRef> &mappedEntry)
2492+ oms_status_enu_t oms::System::importParameterMappingFromSSM (std::string fileName, std::multimap<ComRef, ComRef> &mappedEntry)
24822493{
24832494 std::string tempdir = getModel ()->getTempDirectory ();
24842495 filesystem::path temp_root (tempdir);
@@ -2490,6 +2501,10 @@ oms_status_enu_t oms::System::importParamterMappingFromSSM(std::string fileName,
24902501 {
24912502 parameterMapping = ssmdoc.document_element (); // ssm:ParameterMapping
24922503 }
2504+ else
2505+ {
2506+ return logError (" loading \" " + std::string (fileName) + " \" failed (" + std::string (result.description ()) + " )" );
2507+ }
24932508
24942509 if (parameterMapping)
24952510 {
0 commit comments