From 6ca6a3f5001a468c18b5d21eff98d49bc4f5cc7c Mon Sep 17 00:00:00 2001 From: Piotr Gawron <piotr.gawron@uni.lu> Date: Mon, 29 Jan 2018 16:53:23 +0100 Subject: [PATCH] support for SBML units and parameters added --- .../celldesigner/CellDesignerXmlParser.java | 21 +++- .../function/FunctionCollectionXmlParser.java | 2 +- .../function/FunctionXmlParser.java | 2 +- .../ParameterCollectionXmlParser.java | 31 ++++++ .../parameter/ParameterXmlParser.java | 29 +++++ .../unit/UnitCollectionXmlParser.java | 24 ++++ .../celldesigner/unit/UnitXmlParser.java | 70 ++++++++++++ .../celldesigner/AllCellDesignerTests.java | 46 ++++---- .../celldesigner/ComplexParserTests.java | 26 +++++ .../function/FunctionXmlParserTest.java | 2 +- .../parameter/ParameterXmlParserTest.java | 36 ++++++ .../celldesigner/unit/UnitXmlParserTest.java | 33 ++++++ .../testFiles/parameter.xml | 54 +++++++++ .../testFiles/parameter/simple.xml | 1 + converter-CellDesigner/testFiles/unit.xml | 31 ++++++ .../testFiles/unit/simple.xml | 5 + .../map/{ => kinetics}/SbmlFunction.java | 2 +- .../model/map/kinetics/SbmlParameter.java | 101 +++++++++++++++++ .../model/map/kinetics/SbmlUnit.java | 88 +++++++++++++++ .../model/map/kinetics/SbmlUnitType.java | 36 ++++++ .../map/kinetics/SbmlUnitTypeFactor.java | 103 ++++++++++++++++++ .../lcsb/mapviewer/model/map/model/Model.java | 18 ++- .../mapviewer/model/map/model/ModelData.java | 32 +++++- .../model/map/model/ModelFullIndexed.java | 40 ++++++- .../graphics/PolylineDataComparatorTest.java | 3 +- .../lcsb/mapviewer/model/map/AllMapTests.java | 54 ++++----- .../model/map/kinetics/AllKineticsTests.java | 11 ++ .../map/{ => kinetics}/SbmlFunctionTest.java | 2 +- .../model/map/kinetics/SbmlParameterTest.java | 32 ++++++ .../model/map/kinetics/SbmlUnitTest.java | 33 ++++++ .../map/kinetics/SbmlUnitTypeFactorTest.java | 25 +++++ 31 files changed, 934 insertions(+), 59 deletions(-) create mode 100644 converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/parameter/ParameterCollectionXmlParser.java create mode 100644 converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/parameter/ParameterXmlParser.java create mode 100644 converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/unit/UnitCollectionXmlParser.java create mode 100644 converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/unit/UnitXmlParser.java create mode 100644 converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/parameter/ParameterXmlParserTest.java create mode 100644 converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/unit/UnitXmlParserTest.java create mode 100644 converter-CellDesigner/testFiles/parameter.xml create mode 100644 converter-CellDesigner/testFiles/parameter/simple.xml create mode 100644 converter-CellDesigner/testFiles/unit.xml create mode 100644 converter-CellDesigner/testFiles/unit/simple.xml rename model/src/main/java/lcsb/mapviewer/model/map/{ => kinetics}/SbmlFunction.java (93%) create mode 100644 model/src/main/java/lcsb/mapviewer/model/map/kinetics/SbmlParameter.java create mode 100644 model/src/main/java/lcsb/mapviewer/model/map/kinetics/SbmlUnit.java create mode 100644 model/src/main/java/lcsb/mapviewer/model/map/kinetics/SbmlUnitType.java create mode 100644 model/src/main/java/lcsb/mapviewer/model/map/kinetics/SbmlUnitTypeFactor.java create mode 100644 model/src/test/java/lcsb/mapviewer/model/map/kinetics/AllKineticsTests.java rename model/src/test/java/lcsb/mapviewer/model/map/{ => kinetics}/SbmlFunctionTest.java (96%) create mode 100644 model/src/test/java/lcsb/mapviewer/model/map/kinetics/SbmlParameterTest.java create mode 100644 model/src/test/java/lcsb/mapviewer/model/map/kinetics/SbmlUnitTest.java create mode 100644 model/src/test/java/lcsb/mapviewer/model/map/kinetics/SbmlUnitTypeFactorTest.java diff --git a/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/CellDesignerXmlParser.java b/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/CellDesignerXmlParser.java index 05794c33d6..0178e222c6 100644 --- a/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/CellDesignerXmlParser.java +++ b/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/CellDesignerXmlParser.java @@ -9,7 +9,6 @@ import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; -import java.util.Set; import org.apache.commons.io.FilenameUtils; import org.apache.commons.lang3.StringEscapeUtils; @@ -30,6 +29,7 @@ import lcsb.mapviewer.converter.model.celldesigner.alias.AliasCollectionXmlParse import lcsb.mapviewer.converter.model.celldesigner.annotation.RestAnnotationParser; import lcsb.mapviewer.converter.model.celldesigner.compartment.CompartmentCollectionXmlParser; import lcsb.mapviewer.converter.model.celldesigner.function.FunctionCollectionXmlParser; +import lcsb.mapviewer.converter.model.celldesigner.parameter.ParameterCollectionXmlParser; import lcsb.mapviewer.converter.model.celldesigner.reaction.ReactionCollectionXmlParser; import lcsb.mapviewer.converter.model.celldesigner.reaction.UnknownReactionClassException; import lcsb.mapviewer.converter.model.celldesigner.species.InternalModelSpeciesData; @@ -37,9 +37,9 @@ import lcsb.mapviewer.converter.model.celldesigner.species.SpeciesCollectionXmlP import lcsb.mapviewer.converter.model.celldesigner.structure.CellDesignerCompartment; import lcsb.mapviewer.converter.model.celldesigner.structure.CellDesignerElement; import lcsb.mapviewer.converter.model.celldesigner.structure.CellDesignerSpecies; +import lcsb.mapviewer.converter.model.celldesigner.unit.UnitCollectionXmlParser; import lcsb.mapviewer.model.graphics.PolylineData; import lcsb.mapviewer.model.map.InconsistentModelException; -import lcsb.mapviewer.model.map.SbmlFunction; import lcsb.mapviewer.model.map.compartment.Compartment; import lcsb.mapviewer.model.map.layout.graphics.Layer; import lcsb.mapviewer.model.map.layout.graphics.LayerOval; @@ -110,6 +110,7 @@ public class CellDesignerXmlParser extends XmlParser implements IConverter { public Model createModel(ConverterParams params) throws InvalidInputDataExecption { CellDesignerElementCollection elements = new CellDesignerElementCollection(); FunctionCollectionXmlParser functionParser = new FunctionCollectionXmlParser(); + UnitCollectionXmlParser unitParser = new UnitCollectionXmlParser(); Model model = new ModelFullIndexed(null); @@ -120,6 +121,8 @@ public class CellDesignerXmlParser extends XmlParser implements IConverter { aliasCollectionParser = new AliasCollectionXmlParser(elements, model); compartmentCollectionXmlParser = new CompartmentCollectionXmlParser(elements); + ParameterCollectionXmlParser parameterParser = new ParameterCollectionXmlParser(model); + DOMParser parser = new DOMParser(); try { parser.parse(params.getSource()); @@ -163,6 +166,8 @@ public class CellDesignerXmlParser extends XmlParser implements IConverter { } Node reactionsNode = null; Node functionsNode = null; + Node unitsNode = null; + Node parametersNode = null; NodeList nodes = modelNode.getChildNodes(); for (int x = 0; x < nodes.getLength(); x++) { @@ -184,15 +189,25 @@ public class CellDesignerXmlParser extends XmlParser implements IConverter { } model.setNotes(notes); } else if (node.getNodeName().equalsIgnoreCase("listOfUnitDefinitions")) { - continue; // we can ignore unit definitions + unitsNode = node; } else if (node.getNodeName().equalsIgnoreCase("listOfFunctionDefinitions")) { functionsNode = node; + } else if (node.getNodeName().equalsIgnoreCase("listOfParameters")) { + parametersNode = node; } else { throw new InvalidInputDataExecption("Unknown element of model: " + node.getNodeName()); } } } + if (unitsNode!=null) { + model.addUnits(unitParser.parseXmlUnitCollection(unitsNode)); + } + + if (parametersNode!=null) { + model.addParameters(parameterParser.parseXmlParameterCollection(parametersNode)); + } + Node annotationNode = getNode("annotation", modelNode.getChildNodes()); if (annotationNode == null) { throw new InvalidInputDataExecption("No annotation node in SBML/model"); diff --git a/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/function/FunctionCollectionXmlParser.java b/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/function/FunctionCollectionXmlParser.java index ceeaa4963e..e8ebe8c180 100644 --- a/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/function/FunctionCollectionXmlParser.java +++ b/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/function/FunctionCollectionXmlParser.java @@ -7,7 +7,7 @@ import org.w3c.dom.Node; import lcsb.mapviewer.common.XmlParser; import lcsb.mapviewer.common.exception.InvalidXmlSchemaException; -import lcsb.mapviewer.model.map.SbmlFunction; +import lcsb.mapviewer.model.map.kinetics.SbmlFunction; public class FunctionCollectionXmlParser extends XmlParser { diff --git a/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/function/FunctionXmlParser.java b/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/function/FunctionXmlParser.java index b25b2829d1..e5fa4b9379 100644 --- a/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/function/FunctionXmlParser.java +++ b/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/function/FunctionXmlParser.java @@ -8,7 +8,7 @@ import org.w3c.dom.Node; import lcsb.mapviewer.common.XmlParser; import lcsb.mapviewer.common.exception.InvalidXmlSchemaException; -import lcsb.mapviewer.model.map.SbmlFunction; +import lcsb.mapviewer.model.map.kinetics.SbmlFunction; public class FunctionXmlParser extends XmlParser { Logger logger = Logger.getLogger(FunctionXmlParser.class); diff --git a/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/parameter/ParameterCollectionXmlParser.java b/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/parameter/ParameterCollectionXmlParser.java new file mode 100644 index 0000000000..cc8d4a3c0e --- /dev/null +++ b/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/parameter/ParameterCollectionXmlParser.java @@ -0,0 +1,31 @@ +package lcsb.mapviewer.converter.model.celldesigner.parameter; + +import java.util.HashSet; +import java.util.Set; + +import org.apache.log4j.Logger; +import org.w3c.dom.Node; + +import lcsb.mapviewer.common.XmlParser; +import lcsb.mapviewer.common.exception.InvalidXmlSchemaException; +import lcsb.mapviewer.model.map.kinetics.SbmlParameter; +import lcsb.mapviewer.model.map.model.Model; + +public class ParameterCollectionXmlParser extends XmlParser { + Logger logger = Logger.getLogger(ParameterCollectionXmlParser.class); + + private ParameterXmlParser parameterParser; + + public ParameterCollectionXmlParser(Model model) { + parameterParser = new ParameterXmlParser(model); + } + + public Set<SbmlParameter> parseXmlParameterCollection(Node functionsNode) throws InvalidXmlSchemaException { + Set<SbmlParameter> result = new HashSet<>(); + for (Node node : super.getNodes("parameter", functionsNode.getChildNodes())) { + result.add(parameterParser.parseFunction(node)); + } + return result; + } + +} diff --git a/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/parameter/ParameterXmlParser.java b/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/parameter/ParameterXmlParser.java new file mode 100644 index 0000000000..c0eb0dbaf0 --- /dev/null +++ b/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/parameter/ParameterXmlParser.java @@ -0,0 +1,29 @@ +package lcsb.mapviewer.converter.model.celldesigner.parameter; + +import org.apache.log4j.Logger; +import org.w3c.dom.Node; + +import lcsb.mapviewer.common.XmlParser; +import lcsb.mapviewer.common.exception.InvalidXmlSchemaException; +import lcsb.mapviewer.model.map.kinetics.SbmlParameter; +import lcsb.mapviewer.model.map.model.Model; + +public class ParameterXmlParser extends XmlParser { + Logger logger = Logger.getLogger(ParameterXmlParser.class); + + private Model model; + + public ParameterXmlParser(Model model) { + this.model = model; + } + + public SbmlParameter parseFunction(Node unitNode) throws InvalidXmlSchemaException { + String parameterId = getNodeAttr("id", unitNode); + + SbmlParameter result = new SbmlParameter(parameterId); + result.setName(getNodeAttr("name", unitNode)); + result.setValue(Double.parseDouble(getNodeAttr("value", unitNode))); + result.setUnits(model.getUnitsByUnitId(getNodeAttr("units", unitNode))); + return result; + } +} diff --git a/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/unit/UnitCollectionXmlParser.java b/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/unit/UnitCollectionXmlParser.java new file mode 100644 index 0000000000..1cf70a8067 --- /dev/null +++ b/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/unit/UnitCollectionXmlParser.java @@ -0,0 +1,24 @@ +package lcsb.mapviewer.converter.model.celldesigner.unit; + +import java.util.HashSet; +import java.util.Set; + +import org.w3c.dom.Node; + +import lcsb.mapviewer.common.XmlParser; +import lcsb.mapviewer.common.exception.InvalidXmlSchemaException; +import lcsb.mapviewer.model.map.kinetics.SbmlUnit; + +public class UnitCollectionXmlParser extends XmlParser { + + private UnitXmlParser unitParser = new UnitXmlParser(); + + public Set<SbmlUnit> parseXmlUnitCollection(Node functionsNode) throws InvalidXmlSchemaException { + Set<SbmlUnit> result = new HashSet<>(); + for (Node node : super.getNodes("unitDefinition", functionsNode.getChildNodes())) { + result.add(unitParser.parseFunction(node)); + } + return result; + } + +} diff --git a/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/unit/UnitXmlParser.java b/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/unit/UnitXmlParser.java new file mode 100644 index 0000000000..fe1ca925a0 --- /dev/null +++ b/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/unit/UnitXmlParser.java @@ -0,0 +1,70 @@ +package lcsb.mapviewer.converter.model.celldesigner.unit; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.log4j.Logger; +import org.w3c.dom.Node; + +import lcsb.mapviewer.common.XmlParser; +import lcsb.mapviewer.common.exception.InvalidXmlSchemaException; +import lcsb.mapviewer.model.map.kinetics.SbmlUnit; +import lcsb.mapviewer.model.map.kinetics.SbmlUnitType; +import lcsb.mapviewer.model.map.kinetics.SbmlUnitTypeFactor; + +public class UnitXmlParser extends XmlParser { + Logger logger = Logger.getLogger(UnitXmlParser.class); + + public SbmlUnit parseFunction(Node unitNode) throws InvalidXmlSchemaException { + String unitId = getNodeAttr("id", unitNode); + + SbmlUnit result = new SbmlUnit(unitId); + result.setName(getNodeAttr("name", unitNode)); + Node factors = getNode("listOfUnits", unitNode); + if (factors == null) { + throw new InvalidXmlSchemaException( + "Unit Definition " + unitId + " doesn't contain information about units (listOfUnits node)"); + } + for (SbmlUnitTypeFactor factor : parseUnitTypeFactors(factors)) { + result.addUnitTypeFactor(factor); + } + + return result; + } + + private List<SbmlUnitTypeFactor> parseUnitTypeFactors(Node factors) throws InvalidXmlSchemaException { + List<SbmlUnitTypeFactor> result = new ArrayList<>(); + List<Node> variables = super.getNodes("unit", factors.getChildNodes()); + for (Node node : variables) { + result.add(parseFactor(node)); + } + return result; + } + + private SbmlUnitTypeFactor parseFactor(Node node) throws InvalidXmlSchemaException { + String unitTypeString = getNodeAttr("kind", node); + SbmlUnitType unitType; + try { + unitType = SbmlUnitType.valueOf(unitTypeString.toUpperCase()); + } catch (Exception e) { + throw new InvalidXmlSchemaException("Unknown unit kind: " + unitTypeString); + } + int scale = 0; + double multiplier = 1.0; + int exponent = 1; + + String scaleString = getNodeAttr("scale", node); + if (scaleString != null && !scaleString.isEmpty()) { + scale = Integer.parseInt(scaleString); + } + String exponentString = getNodeAttr("exponent", node); + if (exponentString != null && !exponentString.isEmpty()) { + exponent = Integer.parseInt(exponentString); + } + String multiplierString = getNodeAttr("multiplier", node); + if (multiplierString != null && !multiplierString.isEmpty()) { + multiplier = Double.parseDouble(multiplierString); + } + return new SbmlUnitTypeFactor(unitType, exponent, scale, multiplier); + } +} diff --git a/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/AllCellDesignerTests.java b/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/AllCellDesignerTests.java index 5c6735bb6e..1b78ab1daf 100644 --- a/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/AllCellDesignerTests.java +++ b/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/AllCellDesignerTests.java @@ -1,36 +1,42 @@ package lcsb.mapviewer.converter.model.celldesigner; +import org.junit.runner.RunWith; +import org.junit.runners.Suite; +import org.junit.runners.Suite.SuiteClasses; + import lcsb.mapviewer.converter.model.celldesigner.alias.AllAliasTests; import lcsb.mapviewer.converter.model.celldesigner.annotation.AllAnnotationTests; import lcsb.mapviewer.converter.model.celldesigner.compartment.AllCompartmentTests; +import lcsb.mapviewer.converter.model.celldesigner.function.FunctionXmlParserTest; import lcsb.mapviewer.converter.model.celldesigner.geometry.AllGeometryTests; +import lcsb.mapviewer.converter.model.celldesigner.parameter.ParameterXmlParserTest; import lcsb.mapviewer.converter.model.celldesigner.reaction.AllReactionTests; import lcsb.mapviewer.converter.model.celldesigner.species.AllSpeciesTests; import lcsb.mapviewer.converter.model.celldesigner.structure.AllStructureTests; import lcsb.mapviewer.converter.model.celldesigner.types.AllTypesTests; - -import org.junit.runner.RunWith; -import org.junit.runners.Suite; -import org.junit.runners.Suite.SuiteClasses; +import lcsb.mapviewer.converter.model.celldesigner.unit.UnitXmlParserTest; @RunWith(Suite.class) @SuiteClasses({ // - AllAnnotationTests.class, // - AllAliasTests.class, // - AllCompartmentTests.class, // - AllGeometryTests.class, // - AllReactionTests.class, // - AllSpeciesTests.class, // - AllStructureTests.class, // - AllTypesTests.class, // - CellDesignerElementCollectionTest.class,// - CellDesignerParserExceptionTest.class, // - CellDesignerXmlParserTest.class, // - ComplexParserTests.class, // - InvalidGroupExceptionTest.class, // - LayerXmlParserTest.class, // - NestedComplexParsingTests.class, // - ReconDataInCellDesignerXmlParserTest.class,// + AllAnnotationTests.class, // + AllAliasTests.class, // + AllCompartmentTests.class, // + AllGeometryTests.class, // + AllReactionTests.class, // + AllSpeciesTests.class, // + AllStructureTests.class, // + AllTypesTests.class, // + CellDesignerElementCollectionTest.class, // + CellDesignerParserExceptionTest.class, // + CellDesignerXmlParserTest.class, // + ComplexParserTests.class, // + FunctionXmlParserTest.class, // + InvalidGroupExceptionTest.class, // + LayerXmlParserTest.class, // + NestedComplexParsingTests.class, // + ParameterXmlParserTest.class, // + ReconDataInCellDesignerXmlParserTest.class, // + UnitXmlParserTest.class,// }) public class AllCellDesignerTests { diff --git a/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/ComplexParserTests.java b/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/ComplexParserTests.java index 6484b40970..b268656012 100644 --- a/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/ComplexParserTests.java +++ b/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/ComplexParserTests.java @@ -62,6 +62,32 @@ public class ComplexParserTests extends CellDesignerTestFunctions { } } + @Test + public void testParseParameters() throws Exception { + try { + Model model = getModelForFile("testFiles/parameter.xml"); + + assertEquals(1, model.getParameters().size()); + + } catch (Exception e) { + e.printStackTrace(); + throw e; + } + } + + @Test + public void testParseUnits() throws Exception { + try { + Model model = getModelForFile("testFiles/unit.xml"); + + assertEquals(1, model.getUnits().size()); + + } catch (Exception e) { + e.printStackTrace(); + throw e; + } + } + @Test public void testParseCompartmens() throws Exception { Model model; diff --git a/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/function/FunctionXmlParserTest.java b/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/function/FunctionXmlParserTest.java index 71af481a35..b0dde7d9de 100644 --- a/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/function/FunctionXmlParserTest.java +++ b/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/function/FunctionXmlParserTest.java @@ -10,7 +10,7 @@ import org.junit.Test; import lcsb.mapviewer.common.exception.InvalidXmlSchemaException; import lcsb.mapviewer.converter.model.celldesigner.CellDesignerTestFunctions; -import lcsb.mapviewer.model.map.SbmlFunction; +import lcsb.mapviewer.model.map.kinetics.SbmlFunction; public class FunctionXmlParserTest extends CellDesignerTestFunctions { diff --git a/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/parameter/ParameterXmlParserTest.java b/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/parameter/ParameterXmlParserTest.java new file mode 100644 index 0000000000..ea6201dc17 --- /dev/null +++ b/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/parameter/ParameterXmlParserTest.java @@ -0,0 +1,36 @@ +package lcsb.mapviewer.converter.model.celldesigner.parameter; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import java.io.IOException; + +import org.junit.Test; + +import lcsb.mapviewer.common.Configuration; +import lcsb.mapviewer.common.exception.InvalidXmlSchemaException; +import lcsb.mapviewer.converter.model.celldesigner.CellDesignerTestFunctions; +import lcsb.mapviewer.model.map.kinetics.SbmlParameter; +import lcsb.mapviewer.model.map.kinetics.SbmlUnit; +import lcsb.mapviewer.model.map.model.Model; +import lcsb.mapviewer.model.map.model.ModelFullIndexed; + +public class ParameterXmlParserTest extends CellDesignerTestFunctions { + + @Test + public void testParseBasicData() throws InvalidXmlSchemaException, IOException { + SbmlUnit volume = new SbmlUnit("volume"); + Model model = new ModelFullIndexed(null); + model.addUnit(volume); + ParameterXmlParser parser = new ParameterXmlParser(model); + SbmlParameter unit = parser + .parseFunction(super.getXmlDocumentFromFile("testFiles/parameter/simple.xml").getFirstChild()); + + assertNotNull(unit); + assertEquals(unit.getParameterId(), "param_id"); + assertEquals(unit.getName(), "Parameter name"); + assertEquals(unit.getValue(), 12.0, Configuration.EPSILON); + assertEquals(unit.getUnits(), volume); + } + +} diff --git a/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/unit/UnitXmlParserTest.java b/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/unit/UnitXmlParserTest.java new file mode 100644 index 0000000000..b55724ba11 --- /dev/null +++ b/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/unit/UnitXmlParserTest.java @@ -0,0 +1,33 @@ +package lcsb.mapviewer.converter.model.celldesigner.unit; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import java.io.IOException; + +import org.junit.Test; + +import lcsb.mapviewer.common.exception.InvalidXmlSchemaException; +import lcsb.mapviewer.converter.model.celldesigner.CellDesignerTestFunctions; +import lcsb.mapviewer.model.map.kinetics.SbmlUnit; + +public class UnitXmlParserTest extends CellDesignerTestFunctions { + + UnitXmlParser parser = new UnitXmlParser(); + + @Test + public void testParseBasicData() throws InvalidXmlSchemaException, IOException { + SbmlUnit unit = parser.parseFunction(super.getXmlDocumentFromFile("testFiles/unit/simple.xml").getFirstChild()); + assertNotNull(unit); + assertEquals(unit.getUnitId(), "unit_id"); + assertEquals(unit.getName(), "unit name"); + } + + @Test + public void testParseUnitTypes() throws InvalidXmlSchemaException, IOException { + SbmlUnit unit = parser.parseFunction(super.getXmlDocumentFromFile("testFiles/unit/simple.xml").getFirstChild()); + assertNotNull(unit); + assertEquals(unit.getUnitTypeFactors().size(), 1); + } + +} diff --git a/converter-CellDesigner/testFiles/parameter.xml b/converter-CellDesigner/testFiles/parameter.xml new file mode 100644 index 0000000000..940a6cf422 --- /dev/null +++ b/converter-CellDesigner/testFiles/parameter.xml @@ -0,0 +1,54 @@ +<?xml version="1.0" encoding="UTF-8"?> +<sbml xmlns="http://www.sbml.org/sbml/level2/version4" xmlns:celldesigner="http://www.sbml.org/2001/ns/celldesigner" level="2" version="4"> +<model metaid="untitled" id="untitled"> +<annotation> +<celldesigner:extension> +<celldesigner:modelVersion>4.0</celldesigner:modelVersion> +<celldesigner:modelDisplay sizeX="600" sizeY="400"/> +<celldesigner:listOfCompartmentAliases/> +<celldesigner:listOfComplexSpeciesAliases/> +<celldesigner:listOfSpeciesAliases/> +<celldesigner:listOfGroups/> +<celldesigner:listOfProteins/> +<celldesigner:listOfGenes/> +<celldesigner:listOfRNAs/> +<celldesigner:listOfAntisenseRNAs/> +<celldesigner:listOfLayers/> +<celldesigner:listOfBlockDiagrams/> +</celldesigner:extension> +</annotation> +<listOfUnitDefinitions> +<unitDefinition metaid="substance" id="substance" name="substance"> +<listOfUnits> +<unit metaid="CDMT00001" kind="mole"/> +</listOfUnits> +</unitDefinition> +<unitDefinition metaid="volume" id="volume" name="volume"> +<listOfUnits> +<unit metaid="CDMT00002" kind="litre"/> +</listOfUnits> +</unitDefinition> +<unitDefinition metaid="area" id="area" name="area"> +<listOfUnits> +<unit metaid="CDMT00003" kind="metre" exponent="2"/> +</listOfUnits> +</unitDefinition> +<unitDefinition metaid="length" id="length" name="length"> +<listOfUnits> +<unit metaid="CDMT00004" kind="metre"/> +</listOfUnits> +</unitDefinition> +<unitDefinition metaid="time" id="time" name="time"> +<listOfUnits> +<unit metaid="CDMT00005" kind="second"/> +</listOfUnits> +</unitDefinition> +</listOfUnitDefinitions> +<listOfCompartments> +<compartment metaid="default" id="default" size="1" units="volume"/> +</listOfCompartments> +<listOfParameters> +<parameter metaid="param_id" id="param_id" name="Parameter name" value="12" units="volume"/> +</listOfParameters> +</model> +</sbml> diff --git a/converter-CellDesigner/testFiles/parameter/simple.xml b/converter-CellDesigner/testFiles/parameter/simple.xml new file mode 100644 index 0000000000..53a110385b --- /dev/null +++ b/converter-CellDesigner/testFiles/parameter/simple.xml @@ -0,0 +1 @@ +<parameter metaid="param_id" id="param_id" name="Parameter name" value="12" units="volume"/> diff --git a/converter-CellDesigner/testFiles/unit.xml b/converter-CellDesigner/testFiles/unit.xml new file mode 100644 index 0000000000..17cb63121b --- /dev/null +++ b/converter-CellDesigner/testFiles/unit.xml @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="UTF-8"?> +<sbml xmlns="http://www.sbml.org/sbml/level2/version4" xmlns:celldesigner="http://www.sbml.org/2001/ns/celldesigner" level="2" version="4"> +<model metaid="untitled" id="untitled"> +<annotation> +<celldesigner:extension> +<celldesigner:modelVersion>4.0</celldesigner:modelVersion> +<celldesigner:modelDisplay sizeX="600" sizeY="400"/> +<celldesigner:listOfCompartmentAliases/> +<celldesigner:listOfComplexSpeciesAliases/> +<celldesigner:listOfSpeciesAliases/> +<celldesigner:listOfGroups/> +<celldesigner:listOfProteins/> +<celldesigner:listOfGenes/> +<celldesigner:listOfRNAs/> +<celldesigner:listOfAntisenseRNAs/> +<celldesigner:listOfLayers/> +<celldesigner:listOfBlockDiagrams/> +</celldesigner:extension> +</annotation> +<listOfUnitDefinitions> +<unitDefinition metaid="substance" id="substance" name="substance"> +<listOfUnits> +<unit metaid="CDMT00004" kind="mole"/> +</listOfUnits> +</unitDefinition> +</listOfUnitDefinitions> +<listOfCompartments> +<compartment metaid="default" id="default" size="1" units="volume"/> +</listOfCompartments> +</model> +</sbml> diff --git a/converter-CellDesigner/testFiles/unit/simple.xml b/converter-CellDesigner/testFiles/unit/simple.xml new file mode 100644 index 0000000000..f017bc8652 --- /dev/null +++ b/converter-CellDesigner/testFiles/unit/simple.xml @@ -0,0 +1,5 @@ +<unitDefinition metaid="substance" id="unit_id" name="unit name"> +<listOfUnits> +<unit metaid="CDMT00001" kind="mole"/> +</listOfUnits> +</unitDefinition> diff --git a/model/src/main/java/lcsb/mapviewer/model/map/SbmlFunction.java b/model/src/main/java/lcsb/mapviewer/model/map/kinetics/SbmlFunction.java similarity index 93% rename from model/src/main/java/lcsb/mapviewer/model/map/SbmlFunction.java rename to model/src/main/java/lcsb/mapviewer/model/map/kinetics/SbmlFunction.java index fc75944422..f9e067bae5 100644 --- a/model/src/main/java/lcsb/mapviewer/model/map/SbmlFunction.java +++ b/model/src/main/java/lcsb/mapviewer/model/map/kinetics/SbmlFunction.java @@ -1,4 +1,4 @@ -package lcsb.mapviewer.model.map; +package lcsb.mapviewer.model.map.kinetics; import java.io.Serializable; import java.util.ArrayList; diff --git a/model/src/main/java/lcsb/mapviewer/model/map/kinetics/SbmlParameter.java b/model/src/main/java/lcsb/mapviewer/model/map/kinetics/SbmlParameter.java new file mode 100644 index 0000000000..7684fc2f29 --- /dev/null +++ b/model/src/main/java/lcsb/mapviewer/model/map/kinetics/SbmlParameter.java @@ -0,0 +1,101 @@ +package lcsb.mapviewer.model.map.kinetics; + +import java.io.Serializable; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.xml.bind.annotation.XmlRootElement; + +import org.apache.log4j.Logger; + +/** + * Representation of a single SBML parameter + * + * @author Piotr Gawron + * + */ +@Entity +@Table(name = "sbml_parameter") +@org.hibernate.annotations.GenericGenerator(name = "test-increment-strategy", strategy = "increment") +@XmlRootElement +public class SbmlParameter implements Serializable { + + /** + * Default class logger. + */ + @SuppressWarnings("unused") + private static Logger logger = Logger.getLogger(SbmlParameter.class); + + /** + * + */ + private static final long serialVersionUID = 1L; + + /** + * Unique database identifier. + */ + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "idDb", unique = true, nullable = false) + private int id; + + private String parameterId; + + private String name; + + private Double value; + private SbmlUnit units; + + /** + * Constructor required by hibernate. + */ + SbmlParameter() { + super(); + } + + public SbmlParameter(String parameterId) { + this.parameterId = parameterId; + } + + public void setFunctionId(String parameterId) { + this.parameterId = parameterId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getParameterId() { + return parameterId; + } + + public void setParameterId(String parameterId) { + this.parameterId = parameterId; + } + + public Double getValue() { + return value; + } + + public void setValue(Double value) { + this.value = value; + } + + public SbmlUnit getUnits() { + return units; + } + + public void setUnits(SbmlUnit units) { + this.units = units; + + } + +} diff --git a/model/src/main/java/lcsb/mapviewer/model/map/kinetics/SbmlUnit.java b/model/src/main/java/lcsb/mapviewer/model/map/kinetics/SbmlUnit.java new file mode 100644 index 0000000000..38d6347252 --- /dev/null +++ b/model/src/main/java/lcsb/mapviewer/model/map/kinetics/SbmlUnit.java @@ -0,0 +1,88 @@ +package lcsb.mapviewer.model.map.kinetics; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.xml.bind.annotation.XmlRootElement; + +import org.apache.log4j.Logger; + +/** + * Representation of a single SBML unit + * + * @author Piotr Gawron + * + */ +@Entity +@Table(name = "sbml_unit") +@org.hibernate.annotations.GenericGenerator(name = "test-increment-strategy", strategy = "increment") +@XmlRootElement +public class SbmlUnit implements Serializable { + + /** + * Default class logger. + */ + @SuppressWarnings("unused") + private static Logger logger = Logger.getLogger(SbmlUnit.class); + + /** + * + */ + private static final long serialVersionUID = 1L; + + /** + * Unique database identifier. + */ + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "idDb", unique = true, nullable = false) + private int id; + + private String unitId; + private String name; + + private List<SbmlUnitTypeFactor> unitTypeFactors = new ArrayList<>(); + + /** + * Constructor required by hibernate. + */ + SbmlUnit() { + super(); + } + + public SbmlUnit(String unitId) { + this.unitId = unitId; + } + + public String getUnitId() { + return unitId; + } + + public void setUnitId(String unitId) { + this.unitId = unitId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public void addUnitTypeFactor(SbmlUnitTypeFactor factor) { + unitTypeFactors.add(factor); + } + + public List<SbmlUnitTypeFactor> getUnitTypeFactors() { + return unitTypeFactors; + } + +} diff --git a/model/src/main/java/lcsb/mapviewer/model/map/kinetics/SbmlUnitType.java b/model/src/main/java/lcsb/mapviewer/model/map/kinetics/SbmlUnitType.java new file mode 100644 index 0000000000..9cee1416c9 --- /dev/null +++ b/model/src/main/java/lcsb/mapviewer/model/map/kinetics/SbmlUnitType.java @@ -0,0 +1,36 @@ +package lcsb.mapviewer.model.map.kinetics; + +public enum SbmlUnitType { + AMPERE, + BECQUEREL, + CANDELA, + COULUMB, + DIMENSIONLESS, + FARAD, + GRAM, + GRAY, + HENRY, + HERTZ, + ITEM, + JOULE, + KATAL, + KELVIN, + KILOGRAM, + LITRE, + LUMEN, + LUX, + METRE, + MOLE, + NEWTON, + OHM, + PASCAL, + RADIAN, + SECOND, + SIEMENS, + SIEVERT, + STERADIAN, + TESLA, + VOLT, + WATT, + WEBER, +} diff --git a/model/src/main/java/lcsb/mapviewer/model/map/kinetics/SbmlUnitTypeFactor.java b/model/src/main/java/lcsb/mapviewer/model/map/kinetics/SbmlUnitTypeFactor.java new file mode 100644 index 0000000000..16f20feb52 --- /dev/null +++ b/model/src/main/java/lcsb/mapviewer/model/map/kinetics/SbmlUnitTypeFactor.java @@ -0,0 +1,103 @@ +package lcsb.mapviewer.model.map.kinetics; + +import java.io.Serializable; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.xml.bind.annotation.XmlRootElement; + +import org.apache.log4j.Logger; + +/** + * Representation of a single SBML unit factor. For example unit for velocity is + * m/s. It means that we have two unit types here: + * <ul> + * <li>metre^1</li> + * <li>second^-1</li> + * </ul> + * + * @author Piotr Gawron + * + */ +@Entity +@Table(name = "sbml_unit_factor") +@org.hibernate.annotations.GenericGenerator(name = "test-increment-strategy", strategy = "increment") +@XmlRootElement +public class SbmlUnitTypeFactor implements Serializable { + + /** + * Default class logger. + */ + @SuppressWarnings("unused") + private static Logger logger = Logger.getLogger(SbmlUnitTypeFactor.class); + + /** + * + */ + private static final long serialVersionUID = 1L; + + /** + * Unique database identifier. + */ + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "idDb", unique = true, nullable = false) + private int id; + + private SbmlUnitType unitType; + + private int exponent = 1; + private int scale = 0; + private double multiplier = 1.0; + + /** + * Constructor required by hibernate. + */ + SbmlUnitTypeFactor() { + super(); + } + + public SbmlUnitTypeFactor(SbmlUnitType unitType, int exponent, int scale, double multiplier) { + this.unitType = unitType; + this.exponent = exponent; + this.scale = scale; + this.multiplier = multiplier; + } + + public SbmlUnitType getUnitType() { + return unitType; + } + + public void setUnitType(SbmlUnitType unitType) { + this.unitType = unitType; + } + + public int getExponent() { + return exponent; + } + + public void setExponent(int exponent) { + this.exponent = exponent; + } + + public int getScale() { + return scale; + } + + public void setScale(int scale) { + this.scale = scale; + } + + public double getMultiplier() { + return multiplier; + } + + public void setMultiplier(double multiplier) { + this.multiplier = multiplier; + } + +} diff --git a/model/src/main/java/lcsb/mapviewer/model/map/model/Model.java b/model/src/main/java/lcsb/mapviewer/model/map/model/Model.java index 613c5ce877..81ac64e4b5 100644 --- a/model/src/main/java/lcsb/mapviewer/model/map/model/Model.java +++ b/model/src/main/java/lcsb/mapviewer/model/map/model/Model.java @@ -8,9 +8,11 @@ import java.util.Set; import lcsb.mapviewer.model.Project; import lcsb.mapviewer.model.map.BioEntity; import lcsb.mapviewer.model.map.MiriamData; -import lcsb.mapviewer.model.map.SbmlFunction; import lcsb.mapviewer.model.map.compartment.Compartment; import lcsb.mapviewer.model.map.graph.DataMiningSet; +import lcsb.mapviewer.model.map.kinetics.SbmlFunction; +import lcsb.mapviewer.model.map.kinetics.SbmlParameter; +import lcsb.mapviewer.model.map.kinetics.SbmlUnit; import lcsb.mapviewer.model.map.layout.BlockDiagram; import lcsb.mapviewer.model.map.layout.ElementGroup; import lcsb.mapviewer.model.map.layout.Layout; @@ -592,5 +594,17 @@ public interface Model { Set<SbmlFunction> getFunctions(); - void addFunctions(Collection<SbmlFunction> parseXmlFunctionCollection); + void addFunctions(Collection<SbmlFunction> sbmlFunctions); + + Set<SbmlParameter> getParameters(); + + void addUnits(Collection<SbmlUnit> units); + + Set<SbmlUnit> getUnits(); + + void addUnit(SbmlUnit volume); + + SbmlUnit getUnitsByUnitId(String unitId); + + void addParameters(Collection<SbmlParameter> sbmlParamters); } diff --git a/model/src/main/java/lcsb/mapviewer/model/map/model/ModelData.java b/model/src/main/java/lcsb/mapviewer/model/map/model/ModelData.java index 95fe2a9fbd..3970c18f01 100644 --- a/model/src/main/java/lcsb/mapviewer/model/map/model/ModelData.java +++ b/model/src/main/java/lcsb/mapviewer/model/map/model/ModelData.java @@ -27,8 +27,10 @@ import org.hibernate.annotations.CascadeType; import lcsb.mapviewer.common.exception.InvalidArgumentException; import lcsb.mapviewer.model.Project; -import lcsb.mapviewer.model.map.SbmlFunction; import lcsb.mapviewer.model.map.graph.DataMiningSet; +import lcsb.mapviewer.model.map.kinetics.SbmlFunction; +import lcsb.mapviewer.model.map.kinetics.SbmlParameter; +import lcsb.mapviewer.model.map.kinetics.SbmlUnit; import lcsb.mapviewer.model.map.layout.BlockDiagram; import lcsb.mapviewer.model.map.layout.ElementGroup; import lcsb.mapviewer.model.map.layout.Layout; @@ -112,6 +114,14 @@ public class ModelData implements Serializable { @OneToMany(mappedBy = "model", orphanRemoval = true) private Set<SbmlFunction> functions = new HashSet<>(); + @Cascade({ CascadeType.ALL }) + @OneToMany(mappedBy = "model", orphanRemoval = true) + private Set<SbmlParameter> parameters = new HashSet<>(); + + @Cascade({ CascadeType.ALL }) + @OneToMany(mappedBy = "model", orphanRemoval = true) + private Set<SbmlUnit> units = new HashSet<>(); + /** * When the map was created. */ @@ -747,4 +757,24 @@ public class ModelData implements Serializable { public Set<SbmlFunction> getFunctions() { return functions; } + + public Set<SbmlParameter> getParameters() { + return parameters; + } + + public void addUnits(Collection<SbmlUnit> units) { + this.units.addAll(units); + } + + public Set<SbmlUnit> getUnits() { + return units; + } + + public void addUnit(SbmlUnit unit) { + this.units.add(unit); + } + + public void addParameters(Collection<SbmlParameter> sbmlParamters) { + this.parameters.addAll(sbmlParamters); + } } \ No newline at end of file diff --git a/model/src/main/java/lcsb/mapviewer/model/map/model/ModelFullIndexed.java b/model/src/main/java/lcsb/mapviewer/model/map/model/ModelFullIndexed.java index 99a09db9a8..6cfd3c14a6 100644 --- a/model/src/main/java/lcsb/mapviewer/model/map/model/ModelFullIndexed.java +++ b/model/src/main/java/lcsb/mapviewer/model/map/model/ModelFullIndexed.java @@ -16,9 +16,11 @@ import lcsb.mapviewer.common.exception.InvalidArgumentException; import lcsb.mapviewer.model.Project; import lcsb.mapviewer.model.map.BioEntity; import lcsb.mapviewer.model.map.MiriamData; -import lcsb.mapviewer.model.map.SbmlFunction; import lcsb.mapviewer.model.map.compartment.Compartment; import lcsb.mapviewer.model.map.graph.DataMiningSet; +import lcsb.mapviewer.model.map.kinetics.SbmlFunction; +import lcsb.mapviewer.model.map.kinetics.SbmlParameter; +import lcsb.mapviewer.model.map.kinetics.SbmlUnit; import lcsb.mapviewer.model.map.layout.BlockDiagram; import lcsb.mapviewer.model.map.layout.ElementGroup; import lcsb.mapviewer.model.map.layout.Layout; @@ -663,4 +665,40 @@ public class ModelFullIndexed implements Model { public void addFunctions(Collection<SbmlFunction> functions) { modelData.getFunctions().addAll(functions); } + + @Override + public Set<SbmlParameter> getParameters() { + return modelData.getParameters(); + } + + @Override + public void addUnits(Collection<SbmlUnit> units) { + modelData.addUnits(units); + } + + @Override + public Set<SbmlUnit> getUnits() { + return modelData.getUnits(); + } + + @Override + public void addUnit(SbmlUnit unit) { + modelData.addUnit(unit); + + } + + @Override + public SbmlUnit getUnitsByUnitId(String unitId) { + for (SbmlUnit unit : getUnits()) { + if (unit.getUnitId().equals(unitId)) { + return unit; + } + } + return null; + } + + @Override + public void addParameters(Collection<SbmlParameter> sbmlParamters) { + modelData.addParameters(sbmlParamters); + } } diff --git a/model/src/test/java/lcsb/mapviewer/model/graphics/PolylineDataComparatorTest.java b/model/src/test/java/lcsb/mapviewer/model/graphics/PolylineDataComparatorTest.java index fef2e47552..2348b1ca8c 100644 --- a/model/src/test/java/lcsb/mapviewer/model/graphics/PolylineDataComparatorTest.java +++ b/model/src/test/java/lcsb/mapviewer/model/graphics/PolylineDataComparatorTest.java @@ -66,7 +66,8 @@ public class PolylineDataComparatorTest { pd1 = new PolylineData(); pd2 = new PolylineData(); - pd2.addPoint(new Point2D.Double(1, 2)); + pd2.addPoint(new Point2D.Double(1, 2)); + pd2.addPoint(new Point2D.Double(1, 3)); assertTrue(comparator.compare(pd1, pd2) != 0); assertTrue(comparator.compare(pd2, pd1) != 0); diff --git a/model/src/test/java/lcsb/mapviewer/model/map/AllMapTests.java b/model/src/test/java/lcsb/mapviewer/model/map/AllMapTests.java index 3d0f487666..83b9a41a35 100644 --- a/model/src/test/java/lcsb/mapviewer/model/map/AllMapTests.java +++ b/model/src/test/java/lcsb/mapviewer/model/map/AllMapTests.java @@ -6,6 +6,7 @@ import org.junit.runners.Suite.SuiteClasses; import lcsb.mapviewer.model.map.compartment.AllCompartmentTests; import lcsb.mapviewer.model.map.graph.AllGraphTests; +import lcsb.mapviewer.model.map.kinetics.AllKineticsTests; import lcsb.mapviewer.model.map.layout.AllLayoutTests; import lcsb.mapviewer.model.map.layout.graphics.AllGraphicsTests; import lcsb.mapviewer.model.map.model.AllModelTests; @@ -16,32 +17,33 @@ import lcsb.mapviewer.model.map.statistics.AllStatisticsTests; @RunWith(Suite.class) @SuiteClasses({ AllCompartmentTests.class, // - ElementInFewParentsExceptionTest.class, // - AllGraphTests.class, // - AllGraphicsTests.class, // - AllLayoutTests.class, // - AllModelTests.class, // - AllModifierTests.class, // - AllReactionTests.class, // - AllSpeciesTests.class, // - AllStatisticsTests.class, // - CommentTest.class, // - InconsistentModelExceptionTest.class, // - LayoutComparatorTest.class, // - MiriamDataTest.class, // - MiriamRelationTypeTest.class, // - MiriamTypeTest.class, // - MiriamTypeNameComparatorTest.class, // - OverviewImageComparatorTest.class, // - OverviewImageLinkComparatorTest.class, // - OverviewImageLinkTest.class, // - OverviewImageTest.class, // - OverviewLinkComparatorTest.class, // - OverviewLinkTest.class, // - OverviewModelLinkComparatorTest.class, // - OverviewModelLinkTest.class, // - OverviewSearchLinkTest.class, // - SearchIndexTest.class,// + ElementInFewParentsExceptionTest.class, // + AllGraphTests.class, // + AllGraphicsTests.class, // + AllKineticsTests.class, // + AllLayoutTests.class, // + AllModelTests.class, // + AllModifierTests.class, // + AllReactionTests.class, // + AllSpeciesTests.class, // + AllStatisticsTests.class, // + CommentTest.class, // + InconsistentModelExceptionTest.class, // + LayoutComparatorTest.class, // + MiriamDataTest.class, // + MiriamRelationTypeTest.class, // + MiriamTypeTest.class, // + MiriamTypeNameComparatorTest.class, // + OverviewImageComparatorTest.class, // + OverviewImageLinkComparatorTest.class, // + OverviewImageLinkTest.class, // + OverviewImageTest.class, // + OverviewLinkComparatorTest.class, // + OverviewLinkTest.class, // + OverviewModelLinkComparatorTest.class, // + OverviewModelLinkTest.class, // + OverviewSearchLinkTest.class, // + SearchIndexTest.class,// }) public class AllMapTests { diff --git a/model/src/test/java/lcsb/mapviewer/model/map/kinetics/AllKineticsTests.java b/model/src/test/java/lcsb/mapviewer/model/map/kinetics/AllKineticsTests.java new file mode 100644 index 0000000000..b699ac87b8 --- /dev/null +++ b/model/src/test/java/lcsb/mapviewer/model/map/kinetics/AllKineticsTests.java @@ -0,0 +1,11 @@ +package lcsb.mapviewer.model.map.kinetics; + +import org.junit.runner.RunWith; +import org.junit.runners.Suite; +import org.junit.runners.Suite.SuiteClasses; + +@RunWith(Suite.class) +@SuiteClasses({ SbmlFunctionTest.class, SbmlParameterTest.class, SbmlUnitTest.class, SbmlUnitTypeFactorTest.class }) +public class AllKineticsTests { + +} diff --git a/model/src/test/java/lcsb/mapviewer/model/map/SbmlFunctionTest.java b/model/src/test/java/lcsb/mapviewer/model/map/kinetics/SbmlFunctionTest.java similarity index 96% rename from model/src/test/java/lcsb/mapviewer/model/map/SbmlFunctionTest.java rename to model/src/test/java/lcsb/mapviewer/model/map/kinetics/SbmlFunctionTest.java index 20e3c983f9..5ea1f583d7 100644 --- a/model/src/test/java/lcsb/mapviewer/model/map/SbmlFunctionTest.java +++ b/model/src/test/java/lcsb/mapviewer/model/map/kinetics/SbmlFunctionTest.java @@ -1,4 +1,4 @@ -package lcsb.mapviewer.model.map; +package lcsb.mapviewer.model.map.kinetics; import static org.junit.Assert.*; diff --git a/model/src/test/java/lcsb/mapviewer/model/map/kinetics/SbmlParameterTest.java b/model/src/test/java/lcsb/mapviewer/model/map/kinetics/SbmlParameterTest.java new file mode 100644 index 0000000000..374f97100d --- /dev/null +++ b/model/src/test/java/lcsb/mapviewer/model/map/kinetics/SbmlParameterTest.java @@ -0,0 +1,32 @@ +package lcsb.mapviewer.model.map.kinetics; + +import static org.junit.Assert.*; + +import org.junit.Test; + +public class SbmlParameterTest { + + @Test + public void testConstructor() { + String id = "param_id"; + SbmlParameter parameter = new SbmlParameter(id); + assertEquals(id, parameter.getParameterId()); + } + + @Test + public void testSetName() { + String name= "name"; + SbmlParameter parameter = new SbmlParameter(""); + parameter.setName(name); + assertEquals(name, parameter.getName()); + } + + @Test + public void testSetValue() { + Double value= 13.0; + SbmlParameter parameter = new SbmlParameter(""); + parameter.setValue(value); + assertEquals(value, parameter.getValue()); + } + +} diff --git a/model/src/test/java/lcsb/mapviewer/model/map/kinetics/SbmlUnitTest.java b/model/src/test/java/lcsb/mapviewer/model/map/kinetics/SbmlUnitTest.java new file mode 100644 index 0000000000..a6cdd5328b --- /dev/null +++ b/model/src/test/java/lcsb/mapviewer/model/map/kinetics/SbmlUnitTest.java @@ -0,0 +1,33 @@ +package lcsb.mapviewer.model.map.kinetics; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + +public class SbmlUnitTest { + + @Test + public void testConstructor() { + String id = "id"; + SbmlUnit unit = new SbmlUnit(id); + assertEquals(unit.getUnitId(), id); + } + + @Test + public void testSetName() { + String name= "id"; + SbmlUnit unit = new SbmlUnit(""); + unit.setName(name); + assertEquals(unit.getName(), name); + } + + @Test + public void testAddUnitTypeFactor() { + SbmlUnitTypeFactor factor = new SbmlUnitTypeFactor(SbmlUnitType.METRE, 2, 0, 1.0); + SbmlUnit unit = new SbmlUnit(""); + unit.addUnitTypeFactor(factor); + assertEquals(unit.getUnitTypeFactors().size(), 1); + assertEquals(unit.getUnitTypeFactors().get(0), factor); + } + +} diff --git a/model/src/test/java/lcsb/mapviewer/model/map/kinetics/SbmlUnitTypeFactorTest.java b/model/src/test/java/lcsb/mapviewer/model/map/kinetics/SbmlUnitTypeFactorTest.java new file mode 100644 index 0000000000..83ec875f1f --- /dev/null +++ b/model/src/test/java/lcsb/mapviewer/model/map/kinetics/SbmlUnitTypeFactorTest.java @@ -0,0 +1,25 @@ +package lcsb.mapviewer.model.map.kinetics; + +import static org.junit.Assert.*; + +import org.junit.Test; + +import lcsb.mapviewer.common.Configuration; + +public class SbmlUnitTypeFactorTest { + + @Test + public void testConstructor() { + int exponent = 1; + int scale = 1; + double multiplier = 1.0; + SbmlUnitType unitType = SbmlUnitType.METRE; + SbmlUnitTypeFactor factor = new SbmlUnitTypeFactor(unitType, exponent, scale, multiplier); + assertEquals(factor.getUnitType(), unitType); + assertEquals(factor.getExponent(), exponent); + assertEquals(factor.getScale(), scale); + assertEquals(factor.getMultiplier(), multiplier, Configuration.EPSILON); + + } + +} -- GitLab