From bc2f74f35d8e638beab2edb74ef6fa92978a043d Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Fri, 4 Jan 2019 13:23:33 +0100
Subject: [PATCH] export/import of synonyms implemented

---
 .../sbml/species/SbmlSpeciesExporter.java     | 29 ++++++++++++-------
 .../model/sbml/species/SbmlSpeciesParser.java | 10 +++++++
 .../ReactionPropertiesExportToMultiTest.java  |  2 ++
 3 files changed, 30 insertions(+), 11 deletions(-)

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 d2af7f4ee5..d5b7937f4b 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
@@ -98,6 +98,7 @@ public class SbmlSpeciesExporter extends SbmlElementExporter<Species, org.sbml.j
     assignStructuralStateToMulti(element, multiExtension, speciesType);
     assignPostionToCompartmentToMulti(element, multiExtension, speciesType);
     assignElementModificationResiduesToMulti(element, multiExtension, speciesType);
+    assignListOfSynonymsToMulti(element, multiExtension, speciesType);
   }
 
   private void assignElementModificationResiduesToMulti(Species element, MultiSpeciesPlugin multiExtension,
@@ -216,12 +217,7 @@ public class SbmlSpeciesExporter extends SbmlElementExporter<Species, org.sbml.j
       structuralState = ((Complex) element).getStructuralState();
     }
     if (structuralState != null) {
-      SpeciesFeatureType structuralStateFeature = getFeature(element.getClass(), speciesType,
-          BioEntityFeature.STRUCTURAL_STATE);
-      PossibleSpeciesFeatureValue structuralStateFeatureValue = getPosibleFeatureIdByName(structuralState,
-          structuralStateFeature);
-
-      addSpeciesFeatureValue(multiExtension, structuralStateFeature, structuralStateFeatureValue);
+      assignValueToFeature(element, multiExtension, speciesType, structuralState, BioEntityFeature.STRUCTURAL_STATE);
     }
   }
 
@@ -259,13 +255,24 @@ public class SbmlSpeciesExporter extends SbmlElementExporter<Species, org.sbml.j
 
   private void assignPostionToCompartmentToMulti(Species element, MultiSpeciesPlugin multiExtension,
       MultiSpeciesType speciesType) {
-    String positionToCompartmentName = "undefined";
+    String value = "undefined";
     if (element.getPositionToCompartment() != null) {
-      positionToCompartmentName = element.getPositionToCompartment().name();
+      value = element.getPositionToCompartment().name();
     }
-    SpeciesFeatureType structuralStateFeature = getFeature(element.getClass(), speciesType,
-        BioEntityFeature.POSITION_TO_COMPARTMENT);
-    PossibleSpeciesFeatureValue structuralStateFeatureValue = getPosibleFeatureIdByName(positionToCompartmentName,
+    assignValueToFeature(element, multiExtension, speciesType, value, BioEntityFeature.POSITION_TO_COMPARTMENT);
+  }
+
+  private void assignListOfSynonymsToMulti(Species element, MultiSpeciesPlugin multiExtension,
+      MultiSpeciesType speciesType) {
+    for (String synonym : element.getSynonyms()) {
+      assignValueToFeature(element, multiExtension, speciesType, synonym, BioEntityFeature.SYNONYM);
+    }
+  }
+
+  private void assignValueToFeature(Species element, MultiSpeciesPlugin multiExtension, MultiSpeciesType speciesType,
+      String value, BioEntityFeature feature) {
+    SpeciesFeatureType structuralStateFeature = getFeature(element.getClass(), speciesType, feature);
+    PossibleSpeciesFeatureValue structuralStateFeatureValue = getPosibleFeatureIdByName(value,
         structuralStateFeature);
 
     addSpeciesFeatureValue(multiExtension, structuralStateFeature, structuralStateFeatureValue);
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 12566be85f..1b6bfa6afc 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
@@ -157,6 +157,16 @@ public class SbmlSpeciesParser extends SbmlElementParser<org.sbml.jsbml.Species>
       } else {
         minervaElement.setPositionToCompartment(PositionToCompartment.getByString(positionToCompartments.get(0)));
       }
+    } else if (MultiPackageNamingUtils.isFeatureId(featureTypeString, BioEntityFeature.SYNONYM)) {
+      SpeciesFeatureType featureType = speciesType.getListOfSpeciesFeatureTypes().get(featureTypeString);
+
+      List<String> synonyms = new ArrayList<>();
+      for (SpeciesFeatureValue featureValue : feature.getListOfSpeciesFeatureValues()) {
+        PossibleSpeciesFeatureValue possibleSpeciesFeatureValue = featureType.getListOfPossibleSpeciesFeatureValues()
+            .get(featureValue.getValue());
+        synonyms.add(possibleSpeciesFeatureValue.getName());
+      }
+      minervaElement.setSynonyms(synonyms);
     } else if (MultiPackageNamingUtils.isModificationFeatureId(featureTypeString)) {
       createModificationResidues(minervaElement, speciesType, feature);
     } else {
diff --git a/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/ReactionPropertiesExportToMultiTest.java b/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/ReactionPropertiesExportToMultiTest.java
index f8f211ade7..a6e7faca96 100644
--- a/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/ReactionPropertiesExportToMultiTest.java
+++ b/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/ReactionPropertiesExportToMultiTest.java
@@ -11,6 +11,7 @@ import java.util.Arrays;
 import java.util.Collection;
 
 import org.apache.log4j.Logger;
+import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -28,6 +29,7 @@ import lcsb.mapviewer.model.map.reaction.ReactionNode;
 import lcsb.mapviewer.model.map.reaction.type.StateTransitionReaction;
 import lcsb.mapviewer.model.map.species.Ion;
 
+@Ignore("Not supported by multi extension")
 @RunWith(Parameterized.class)
 public class ReactionPropertiesExportToMultiTest {
 
-- 
GitLab