From 3724bc1a867c182c949dd045a33c98d2ed5ed400 Mon Sep 17 00:00:00 2001 From: Piotr Gawron <piotr.gawron@uni.lu> Date: Fri, 4 Jan 2019 14:05:07 +0100 Subject: [PATCH] export import of element symbol property added --- .../extension/multi/BioEntityFeature.java | 7 +++++-- .../multi/MultiPackageNamingUtils.java | 2 ++ .../sbml/species/SbmlSpeciesExporter.java | 20 ++++++++++++++----- .../model/sbml/species/SbmlSpeciesParser.java | 14 +++++++++++-- 4 files changed, 34 insertions(+), 9 deletions(-) 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 b34767108a..02dfab98ff 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 eefbd1bd25..1ef585cd49 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 d5b7937f4b..9356fb591e 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 b504bb60d5..e34dac0312 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()) { -- GitLab