From a3129c016d6ea25fc4efdbe4dfd456ecece068f5 Mon Sep 17 00:00:00 2001 From: Piotr Gawron <piotr.gawron@uni.lu> Date: Fri, 9 Feb 2018 14:28:44 +0100 Subject: [PATCH] sbml function mathML is parsed properly --- .../model/celldesigner/function/FunctionXmlParser.java | 6 +++--- .../celldesigner/function/FunctionXmlParserTest.java | 1 + .../converter/model/sbml/SbmlFunctionExporter.java | 3 +-- .../converter/model/sbml/SbmlFunctionParser.java | 4 +++- .../model/map/kinetics/SbmlFunctionComparator.java | 2 +- .../api/projects/models/functions/FunctionsRestImpl.java | 9 +++++++++ 6 files changed, 18 insertions(+), 7 deletions(-) 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 917ca54b97..9031ca2f6a 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 @@ -22,7 +22,9 @@ public class FunctionXmlParser extends XmlParser { if (mathDefinition == null) { throw new InvalidXmlSchemaException("Function " + functionId + " doesn't contain MathML definition (math node)"); } - result.setDefinition(nodeToString(mathDefinition).replace(" xmlns=\"http://www.w3.org/1998/Math/MathML\"", "")); + String definition = "<math xmlns=\"http://www.w3.org/1998/Math/MathML\">" + + nodeToString(mathDefinition).replace(" xmlns=\"http://www.w3.org/1998/Math/MathML\"", "") + "</math>"; + result.setDefinition(definition); result.setArguments(parseArgumentsFromMath(mathDefinition, functionId)); return result; @@ -47,9 +49,7 @@ public class FunctionXmlParser extends XmlParser { result.append("id=\"" + fun.getElementId() + "\" "); result.append("name=\"" + fun.getName() + "\" "); result.append(">\n"); - result.append("<math xmlns=\"http://www.w3.org/1998/Math/MathML\">"); result.append(fun.getDefinition()); - result.append("</math>\n"); result.append("</functionDefinition>\n"); return result.toString(); } 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 34eaac74cb..35cc01fa93 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 @@ -26,6 +26,7 @@ public class FunctionXmlParserTest extends CellDesignerTestFunctions { assertNotNull(fun); assertEquals(fun.getFunctionId(), "function_id"); assertEquals(fun.getName(), "Function name"); + assertTrue("math node is not present", fun.getDefinition().indexOf("math") >= 0); assertTrue(fun.getDefinition().indexOf("lambda") >= 0); assertTrue(fun.getDefinition().indexOf("apply") >= 0); } diff --git a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/SbmlFunctionExporter.java b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/SbmlFunctionExporter.java index 1ef4edfa9b..d534a4ff11 100644 --- a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/SbmlFunctionExporter.java +++ b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/SbmlFunctionExporter.java @@ -25,8 +25,7 @@ public class SbmlFunctionExporter { FunctionDefinition result = new FunctionDefinition(); result.setName(unit.getName()); String definition = unit.getDefinition(); - definition = definition.replace(" xmlns=\"http://www.sbml.org/sbml/level2/version4\"", ""); - definition = "<math xmlns=\"http://www.w3.org/1998/Math/MathML\">" + definition + "</math>"; + definition = definition.replace("lambda xmlns=\"http://www.sbml.org/sbml/level2/version4\"", "lambda"); result.setMath(ASTNode.parseMathML(definition)); result.setId(unit.getFunctionId()); return result; diff --git a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/SbmlFunctionParser.java b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/SbmlFunctionParser.java index c2facb4d7c..cb2550ba4c 100644 --- a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/SbmlFunctionParser.java +++ b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/SbmlFunctionParser.java @@ -26,7 +26,9 @@ public class SbmlFunctionParser extends SbmlBioEntityParser { result.setName(unitDefinition.getName()); Node node = super.getXmlDocumentFromString(unitDefinition.getMath().toMathML()); Node mathDefinition = getNode("math", node); - result.setDefinition(super.nodeToString(mathDefinition)); + String definition = "<math xmlns=\"http://www.w3.org/1998/Math/MathML\">" + + nodeToString(mathDefinition).replace(" xmlns=\"http://www.w3.org/1998/Math/MathML\"", "") + "</math>"; + result.setDefinition(definition); result.setArguments(parseArgumentsFromMath(mathDefinition, result.getFunctionId())); return result; } catch (InvalidXmlSchemaException e) { diff --git a/model/src/main/java/lcsb/mapviewer/model/map/kinetics/SbmlFunctionComparator.java b/model/src/main/java/lcsb/mapviewer/model/map/kinetics/SbmlFunctionComparator.java index 15f90d66f8..03c5f71cd1 100644 --- a/model/src/main/java/lcsb/mapviewer/model/map/kinetics/SbmlFunctionComparator.java +++ b/model/src/main/java/lcsb/mapviewer/model/map/kinetics/SbmlFunctionComparator.java @@ -26,7 +26,7 @@ public class SbmlFunctionComparator extends Comparator<SbmlFunction> { return stringComparator.compare(arg0.getName(), arg1.getName()); } - if (stringComparator.compare(arg0.getDefinition(), arg1.getDefinition()) != 0) { + if (stringComparator.compare(arg0.getDefinition(), arg1.getDefinition(), true) != 0) { logger.debug("definition different"); logger.debug(arg0.getDefinition()); logger.debug(arg1.getDefinition()); diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/functions/FunctionsRestImpl.java b/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/functions/FunctionsRestImpl.java index 975151ba92..aa0214b288 100644 --- a/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/functions/FunctionsRestImpl.java +++ b/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/functions/FunctionsRestImpl.java @@ -1,16 +1,20 @@ package lcsb.mapviewer.api.projects.models.functions; +import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import javax.xml.transform.TransformerException; + import org.apache.log4j.Logger; import org.springframework.transaction.annotation.Transactional; import lcsb.mapviewer.api.BaseRestImpl; import lcsb.mapviewer.api.ObjectNotFoundException; import lcsb.mapviewer.api.QueryException; +import lcsb.mapviewer.common.exception.InvalidXmlSchemaException; import lcsb.mapviewer.model.map.kinetics.SbmlFunction; import lcsb.mapviewer.model.map.model.Model; import lcsb.mapviewer.services.SecurityException; @@ -44,6 +48,11 @@ public class FunctionsRestImpl extends BaseRestImpl { result.put("functionId", function.getFunctionId()); result.put("name", function.getName()); result.put("definition", function.getDefinition()); + try { + result.put("mathMlPresentation", super.mathMLToPresentationML(function.getDefinition())); + } catch (IOException | InvalidXmlSchemaException | TransformerException e) { + logger.error("Problems with transforming kinetics", e); + } result.put("arguments", function.getArguments()); return result; } -- GitLab