Skip to content
Snippets Groups Projects
Commit 8001b954 authored by Piotr Gawron's avatar Piotr Gawron
Browse files

layout for reaction is taken into consideration

parent 5cea11f3
No related branches found
No related tags found
1 merge request!186Resolve "upload of sbml"
......@@ -95,18 +95,9 @@ public class SbmlParser implements IConverter {
if (sbmlModel.getParameterCount() > 0) {
throw new NotImplementedException("Parameter not implemented for model");
}
if (sbmlModel.getModifierSpeciesReferenceCount() > 0) {
throw new NotImplementedException("ModifierSpeciesReference not implemented for model");
}
if (sbmlModel.getReactionCount() > 0) {
throw new NotImplementedException("Reaction not implemented for model");
}
if (sbmlModel.getRuleCount() > 0) {
throw new NotImplementedException("Rule not implemented for model");
}
if (sbmlModel.getSpeciesReferenceCount() > 0) {
throw new NotImplementedException("SpeciesReference not implemented for model");
}
if (sbmlModel.getUnitDefinitionCount() > 0) {
logger.warn("Units are not supported");
}
......
package lcsb.mapviewer.converter.model.sbml;
import java.awt.geom.Point2D;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
......@@ -14,14 +15,18 @@ import org.sbml.jsbml.ListOf;
import org.sbml.jsbml.Model;
import org.sbml.jsbml.ModifierSpeciesReference;
import org.sbml.jsbml.SpeciesReference;
import org.sbml.jsbml.ext.layout.CurveSegment;
import org.sbml.jsbml.ext.layout.Layout;
import org.sbml.jsbml.ext.layout.ReactionGlyph;
import org.sbml.jsbml.ext.layout.SpeciesGlyph;
import org.sbml.jsbml.ext.layout.SpeciesReferenceGlyph;
import org.sbml.jsbml.util.NotImplementedException;
import lcsb.mapviewer.common.exception.InvalidArgumentException;
import lcsb.mapviewer.converter.InvalidInputDataExecption;
import lcsb.mapviewer.model.graphics.PolylineData;
import lcsb.mapviewer.model.map.MiriamData;
import lcsb.mapviewer.model.map.modifier.Catalysis;
import lcsb.mapviewer.model.map.reaction.Modifier;
import lcsb.mapviewer.model.map.reaction.Product;
import lcsb.mapviewer.model.map.reaction.Reactant;
......@@ -76,27 +81,35 @@ public class SbmlReactionParser {
used.add(source);
Reaction reactionWithLayout = source.copy();
reactionWithLayout.setIdReaction(glyph.getId());
for (SpeciesReferenceGlyph speciesGlyph : glyph.getListOfSpeciesReferenceGlyphs()) {
for (SpeciesReferenceGlyph speciesRefernceGlyph : glyph.getListOfSpeciesReferenceGlyphs()) {
SpeciesGlyph speciesGlyph = layout.getSpeciesGlyph(speciesRefernceGlyph.getSpeciesGlyph());
ReactionNode minervaNode = null;
Element minervaElement = minervaModel.getElementByElementId(speciesGlyph.getSpeciesReference());
if (minervaElement == null) {
throw new InvalidInputDataExecption("Cannot find source reaction node for layouted reaction: "
+ speciesGlyph.getSpeciesReference() + ", " + glyph.getId());
}
for (ReactionNode node : reactionWithLayout.getReactionNodes()) {
if (node.getElement().equals(minervaElement)) {
if (node.getElement().getElementId().equals(speciesGlyph.getSpecies())) {
minervaNode = node;
}
}
if (minervaNode == null) {
throw new InvalidInputDataExecption("Cannot find reaction node for layouted reaction: "
+ speciesGlyph.getSpeciesReference() + ", " + glyph.getId());
throw new InvalidInputDataExecption(
"Cannot find reaction node for layouted reaction: " + speciesGlyph.getSpecies() + ", " + glyph.getId());
}
minervaElement = minervaModel.getElementByElementId(speciesGlyph.getId());
Element minervaElement = minervaModel.getElementByElementId(speciesGlyph.getId());
if (minervaElement == null) {
throw new InvalidInputDataExecption("Cannot find layouted reaction node for layouted reaction: "
+ speciesGlyph.getId() + ", " + glyph.getId());
}
PolylineData line = null;
for (CurveSegment segment : speciesRefernceGlyph.getCurve().getListOfCurveSegments()) {
Point2D start = new Point2D.Double(segment.getStart().getX(), segment.getStart().getY());
Point2D end = new Point2D.Double(segment.getEnd().getX(), segment.getEnd().getY());
if (line == null) {
line = new PolylineData(start, end);
} else {
line.addPoint(end);
}
}
minervaNode.setLine(line);
minervaNode.setElement(minervaElement);
}
try {
......@@ -131,7 +144,7 @@ public class SbmlReactionParser {
for (ModifierSpeciesReference modifier : sbmlReaction.getListOfModifiers()) {
Species element = minervaModel.getElementByElementId(modifier.getSpecies());
reaction.addModifier(new Modifier(element));
reaction.addModifier(new Catalysis(element));
}
return reaction;
......
......@@ -15,6 +15,8 @@ import lcsb.mapviewer.converter.ConverterParams;
import lcsb.mapviewer.converter.InvalidInputDataExecption;
import lcsb.mapviewer.model.map.compartment.Compartment;
import lcsb.mapviewer.model.map.model.Model;
import lcsb.mapviewer.model.map.reaction.Reaction;
import lcsb.mapviewer.model.map.reaction.ReactionNode;
import lcsb.mapviewer.model.map.species.Species;
public class SbmlParserTest {
......@@ -89,6 +91,18 @@ public class SbmlParserTest {
assertEquals(new Point(1, 2), parser.nextCoordinates());
assertEquals(new Point(2, 2), parser.nextCoordinates());
assertEquals(new Point(3, 0), parser.nextCoordinates());
}
@Test
public void testParseReaction() throws FileNotFoundException, InvalidInputDataExecption {
Model model = parser.createModel(new ConverterParams().filename("testFiles/layoutExample/Complete_Example.xml"));
assertNotNull(model);
assertEquals(1, model.getReactions().size());
Reaction reaction = model.getReactions().iterator().next();
for (ReactionNode node : reaction.getReactionNodes()) {
assertNotNull(node.getLine());
assertTrue(node.getLine().length() > 0);
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment