From 2e3ca9ce97deb80ee4ad4134cb93e385b9de210f Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Fri, 4 Jan 2019 14:59:36 +0100
Subject: [PATCH] import/export of hypothetical implemented

---
 .../sbml/extension/multi/BioEntityFeature.java     |  3 +++
 .../model/sbml/species/SbmlSpeciesExporter.java    |  9 +++++++++
 .../model/sbml/species/SbmlSpeciesParser.java      | 14 ++++++++++++++
 .../sbml/ElementPropertiesExportToMultiTest.java   |  4 ++++
 4 files changed, 30 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 bb89d16008..93db74e678 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
@@ -23,6 +23,9 @@ public enum BioEntityFeature {
   FORMULA("Formula", null, new Class<?>[] { Element.class },
       "minerva_formula_"),
 
+  HYPOTHETICAL("Hypothetical", null, new Class<?>[] { Element.class },
+      "minerva_hypothetical_"),
+
   DIMER("Dimer", null, new Class<?>[] { Element.class },
       "minerva_dimer_"),
 
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 7dad53fae4..532aa20056 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
@@ -104,6 +104,7 @@ public class SbmlSpeciesExporter extends SbmlElementExporter<Species, org.sbml.j
     assignFullNameToMulti(element, multiExtension, speciesType);
     assignFormulaToMulti(element, multiExtension, speciesType);
     assignDimerToMulti(element, multiExtension, speciesType);
+    assignHypotheticalToMulti(element, multiExtension, speciesType);
     assignAbbreviationToMulti(element, multiExtension, speciesType);
   }
 
@@ -304,6 +305,14 @@ public class SbmlSpeciesExporter extends SbmlElementExporter<Species, org.sbml.j
     }
   }
 
+  private void assignHypotheticalToMulti(Species element, MultiSpeciesPlugin multiExtension,
+      MultiSpeciesType speciesType) {
+    if (element.getHypothetical() != null) {
+      assignValueToFeature(element, multiExtension, speciesType, element.getHypothetical().toString(),
+          BioEntityFeature.HYPOTHETICAL);
+    }
+  }
+
   private void assignAbbreviationToMulti(Species element, MultiSpeciesPlugin multiExtension,
       MultiSpeciesType speciesType) {
     assignValueToFeature(element, multiExtension, speciesType, element.getAbbreviation(),
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 b2a3de6028..3022498a91 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
@@ -181,6 +181,20 @@ public class SbmlSpeciesParser extends SbmlElementParser<org.sbml.jsbml.Species>
       } else {
         minervaElement.setAbbreviation(featureValues.get(0));
       }
+    } else if (MultiPackageNamingUtils.isFeatureId(featureTypeString, BioEntityFeature.HYPOTHETICAL)) {
+      if (featureValues.size() != 1) {
+        logger.warn(warnPrefix + "Hypothetical must have exactly one value");
+      } else {
+        Boolean value = null;
+        if (featureValues.get(0).equalsIgnoreCase("true")) {
+          value = true;
+        } else if (featureValues.get(0).equalsIgnoreCase("false")) {
+          value = false;
+        } else {
+          logger.warn(warnPrefix + "Hypothetical must be true/false value. Found: " + featureValues.get(0));
+        }
+        minervaElement.setHypothetical(value);
+      }
     } else if (MultiPackageNamingUtils.isModificationFeatureId(featureTypeString)) {
       createModificationResidues(minervaElement, speciesType, feature);
     } else {
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 50f4af36da..ad4ba2ac9d 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.setHypothetical(true);
+    data.add(createTestEntry("Hypothetical", element));
+
     element = createElement();
     element.setSymbol("H2O");
     data.add(createTestEntry("Symbol", element));
-- 
GitLab