Skip to content

Commit 54e874f

Browse files
arun3688lochel
andauthored
do not export empty ssd tags to ssp (#876)
Co-authored-by: Lennart Ochel <lennart.ochel@ri.se>
1 parent 2d9666d commit 54e874f

31 files changed

+116
-273
lines changed

src/OMSimulatorLib/System.cpp

Lines changed: 95 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -398,10 +398,15 @@ oms_status_enu_t oms::System::exportToSSD(pugi::xml_node& node, pugi::xml_node&
398398
return logError("export of system ElementGeometry failed");
399399

400400
// export top level system connectors
401-
pugi::xml_node connectors_node = node.append_child(oms::ssp::Draft20180219::ssd::connectors);
402-
for(const auto& connector : connectors)
403-
if (connector)
404-
connector->exportToSSD(connectors_node);
401+
if (connectors.size() > 1)
402+
{
403+
pugi::xml_node connectors_node = node.append_child(oms::ssp::Draft20180219::ssd::connectors);
404+
for(const auto& connector : connectors)
405+
{
406+
if (connector)
407+
connector->exportToSSD(connectors_node);
408+
}
409+
}
405410

406411
// export top level parameter bindings
407412
if (Flags::ExportParametersInline()) // export as inline
@@ -413,29 +418,41 @@ oms_status_enu_t oms::System::exportToSSD(pugi::xml_node& node, pugi::xml_node&
413418
values.exportToSSV(ssvNode); // export to ssv file
414419
}
415420

416-
pugi::xml_node elements_node = node.append_child(oms::ssp::Draft20180219::ssd::elements);
417-
418-
for (const auto& subsystem : subsystems)
421+
if (subelements.size() > 1)
419422
{
420-
pugi::xml_node system_node = elements_node.append_child(oms::ssp::Draft20180219::ssd::system);
421-
if (oms_status_ok != subsystem.second->exportToSSD(system_node, ssvNode))
422-
return logError("export of system failed");
423+
pugi::xml_node elements_node = node.append_child(oms::ssp::Draft20180219::ssd::elements);
424+
for (const auto& subsystem : subsystems)
425+
{
426+
pugi::xml_node system_node = elements_node.append_child(oms::ssp::Draft20180219::ssd::system);
427+
if (oms_status_ok != subsystem.second->exportToSSD(system_node, ssvNode))
428+
return logError("export of system failed");
429+
}
430+
for (const auto& component : components)
431+
{
432+
pugi::xml_node component_node = elements_node.append_child(oms::ssp::Draft20180219::ssd::component);
433+
if (oms_status_ok != component.second->exportToSSD(component_node, ssvNode))
434+
return logError("export of component failed");
435+
}
423436
}
424437

425-
for (const auto& component : components)
426-
{
427-
pugi::xml_node component_node = elements_node.append_child(oms::ssp::Draft20180219::ssd::component);
428-
if (oms_status_ok != component.second->exportToSSD(component_node, ssvNode))
429-
return logError("export of component failed");
430-
}
438+
std::vector<oms::Connection*> busconnections, ssdconnections;
431439

432-
std::vector<oms::Connection*> busconnections;
433-
pugi::xml_node connections_node = node.append_child(oms::ssp::Draft20180219::ssd::connections);
434440
for (const auto& connection : connections)
441+
{
435442
if (connection && connection->getType() == oms_connection_single)
436-
connection->exportToSSD(connections_node);
443+
ssdconnections.push_back(connection);
437444
else if (connection)
438445
busconnections.push_back(connection);
446+
}
447+
448+
if (!ssdconnections.empty())
449+
{
450+
pugi::xml_node connections_node = node.append_child(oms::ssp::Draft20180219::ssd::connections);
451+
for (const auto& ssdconnection : ssdconnections)
452+
{
453+
ssdconnection->exportToSSD(connections_node);
454+
}
455+
}
439456

440457
#if !defined(NO_TLM)
441458
if (busconnectors[0] || tlmbusconnectors[0] || !busconnections.empty())
@@ -504,65 +521,6 @@ oms_status_enu_t oms::System::importFromSSD(const pugi::xml_node& node, const st
504521
}
505522
else if (name == oms::ssp::Draft20180219::ssd::connections)
506523
{
507-
// check for ssvFileSource exist and set the values before the connections
508-
if (!ssvFileSources.empty())
509-
{
510-
for (const auto& ssvFileSource : ssvFileSources)
511-
{
512-
std::string tempdir = getModel()->getTempDirectory();
513-
filesystem::path temp_root(tempdir);
514-
pugi::xml_document ssvdoc;
515-
pugi::xml_parse_result result = ssvdoc.load_file((temp_root / ssvFileSource).string().c_str());
516-
pugi::xml_node parameterSet, parameters;
517-
518-
if (result) // check from ssv file
519-
{
520-
parameterSet = ssvdoc.document_element(); // ssv:ParameterSet
521-
parameters = parameterSet.child(oms::ssp::Version1_0::ssv::parameters);
522-
}
523-
else if (getModel()->getSnapshot().child(oms::ssp::Version1_0::ssv_file)) // check in memory oms:ssv_file
524-
{
525-
parameterSet = getModel()->getSnapshot().child(oms::ssp::Version1_0::ssv_file).child(oms::ssp::Version1_0::ssv::parameter_set); // ssv:ParameterSet
526-
parameters = parameterSet.child(oms::ssp::Version1_0::ssv::parameters);
527-
}
528-
else
529-
{
530-
return logError("loading \"" + std::string(ssvFileSource) + "\" failed (" + std::string(result.description()) + ")");
531-
}
532-
533-
if (parameters)
534-
{
535-
for(pugi::xml_node_iterator itparameters = parameters.begin(); itparameters != parameters.end(); ++itparameters)
536-
{
537-
std::string name = itparameters->name();
538-
if (name == oms::ssp::Version1_0::ssv::parameter)
539-
{
540-
ComRef cref = ComRef(itparameters->attribute("name").as_string());
541-
if (itparameters->child(oms::ssp::Version1_0::ssv::real_type))
542-
{
543-
double value = itparameters->child(oms::ssp::Version1_0::ssv::real_type).attribute("value").as_double();
544-
setReal(cref, value);
545-
}
546-
else if(itparameters->child(oms::ssp::Version1_0::ssv::integer_type))
547-
{
548-
int value = itparameters->child(oms::ssp::Version1_0::ssv::integer_type).attribute("value").as_int();
549-
setInteger(cref, value);
550-
}
551-
else if(itparameters->child(oms::ssp::Version1_0::ssv::boolean_type))
552-
{
553-
bool value = itparameters->child(oms::ssp::Version1_0::ssv::boolean_type).attribute("value").as_bool();
554-
setBoolean(cref, value);
555-
}
556-
else
557-
{
558-
logError("Failed to import " + std::string(oms::ssp::Version1_0::ssv::parameter) + ":Unknown ParameterBinding-type");
559-
}
560-
}
561-
}
562-
}
563-
}
564-
}
565-
566524
for(pugi::xml_node_iterator itConnectors = (*it).begin(); itConnectors != (*it).end(); ++itConnectors)
567525
{
568526
ComRef startElement = ComRef(itConnectors->attribute("startElement").as_string());
@@ -750,6 +708,65 @@ oms_status_enu_t oms::System::importFromSSD(const pugi::xml_node& node, const st
750708
else
751709
return logError("wrong xml schema detected: " + name);
752710
}
711+
712+
// check for ssvFileSource exist and set the values before the connections
713+
if (!ssvFileSources.empty())
714+
{
715+
for (const auto& ssvFileSource : ssvFileSources)
716+
{
717+
std::string tempdir = getModel()->getTempDirectory();
718+
filesystem::path temp_root(tempdir);
719+
pugi::xml_document ssvdoc;
720+
pugi::xml_parse_result result = ssvdoc.load_file((temp_root / ssvFileSource).string().c_str());
721+
pugi::xml_node parameterSet, parameters;
722+
723+
if (result) // check from ssv file
724+
{
725+
parameterSet = ssvdoc.document_element(); // ssv:ParameterSet
726+
parameters = parameterSet.child(oms::ssp::Version1_0::ssv::parameters);
727+
}
728+
else if (getModel()->getSnapshot().child(oms::ssp::Version1_0::ssv_file)) // check in memory oms:ssv_file
729+
{
730+
parameterSet = getModel()->getSnapshot().child(oms::ssp::Version1_0::ssv_file).child(oms::ssp::Version1_0::ssv::parameter_set); // ssv:ParameterSet
731+
parameters = parameterSet.child(oms::ssp::Version1_0::ssv::parameters);
732+
}
733+
else
734+
{
735+
return logError("loading \"" + std::string(ssvFileSource) + "\" failed (" + std::string(result.description()) + ")");
736+
}
737+
738+
if (parameters)
739+
{
740+
for(pugi::xml_node_iterator itparameters = parameters.begin(); itparameters != parameters.end(); ++itparameters)
741+
{
742+
std::string name = itparameters->name();
743+
if (name == oms::ssp::Version1_0::ssv::parameter)
744+
{
745+
ComRef cref = ComRef(itparameters->attribute("name").as_string());
746+
if (itparameters->child(oms::ssp::Version1_0::ssv::real_type))
747+
{
748+
double value = itparameters->child(oms::ssp::Version1_0::ssv::real_type).attribute("value").as_double();
749+
setReal(cref, value);
750+
}
751+
else if(itparameters->child(oms::ssp::Version1_0::ssv::integer_type))
752+
{
753+
int value = itparameters->child(oms::ssp::Version1_0::ssv::integer_type).attribute("value").as_int();
754+
setInteger(cref, value);
755+
}
756+
else if(itparameters->child(oms::ssp::Version1_0::ssv::boolean_type))
757+
{
758+
bool value = itparameters->child(oms::ssp::Version1_0::ssv::boolean_type).attribute("value").as_bool();
759+
setBoolean(cref, value);
760+
}
761+
else
762+
{
763+
logError("Failed to import " + std::string(oms::ssp::Version1_0::ssv::parameter) + ":Unknown ParameterBinding-type");
764+
}
765+
}
766+
}
767+
}
768+
}
769+
}
753770
}
754771
else if (name == oms::ssp::Draft20180219::ssd::annotations)
755772
{

testsuite/OMSimulator/deleteConnector.lua

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -104,8 +104,6 @@ print(src)
104104
-- </ssd:ParameterValues>
105105
-- </ssd:ParameterBinding>
106106
-- </ssd:ParameterBindings>
107-
-- <ssd:Elements />
108-
-- <ssd:Connections />
109107
-- </ssd:System>
110108
-- <ssd:System name="System1">
111109
-- <ssd:Annotations>
@@ -153,7 +151,6 @@ print(src)
153151
-- </ssd:ParameterBindings>
154152
-- </ssd:Component>
155153
-- </ssd:Elements>
156-
-- <ssd:Connections />
157154
-- </ssd:System>
158155
-- </ssd:Elements>
159156
-- <ssd:Connections>
@@ -215,8 +212,6 @@ print(src)
215212
-- </ssd:ParameterValues>
216213
-- </ssd:ParameterBinding>
217214
-- </ssd:ParameterBindings>
218-
-- <ssd:Elements />
219-
-- <ssd:Connections />
220215
-- </ssd:System>
221216
-- <ssd:System name="System1">
222217
-- <ssd:Annotations>
@@ -248,7 +243,6 @@ print(src)
248243
-- </ssd:Connectors>
249244
-- </ssd:Component>
250245
-- </ssd:Elements>
251-
-- <ssd:Connections />
252246
-- </ssd:System>
253247
-- </ssd:Elements>
254248
-- <ssd:Connections>

testsuite/OMSimulator/deleteStartValues.lua

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -119,8 +119,6 @@ print(src)
119119
-- </ssd:ParameterValues>
120120
-- </ssd:ParameterBinding>
121121
-- </ssd:ParameterBindings>
122-
-- <ssd:Elements />
123-
-- <ssd:Connections />
124122
-- </ssd:System>
125123
-- <ssd:System name="System1">
126124
-- <ssd:Annotations>
@@ -171,10 +169,8 @@ print(src)
171169
-- </ssd:Connectors>
172170
-- </ssd:Component>
173171
-- </ssd:Elements>
174-
-- <ssd:Connections />
175172
-- </ssd:System>
176173
-- </ssd:Elements>
177-
-- <ssd:Connections />
178174
-- </ssd:System>
179175
-- <ssd:DefaultExperiment startTime="0.000000" stopTime="1.000000">
180176
-- <ssd:Annotations>
@@ -225,8 +221,6 @@ print(src)
225221
-- <ssc:Real />
226222
-- </ssd:Connector>
227223
-- </ssd:Connectors>
228-
-- <ssd:Elements />
229-
-- <ssd:Connections />
230224
-- </ssd:System>
231225
-- <ssd:System name="System1">
232226
-- <ssd:Annotations>
@@ -261,10 +255,8 @@ print(src)
261255
-- </ssd:Connectors>
262256
-- </ssd:Component>
263257
-- </ssd:Elements>
264-
-- <ssd:Connections />
265258
-- </ssd:System>
266259
-- </ssd:Elements>
267-
-- <ssd:Connections />
268260
-- </ssd:System>
269261
-- <ssd:DefaultExperiment startTime="0.000000" stopTime="1.000000">
270262
-- <ssd:Annotations>

testsuite/OMSimulator/deleteStartValuesInSSV.lua

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,10 +110,8 @@ oms_delete("deleteStartValuesInSSV")
110110
-- </ssd:Connectors>
111111
-- </ssd:Component>
112112
-- </ssd:Elements>
113-
-- <ssd:Connections />
114113
-- </ssd:System>
115114
-- </ssd:Elements>
116-
-- <ssd:Connections />
117115
-- </ssd:System>
118116
-- <ssd:DefaultExperiment startTime="0.000000" stopTime="1.000000">
119117
-- <ssd:Annotations>

testsuite/OMSimulator/exportConnectorsToResultFile.lua

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,6 @@ oms_delete("exportConnectors")
154154
-- </ssd:ParameterBindings>
155155
-- </ssd:Component>
156156
-- </ssd:Elements>
157-
-- <ssd:Connections />
158157
-- </ssd:System>
159158
-- <ssd:DefaultExperiment startTime="0.000000" stopTime="1.000000">
160159
-- <ssd:Annotations>

testsuite/OMSimulator/exportSSVTemplate.lua

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ readFile("gain.ssv")
5757
-- </ssv:Parameter>
5858
-- </ssv:Parameters>
5959
-- </ssv:ParameterSet>
60-
--
60+
--
6161
-- <?xml version="1.0" encoding="UTF-8"?>
6262
-- <ssv:ParameterSet xmlns:ssc="http://ssp-standard.org/SSP1/SystemStructureCommon" xmlns:ssv="http://ssp-standard.org/SSP1/SystemStructureParameterValues" version="1.0" name="modelDescriptionStartValues">
6363
-- <ssv:Parameters>
@@ -75,7 +75,7 @@ readFile("gain.ssv")
7575
-- </ssv:Parameter>
7676
-- </ssv:Parameters>
7777
-- </ssv:ParameterSet>
78-
--
78+
--
7979
-- <?xml version="1.0" encoding="UTF-8"?>
8080
-- <ssv:ParameterSet xmlns:ssc="http://ssp-standard.org/SSP1/SystemStructureCommon" xmlns:ssv="http://ssp-standard.org/SSP1/SystemStructureParameterValues" version="1.0" name="modelDescriptionStartValues">
8181
-- <ssv:Parameters>
@@ -87,5 +87,5 @@ readFile("gain.ssv")
8787
-- </ssv:Parameter>
8888
-- </ssv:Parameters>
8989
-- </ssv:ParameterSet>
90-
--
90+
--
9191
-- endResult

testsuite/OMSimulator/exportSSVTemplate.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ def readFile(filename):
6060
## </ssv:Parameter>
6161
## </ssv:Parameters>
6262
## </ssv:ParameterSet>
63-
##
63+
##
6464
## <?xml version="1.0" encoding="UTF-8"?>
6565
## <ssv:ParameterSet xmlns:ssc="http://ssp-standard.org/SSP1/SystemStructureCommon" xmlns:ssv="http://ssp-standard.org/SSP1/SystemStructureParameterValues" version="1.0" name="modelDescriptionStartValues">
6666
## <ssv:Parameters>
@@ -78,7 +78,7 @@ def readFile(filename):
7878
## </ssv:Parameter>
7979
## </ssv:Parameters>
8080
## </ssv:ParameterSet>
81-
##
81+
##
8282
## <?xml version="1.0" encoding="UTF-8"?>
8383
## <ssv:ParameterSet xmlns:ssc="http://ssp-standard.org/SSP1/SystemStructureCommon" xmlns:ssv="http://ssp-standard.org/SSP1/SystemStructureParameterValues" version="1.0" name="modelDescriptionStartValues">
8484
## <ssv:Parameters>
@@ -90,5 +90,5 @@ def readFile(filename):
9090
## </ssv:Parameter>
9191
## </ssv:Parameters>
9292
## </ssv:ParameterSet>
93-
##
93+
##
9494
## endResult

testsuite/OMSimulator/importStartValues.lua

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,11 +66,8 @@ oms_delete("importStartValues")
6666
-- <ssc:Real />
6767
-- </ssd:Connector>
6868
-- </ssd:Connectors>
69-
-- <ssd:Elements />
70-
-- <ssd:Connections />
7169
-- </ssd:System>
7270
-- </ssd:Elements>
73-
-- <ssd:Connections />
7471
-- </ssd:System>
7572
-- <ssd:DefaultExperiment startTime="0.000000" stopTime="1.000000">
7673
-- <ssd:Annotations>

0 commit comments

Comments
 (0)