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 917ca54b971a73596161c3d9ccde1298dd572528..9031ca2f6a0f237b1db99e2f7af6686a7668edc4 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 34eaac74cbbc8c1d39621ff60fa0f6e3f76d2ecc..35cc01fa9379bb09814aa1b5b53a860291a2f709 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 1ef4edfa9b7d1806171388d4aa2b8d662582610d..d534a4ff112caeb06a213da946ef85614015e333 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 c2facb4d7c10f6cf97fd17ddbddcacd3f546b88c..cb2550ba4c62cdc9937fcfcb92179f7276c6fbad 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 15f90d66f8b719dc2e4931e7b7ede0c43c830254..03c5f71cd18d12f4095c0e0a1718468546d701bd 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 975151ba926b10d101b21d6dacfb95faeefb830d..aa0214b288ce1f00c16212c016a47f60f510c544 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; }