From 81a24dd5747522766c00adf104d8d9e8e53c7cdc Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Mon, 22 Jul 2019 20:24:50 +0200
Subject: [PATCH] map dimension cannot be null

---
 .../celldesigner/CellDesignerXmlParser.java   |  8 ++--
 .../converter/model/sbml/SbmlExporter.java    |  7 +--
 .../converter/model/sbml/SbmlParser.java      | 21 +++------
 .../compartment/SbmlCompartmentExporter.java  |  2 +-
 .../reaction/SbmlReactionExporterTest.java    |  4 +-
 .../layout/ApplySimpleLayoutModelCommand.java | 43 +++----------------
 .../lcsb/mapviewer/model/map/model/Model.java |  8 ++--
 .../mapviewer/model/map/model/ModelData.java  | 12 +++---
 .../model/map/model/ModelFullIndexed.java     |  8 ++--
 .../model/map/model/ModelFullIndexedTest.java | 28 ++++++------
 ...20190722_2__size_of_map_cannot_be_null.sql |  5 +++
 11 files changed, 55 insertions(+), 91 deletions(-)
 create mode 100644 persist/src/main/resources/db/migration/14.0.0~alpha.0/V14.0.0.20190722_2__size_of_map_cannot_be_null.sql

diff --git a/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/CellDesignerXmlParser.java b/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/CellDesignerXmlParser.java
index 26d31a3941..28bd63f9eb 100644
--- a/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/CellDesignerXmlParser.java
+++ b/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/CellDesignerXmlParser.java
@@ -621,7 +621,7 @@ public class CellDesignerXmlParser extends Converter {
 
       result.append(functionCollectionXmlParser.toXml(model.getFunctions()));
       result.append(unitCollectionXmlParser.toXml(model.getUnits()));
-      //notes must be inserted here, but we don't know the warnings yet
+      // notes must be inserted here, but we don't know the warnings yet
       int notesPosition = result.length();
       result.append(annotationToXml(model, elements));
 
@@ -633,7 +633,7 @@ public class CellDesignerXmlParser extends Converter {
 
       result.append(parameterCollectionXmlParser.toXml(model.getParameters()));
       result.append(reactionCollectionXmlParser.reactionCollectionToXmlString(model.getReactions()));
-      
+
       if (model.getNotes() != null || !appender.getWarnings().isEmpty()) {
         StringBuilder notes = new StringBuilder();
         notes.append("<notes>");
@@ -676,8 +676,8 @@ public class CellDesignerXmlParser extends Converter {
     result.append("<annotation>\n");
     result.append("<celldesigner:extension>\n");
     result.append("<celldesigner:modelVersion>4.0</celldesigner:modelVersion>\n");
-    result.append("<celldesigner:modelDisplay sizeX=\"" + model.getWidth().intValue() + "\" sizeY=\""
-        + model.getHeight().intValue() + "\"/>\n");
+    result.append("<celldesigner:modelDisplay sizeX=\"" + (int) (model.getWidth()) + "\" sizeY=\""
+        + (int) (model.getHeight()) + "\"/>\n");
 
     result.append(speciesCollectionXmlParser.speciesCollectionToXmlIncludedString(model.getSpeciesList()));
 
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 28c658a78a..6aa238ac2f 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
@@ -99,7 +99,8 @@ public class SbmlExporter {
     compartmentExporter.setProvideDefaults(provideDefaults);
 
     XmlAnnotationParser parser = new XmlAnnotationParser();
-    String rdf = parser.dataSetToXmlString(model.getMiriamData(), model.getAuthors(), model.getCreationDate(), model.getModificationDates(), model.getIdModel());
+    String rdf = parser.dataSetToXmlString(model.getMiriamData(), model.getAuthors(), model.getCreationDate(),
+        model.getModificationDates(), model.getIdModel());
     try {
       result.setAnnotation(rdf);
     } catch (XMLStreamException e1) {
@@ -141,12 +142,12 @@ public class SbmlExporter {
     Layout layout = new Layout();
     layout.setId("minerva_layout");
     Dimensions dimensions = new Dimensions();
-    if (model.getHeight() != null) {
+    if (model.getHeight() > 0) {
       dimensions.setHeight(model.getHeight());
     } else {
       dimensions.setHeight(640);
     }
-    if (model.getWidth() != null) {
+    if (model.getWidth() > 0) {
       dimensions.setWidth(model.getWidth());
     } else {
       dimensions.setWidth(480);
diff --git a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/SbmlParser.java b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/SbmlParser.java
index 3769a79627..12344d5b78 100644
--- a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/SbmlParser.java
+++ b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/SbmlParser.java
@@ -1,8 +1,6 @@
 package lcsb.mapviewer.converter.model.sbml;
 
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Set;
+import java.util.*;
 
 import javax.xml.stream.XMLStreamException;
 
@@ -18,12 +16,9 @@ import org.sbml.jsbml.ext.multi.MultiModelPlugin;
 
 import lcsb.mapviewer.commands.CommandExecutionException;
 import lcsb.mapviewer.commands.layout.ApplySimpleLayoutModelCommand;
+import lcsb.mapviewer.common.Configuration;
 import lcsb.mapviewer.common.MimeType;
-import lcsb.mapviewer.converter.Converter;
-import lcsb.mapviewer.converter.ConverterException;
-import lcsb.mapviewer.converter.ConverterParams;
-import lcsb.mapviewer.converter.InvalidInputDataExecption;
-import lcsb.mapviewer.converter.ZIndexPopulator;
+import lcsb.mapviewer.converter.*;
 import lcsb.mapviewer.converter.model.sbml.compartment.SbmlCompartmentParser;
 import lcsb.mapviewer.converter.model.sbml.reaction.SbmlReactionParser;
 import lcsb.mapviewer.converter.model.sbml.species.SbmlSpeciesParser;
@@ -33,12 +28,8 @@ import lcsb.mapviewer.model.map.InconsistentModelException;
 import lcsb.mapviewer.model.map.model.Model;
 import lcsb.mapviewer.model.map.model.ModelFullIndexed;
 import lcsb.mapviewer.model.map.modifier.Modulation;
-import lcsb.mapviewer.model.map.reaction.AbstractNode;
-import lcsb.mapviewer.model.map.reaction.Modifier;
-import lcsb.mapviewer.model.map.reaction.Reaction;
-import lcsb.mapviewer.model.map.species.Complex;
-import lcsb.mapviewer.model.map.species.Element;
-import lcsb.mapviewer.model.map.species.Species;
+import lcsb.mapviewer.model.map.reaction.*;
+import lcsb.mapviewer.model.map.species.*;
 import lcsb.mapviewer.model.map.species.field.ModificationResidue;
 import lcsb.mapviewer.model.map.species.field.SpeciesWithModificationResidue;
 
@@ -165,7 +156,7 @@ public class SbmlParser extends Converter {
 
   private void createLayout(Model model, Layout layout, boolean resize, SbmlReactionParser parser)
       throws InvalidInputDataExecption {
-    if (model.getWidth() == null) {
+    if (model.getWidth() <= Configuration.EPSILON) {
       double maxY = 1;
       double maxX = 1;
       for (Element element : model.getElements()) {
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 1467cae134..6fdcc5da88 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
@@ -139,7 +139,7 @@ public class SbmlCompartmentExporter extends SbmlElementExporter<Compartment, or
       boundingBox.setPosition(new Point(element.getX(), element.getY(), 0));
       Dimensions dimensions = new Dimensions();
 
-      if (getMinervaModel().getWidth() != null) {
+      if (getMinervaModel().getWidth() > 0) {
         dimensions.setWidth(getMinervaModel().getWidth());
         dimensions.setHeight(getMinervaModel().getHeight());
       }
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 ce2936868e..278166360e 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
@@ -58,12 +58,12 @@ public class SbmlReactionExporterTest {
 
     Layout layout = new Layout();
     Dimensions dimensions = new Dimensions();
-    if (model.getHeight() != null) {
+    if (model.getHeight() > 0) {
       dimensions.setHeight(model.getHeight());
     } else {
       dimensions.setHeight(640);
     }
-    if (model.getWidth() != null) {
+    if (model.getWidth() > 0) {
       dimensions.setWidth(model.getWidth());
     } else {
       dimensions.setWidth(480);
diff --git a/model-command/src/main/java/lcsb/mapviewer/commands/layout/ApplySimpleLayoutModelCommand.java b/model-command/src/main/java/lcsb/mapviewer/commands/layout/ApplySimpleLayoutModelCommand.java
index a3a81fe456..3d5c0ab39a 100644
--- a/model-command/src/main/java/lcsb/mapviewer/commands/layout/ApplySimpleLayoutModelCommand.java
+++ b/model-command/src/main/java/lcsb/mapviewer/commands/layout/ApplySimpleLayoutModelCommand.java
@@ -1,16 +1,7 @@
 package lcsb.mapviewer.commands.layout;
 
-import java.awt.geom.Dimension2D;
-import java.awt.geom.Point2D;
-import java.awt.geom.Rectangle2D;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.awt.geom.*;
+import java.util.*;
 
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
@@ -27,23 +18,9 @@ import lcsb.mapviewer.model.graphics.PolylineData;
 import lcsb.mapviewer.model.map.BioEntity;
 import lcsb.mapviewer.model.map.compartment.Compartment;
 import lcsb.mapviewer.model.map.model.Model;
-import lcsb.mapviewer.model.map.reaction.AbstractNode;
-import lcsb.mapviewer.model.map.reaction.AndOperator;
-import lcsb.mapviewer.model.map.reaction.AssociationOperator;
-import lcsb.mapviewer.model.map.reaction.DissociationOperator;
-import lcsb.mapviewer.model.map.reaction.Modifier;
-import lcsb.mapviewer.model.map.reaction.NodeOperator;
-import lcsb.mapviewer.model.map.reaction.Product;
-import lcsb.mapviewer.model.map.reaction.Reactant;
-import lcsb.mapviewer.model.map.reaction.Reaction;
-import lcsb.mapviewer.model.map.reaction.SplitOperator;
-import lcsb.mapviewer.model.map.reaction.TruncationOperator;
-import lcsb.mapviewer.model.map.reaction.type.DissociationReaction;
-import lcsb.mapviewer.model.map.reaction.type.HeterodimerAssociationReaction;
-import lcsb.mapviewer.model.map.reaction.type.TruncationReaction;
-import lcsb.mapviewer.model.map.species.Complex;
-import lcsb.mapviewer.model.map.species.Element;
-import lcsb.mapviewer.model.map.species.Species;
+import lcsb.mapviewer.model.map.reaction.*;
+import lcsb.mapviewer.model.map.reaction.type.*;
+import lcsb.mapviewer.model.map.species.*;
 import lcsb.mapviewer.model.map.species.field.ModificationResidue;
 import lcsb.mapviewer.model.map.species.field.SpeciesWithModificationResidue;
 
@@ -448,14 +425,8 @@ public class ApplySimpleLayoutModelCommand extends ApplyLayoutModelCommand {
   }
 
   protected void modifyModelSize(Model model, Point2D minPoint, Dimension2D dimension) {
-    double width = 0;
-    double height = 0;
-    if (model.getWidth() != null) {
-      width = model.getWidth();
-    }
-    if (model.getHeight() != null) {
-      height = model.getHeight();
-    }
+    double width = model.getWidth();
+    double height = model.getHeight();
     width = Math.max(width, minPoint.getX() + dimension.getWidth());
     height = Math.max(height, minPoint.getY() + dimension.getHeight());
     model.setWidth(width);
diff --git a/model/src/main/java/lcsb/mapviewer/model/map/model/Model.java b/model/src/main/java/lcsb/mapviewer/model/map/model/Model.java
index 5450b22f0c..05bfbe7f99 100644
--- a/model/src/main/java/lcsb/mapviewer/model/map/model/Model.java
+++ b/model/src/main/java/lcsb/mapviewer/model/map/model/Model.java
@@ -53,7 +53,7 @@ public interface Model {
    * 
    * @return model width
    */
-  Double getWidth();
+  double getWidth();
 
   /**
    * Sets model width.
@@ -61,13 +61,13 @@ public interface Model {
    * @param width
    *          new model width
    */
-  void setWidth(Double width);
+  void setWidth(double width);
 
   /**
    * 
    * @return model height
    */
-  Double getHeight();
+  double getHeight();
 
   /**
    * Sets model height.
@@ -75,7 +75,7 @@ public interface Model {
    * @param height
    *          new model height
    */
-  void setHeight(Double height);
+  void setHeight(double height);
 
   /**
    * Sets model width.
diff --git a/model/src/main/java/lcsb/mapviewer/model/map/model/ModelData.java b/model/src/main/java/lcsb/mapviewer/model/map/model/ModelData.java
index eba400c886..0e07da18b9 100644
--- a/model/src/main/java/lcsb/mapviewer/model/map/model/ModelData.java
+++ b/model/src/main/java/lcsb/mapviewer/model/map/model/ModelData.java
@@ -129,12 +129,12 @@ public class ModelData implements Serializable {
   /**
    * Width of the map.
    */
-  private Double width;
+  private double width;
 
   /**
    * Height of the map.
    */
-  private Double height;
+  private double height;
 
   /**
    * X coordinate that should be used when initially showing map.
@@ -550,7 +550,7 @@ public class ModelData implements Serializable {
    * @return the width
    * @see #width
    */
-  public Double getWidth() {
+  public double getWidth() {
     return width;
   }
 
@@ -559,7 +559,7 @@ public class ModelData implements Serializable {
    *          the width to set
    * @see #width
    */
-  public void setWidth(Double width) {
+  public void setWidth(double width) {
     this.width = width;
   }
 
@@ -567,7 +567,7 @@ public class ModelData implements Serializable {
    * @return the height
    * @see #height
    */
-  public Double getHeight() {
+  public double getHeight() {
     return height;
   }
 
@@ -576,7 +576,7 @@ public class ModelData implements Serializable {
    *          the height to set
    * @see #height
    */
-  public void setHeight(Double height) {
+  public void setHeight(double height) {
     this.height = height;
   }
 
diff --git a/model/src/main/java/lcsb/mapviewer/model/map/model/ModelFullIndexed.java b/model/src/main/java/lcsb/mapviewer/model/map/model/ModelFullIndexed.java
index bd7085a6b1..0d6a451085 100644
--- a/model/src/main/java/lcsb/mapviewer/model/map/model/ModelFullIndexed.java
+++ b/model/src/main/java/lcsb/mapviewer/model/map/model/ModelFullIndexed.java
@@ -122,22 +122,22 @@ public class ModelFullIndexed implements Model {
   }
 
   @Override
-  public Double getWidth() {
+  public double getWidth() {
     return modelData.getWidth();
   }
 
   @Override
-  public void setWidth(Double width) {
+  public void setWidth(double width) {
     modelData.setWidth(width);
   }
 
   @Override
-  public Double getHeight() {
+  public double getHeight() {
     return modelData.getHeight();
   }
 
   @Override
-  public void setHeight(Double height) {
+  public void setHeight(double height) {
     modelData.setHeight(height);
   }
 
diff --git a/model/src/test/java/lcsb/mapviewer/model/map/model/ModelFullIndexedTest.java b/model/src/test/java/lcsb/mapviewer/model/map/model/ModelFullIndexedTest.java
index 371d0d385a..d6eab5e5ce 100644
--- a/model/src/test/java/lcsb/mapviewer/model/map/model/ModelFullIndexedTest.java
+++ b/model/src/test/java/lcsb/mapviewer/model/map/model/ModelFullIndexedTest.java
@@ -672,10 +672,10 @@ public class ModelFullIndexedTest {
     try {
       Model model = new ModelFullIndexed(null);
 
-      Double width = 12.0;
+      double width = 12.0;
       int widthInt = 12;
       String widthStr = "12.0";
-      Double height = 13.0;
+      double height = 13.0;
       String heightStr = "13.0";
       int heightInt = 13;
       Set<Element> elements = new HashSet<>();
@@ -684,26 +684,22 @@ public class ModelFullIndexedTest {
       String idModel = "model_ID";
 
       model.setWidth(widthStr);
-      assertEquals(width, model.getWidth());
-      model.setWidth((Double) null);
-      assertNull(model.getWidth());
+      assertEquals(width, model.getWidth(), Configuration.EPSILON);
+      model.setWidth(0.0);
       model.setWidth(width);
-      assertEquals(width, model.getWidth());
-      model.setWidth((Double) null);
-      assertNull(model.getWidth());
+      assertEquals(width, model.getWidth(), Configuration.EPSILON);
+      model.setWidth(0.0);
       model.setWidth(widthInt);
-      assertEquals(width, model.getWidth());
+      assertEquals(width, model.getWidth(), Configuration.EPSILON);
 
       model.setHeight(heightStr);
-      assertEquals(height, model.getHeight());
-      model.setHeight((Double) null);
-      assertNull(model.getHeight());
+      assertEquals(height, model.getHeight(), Configuration.EPSILON);
+      model.setHeight(0.0);
       model.setHeight(height);
-      assertEquals(height, model.getHeight());
-      model.setHeight((Double) null);
-      assertNull(model.getHeight());
+      assertEquals(height, model.getHeight(), Configuration.EPSILON);
+      model.setHeight(0.0);
       model.setHeight(heightInt);
-      assertEquals(height, model.getHeight());
+      assertEquals(height, model.getHeight(), Configuration.EPSILON);
 
       model.setElements(elements);
       assertEquals(elements, model.getElements());
diff --git a/persist/src/main/resources/db/migration/14.0.0~alpha.0/V14.0.0.20190722_2__size_of_map_cannot_be_null.sql b/persist/src/main/resources/db/migration/14.0.0~alpha.0/V14.0.0.20190722_2__size_of_map_cannot_be_null.sql
new file mode 100644
index 0000000000..f969d6ae9d
--- /dev/null
+++ b/persist/src/main/resources/db/migration/14.0.0~alpha.0/V14.0.0.20190722_2__size_of_map_cannot_be_null.sql
@@ -0,0 +1,5 @@
+update model_data_table set width = 800 where width is null;
+update model_data_table set height = 600 where height is null;
+
+ALTER TABLE model_data_table ALTER COLUMN width SET NOT NULL;
+ALTER TABLE model_data_table ALTER COLUMN height SET NOT NULL;
-- 
GitLab