diff --git a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/MultiPackageNamingUtils.java b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/extension/multi/MultiPackageNamingUtils.java similarity index 76% rename from converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/MultiPackageNamingUtils.java rename to converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/extension/multi/MultiPackageNamingUtils.java index 7e00c47184b997e5f7ac4d51b54cde5600feeea5..eefbd1bd251c649fafabc6a80326cc19b6060758 100644 --- a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/MultiPackageNamingUtils.java +++ b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/extension/multi/MultiPackageNamingUtils.java @@ -1,4 +1,4 @@ -package lcsb.mapviewer.converter.model.sbml; +package lcsb.mapviewer.converter.model.sbml.extension.multi; import org.apache.log4j.Logger; import org.sbml.jsbml.ext.multi.MultiSpeciesType; @@ -26,8 +26,6 @@ public final class MultiPackageNamingUtils { private static Logger logger = Logger.getLogger(MultiPackageNamingUtils.class); private static final String MINERVA_MODIFICATION_TYPE_PREFIX = "minerva_modification_type_"; - private static final String MINERVA_POSITION_TO_COMPARTMENT_PREFIX = "minerva_position_to_compartment_"; - private static final String MINERVA_STRUCTURAL_STATE_PREFIX = "minerva_structural_state_"; /** * Returns id of the {@link MultiSpeciesType} for a given minerva class. @@ -53,28 +51,16 @@ public final class MultiPackageNamingUtils { return getSpeciesTypeId(element.getClass()); } - public static final String getStructuralStateFeatureId(Class<?> speciesClass) { - return MINERVA_STRUCTURAL_STATE_PREFIX + speciesClass.getSimpleName(); + public static final String getFeatureId(Class<?> speciesClass, BioEntityFeature feature) { + return feature.getIdPrefix() + speciesClass.getSimpleName(); } - public static String getStructuralStateFeatureId(Species element) { - return getStructuralStateFeatureId(element.getClass()); + public static String getFeatureId(Species element, BioEntityFeature feature) { + return getFeatureId(element.getClass(), feature); } - public static boolean isStructuralStateFeatureId(String featureTypeId) { - return featureTypeId.startsWith(MINERVA_STRUCTURAL_STATE_PREFIX); - } - - public static final String getPositionToCompartmentFeatureId(Class<?> speciesClass) { - return MINERVA_POSITION_TO_COMPARTMENT_PREFIX + speciesClass.getSimpleName(); - } - - public static String getPositionToCompartmentFeatureId(Species element) { - return getPositionToCompartmentFeatureId(element.getClass()); - } - - public static boolean isPositionToCompartmentFeatureId(String featureTypeId) { - return featureTypeId.startsWith(MINERVA_POSITION_TO_COMPARTMENT_PREFIX); + public static boolean isFeatureId(String featureTypeId, BioEntityFeature feature) { + return featureTypeId.startsWith(feature.getIdPrefix()); } public static String getModificationFeatureId(ModificationResidue mr) { 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 3dfc259f4058b9fc87295aaa720a27a69d945947..d2af7f4ee525de798bb11f7831a1f9a5d6c0e3b8 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 @@ -23,10 +23,11 @@ import org.sbml.jsbml.ext.multi.SpeciesFeatureType; import org.sbml.jsbml.ext.multi.SpeciesFeatureValue; import org.sbml.jsbml.ext.render.LocalStyle; -import lcsb.mapviewer.converter.model.sbml.MultiPackageNamingUtils; import lcsb.mapviewer.converter.model.sbml.SbmlElementExporter; import lcsb.mapviewer.converter.model.sbml.SbmlExtension; import lcsb.mapviewer.converter.model.sbml.compartment.SbmlCompartmentExporter; +import lcsb.mapviewer.converter.model.sbml.extension.multi.BioEntityFeature; +import lcsb.mapviewer.converter.model.sbml.extension.multi.MultiPackageNamingUtils; import lcsb.mapviewer.model.map.InconsistentModelException; import lcsb.mapviewer.model.map.species.AntisenseRna; import lcsb.mapviewer.model.map.species.Complex; @@ -215,7 +216,8 @@ public class SbmlSpeciesExporter extends SbmlElementExporter<Species, org.sbml.j structuralState = ((Complex) element).getStructuralState(); } if (structuralState != null) { - SpeciesFeatureType structuralStateFeature = getStructuralStateFeature(element.getClass(), speciesType); + SpeciesFeatureType structuralStateFeature = getFeature(element.getClass(), speciesType, + BioEntityFeature.STRUCTURAL_STATE); PossibleSpeciesFeatureValue structuralStateFeatureValue = getPosibleFeatureIdByName(structuralState, structuralStateFeature); @@ -261,7 +263,8 @@ public class SbmlSpeciesExporter extends SbmlElementExporter<Species, org.sbml.j if (element.getPositionToCompartment() != null) { positionToCompartmentName = element.getPositionToCompartment().name(); } - SpeciesFeatureType structuralStateFeature = getPositionToCompartmentFeature(element.getClass(), speciesType); + SpeciesFeatureType structuralStateFeature = getFeature(element.getClass(), speciesType, + BioEntityFeature.POSITION_TO_COMPARTMENT); PossibleSpeciesFeatureValue structuralStateFeatureValue = getPosibleFeatureIdByName(positionToCompartmentName, structuralStateFeature); @@ -343,28 +346,17 @@ public class SbmlSpeciesExporter extends SbmlElementExporter<Species, org.sbml.j return speciesType; } - private SpeciesFeatureType getStructuralStateFeature(Class<? extends Element> clazz, MultiSpeciesType speciesType) { + private SpeciesFeatureType getFeature(Class<? extends Element> clazz, MultiSpeciesType speciesType, + BioEntityFeature bioEntityFeature) { SpeciesFeatureType feature = speciesType - .getSpeciesFeatureType(MultiPackageNamingUtils.getStructuralStateFeatureId(clazz)); + .getSpeciesFeatureType(MultiPackageNamingUtils.getFeatureId(clazz, bioEntityFeature)); if (feature == null) { feature = new SpeciesFeatureType(); - feature.setName("Structural state"); - feature.setId(MultiPackageNamingUtils.getStructuralStateFeatureId(clazz)); - addPosibleValueToFeature(feature, ""); - speciesType.getListOfSpeciesFeatureTypes().add(feature); - } - return feature; - } - - private SpeciesFeatureType getPositionToCompartmentFeature(Class<? extends Element> clazz, - MultiSpeciesType speciesType) { - SpeciesFeatureType feature = speciesType - .getSpeciesFeatureType(MultiPackageNamingUtils.getPositionToCompartmentFeatureId(clazz)); - if (feature == null) { - feature = new SpeciesFeatureType(); - feature.setName("Position to compartment"); - feature.setId(MultiPackageNamingUtils.getPositionToCompartmentFeatureId(clazz)); - addPosibleValueToFeature(feature, "undefined"); + feature.setName(bioEntityFeature.getFeatureName()); + feature.setId(MultiPackageNamingUtils.getFeatureId(clazz, bioEntityFeature)); + if (bioEntityFeature.getDefaultValue() != null) { + addPosibleValueToFeature(feature, bioEntityFeature.getDefaultValue()); + } speciesType.getListOfSpeciesFeatureTypes().add(feature); } return feature; 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 1bdf6ff54812ec2cdedad74d3811bf493579f2c8..12566be85fd5b1500cde88370a22d47e182b881d 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 @@ -27,8 +27,9 @@ import org.sbml.jsbml.ext.render.LocalStyle; import lcsb.mapviewer.common.Pair; import lcsb.mapviewer.common.exception.InvalidStateException; import lcsb.mapviewer.converter.InvalidInputDataExecption; -import lcsb.mapviewer.converter.model.sbml.MultiPackageNamingUtils; import lcsb.mapviewer.converter.model.sbml.SbmlElementParser; +import lcsb.mapviewer.converter.model.sbml.extension.multi.BioEntityFeature; +import lcsb.mapviewer.converter.model.sbml.extension.multi.MultiPackageNamingUtils; import lcsb.mapviewer.model.map.compartment.Compartment; import lcsb.mapviewer.model.map.species.Complex; import lcsb.mapviewer.model.map.species.Degraded; @@ -126,43 +127,35 @@ public class SbmlSpeciesParser extends SbmlElementParser<org.sbml.jsbml.Species> SpeciesFeature feature) { String warnPrefix = new ElementUtils().getElementTag(minervaElement); String featureTypeString = feature.getSpeciesFeatureType(); - if (MultiPackageNamingUtils.isStructuralStateFeatureId(featureTypeString)) { - if (featureTypeString.equals(MultiPackageNamingUtils.getStructuralStateFeatureId(minervaElement))) { - SpeciesFeatureType featureType = speciesType.getListOfSpeciesFeatureTypes().get(featureTypeString); + if (MultiPackageNamingUtils.isFeatureId(featureTypeString, BioEntityFeature.STRUCTURAL_STATE)) { + SpeciesFeatureType featureType = speciesType.getListOfSpeciesFeatureTypes().get(featureTypeString); - List<String> structuralStates = new ArrayList<>(); - for (SpeciesFeatureValue featureValue : feature.getListOfSpeciesFeatureValues()) { - PossibleSpeciesFeatureValue possibleSpeciesFeatureValue = featureType.getListOfPossibleSpeciesFeatureValues() - .get(featureValue.getValue()); - structuralStates.add(possibleSpeciesFeatureValue.getName()); - } - if (minervaElement instanceof Protein) { - ((Protein) minervaElement).setStructuralState(String.join("; ", structuralStates)); - } else if (minervaElement instanceof Complex) { - ((Complex) minervaElement).setStructuralState(String.join("; ", structuralStates)); - } else { - logger.warn(warnPrefix + "Structural state not supported"); - } + List<String> structuralStates = new ArrayList<>(); + for (SpeciesFeatureValue featureValue : feature.getListOfSpeciesFeatureValues()) { + PossibleSpeciesFeatureValue possibleSpeciesFeatureValue = featureType.getListOfPossibleSpeciesFeatureValues() + .get(featureValue.getValue()); + structuralStates.add(possibleSpeciesFeatureValue.getName()); + } + if (minervaElement instanceof Protein) { + ((Protein) minervaElement).setStructuralState(String.join("; ", structuralStates)); + } else if (minervaElement instanceof Complex) { + ((Complex) minervaElement).setStructuralState(String.join("; ", structuralStates)); } else { - logger.warn(warnPrefix + "Invalid structural state for class " + featureTypeString); + logger.warn(warnPrefix + "Structural state not supported"); } - } else if (MultiPackageNamingUtils.isPositionToCompartmentFeatureId(featureTypeString)) { - if (featureTypeString.equals(MultiPackageNamingUtils.getPositionToCompartmentFeatureId(minervaElement))) { - SpeciesFeatureType featureType = speciesType.getListOfSpeciesFeatureTypes().get(featureTypeString); + } else if (MultiPackageNamingUtils.isFeatureId(featureTypeString, BioEntityFeature.POSITION_TO_COMPARTMENT)) { + SpeciesFeatureType featureType = speciesType.getListOfSpeciesFeatureTypes().get(featureTypeString); - List<String> positionToCompartments = new ArrayList<>(); - for (SpeciesFeatureValue featureValue : feature.getListOfSpeciesFeatureValues()) { - PossibleSpeciesFeatureValue possibleSpeciesFeatureValue = featureType.getListOfPossibleSpeciesFeatureValues() - .get(featureValue.getValue()); - positionToCompartments.add(possibleSpeciesFeatureValue.getName()); - } - if (positionToCompartments.size() != 1) { - logger.warn(warnPrefix + "Position to compartment must exactly one value"); - } else { - minervaElement.setPositionToCompartment(PositionToCompartment.getByString(positionToCompartments.get(0))); - } + List<String> positionToCompartments = new ArrayList<>(); + for (SpeciesFeatureValue featureValue : feature.getListOfSpeciesFeatureValues()) { + PossibleSpeciesFeatureValue possibleSpeciesFeatureValue = featureType.getListOfPossibleSpeciesFeatureValues() + .get(featureValue.getValue()); + positionToCompartments.add(possibleSpeciesFeatureValue.getName()); + } + if (positionToCompartments.size() != 1) { + logger.warn(warnPrefix + "Position to compartment must exactly one value"); } else { - logger.warn(warnPrefix + "Position to compartment for class " + featureTypeString); + minervaElement.setPositionToCompartment(PositionToCompartment.getByString(positionToCompartments.get(0))); } } else if (MultiPackageNamingUtils.isModificationFeatureId(featureTypeString)) { createModificationResidues(minervaElement, speciesType, feature); @@ -211,8 +204,10 @@ public class SbmlSpeciesParser extends SbmlElementParser<org.sbml.jsbml.Species> mr = new TranscriptionSite(); if (minervaElement instanceof SpeciesWithTranscriptionSite) { TranscriptionSite transcriptionSite = (TranscriptionSite) mr; - transcriptionSite.setActive(MultiPackageNamingUtils.getTranscriptionFactorActiveStateFromFeatureTypeName(featureTypeString)); - transcriptionSite.setDirection(MultiPackageNamingUtils.getTranscriptionFactorDirectionStateFromFeatureTypeName(featureTypeString)); + transcriptionSite.setActive( + MultiPackageNamingUtils.getTranscriptionFactorActiveStateFromFeatureTypeName(featureTypeString)); + transcriptionSite.setDirection( + MultiPackageNamingUtils.getTranscriptionFactorDirectionStateFromFeatureTypeName(featureTypeString)); ((SpeciesWithTranscriptionSite) minervaElement).addTranscriptionSite(transcriptionSite); } else { logger.warn(warnPrefix + "Object class doesn't support " + mr.getClass());