From 6fbe9845d776ad10e5f3ae92fc2e850999dcc974 Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Mon, 31 Dec 2018 11:28:26 +0100
Subject: [PATCH] export refactored (it doesn't take layout is a constructor
 parameter anymore)

---
 .../model/sbml/SbmlBioEntityExporter.java     | 58 +++++++++++++------
 .../model/sbml/SbmlElementExporter.java       |  6 +-
 .../converter/model/sbml/SbmlExporter.java    |  6 +-
 .../compartment/SbmlCompartmentExporter.java  | 12 ++--
 .../sbml/reaction/SbmlReactionExporter.java   | 14 ++---
 .../sbml/species/SbmlSpeciesExporter.java     |  6 +-
 .../model/sbml/SbmlBioEntityExporterTest.java | 10 +---
 .../reaction/SbmlReactionExporterTest.java    |  7 +--
 .../sbml/species/SbmlSpeciesExporterTest.java |  4 +-
 9 files changed, 72 insertions(+), 51 deletions(-)

diff --git a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/SbmlBioEntityExporter.java b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/SbmlBioEntityExporter.java
index 62d6d3ab7c..45ac9e9392 100644
--- a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/SbmlBioEntityExporter.java
+++ b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/SbmlBioEntityExporter.java
@@ -12,8 +12,10 @@ import javax.xml.stream.XMLStreamException;
 import org.apache.commons.lang3.StringEscapeUtils;
 import org.apache.log4j.Logger;
 import org.sbml.jsbml.Model;
+import org.sbml.jsbml.ext.SBasePlugin;
 import org.sbml.jsbml.ext.layout.AbstractReferenceGlyph;
 import org.sbml.jsbml.ext.layout.Layout;
+import org.sbml.jsbml.ext.layout.LayoutModelPlugin;
 import org.sbml.jsbml.ext.multi.MultiModelPlugin;
 import org.sbml.jsbml.ext.render.ColorDefinition;
 import org.sbml.jsbml.ext.render.LocalRenderInformation;
@@ -31,12 +33,24 @@ import lcsb.mapviewer.model.map.InconsistentModelException;
 
 public abstract class SbmlBioEntityExporter<T extends BioEntity, S extends org.sbml.jsbml.AbstractNamedSBase>
     extends XmlParser {
-  @SuppressWarnings("unused")
+  /**
+   * Default class logger.
+   */
   private Logger logger = Logger.getLogger(SbmlBioEntityExporter.class);
 
+  /**
+   * SBML Layout used when exporting map.
+   */
   private Layout layout;
 
+  /**
+   * Map that we are exporting.
+   */
   private lcsb.mapviewer.model.map.model.Model minervaModel;
+
+  /**
+   * SBML model to which we are exporting.
+   */
   private Model sbmlModel;
 
   private Map<String, S> sbmlElementByElementId = new HashMap<>();
@@ -48,9 +62,10 @@ public abstract class SbmlBioEntityExporter<T extends BioEntity, S extends org.s
 
   private Set<SbmlExtension> sbmlExtensions = new HashSet<>();
 
-  public SbmlBioEntityExporter(Layout sbmlLayout, lcsb.mapviewer.model.map.model.Model minervaModel,
+  public SbmlBioEntityExporter(Model sbmlModel, lcsb.mapviewer.model.map.model.Model minervaModel,
       Collection<SbmlExtension> sbmlExtensions) {
-    this.layout = sbmlLayout;
+    this.sbmlModel = sbmlModel;
+    this.layout = getLayout(sbmlModel);
     this.minervaModel = minervaModel;
     this.sbmlExtensions.addAll(sbmlExtensions);
   }
@@ -129,25 +144,34 @@ public abstract class SbmlBioEntityExporter<T extends BioEntity, S extends org.s
     return (idCounter++) + "";
   }
 
-  protected Model getSbmlModel() {
-    return sbmlModel;
-  }
-
-  protected void setSbmlModel(Model sbmlModel) {
-    this.sbmlModel = sbmlModel;
+  private Layout getLayout(org.sbml.jsbml.Model sbmlModel) {
+    Layout layout = null;
+
+    if (sbmlModel.getExtensionCount() > 0) {
+      for (SBasePlugin plugin : sbmlModel.getExtensionPackages().values()) {
+        if (plugin.getClass().equals(org.sbml.jsbml.ext.layout.LayoutModelPlugin.class)) {
+          LayoutModelPlugin layoutPlugin = (LayoutModelPlugin) plugin;
+          if (layoutPlugin.getLayoutCount() == 0) {
+            logger.warn("Layout plugin available but no layouts defined");
+          } else if (layoutPlugin.getLayoutCount() > 1) {
+            logger.warn(layoutPlugin.getLayoutCount() + " layouts defined. Using first one.");
+            layout = layoutPlugin.getLayout(0);
+          } else {
+            layout = layoutPlugin.getLayout(0);
+          }
+        }
+      }
+    }
+    return layout;
   }
 
   protected Layout getLayout() {
     return layout;
   }
 
-  protected void setLayout(Layout layout) {
-    this.layout = layout;
-  }
-
   protected RenderLayoutPlugin getRenderPlugin() {
-    if (layout.getExtensionCount() > 0) {
-      return (RenderLayoutPlugin) layout.getExtension("render");
+    if (getLayout().getExtensionCount() > 0) {
+      return (RenderLayoutPlugin) getLayout().getExtension("render");
     }
     return null;
   }
@@ -160,8 +184,8 @@ public abstract class SbmlBioEntityExporter<T extends BioEntity, S extends org.s
     return minervaModel;
   }
 
-  protected void setMinervaModel(lcsb.mapviewer.model.map.model.Model minervaModel) {
-    this.minervaModel = minervaModel;
+  protected Model getSbmlModel() {
+    return sbmlModel;
   }
 
   public S getSbmlElementByElementId(String id) {
diff --git a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/SbmlElementExporter.java b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/SbmlElementExporter.java
index 68a22e13e3..530dfa9c71 100644
--- a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/SbmlElementExporter.java
+++ b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/SbmlElementExporter.java
@@ -3,10 +3,10 @@ package lcsb.mapviewer.converter.model.sbml;
 import java.util.Collection;
 
 import org.apache.log4j.Logger;
+import org.sbml.jsbml.Model;
 import org.sbml.jsbml.ext.layout.AbstractReferenceGlyph;
 import org.sbml.jsbml.ext.layout.BoundingBox;
 import org.sbml.jsbml.ext.layout.Dimensions;
-import org.sbml.jsbml.ext.layout.Layout;
 import org.sbml.jsbml.ext.layout.Point;
 import org.sbml.jsbml.ext.render.ColorDefinition;
 import org.sbml.jsbml.ext.render.LocalStyle;
@@ -22,9 +22,9 @@ public abstract class SbmlElementExporter<T extends Element, S extends org.sbml.
   @SuppressWarnings("unused")
   private static Logger logger = Logger.getLogger(SbmlElementExporter.class);
 
-  public SbmlElementExporter(Layout sbmlLayout, lcsb.mapviewer.model.map.model.Model minervaModel,
+  public SbmlElementExporter(Model sbmlModel, lcsb.mapviewer.model.map.model.Model minervaModel,
       Collection<SbmlExtension> sbmlExtensions) {
-    super(sbmlLayout, minervaModel, sbmlExtensions);
+    super(sbmlModel, minervaModel, sbmlExtensions);
   }
 
   protected void assignLayoutToGlyph(T element, AbstractReferenceGlyph speciesGlyph) {
diff --git a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/SbmlExporter.java b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/SbmlExporter.java
index 6ec05f80ef..db7b4bd519 100644
--- a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/SbmlExporter.java
+++ b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/SbmlExporter.java
@@ -98,11 +98,11 @@ public class SbmlExporter {
       assignStructuralStatesToTypes(multiPlugin, model);
     }
 
-    SbmlCompartmentExporter compartmentExporter = new SbmlCompartmentExporter(layout, model, usedExtensions);
-    SbmlBioEntityExporter<Species, org.sbml.jsbml.Species> speciesExporter = new SbmlSpeciesExporter(layout, model,
+    SbmlCompartmentExporter compartmentExporter = new SbmlCompartmentExporter(result, model, usedExtensions);
+    SbmlBioEntityExporter<Species, org.sbml.jsbml.Species> speciesExporter = new SbmlSpeciesExporter(result, model,
         usedExtensions,
         compartmentExporter);
-    SbmlReactionExporter reactionExporter = new SbmlReactionExporter(layout, model, speciesExporter,
+    SbmlReactionExporter reactionExporter = new SbmlReactionExporter(result, model, speciesExporter,
         usedExtensions, compartmentExporter);
     SbmlUnitExporter unitExporter = new SbmlUnitExporter(model);
     SbmlParameterExporter parameterExporter = new SbmlParameterExporter(model);
diff --git a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/compartment/SbmlCompartmentExporter.java b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/compartment/SbmlCompartmentExporter.java
index c3f994b786..8b2a8bf0d5 100644
--- a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/compartment/SbmlCompartmentExporter.java
+++ b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/compartment/SbmlCompartmentExporter.java
@@ -5,11 +5,11 @@ import java.util.Collection;
 import java.util.List;
 
 import org.apache.log4j.Logger;
+import org.sbml.jsbml.Model;
 import org.sbml.jsbml.ext.layout.AbstractReferenceGlyph;
 import org.sbml.jsbml.ext.layout.BoundingBox;
 import org.sbml.jsbml.ext.layout.CompartmentGlyph;
 import org.sbml.jsbml.ext.layout.Dimensions;
-import org.sbml.jsbml.ext.layout.Layout;
 import org.sbml.jsbml.ext.layout.Point;
 
 import lcsb.mapviewer.converter.model.sbml.SbmlElementExporter;
@@ -18,10 +18,14 @@ import lcsb.mapviewer.model.map.InconsistentModelException;
 import lcsb.mapviewer.model.map.compartment.Compartment;
 
 public class SbmlCompartmentExporter extends SbmlElementExporter<Compartment, org.sbml.jsbml.Compartment> {
-  Logger logger = Logger.getLogger(SbmlCompartmentExporter.class);
+  /**
+   * Default class logger.
+   */
+  @SuppressWarnings("unused")
+  private static Logger logger = Logger.getLogger(SbmlCompartmentExporter.class);
 
-  public SbmlCompartmentExporter(Layout layout, lcsb.mapviewer.model.map.model.Model minervaModel, Collection<SbmlExtension> sbmlExtensions) {
-    super(layout, minervaModel, sbmlExtensions);
+  public SbmlCompartmentExporter(Model sbmlModel, lcsb.mapviewer.model.map.model.Model minervaModel, Collection<SbmlExtension> sbmlExtensions) {
+    super(sbmlModel, minervaModel, sbmlExtensions);
   }
 
   @Override
diff --git a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/reaction/SbmlReactionExporter.java b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/reaction/SbmlReactionExporter.java
index 93136ab5ee..257a39e6ce 100644
--- a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/reaction/SbmlReactionExporter.java
+++ b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/reaction/SbmlReactionExporter.java
@@ -48,15 +48,18 @@ import lcsb.mapviewer.model.map.reaction.ReactionNode;
 import lcsb.mapviewer.model.map.species.Element;
 
 public class SbmlReactionExporter extends SbmlBioEntityExporter<Reaction, org.sbml.jsbml.Reaction> {
-  Logger logger = Logger.getLogger(SbmlReactionExporter.class);
+  /**
+   * Default class logger.
+   */
+  private static Logger logger = Logger.getLogger(SbmlReactionExporter.class);
   private SbmlBioEntityExporter<lcsb.mapviewer.model.map.species.Species, Species> speciesExporter;
   private SbmlBioEntityExporter<Compartment, org.sbml.jsbml.Compartment> compartmentExporter;
 
-  public SbmlReactionExporter(Layout layout, lcsb.mapviewer.model.map.model.Model minervaModel,
+  public SbmlReactionExporter(Model sbmlModel, lcsb.mapviewer.model.map.model.Model minervaModel,
       SbmlBioEntityExporter<lcsb.mapviewer.model.map.species.Species, Species> speciesExporter,
       Collection<SbmlExtension> sbmlExtensions,
       SbmlBioEntityExporter<lcsb.mapviewer.model.map.compartment.Compartment, org.sbml.jsbml.Compartment> compartmentExporter) {
-    super(layout, minervaModel, sbmlExtensions);
+    super(sbmlModel, minervaModel, sbmlExtensions);
     this.speciesExporter = speciesExporter;
     this.compartmentExporter = compartmentExporter;
   }
@@ -319,11 +322,6 @@ public class SbmlReactionExporter extends SbmlBioEntityExporter<Reaction, org.sb
     return curve;
   }
 
-  @Override
-  protected void setSbmlModel(Model sbmlModel) {
-    super.setSbmlModel(sbmlModel);
-  }
-
   @Override
   protected String getSbmlIdKey(Reaction element) {
     return element.getClass().getSimpleName() + "\n" + element.getElementId();
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 e875c3a389..6dc2dc133a 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
@@ -4,8 +4,8 @@ import java.util.Collection;
 import java.util.List;
 
 import org.apache.log4j.Logger;
+import org.sbml.jsbml.Model;
 import org.sbml.jsbml.ext.layout.AbstractReferenceGlyph;
-import org.sbml.jsbml.ext.layout.Layout;
 import org.sbml.jsbml.ext.multi.MultiSpeciesPlugin;
 import org.sbml.jsbml.ext.multi.MultiSpeciesType;
 import org.sbml.jsbml.ext.multi.PossibleSpeciesFeatureValue;
@@ -34,11 +34,11 @@ public class SbmlSpeciesExporter extends SbmlElementExporter<Species, org.sbml.j
 
   private SbmlCompartmentExporter compartmentExporter;
 
-  public SbmlSpeciesExporter(Layout layout,
+  public SbmlSpeciesExporter(Model sbmlModel,
       lcsb.mapviewer.model.map.model.Model minervaModel,
       Collection<SbmlExtension> sbmlExtensions,
       SbmlCompartmentExporter compartmentExporter) {
-    super(layout, minervaModel, sbmlExtensions);
+    super(sbmlModel, minervaModel, sbmlExtensions);
     this.compartmentExporter = compartmentExporter;
   }
 
diff --git a/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/SbmlBioEntityExporterTest.java b/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/SbmlBioEntityExporterTest.java
index 471f844b46..d29f86f82f 100644
--- a/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/SbmlBioEntityExporterTest.java
+++ b/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/SbmlBioEntityExporterTest.java
@@ -11,9 +11,7 @@ import org.mockito.Mockito;
 import org.sbml.jsbml.Model;
 import org.sbml.jsbml.SBMLDocument;
 import org.sbml.jsbml.ext.layout.Layout;
-import org.sbml.jsbml.ext.layout.LayoutModelPlugin;
 import org.sbml.jsbml.ext.render.ColorDefinition;
-import org.sbml.jsbml.ext.render.RenderLayoutPlugin;
 
 import lcsb.mapviewer.model.map.model.ModelFullIndexed;
 
@@ -22,9 +20,8 @@ public class SbmlBioEntityExporterTest {
   @Test
   public void testEmptyGetRenderPlugin() {
     @SuppressWarnings("rawtypes")
-    SbmlBioEntityExporter exporter = Mockito.mock(SbmlBioEntityExporter.class, Mockito.CALLS_REAL_METHODS);
-    Layout layout = new Layout();
-    exporter.setLayout(layout);
+    SbmlBioEntityExporter exporter = createMockExporter();
+    Mockito.when(exporter.getLayout()).thenReturn(new Layout());
 
     assertNull(exporter.getRenderPlugin());
   }
@@ -45,8 +42,7 @@ public class SbmlBioEntityExporterTest {
     SbmlExporter sbmlExporter = new SbmlExporter();
     Layout layout = sbmlExporter.createSbmlLayout(new ModelFullIndexed(null), result);
 
-    exporter.setSbmlModel(result);
-    exporter.setLayout(layout);
+    Mockito.when(exporter.getLayout()).thenReturn(layout);
     return exporter;
   }
 
diff --git a/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/reaction/SbmlReactionExporterTest.java b/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/reaction/SbmlReactionExporterTest.java
index 38378c18d7..ce2936868e 100644
--- a/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/reaction/SbmlReactionExporterTest.java
+++ b/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/reaction/SbmlReactionExporterTest.java
@@ -72,15 +72,14 @@ public class SbmlReactionExporterTest {
     plugin.add(layout);
     result.addExtension("layout", plugin);
 
-    SbmlCompartmentExporter compartmentExporter = new SbmlCompartmentExporter(layout, model,
+    SbmlCompartmentExporter compartmentExporter = new SbmlCompartmentExporter(result, model,
         Arrays.asList(SbmlExtension.values()));
-    SbmlBioEntityExporter<Species, org.sbml.jsbml.Species> speciesExporter = new SbmlSpeciesExporter(layout, model,
+    SbmlBioEntityExporter<Species, org.sbml.jsbml.Species> speciesExporter = new SbmlSpeciesExporter(result, model,
         Arrays.asList(SbmlExtension.values()),
         compartmentExporter);
 
-    SbmlReactionExporter exporter = new SbmlReactionExporter(layout, model, speciesExporter,
+    SbmlReactionExporter exporter = new SbmlReactionExporter(result, model, speciesExporter,
         Arrays.asList(SbmlExtension.values()), compartmentExporter);
-    exporter.setSbmlModel(result);
     return exporter;
   }
 
diff --git a/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/species/SbmlSpeciesExporterTest.java b/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/species/SbmlSpeciesExporterTest.java
index c359e04bcd..954544c422 100644
--- a/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/species/SbmlSpeciesExporterTest.java
+++ b/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/species/SbmlSpeciesExporterTest.java
@@ -74,10 +74,10 @@ public class SbmlSpeciesExporterTest {
     SbmlExporter sbmlExporter = new SbmlExporter();
     sbmlLayout = sbmlExporter.createSbmlLayout(model, sbmlModel);
 
-    SbmlCompartmentExporter compartmentExporter = new SbmlCompartmentExporter(sbmlLayout, model,
+    SbmlCompartmentExporter compartmentExporter = new SbmlCompartmentExporter(sbmlModel, model,
         Arrays.asList(SbmlExtension.values()));
     compartmentExporter.exportElements(sbmlModel);
-    SbmlSpeciesExporter result = new SbmlSpeciesExporter(sbmlLayout, model,
+    SbmlSpeciesExporter result = new SbmlSpeciesExporter(sbmlModel, model,
         Arrays.asList(new SbmlExtension[] { SbmlExtension.RENDER, SbmlExtension.LAYOUT }),
         compartmentExporter);
     return result;
-- 
GitLab