sbmlteam / libsbml

LibSBML is a native library for reading, writing and manipulating files and data streams containing the Systems Biology Markup Language (SBML). It offers language bindings for C, C++, C#, Java, JavaScript, MATLAB, Perl, PHP, Python, R and Ruby.

Home Page:https://sbml.org/software/libsbml

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Can't add ModelHistory without dates even in L3V2

avandecreme opened this issue · comments

#265 adds support for ModelHistory without dates in L3V2.

However, when running the addModelHistory.c example with the parts adding the dates commented out on a L3V2 SBML file, we still get the following output: Set model history: invalid object.

The reason for that is that ModelHistory::hasRequiredAttributes is called on a model history which does not have a parent SBML object (yet) so we are falling in the level < 3 branch here:

if (parent == NULL || parent->getLevel() < 3)

is it possible to call ModelHistory::setParentSBMLObject before? Without knowing the sbml context, it is not possible to decide whether the element is valid or not. So i think the fix here would be to add extern C overloads for accessing the parent sbml object.

For the exact issue I guess we could fix it by setting (and unsetting it after the check) the parent before calling history->hasRequiredAttributes() here:

else if (!(history->hasRequiredAttributes()))

If someone wants to call ModelHistory::hasRequiredAttributes directly, I guess we have to make C bindings to access the parent sbml object indeed.

Another option would be to pass the SBML version as a parameter to hasRequiredAttributes but that would be quite a big change.

For the exact issue I guess we could fix it by setting (and unsetting it after the check) the parent before calling history->hasRequiredAttributes() here

i think that is could idea, if no parent has been set, we temporarily set before the check, and unset after.

Thanks for fixing!