From f7c0f018943f80883edbc15ac9f26bd4ff79b861 Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Fri, 10 May 2019 13:42:33 +0200
Subject: [PATCH] export to CellDesigner doesn't support z-index, therefore it
 must be ignored in comparison

---
 .../commands/CommandTestFunctions.java        | 114 +++++++++++-------
 .../mapviewer/commands/CopyCommandTest.java   |  58 +--------
 .../commands/SubModelCommandTest.java         |  25 +---
 .../lcsb/mapviewer/model/map/model/Model.java |   3 +-
 .../model/map/model/ModelFullIndexed.java     |  11 ++
 5 files changed, 91 insertions(+), 120 deletions(-)

diff --git a/model-command/src/test/java/lcsb/mapviewer/commands/CommandTestFunctions.java b/model-command/src/test/java/lcsb/mapviewer/commands/CommandTestFunctions.java
index f975548de2..b003428d07 100644
--- a/model-command/src/test/java/lcsb/mapviewer/commands/CommandTestFunctions.java
+++ b/model-command/src/test/java/lcsb/mapviewer/commands/CommandTestFunctions.java
@@ -1,5 +1,8 @@
 package lcsb.mapviewer.commands;
 
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -8,58 +11,77 @@ import java.util.Map;
 import org.apache.log4j.Logger;
 
 import lcsb.mapviewer.converter.ConverterParams;
+import lcsb.mapviewer.converter.InvalidInputDataExecption;
 import lcsb.mapviewer.converter.model.celldesigner.CellDesignerXmlParser;
+import lcsb.mapviewer.model.map.Drawable;
+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.species.Complex;
 import lcsb.mapviewer.model.map.species.GenericProtein;
 
 public abstract class CommandTestFunctions {
-	public double											EPSILON	= 1e-6;
-
-	Logger														logger	= Logger.getLogger(CommandTestFunctions.class);
-
-	private static Map<String, Model>	models	= new HashMap<String, Model>();
-
-	protected Model getModelForFile(String fileName, boolean fromCache) throws Exception {
-		if (!fromCache) {
-			logger.debug("File without cache: " + fileName);
-			Model result = new CellDesignerXmlParser().createModel(new ConverterParams().filename(fileName));
-			result.setName(null);
-			return result;
-		}
-		Model result = models.get(fileName);
-		if (result == null) {
-			logger.debug("File to cache: " + fileName);
-
-			CellDesignerXmlParser parser = new CellDesignerXmlParser();
-			result = parser.createModel(new ConverterParams().filename(fileName).sizeAutoAdjust(false));
-			result.setName(null);
-			models.put(fileName, result);
-		}
-		return result;
-	}
-
-	protected Model createSimpleModel() {
-		Model model = new ModelFullIndexed(null);
-
-		GenericProtein alias = new GenericProtein("alias_id");
-		alias.setNotes(null);
-		List<String> list = new ArrayList<>();
-		list.add("synonym");
-		alias.addSynonyms(list);
-		List<String> list2 = new ArrayList<>();
-		list2.add("f_symbol");
-		alias.setFormerSymbols(list2);
-
-		Complex complexAlias = new Complex("complex_alias_id");
-		model.addElement(complexAlias);
-
-		complexAlias.addSpecies(alias);
-
-		model.addElement(alias);
-
-		return model;
-	}
+  public double EPSILON = 1e-6;
+
+  Logger logger = Logger.getLogger(CommandTestFunctions.class);
+
+  private static Map<String, Model> models = new HashMap<String, Model>();
+
+  protected Model getModelForFile(String fileName, boolean fromCache) throws Exception {
+    if (!fromCache) {
+      logger.debug("File without cache: " + fileName);
+      Model result = new CellDesignerXmlParser().createModel(new ConverterParams().filename(fileName));
+      result.setName(null);
+      return result;
+    }
+    Model result = models.get(fileName);
+    if (result == null) {
+      logger.debug("File to cache: " + fileName);
+
+      CellDesignerXmlParser parser = new CellDesignerXmlParser();
+      result = parser.createModel(new ConverterParams().filename(fileName).sizeAutoAdjust(false));
+      result.setName(null);
+      models.put(fileName, result);
+    }
+    return result;
+  }
+
+  protected Model createSimpleModel() {
+    Model model = new ModelFullIndexed(null);
+
+    GenericProtein alias = new GenericProtein("alias_id");
+    alias.setNotes(null);
+    List<String> list = new ArrayList<>();
+    list.add("synonym");
+    alias.addSynonyms(list);
+    List<String> list2 = new ArrayList<>();
+    list2.add("f_symbol");
+    alias.setFormerSymbols(list2);
+
+    Complex complexAlias = new Complex("complex_alias_id");
+    model.addElement(complexAlias);
+
+    complexAlias.addSpecies(alias);
+
+    model.addElement(alias);
+
+    return model;
+  }
+
+  protected Model serializeViaCellDesigner(Model original)
+      throws InconsistentModelException, InvalidInputDataExecption {
+    CellDesignerXmlParser parser = new CellDesignerXmlParser();
+    String xmlString = parser.model2String(original);
+    InputStream stream = new ByteArrayInputStream(xmlString.getBytes(StandardCharsets.UTF_8));
+    Model result = parser.createModel(new ConverterParams().inputStream(stream).sizeAutoAdjust(false));
+    
+    for (Drawable bioEntity: original.getDrawables()) {
+      bioEntity.setZ(null);
+    }
+    for (Drawable bioEntity: result.getDrawables()) {
+      bioEntity.setZ(null);
+    }
+    return result;
+  }
 
 }
diff --git a/model-command/src/test/java/lcsb/mapviewer/commands/CopyCommandTest.java b/model-command/src/test/java/lcsb/mapviewer/commands/CopyCommandTest.java
index 42b20d1a12..a85f57116d 100644
--- a/model-command/src/test/java/lcsb/mapviewer/commands/CopyCommandTest.java
+++ b/model-command/src/test/java/lcsb/mapviewer/commands/CopyCommandTest.java
@@ -7,9 +7,6 @@ import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
 import java.awt.geom.Point2D;
-import java.io.ByteArrayInputStream;
-import java.io.InputStream;
-import java.nio.charset.StandardCharsets;
 import java.util.Calendar;
 
 import org.junit.After;
@@ -17,8 +14,6 @@ import org.junit.Before;
 import org.junit.Test;
 
 import lcsb.mapviewer.common.exception.InvalidArgumentException;
-import lcsb.mapviewer.converter.ConverterParams;
-import lcsb.mapviewer.converter.model.celldesigner.CellDesignerXmlParser;
 import lcsb.mapviewer.model.graphics.PolylineData;
 import lcsb.mapviewer.model.map.MiriamData;
 import lcsb.mapviewer.model.map.compartment.Compartment;
@@ -43,6 +38,8 @@ import lcsb.mapviewer.model.map.species.GenericProtein;
 
 public class CopyCommandTest extends CommandTestFunctions {
 
+  ModelComparator comparator = new ModelComparator();
+
   @Before
   public void setUp() throws Exception {
   }
@@ -57,8 +54,6 @@ public class CopyCommandTest extends CommandTestFunctions {
       Model model = getModelForFile("testFiles/sample.xml", false);
       Model copy = new CopyCommand(model).execute();
 
-      ModelComparator comparator = new ModelComparator();
-
       assertEquals(0, comparator.compare(model, copy));
     } catch (Exception e) {
       e.printStackTrace();
@@ -72,8 +67,6 @@ public class CopyCommandTest extends CommandTestFunctions {
       Model model = getModelForFile("testFiles/kinetics_with_compartment.xml", false);
       Model copy = new CopyCommand(model).execute();
 
-      ModelComparator comparator = new ModelComparator();
-
       assertEquals(0, comparator.compare(model, copy));
       for (Reaction reaction : copy.getReactions()) {
         if (reaction.getKinetics() != null) {
@@ -109,8 +102,6 @@ public class CopyCommandTest extends CommandTestFunctions {
 
       Model copy = new CopyCommand(model).execute();
 
-      ModelComparator comparator = new ModelComparator();
-
       assertEquals(0, comparator.compare(model, copy));
     } catch (Exception e) {
       e.printStackTrace();
@@ -138,8 +129,6 @@ public class CopyCommandTest extends CommandTestFunctions {
 
       Model copy = new CopyCommand(model).execute();
 
-      ModelComparator comparator = new ModelComparator();
-
       assertEquals(0, comparator.compare(model, copy));
 
     } catch (Exception e) {
@@ -155,12 +144,7 @@ public class CopyCommandTest extends CommandTestFunctions {
 
       Model copy = new CopyCommand(model).execute();
 
-      CellDesignerXmlParser parser = new CellDesignerXmlParser();
-      String xml = parser.model2String(copy);
-
-      InputStream stream = new ByteArrayInputStream(xml.getBytes(StandardCharsets.UTF_8));
-      Model copy2 = parser.createModel(new ConverterParams().inputStream(stream).sizeAutoAdjust(false));
-      ModelComparator comparator = new ModelComparator();
+      Model copy2 = serializeViaCellDesigner(copy);
 
       // check if after conversion to xml everything works
       assertEquals(0, comparator.compare(copy, copy2));
@@ -178,12 +162,7 @@ public class CopyCommandTest extends CommandTestFunctions {
 
       Model copy = new CopyCommand(model).execute();
 
-      CellDesignerXmlParser parser = new CellDesignerXmlParser();
-      String xml = parser.model2String(copy);
-
-      InputStream stream = new ByteArrayInputStream(xml.getBytes(StandardCharsets.UTF_8));
-      Model copy2 = parser.createModel(new ConverterParams().inputStream(stream).sizeAutoAdjust(false));
-      ModelComparator comparator = new ModelComparator();
+      Model copy2 = serializeViaCellDesigner(copy);
 
       // check if after conversion to xml everything works
       assertEquals(0, comparator.compare(copy, copy2));
@@ -202,12 +181,7 @@ public class CopyCommandTest extends CommandTestFunctions {
 
       Model copy = new CopyCommand(model).execute();
 
-      CellDesignerXmlParser parser = new CellDesignerXmlParser();
-      String xml = parser.model2String(copy);
-
-      InputStream stream = new ByteArrayInputStream(xml.getBytes(StandardCharsets.UTF_8));
-      Model copy2 = parser.createModel(new ConverterParams().inputStream(stream).sizeAutoAdjust(false));
-      ModelComparator comparator = new ModelComparator();
+      Model copy2 = serializeViaCellDesigner(copy);
 
       new CreateHierarchyCommand(copy2, 2, 2).execute();
 
@@ -229,8 +203,6 @@ public class CopyCommandTest extends CommandTestFunctions {
       model.addSubmodelConnection(new ModelSubmodelConnection(model2, SubmodelType.DOWNSTREAM_TARGETS));
       Model copy = new CopyCommand(model).execute();
 
-      ModelComparator comparator = new ModelComparator();
-
       assertEquals(0, comparator.compare(model, copy));
     } catch (Exception e) {
       e.printStackTrace();
@@ -253,8 +225,6 @@ public class CopyCommandTest extends CommandTestFunctions {
       alias.setSubmodel(new ElementSubmodelConnection(model3, SubmodelType.DOWNSTREAM_TARGETS, "name c"));
       Model copy = new CopyCommand(model2).execute();
 
-      ModelComparator comparator = new ModelComparator();
-
       assertEquals(0, comparator.compare(model2, copy));
     } catch (Exception e) {
       e.printStackTrace();
@@ -274,8 +244,6 @@ public class CopyCommandTest extends CommandTestFunctions {
           .setSubmodel(new ElementSubmodelConnection(model2, SubmodelType.DOWNSTREAM_TARGETS));
       Model copy = new CopyCommand(model).execute();
 
-      ModelComparator comparator = new ModelComparator();
-
       assertEquals(0, comparator.compare(model, copy));
     } catch (Exception e) {
       e.printStackTrace();
@@ -291,8 +259,6 @@ public class CopyCommandTest extends CommandTestFunctions {
 
       Model copy = new CopyCommand(model).execute();
 
-      ModelComparator comparator = new ModelComparator();
-
       assertEquals(0, comparator.compare(model, copy));
     } catch (Exception e) {
       e.printStackTrace();
@@ -404,10 +370,7 @@ public class CopyCommandTest extends CommandTestFunctions {
 
       Model copy = new CopyCommand(model).execute();
 
-      ModelComparator comparator = new ModelComparator();
-
       assertEquals(0, comparator.compare(copy, model));
-
     } catch (Exception e) {
       e.printStackTrace();
       throw e;
@@ -422,10 +385,7 @@ public class CopyCommandTest extends CommandTestFunctions {
 
       Model copy = new CopyCommand(model).execute();
 
-      ModelComparator comparator = new ModelComparator();
-
       assertEquals(0, comparator.compare(copy, model));
-
     } catch (Exception e) {
       e.printStackTrace();
       throw e;
@@ -440,10 +400,7 @@ public class CopyCommandTest extends CommandTestFunctions {
 
       Model copy = new CopyCommand(model).execute();
 
-      ModelComparator comparator = new ModelComparator();
-
       assertEquals(0, comparator.compare(copy, model));
-
     } catch (Exception e) {
       e.printStackTrace();
       throw e;
@@ -458,16 +415,11 @@ public class CopyCommandTest extends CommandTestFunctions {
 
       Model copy = new CopyCommand(model).execute();
 
-      ModelComparator comparator = new ModelComparator();
-
       assertEquals(0, comparator.compare(copy, model));
-
     } catch (Exception e) {
       e.printStackTrace();
       throw e;
     }
   }
 
-
-
 }
diff --git a/model-command/src/test/java/lcsb/mapviewer/commands/SubModelCommandTest.java b/model-command/src/test/java/lcsb/mapviewer/commands/SubModelCommandTest.java
index 4a384fefa6..9eba9df40a 100644
--- a/model-command/src/test/java/lcsb/mapviewer/commands/SubModelCommandTest.java
+++ b/model-command/src/test/java/lcsb/mapviewer/commands/SubModelCommandTest.java
@@ -4,9 +4,6 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 
 import java.awt.geom.Path2D;
-import java.io.ByteArrayInputStream;
-import java.io.InputStream;
-import java.nio.charset.StandardCharsets;
 import java.util.Arrays;
 import java.util.HashSet;
 
@@ -14,13 +11,13 @@ import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 
-import lcsb.mapviewer.converter.ConverterParams;
-import lcsb.mapviewer.converter.model.celldesigner.CellDesignerXmlParser;
 import lcsb.mapviewer.model.map.model.Model;
 import lcsb.mapviewer.model.map.model.ModelComparator;
 
 public class SubModelCommandTest extends CommandTestFunctions {
 
+  ModelComparator comparator = new ModelComparator();
+
   @Before
   public void setUp() throws Exception {
   }
@@ -104,12 +101,7 @@ public class SubModelCommandTest extends CommandTestFunctions {
       assertEquals(model.getReactionByReactionId("re3").getLines().get(0).getY2(),
           copy.getReactionByReactionId("re3").getLines().get(0).getY2() - dy, EPSILON);
 
-      CellDesignerXmlParser parser = new CellDesignerXmlParser();
-      String xml = parser.model2String(copy);
-
-      InputStream stream = new ByteArrayInputStream(xml.getBytes(StandardCharsets.UTF_8));
-      Model copy2 = parser.createModel(new ConverterParams().inputStream(stream).sizeAutoAdjust(false));
-      ModelComparator comparator = new ModelComparator();
+      Model copy2 = serializeViaCellDesigner(copy);
 
       // check if after conversion to xml everything works
       assertEquals(0, comparator.compare(copy, copy2));
@@ -156,16 +148,9 @@ public class SubModelCommandTest extends CommandTestFunctions {
 
       Model copy = new SubModelCommand(model, polygon).execute();
 
-      CellDesignerXmlParser parser = new CellDesignerXmlParser();
-      String xmlString = parser.model2String(copy);
-
-      InputStream stream = new ByteArrayInputStream(xmlString.getBytes(StandardCharsets.UTF_8));
-
-      Model model2 = parser.createModel(new ConverterParams().inputStream(stream).sizeAutoAdjust(false));
-
-      ModelComparator mc = new ModelComparator();
-      assertEquals(0, mc.compare(copy, model2));
+      Model model2 = serializeViaCellDesigner(copy);
 
+      assertEquals(0, comparator.compare(copy, model2));
     } catch (Exception e) {
       e.printStackTrace();
       throw e;
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 f9df9d1113..5450b22f0c 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
@@ -8,6 +8,7 @@ import java.util.Set;
 
 import lcsb.mapviewer.model.Project;
 import lcsb.mapviewer.model.map.BioEntity;
+import lcsb.mapviewer.model.map.Drawable;
 import lcsb.mapviewer.model.map.MiriamData;
 import lcsb.mapviewer.model.map.compartment.Compartment;
 import lcsb.mapviewer.model.map.kinetics.SbmlArgument;
@@ -550,5 +551,5 @@ public interface Model {
 
   void addModificationDates(Collection<Calendar> modificationDatesFromRdf);
 
-
+  Set<Drawable> getDrawables();
 }
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 43480ff428..5487e7011d 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
@@ -15,6 +15,7 @@ import org.apache.log4j.Logger;
 import lcsb.mapviewer.common.exception.InvalidArgumentException;
 import lcsb.mapviewer.model.Project;
 import lcsb.mapviewer.model.map.BioEntity;
+import lcsb.mapviewer.model.map.Drawable;
 import lcsb.mapviewer.model.map.MiriamData;
 import lcsb.mapviewer.model.map.compartment.Compartment;
 import lcsb.mapviewer.model.map.kinetics.SbmlFunction;
@@ -717,4 +718,14 @@ public class ModelFullIndexed implements Model {
       addModificationDate(calendar);
     }
   }
+
+  @Override
+  public Set<Drawable> getDrawables() {
+    Set<Drawable> result = new HashSet<>();
+    result.addAll(getBioEntities());
+    for (Layer layer: getLayers()) {
+      result.addAll(layer.getDrawables());
+    }
+    return result;
+  }
 }
-- 
GitLab