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

parsing type from species type SBO term added

parent a12c4ce9
No related branches found
No related tags found
2 merge requests!630WIP: Resolve "The privileges of a new user are not saved in some cases",!560Resolve "add support for modifications and states in sbml export/import"
......@@ -14,6 +14,7 @@ import org.sbml.jsbml.Annotation;
import org.sbml.jsbml.ext.SBasePlugin;
import org.sbml.jsbml.ext.layout.Layout;
import org.sbml.jsbml.ext.layout.LayoutModelPlugin;
import org.sbml.jsbml.ext.multi.MultiModelPlugin;
import org.sbml.jsbml.ext.render.LocalRenderInformation;
import org.sbml.jsbml.ext.render.LocalStyle;
import org.sbml.jsbml.ext.render.RenderLayoutPlugin;
......@@ -52,15 +53,17 @@ public class SbmlBioEntityParser extends XmlParser {
private lcsb.mapviewer.model.map.model.Model minervaModel;
/**
* Counter for identifiers that cannot be inferred from SBML.
* Counter for identifiers that cannot be inferred from SBML.
*/
private int idCounter = 0;
/**
* Default constructor.
*
* @param sbmlModel SBML model that we are parsing
* @param minervaModel Minerva model to which we are extracting data
* @param sbmlModel
* SBML model that we are parsing
* @param minervaModel
* Minerva model to which we are extracting data
*/
public SbmlBioEntityParser(org.sbml.jsbml.Model sbmlModel, Model minervaModel) {
super();
......@@ -222,4 +225,8 @@ public class SbmlBioEntityParser extends XmlParser {
return layout;
}
protected MultiModelPlugin getMultiPlugin() {
return (MultiModelPlugin) sbmlModel.getExtension("multi");
}
}
\ No newline at end of file
......@@ -10,6 +10,8 @@ import org.sbml.jsbml.Model;
import org.sbml.jsbml.ext.layout.AbstractReferenceGlyph;
import org.sbml.jsbml.ext.layout.CompartmentGlyph;
import org.sbml.jsbml.ext.layout.SpeciesGlyph;
import org.sbml.jsbml.ext.multi.MultiSpeciesPlugin;
import org.sbml.jsbml.ext.multi.MultiSpeciesType;
import org.sbml.jsbml.ext.render.LocalStyle;
import lcsb.mapviewer.common.Pair;
......@@ -35,6 +37,19 @@ public class SbmlSpeciesParser extends SbmlElementParser<org.sbml.jsbml.Species>
@Override
protected Species parse(org.sbml.jsbml.Species species) throws InvalidInputDataExecption {
String sboTerm = species.getSBOTermID();
MultiSpeciesPlugin multiExtension = (MultiSpeciesPlugin) species.getExtension("multi");
if (multiExtension != null) {
MultiSpeciesType speciesType = getMultiPlugin().getListOfSpeciesTypes().get(multiExtension.getSpeciesType());
if (speciesType != null) {
String sboTerm2 = speciesType.getSBOTermID();
if (sboTerm != null && !sboTerm.isEmpty() && !sboTerm2.equals(sboTerm)) {
logger.warn("Different SBO terms defining species and speciesType: " + species.getId() + ". " + sboTerm + ";"
+ sboTerm2);
} else {
sboTerm = sboTerm2;
}
}
}
Class<? extends Species> clazz = SBOTermSpeciesType.getTypeSBOTerm(sboTerm);
try {
Species result = clazz.getConstructor(String.class).newInstance(species.getId());
......
......@@ -7,23 +7,48 @@ import static org.junit.Assert.assertTrue;
import java.awt.Color;
import java.io.FileNotFoundException;
import java.util.List;
import org.apache.log4j.Logger;
import org.apache.log4j.spi.LoggingEvent;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import lcsb.mapviewer.common.Configuration;
import lcsb.mapviewer.common.EventStorageLoggerAppender;
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.Gene;
import lcsb.mapviewer.model.map.species.GenericProtein;
import lcsb.mapviewer.model.map.species.Species;
public class SbmlParserTest {
Logger logger = Logger.getLogger(SbmlParserTest.class);
SbmlParser parser = new SbmlParser();
private EventStorageLoggerAppender appender;
@Before
public final void _setUp() throws Exception {
Logger.getRootLogger().removeAppender(appender);
appender = new EventStorageLoggerAppender();
Logger.getRootLogger().addAppender(appender);
}
@After
public final void _tearDown() throws Exception {
Logger.getRootLogger().removeAppender(appender);
}
protected List<LoggingEvent> getWarnings() {
return appender.getWarnings();
}
@Test
public void testParseCompartment() throws FileNotFoundException, InvalidInputDataExecption {
Model model = parser.createModel(
......@@ -191,4 +216,17 @@ public class SbmlParserTest {
assertTrue(model.getHeight() > 0);
}
@Test
public void testParseTypeFromMulti() throws Exception {
Model model = parser.createModel(new ConverterParams().filename("testFiles/multi_features/species_type.xml"));
assertTrue(model.getElementByElementId("species_0") instanceof Gene);
}
@Test
public void testParseConflictingTypesFromMulti() throws Exception {
Model model = parser.createModel(new ConverterParams().filename("testFiles/multi_features/conflicting_species_type.xml"));
assertTrue(model.getElementByElementId("species_0") instanceof GenericProtein);
assertEquals(1, getWarnings().size());
}
}
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<!-- Created by minerva version Unknown on 2018-12-31 at 12:23:42 CET with
JSBML version 1.4. -->
<sbml xmlns="http://www.sbml.org/sbml/level3/version2/core"
layout:required="false" level="3" multi:required="true"
render:required="false" version="2"
xmlns:layout="http://www.sbml.org/sbml/level3/version1/layout/version1"
xmlns:multi="http://www.sbml.org/sbml/level3/version1/multi/version1"
xmlns:render="http://www.sbml.org/sbml/level3/version1/render/version1">
<model id="id1" name="UNKNOWN DISEASE MAP">
<multi:listOfSpeciesTypes
xmlns:multi="http://www.sbml.org/sbml/level3/version1/multi/version1">
<multi:speciesType
multi:id="minerva_species_type_Gene" multi:name="Gene"
sboTerm="SBO:0000243" />
</multi:listOfSpeciesTypes>
<listOfSpecies>
<species id="species_0"
multi:speciesType="minerva_species_type_Gene" name="test name"
sboTerm="SBO:0000252">
</species>
</listOfSpecies>
</model>
</sbml>
\ No newline at end of file
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<!-- Created by minerva version Unknown on 2018-12-31 at 12:23:42 CET with
JSBML version 1.4. -->
<sbml xmlns="http://www.sbml.org/sbml/level3/version2/core"
layout:required="false" level="3" multi:required="true"
render:required="false" version="2"
xmlns:layout="http://www.sbml.org/sbml/level3/version1/layout/version1"
xmlns:multi="http://www.sbml.org/sbml/level3/version1/multi/version1"
xmlns:render="http://www.sbml.org/sbml/level3/version1/render/version1">
<model id="id1" name="UNKNOWN DISEASE MAP">
<multi:listOfSpeciesTypes
xmlns:multi="http://www.sbml.org/sbml/level3/version1/multi/version1">
<multi:speciesType
multi:id="minerva_species_type_Gene" multi:name="Gene"
sboTerm="SBO:0000243" />
</multi:listOfSpeciesTypes>
<listOfSpecies>
<species id="species_0"
multi:speciesType="minerva_species_type_Gene" name="test name">
</species>
</listOfSpecies>
</model>
</sbml>
\ No newline at end of file
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