Skip to content

jsbml-1.0-beta1

Compare
Choose a tag to compare
@niko-rodrigue niko-rodrigue released this 23 May 12:51
· 2627 commits to master since this release

Version 1.0-beta1 (06-03-2014)

  • New Features:
    • The main addition to JSBML 1.0 is support for the SBML Level 3 packages,
      as described below.
    • JSBML is no longer compliant with Java 1.5, and now requires Java 1.6 as
      a minimum. We believe this is reasonable given the widespread
      availability of Java virtual machines version 1.6 on diverse platforms.
    • Support for the SBML Qualitative Models package (qual) has been
      implemented, following the Version 1 Release 1 specification (17 May
      2013).
    • Support for the SBML Flux Balance Constraints package (fbc) has been
      implemented, following the Version 1 Release 1 spec. (11 February 2013).
    • Support for the SBML Hierarchical Model Composition package (comp) has
      been implemented, following the Version 1 Release 3 spec. (14 November
      2013).
    • Support for the SBML Layout package (layout) has been implemented,
      following the Version 1 Release 1 specification (13 August 2013).
    • (Experimental) support for the SBML Required Elements package (req) has
      been implemented, following the draft Version 1 Release 0.5 spec. (30 May
      2013).
    • (Experimental) support for the SBML Spatial Processes package (spatial)
      has been implemented, following the working specification Version 1
      release 0.80 (latest version is release 0.85, 13 December 2013).
    • (Experimental) support for the SBML Groups package (groups) has been
      implemented, following the draft Version 1 Release 0.4 spec. (17 May 2013).
    • (Experimental) support for the SBML Render package (render) has been
      implemented, trying to follow the SBML Level 2 specification.
    • Support for arrays, distrib and multi is not yet available but planned
      for the final JSBML 1.0 release.
    • A ParserManager class has been implemented to register SBML Level 3
      package parsers. This manager also allows JSBML to enable automatically
      the packages into the SBMLDocument so there is no longer a need to set
      the package namespace or the 'required' attribute manually.
    • Reading more than one RDF Description element in the RDF annotation
      block (the official SBML annotation scheme) is now supported. The whole
      annotation is parsed first into an XMLNode object, and then the official
      SBML annotations are extracted, if any are found.
    • A new convenience method, removeFromParent, has been added to SBase and
      TreeNodeWithChangeSupport. It offers the ability to remove any element
      from the JSBML tree from its parent.
    • An alternative class to parse mathematical formula has been implemented.
      It is named FormulaParserLL3 and it respects the same syntax as the
      libSBML L3 parser.
    • Some filter methods have been added to TreeNodeWithChangeSupport (and
      thus to SBase as well); they allow for recursive queries in the entire
      data structure.
    • A new filter, XMLNodeFilter, is available to facilitate the manipulation
      of XMLNode. It allow to do a search similar to the DOM
      Element#getElementsByTagNameNS(String, String) method on XMLNode.
    • There is now a new ProgressListener utility class that enables tracking
      the progress of computationally intensive tasks.
    • For better localization support and to separate source code from user
      messages, a new resource manager has been implemented and is being used
      in some JSBML classes already.
    • The CVTerm API has been improved with new methods that should simplify
      the code needed to manipulate CVTerm objects. The javadoc documentation
      indicates which methods could be used to replace the existing ones.
    • The libSBMLio module for reading and writing SBML using libSBML as an
      input and output module has been revised and completely re-implemented.
    • The CellDesigner plugin module has been completely re-written and has
      become significantly more efficient. This facilitates the creation of
      CellDesigner plugins for existing JSBML-based programs with very little
      overhead.
    • MAVEN support has been improved. Thanks to Aurélien Naldi for providing
      several POM.xml files for JSBML.
    • Syntax checking for SBML 'metaid' attributes have been added to the
      setMetaId method.
    • SBasePlugin now implements the TreeNodeWithChangeSupport interface.
    • Validation checks for e-mail addresses have been added to Creator.
    • A quick Hash-based search method to access elements in a model based on
      their identifier is now available. In the same way, any SBase can be
      found in the SBMLDocument based on its metaId in constant time.
    • In order to make the API more Java-like, for each getNumXXX method a
      corresponding getXXXCount method has been created.
    • The userObject in ASTNode has been replaced by a more general map of
      userObjects that is located in TreeNodeWithChangeSupport. In this way,
      any JSBML object that is part of the SBML tree can now be attached with
      user- defined objects. These will not be written to SBML later on.
    • The Unit class has the new methods removeMultiplier: it merges multiplier
      and scale. This can only be done if the logarithm to the base 10 of the
      multiplier is nearly an integer number, i.e., if the distance to the next
      integer falls below the ensured double precision.
    • The multiplyWith and divideBy methods in UnitDefinition have been
      improved to better combine units by using the merge method.
    • The Species class now ensures that its spatial size units can only be set
      if its surrounding compartment does not have zero dimensions and if its
      hasOnlySubstanceUnits attribute is false. This behavior is specified by
      the SBML documents for Level 2 Versions 1 and 2, but was not yet
      implemented.
    • When deriving its UnitDefinition, the Species class searches for a
      suitable existing unit from the model, rather than creating a new
      instance. To this end, inherited Level 3 units from the Model are now
      taken into account.
    • A new JUnit test class helps to check if simplification and merging of
      Units and UnitDefinitions works correctly.
  • Bug Fixes:
    • When writing SBML to files, the streams created by JSBML were not closed
      in all cases. Fixed. Thanks to Akira Funahashi for pointing this out.
    • Appending text in an XMLToken did not have an effect if there was already
      some text. Fixed.
    • When trying to remove a modifier, reactant, or product from a reaction using
      the id of the element, where no such element was present before, a
      NullPointerException was thrown. This has been solved. Thanks to Curtis
      Madsen for detecting this bug.
    • In the Reaction class, the setReversible method accepted Boolean, instead
      of boolean. This has been changed.
    • Removed old note comment from the SubModel class.
    • JSBML did not write negative infinity into SBML files correctly. Fixed.
    • Detected and fixed a source of possible NullPointerExceptions within the
      hashCode method in ASTNode.
    • There was a bug in KineticLaw that prevented a correct iteration through
      all children. Instead of looking at the listOfLocalParameters, it
      returned the math element twice (if there was one).
    • When cloning entire models or SBMLDocuments, JSBML assigned the identical
      TreeNodeChangeListeners to the new data structure. This could lead to
      unexpected behavior because listeners were receiving change events from
      data structures to which these have not been explicitly added by a user.
    • Cloning caused problems because in some cases the recursive method that
      registers all local parameters and other entities with an id did not do a
      full recursion. Hence, some entities could not be found in the model
      later on when searching for a certain id.
    • When calling the method setSymbol in InitialAssignment with an instance
      of Variable as argument, the listeners were sometimes not correctly
      informed about changes.
    • The setParent method caused an incorrect and in many cases duplicate call
      of the nodeAdded method in TreeNodeChangeListeners. Instead of
      registering a property change (the parent link) the parent node has been
      passed to the nodeAdded method.
    • QuantityWithUnit did not fire update events when changing its value.
    • The unsetUnits method in ExplicitRule now correctly notifies the listeners.
    • The Model class lacked an unsetSubstanceUnits method. Thanks to Robert
      Byrnes for reporting this problem.
    • The Compartment class did not override the method getDerivedUnitDefinition
      from its superclass. Hence, Level 3 units could not be inherited from the
      model. Fixed.
    • Merging of Units did not correctly work in cases where the scales of two
      units could not be evenly merged: just one of both was used and the other
      was ignored. In the corrected version, both scales removed represented by
      a double-valued multiplier in the merged unit. In particular, this error
      occurred in the addition or subtraction of ASTNodes.
    • If during the simplification of UnitDefinitions a dimensionless unit was
      created by canceling terms, its scale was always set to 0 and multiplier to
      1, which could lead to errors. Additional checks now yield correct results.
    • The units of formulae containing Advogadro's number could not be derived.
      This is now fixed.
    • In some cases, containsUndeclaredUnits() in ASTNode yielded incorrect
      results. These are now fixed.
    • [Tracker item #6]: a NullPointerException was returned when using the
      method Model.findLocalParameters(String) unless at least one
      LocalParameter was registered in the model.
    • It was sometimes possible to unregister elements from a model using
      cloned elements that did not belong to the model.
    • SBMLValidator fixed according to the changes made on the sbml.org
      validator to add package information.
  • Known issues:
    • If you don't have the code handling a package in your classpath,
      jsbml-1.0-beta1 will loose the package elements, they won't be kept
      in memory or went writing back the model to a file. The final release
      should be able to handle unknown packages.