From 3f760694ad77d89f577a7830e9d73835aeca95f5 Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Fri, 4 Jan 2019 15:16:38 +0100
Subject: [PATCH] export/import of charge implemented

---
 .../sbml/extension/multi/BioEntityFeature.java      |  3 +++
 .../model/sbml/species/SbmlSpeciesExporter.java     |  8 ++++++++
 .../model/sbml/species/SbmlSpeciesParser.java       | 13 +++++++++++++
 .../sbml/ElementPropertiesExportToMultiTest.java    |  4 ++++
 4 files changed, 28 insertions(+)

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 93db74e678..a1b95b4d59 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
@@ -29,6 +29,9 @@ public enum BioEntityFeature {
   DIMER("Dimer", null, new Class<?>[] { Element.class },
       "minerva_dimer_"),
 
+  CHARGE("Charge", null, new Class<?>[] { Element.class },
+      "minerva_charge_"),
+
   ABBREVIATION("Abbreviation", null, new Class<?>[] { Element.class },
       "minerva_abbreviation_"),
 
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 532aa20056..a3c6131fb7 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
@@ -106,6 +106,7 @@ public class SbmlSpeciesExporter extends SbmlElementExporter<Species, org.sbml.j
     assignDimerToMulti(element, multiExtension, speciesType);
     assignHypotheticalToMulti(element, multiExtension, speciesType);
     assignAbbreviationToMulti(element, multiExtension, speciesType);
+    assignChargeToMulti(element, multiExtension, speciesType);
   }
 
   private void assignElementModificationResiduesToMulti(Species element, MultiSpeciesPlugin multiExtension,
@@ -305,6 +306,13 @@ public class SbmlSpeciesExporter extends SbmlElementExporter<Species, org.sbml.j
     }
   }
 
+  private void assignChargeToMulti(Species element, MultiSpeciesPlugin multiExtension,
+      MultiSpeciesType speciesType) {
+    if (element.getCharge() != null) {
+      assignValueToFeature(element, multiExtension, speciesType, element.getCharge().toString(), BioEntityFeature.CHARGE);
+    }
+  }
+
   private void assignHypotheticalToMulti(Species element, MultiSpeciesPlugin multiExtension,
       MultiSpeciesType speciesType) {
     if (element.getHypothetical() != null) {
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 3022498a91..de9ba5546d 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
@@ -86,6 +86,9 @@ public class SbmlSpeciesParser extends SbmlElementParser<org.sbml.jsbml.Species>
       if (species.isSetConstant()) {
         result.setConstant(species.getConstant());
       }
+      if (species.isSetCharge()) {
+        result.setCharge(species.getCharge());
+      }
       assignBioEntityData(species, result);
       if (getLayout() == null) {
         assignCompartment(result, species.getCompartment());
@@ -157,6 +160,16 @@ public class SbmlSpeciesParser extends SbmlElementParser<org.sbml.jsbml.Species>
           logger.warn(warnPrefix + "Dimer must have integer value, instead found: " + featureValues.get(0));
         }
       }
+    } else if (MultiPackageNamingUtils.isFeatureId(featureTypeString, BioEntityFeature.CHARGE)) {
+      if (featureValues.size() != 1) {
+        logger.warn(warnPrefix + "Charge must have exactly one value");
+      } else {
+        try {
+          minervaElement.setCharge(Integer.parseInt(featureValues.get(0)));
+        } catch (NumberFormatException e) {
+          logger.warn(warnPrefix + "Charge must have integer value, instead found: " + featureValues.get(0));
+        }
+      }
     } else if (MultiPackageNamingUtils.isFeatureId(featureTypeString, BioEntityFeature.SYMBOL)) {
       if (featureValues.size() != 1) {
         logger.warn(warnPrefix + "Symbol must have exactly one value");
diff --git a/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/ElementPropertiesExportToMultiTest.java b/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/ElementPropertiesExportToMultiTest.java
index ad4ba2ac9d..ea0af3d658 100644
--- a/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/ElementPropertiesExportToMultiTest.java
+++ b/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/ElementPropertiesExportToMultiTest.java
@@ -60,6 +60,10 @@ public class ElementPropertiesExportToMultiTest {
     element.setHomodimer(4);
     data.add(createTestEntry("Homodimer", element));
 
+    element = createElement();
+    element.setCharge(5);
+    data.add(createTestEntry("Charge", element));
+
     element = createElement();
     element.setHypothetical(true);
     data.add(createTestEntry("Hypothetical", element));
-- 
GitLab