From 40db452e54ccfc7ae5fa2d44d7417f2c2bbfaa95 Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Fri, 3 May 2019 19:26:30 +0200
Subject: [PATCH] comparator checks z-index

---
 .../lcsb/mapviewer/common/Comparator.java     |  5 ++-
 .../common/comparator/IntegerComparator.java  | 26 +++++++-------
 .../model/map/species/ElementComparator.java  |  8 +++++
 .../map/species/ElementComparatorTest.java    | 34 +++++++++++++++++++
 4 files changed, 59 insertions(+), 14 deletions(-)

diff --git a/commons/src/main/java/lcsb/mapviewer/common/Comparator.java b/commons/src/main/java/lcsb/mapviewer/common/Comparator.java
index ed0446f401..474bf8ce7f 100644
--- a/commons/src/main/java/lcsb/mapviewer/common/Comparator.java
+++ b/commons/src/main/java/lcsb/mapviewer/common/Comparator.java
@@ -8,7 +8,10 @@ import org.apache.log4j.Logger;
 import lcsb.mapviewer.common.exception.NotImplementedException;
 
 public abstract class Comparator<T extends Object> implements java.util.Comparator<T> {
-  Logger logger = Logger.getLogger(Comparator.class);
+  /**
+   * Default class logger.
+   */
+  private static Logger logger = Logger.getLogger(Comparator.class);
   private Class<T> comparatorClazz;
   private boolean exactClassMatch;
   private List<Comparator<? extends T>> subClassComparatorList = new ArrayList<>();
diff --git a/commons/src/main/java/lcsb/mapviewer/common/comparator/IntegerComparator.java b/commons/src/main/java/lcsb/mapviewer/common/comparator/IntegerComparator.java
index 5ae981421a..793a591aa4 100644
--- a/commons/src/main/java/lcsb/mapviewer/common/comparator/IntegerComparator.java
+++ b/commons/src/main/java/lcsb/mapviewer/common/comparator/IntegerComparator.java
@@ -10,18 +10,18 @@ import java.util.Comparator;
  */
 public class IntegerComparator implements Comparator<Integer> {
 
-	@Override
-	public int compare(Integer arg0, Integer arg1) {
-		if (arg0 == null) {
-			if (arg1 == null) {
-				return 0;
-			} else {
-				return 1;
-			}
-		} else if (arg1 == null) {
-			return -1;
-		}
-		return arg0.compareTo(arg1);
-	}
+  @Override
+  public int compare(Integer arg0, Integer arg1) {
+    if (arg0 == null) {
+      if (arg1 == null) {
+        return 0;
+      } else {
+        return 1;
+      }
+    } else if (arg1 == null) {
+      return -1;
+    }
+    return arg0.compareTo(arg1);
+  }
 
 }
diff --git a/model/src/main/java/lcsb/mapviewer/model/map/species/ElementComparator.java b/model/src/main/java/lcsb/mapviewer/model/map/species/ElementComparator.java
index e02724a703..bed6b9ef4f 100644
--- a/model/src/main/java/lcsb/mapviewer/model/map/species/ElementComparator.java
+++ b/model/src/main/java/lcsb/mapviewer/model/map/species/ElementComparator.java
@@ -6,6 +6,7 @@ import lcsb.mapviewer.common.Comparator;
 import lcsb.mapviewer.common.Configuration;
 import lcsb.mapviewer.common.comparator.ColorComparator;
 import lcsb.mapviewer.common.comparator.DoubleComparator;
+import lcsb.mapviewer.common.comparator.IntegerComparator;
 import lcsb.mapviewer.common.comparator.SetComparator;
 import lcsb.mapviewer.common.comparator.StringComparator;
 import lcsb.mapviewer.common.comparator.StringListComparator;
@@ -83,6 +84,13 @@ public class ElementComparator extends Comparator<Element> {
       return doubleComparator.compare(arg0.getY(), arg1.getY());
     }
 
+    IntegerComparator integerComparator = new IntegerComparator();
+    if (integerComparator.compare(arg0.getZ(), arg1.getZ()) != 0) {
+      logger.debug("Z-index different: " + arg0.getZ() + ", " + arg1.getZ());
+      return integerComparator.compare(arg0.getZ(), arg1.getZ());
+    }
+
+
     if (doubleComparator.compare(arg0.getWidth(), arg1.getWidth()) != 0) {
       logger.debug("Width different: " + arg0.getWidth() + ", " + arg1.getWidth());
       return doubleComparator.compare(arg0.getWidth(), arg1.getWidth());
diff --git a/model/src/test/java/lcsb/mapviewer/model/map/species/ElementComparatorTest.java b/model/src/test/java/lcsb/mapviewer/model/map/species/ElementComparatorTest.java
index b4bc5fde03..43c37006a9 100644
--- a/model/src/test/java/lcsb/mapviewer/model/map/species/ElementComparatorTest.java
+++ b/model/src/test/java/lcsb/mapviewer/model/map/species/ElementComparatorTest.java
@@ -318,4 +318,38 @@ public class ElementComparatorTest {
     }
   }
 
+  @Test
+  public void testCompareZIndex() throws Exception {
+    try {
+      SimpleMolecule species1 = createSimpleMolecule();
+      SimpleMolecule species2 = createSimpleMolecule();
+
+      species1.setZ(12);
+      assertTrue(comparator.compare(species1, species2) != 0);
+      assertTrue(comparator.compare(species2, species1) != 0);
+
+      species1 = createSimpleMolecule();
+      species2 = createSimpleMolecule();
+
+      species1.setZ(12);
+      species2.setZ(13);
+
+      assertTrue(comparator.compare(species1, species2) != 0);
+      assertTrue(comparator.compare(species2, species1) != 0);
+
+      species1 = createSimpleMolecule();
+      species2 = createSimpleMolecule();
+
+      species1.setZ(12);
+      species2.setZ(12);
+
+      assertEquals(0, comparator.compare(species1, species2));
+      assertEquals(0, comparator.compare(species2, species1));
+
+    } catch (Exception e) {
+      e.printStackTrace();
+      throw e;
+    }
+  }
+
 }
-- 
GitLab