diff --git a/src/sbml/SBase.cpp b/src/sbml/SBase.cpp index 081e5b9988..4b8b1dafba 100644 --- a/src/sbml/SBase.cpp +++ b/src/sbml/SBase.cpp @@ -6470,6 +6470,28 @@ SBase::reconstructRDFAnnotation() } } +if (mAnnotation != NULL) + { + int rdfIndex = mAnnotation->getIndex("RDF"); + if (rdfIndex >= 0) + { + XMLNode& rdfNode = mAnnotation->getChild((unsigned int)rdfIndex); + + for (int i = (int)rdfNode.getNumChildren() - 1; i >= 0; i--) + { + XMLNode& child = rdfNode.getChild((unsigned int)i); + if (child.getName() == "Description" && child.getNumChildren() == 0) + { + delete rdfNode.removeChild((unsigned int)i); + } + } + + if (rdfNode.getNumChildren() == 0) + { + delete mAnnotation->removeChild((unsigned int)rdfIndex); + } + } + } if (history != NULL) delete history; if (cvTerms != NULL) delete cvTerms; diff --git a/src/sbml/test/TestSBase.cpp b/src/sbml/test/TestSBase.cpp index 2efd046fc1..89786909e5 100644 --- a/src/sbml/test/TestSBase.cpp +++ b/src/sbml/test/TestSBase.cpp @@ -2654,6 +2654,34 @@ START_TEST(test_SBase_userData1) } END_TEST +START_TEST (test_SBase_unsetModifiedDates_issue354) +{ + Model* m = new Model(3, 2); + m->setMetaId("foo"); + + ModelHistory* h = new ModelHistory(); + Date* d = new Date("2019-07-29T10:53:09Z"); + h->addModifiedDate(d); + + m->setModelHistory(h); + + fail_unless(m->getModelHistory()->getNumModifiedDates() == 1); + + ModelHistory* h_ref = m->getModelHistory(); + h_ref->unsetModifiedDates(); + m->setModelHistory(h_ref); + + std::string annotation = m->getAnnotationString(); + + size_t found = annotation.find("rdf:about=\"#foo\""); + fail_unless(found == std::string::npos); + + delete d; + delete h; + delete m; +} +END_TEST + Suite * create_suite_SBase (void) { @@ -2709,6 +2737,7 @@ create_suite_SBase (void) tcase_add_test(tcase, test_SBase_userData1); tcase_add_test(tcase, test_SBase_prefixMetaIdSBO); + tcase_add_test(tcase, test_SBase_unsetModifiedDates_issue354); suite_add_tcase(suite, tcase);