diff --git a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/extension/multi/BioEntityFeature.java b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/extension/multi/BioEntityFeature.java index b34767108a1d4b5ae139c7b39f5cdaa17900c3eb..02dfab98ff778b56f5259ab886318f342dac91ab 100644 --- a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/extension/multi/BioEntityFeature.java +++ b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/extension/multi/BioEntityFeature.java @@ -12,8 +12,11 @@ public enum BioEntityFeature { "minerva_position_to_compartment_"), SYNONYM("Synonym", null, new Class<?>[] { Element.class }, - "minerva_synonym_"); - + "minerva_synonym_"), + + SYMBOL("Symbol", null, new Class<?>[] { Element.class }, + "minerva_symbol_"); + private String featureName; private String defaultValue; private Class<?>[] properClasses; diff --git a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/extension/multi/MultiPackageNamingUtils.java b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/extension/multi/MultiPackageNamingUtils.java index eefbd1bd251c649fafabc6a80326cc19b6060758..1ef585cd49603525b741891f7130b9324ee41ae0 100644 --- a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/extension/multi/MultiPackageNamingUtils.java +++ b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/extension/multi/MultiPackageNamingUtils.java @@ -27,6 +27,8 @@ public final class MultiPackageNamingUtils { private static final String MINERVA_MODIFICATION_TYPE_PREFIX = "minerva_modification_type_"; + public static final String NULL_REPRESENTATION = "NULL"; + /** * Returns id of the {@link MultiSpeciesType} for a given minerva class. * diff --git a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/species/SbmlSpeciesExporter.java b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/species/SbmlSpeciesExporter.java index d5b7937f4ba29ece47731a5be39225feaaf88336..9356fb591ebec2dcb62948248ad5a573dcc7f48d 100644 --- a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/species/SbmlSpeciesExporter.java +++ b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/species/SbmlSpeciesExporter.java @@ -99,6 +99,7 @@ public class SbmlSpeciesExporter extends SbmlElementExporter<Species, org.sbml.j assignPostionToCompartmentToMulti(element, multiExtension, speciesType); assignElementModificationResiduesToMulti(element, multiExtension, speciesType); assignListOfSynonymsToMulti(element, multiExtension, speciesType); + assignSymbolToMulti(element, multiExtension, speciesType); } private void assignElementModificationResiduesToMulti(Species element, MultiSpeciesPlugin multiExtension, @@ -241,16 +242,16 @@ public class SbmlSpeciesExporter extends SbmlElementExporter<Species, org.sbml.j private PossibleSpeciesFeatureValue getPosibleFeatureIdByName(String featureValueName, SpeciesFeatureType speciesFeature) { - PossibleSpeciesFeatureValue structuralStateFeatureValue = null; + PossibleSpeciesFeatureValue result = null; for (PossibleSpeciesFeatureValue value : speciesFeature.getListOfPossibleSpeciesFeatureValues()) { if (value.getName().equals(featureValueName)) { - structuralStateFeatureValue = value; + result = value; } } - if (structuralStateFeatureValue == null) { - structuralStateFeatureValue = addPosibleValueToFeature(speciesFeature, featureValueName); + if (result == null) { + result = addPosibleValueToFeature(speciesFeature, featureValueName); } - return structuralStateFeatureValue; + return result; } private void assignPostionToCompartmentToMulti(Species element, MultiSpeciesPlugin multiExtension, @@ -269,6 +270,11 @@ public class SbmlSpeciesExporter extends SbmlElementExporter<Species, org.sbml.j } } + private void assignSymbolToMulti(Species element, MultiSpeciesPlugin multiExtension, + MultiSpeciesType speciesType) { + assignValueToFeature(element, multiExtension, speciesType, element.getSymbol(), BioEntityFeature.SYMBOL); + } + private void assignValueToFeature(Species element, MultiSpeciesPlugin multiExtension, MultiSpeciesType speciesType, String value, BioEntityFeature feature) { SpeciesFeatureType structuralStateFeature = getFeature(element.getClass(), speciesType, feature); @@ -370,6 +376,10 @@ public class SbmlSpeciesExporter extends SbmlElementExporter<Species, org.sbml.j } private PossibleSpeciesFeatureValue addPosibleValueToFeature(SpeciesFeatureType feature, String value) { + if (value == null) { + value = MultiPackageNamingUtils.NULL_REPRESENTATION; + } + PossibleSpeciesFeatureValue result = null; for (PossibleSpeciesFeatureValue existingValue : feature.getListOfPossibleSpeciesFeatureValues()) { if (existingValue.getName().equals(value)) { diff --git a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/species/SbmlSpeciesParser.java b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/species/SbmlSpeciesParser.java index b504bb60d5ddf3a56467cafc8f3f28f793e28445..e34dac031283d7eec5f73e64c7768407afe83a08 100644 --- a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/species/SbmlSpeciesParser.java +++ b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/species/SbmlSpeciesParser.java @@ -139,12 +139,18 @@ public class SbmlSpeciesParser extends SbmlElementParser<org.sbml.jsbml.Species> } } else if (MultiPackageNamingUtils.isFeatureId(featureTypeString, BioEntityFeature.POSITION_TO_COMPARTMENT)) { if (featureValues.size() != 1) { - logger.warn(warnPrefix + "Position to compartment must exactly one value"); + logger.warn(warnPrefix + "Position to compartment must have exactly one value"); } else { minervaElement.setPositionToCompartment(PositionToCompartment.getByString(featureValues.get(0))); } } else if (MultiPackageNamingUtils.isFeatureId(featureTypeString, BioEntityFeature.SYNONYM)) { minervaElement.setSynonyms(featureValues); + } else if (MultiPackageNamingUtils.isFeatureId(featureTypeString, BioEntityFeature.SYMBOL)) { + if (featureValues.size() != 1) { + logger.warn(warnPrefix + "Symbol must have exactly one value"); + } else { + minervaElement.setSymbol(featureValues.get(0)); + } } else if (MultiPackageNamingUtils.isModificationFeatureId(featureTypeString)) { createModificationResidues(minervaElement, speciesType, feature); } else { @@ -160,7 +166,11 @@ public class SbmlSpeciesParser extends SbmlElementParser<org.sbml.jsbml.Species> for (SpeciesFeatureValue featureValue : feature.getListOfSpeciesFeatureValues()) { PossibleSpeciesFeatureValue possibleSpeciesFeatureValue = featureType.getListOfPossibleSpeciesFeatureValues() .get(featureValue.getValue()); - result.add(possibleSpeciesFeatureValue.getName()); + if (possibleSpeciesFeatureValue.getName().equals(MultiPackageNamingUtils.NULL_REPRESENTATION)) { + result.add(null); + } else { + result.add(possibleSpeciesFeatureValue.getName()); + } } } else { for (SpeciesTypeInstance speciesTypeInstance : speciesType.getListOfSpeciesTypeInstances()) {