From ffca982e4820b718245d5f5d89a6695315298fa9 Mon Sep 17 00:00:00 2001 From: Piotr Gawron <p.gawron@atcomp.pl> Date: Fri, 14 Mar 2025 10:39:04 +0100 Subject: [PATCH] make sure that immediate links are copied and tested properly --- .../mapviewer/model/map/species/Element.java | 1 + .../model/map/species/ElementComparator.java | 80 +++++++++---------- .../map/species/ElementComparatorTest.java | 20 +++++ .../model/map/species/ElementTest.java | 42 +++++----- 4 files changed, 79 insertions(+), 64 deletions(-) diff --git a/model/src/main/java/lcsb/mapviewer/model/map/species/Element.java b/model/src/main/java/lcsb/mapviewer/model/map/species/Element.java index cb649f940f..7858e94c4a 100644 --- a/model/src/main/java/lcsb/mapviewer/model/map/species/Element.java +++ b/model/src/main/java/lcsb/mapviewer/model/map/species/Element.java @@ -366,6 +366,7 @@ public abstract class Element implements BioEntity, MinervaEntity, SbmlArgument setGlyph(new Glyph(original.getGlyph())); } setBorderColor(original.getBorderColor()); + setImmediateLink(original.getImmediateLink()); } /** 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 b5bf17b05a..72997425c9 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 @@ -1,8 +1,5 @@ package lcsb.mapviewer.model.map.species; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; - import lcsb.mapviewer.common.Comparator; import lcsb.mapviewer.common.Configuration; import lcsb.mapviewer.common.comparator.ColorComparator; @@ -21,26 +18,20 @@ import lcsb.mapviewer.model.map.model.ElementSubmodelConnectionComparator; /** * Comparator class used for comparing {@link Element} objects. - * - * @author Piotr Gawron * + * @author Piotr Gawron */ public class ElementComparator extends Comparator<Element> { - /** - * Default class logger. - */ - private static Logger logger = LogManager.getLogger(); /** * Epsilon value used for comparison of doubles. */ - private double epsilon; + private final double epsilon; /** * Constructor that requires {@link #epsilon} parameter. - * - * @param epsilon - * {@link #epsilon} + * + * @param epsilon {@link #epsilon} */ public ElementComparator(final double epsilon) { super(Element.class, true); @@ -74,97 +65,97 @@ public class ElementComparator extends Comparator<Element> { DoubleComparator doubleComparator = new DoubleComparator(epsilon); if (stringComparator.compare(arg0.getElementId(), arg1.getElementId()) != 0) { - logger.debug("ElementId different: " + arg0.getElementId() + ", " + arg1.getElementId()); + logger.debug("ElementId different: {}, {}", arg0.getElementId(), arg1.getElementId()); return stringComparator.compare(arg0.getElementId(), arg1.getElementId()); } if (doubleComparator.compare(arg0.getX(), arg1.getX()) != 0) { - logger.debug("X different: " + arg0.getX() + ", " + arg1.getX()); + logger.debug("X different: {}, {}", arg0.getX(), arg1.getX()); return doubleComparator.compare(arg0.getX(), arg1.getX()); } if (doubleComparator.compare(arg0.getY(), arg1.getY()) != 0) { - logger.debug("Y different: " + arg0.getY() + ", " + arg1.getY()); + logger.debug("Y different: {}, {}", arg0.getY(), arg1.getY()); 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()); + 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()); + logger.debug("Width different: {}, {}", arg0.getWidth(), arg1.getWidth()); return doubleComparator.compare(arg0.getWidth(), arg1.getWidth()); } if (doubleComparator.compare(arg0.getHeight(), arg1.getHeight()) != 0) { - logger.debug("Height different: " + arg0.getHeight() + ", " + arg1.getHeight()); + logger.debug("Height different: {}, {}", arg0.getHeight(), arg1.getHeight()); return doubleComparator.compare(arg0.getHeight(), arg1.getHeight()); } if (doubleComparator.compare(arg0.getFontSize(), arg1.getFontSize()) != 0) { - logger.debug("Font size different: " + arg0.getFontSize() + ", " + arg1.getFontSize()); + logger.debug("Font size different: {}, {}", arg0.getFontSize(), arg1.getFontSize()); return doubleComparator.compare(arg0.getFontSize(), arg1.getFontSize()); } if (stringComparator.compare(arg0.getVisibilityLevel(), arg1.getVisibilityLevel()) != 0) { - logger.debug("Visibility level different: " + arg0.getVisibilityLevel() + ", " + arg1.getVisibilityLevel()); + logger.debug("Visibility level different: {}, {}", arg0.getVisibilityLevel(), arg1.getVisibilityLevel()); return stringComparator.compare(arg0.getVisibilityLevel(), arg1.getVisibilityLevel()); } if (colorComparator.compare(arg0.getFillColor(), arg1.getFillColor()) != 0) { - logger.debug("Fill color different: " + arg0.getFillColor() + ", " + arg1.getFillColor()); + logger.debug("Fill color different: {}, {}", arg0.getFillColor(), arg1.getFillColor()); return colorComparator.compare(arg0.getFillColor(), arg1.getFillColor()); } if (colorComparator.compare(arg0.getBorderColor(), arg1.getBorderColor()) != 0) { - logger.debug("Border color different: " + arg0.getBorderColor() + ", " + arg1.getBorderColor()); + logger.debug("Border color different: {}, {}", arg0.getBorderColor(), arg1.getBorderColor()); return colorComparator.compare(arg0.getBorderColor(), arg1.getBorderColor()); } if (colorComparator.compare(arg0.getFontColor(), arg1.getFontColor()) != 0) { - logger.debug("Font color different: " + arg0.getFontColor() + ", " + arg1.getFontColor()); + logger.debug("Font color different: {}, {}", arg0.getFontColor(), arg1.getFontColor()); return colorComparator.compare(arg0.getFontColor(), arg1.getFontColor()); } // this should be somehow modified, because it can create a situation where // comparison will fall into infinite loop (in cyclic submodels) - ElementSubmodelConnectionComparator ascc = new ElementSubmodelConnectionComparator(epsilon); - int status = ascc.compare(arg0.getSubmodel(), arg1.getSubmodel()); + ElementSubmodelConnectionComparator connectionComparator = new ElementSubmodelConnectionComparator(epsilon); + int status = connectionComparator.compare(arg0.getSubmodel(), arg1.getSubmodel()); if (status != 0) { - logger.debug("Element submodel different: " + arg0.getSubmodel() + ", " + arg1.getSubmodel()); + logger.debug("Element submodel different: {}, {}", arg0.getSubmodel(), arg1.getSubmodel()); return status; } if (stringComparator.compare(arg0.getName(), arg1.getName()) != 0) { - logger.debug("Name different: " + arg0.getName() + ", " + arg1.getName()); + logger.debug("Name different: {}, {}", arg0.getName(), arg1.getName()); return stringComparator.compare(arg0.getName(), arg1.getName()); } if (stringComparator.compare(arg0.getNotes(), arg1.getNotes(), true) != 0) { - logger.debug("notes different: \n\"" + arg0.getNotes() + "\"\n\"" + arg1.getNotes() + "\""); + logger.debug("notes different: \n\"{}\"\n\"{}\"", arg0.getNotes(), arg1.getNotes()); return stringComparator.compare(arg0.getNotes(), arg1.getNotes()); } if (stringComparator.compare(arg0.getSymbol(), arg1.getSymbol()) != 0) { - logger.debug("symbol different: \"" + arg0.getSymbol() + "\", \"" + arg1.getSymbol() + "\""); + logger.debug("symbol different: \"{}\", \"{}\"", arg0.getSymbol(), arg1.getSymbol()); return stringComparator.compare(arg0.getSymbol(), arg1.getSymbol()); } if (stringComparator.compare(arg0.getFullName(), arg1.getFullName()) != 0) { - logger.debug("full name different: \"" + arg0.getFullName() + "\", \"" + arg1.getFullName() + "\""); + logger.debug("full name different: \"{}\", \"{}\"", arg0.getFullName(), arg1.getFullName()); return stringComparator.compare(arg0.getFullName(), arg1.getFullName()); } if (stringComparator.compare(arg0.getAbbreviation(), arg1.getAbbreviation()) != 0) { - logger.debug("Abbreviation different: \"" + arg0.getAbbreviation() + "\", \"" + arg1.getAbbreviation() + "\""); + logger.debug("Abbreviation different: \"{}\", \"{}\"", arg0.getAbbreviation(), arg1.getAbbreviation()); return stringComparator.compare(arg0.getAbbreviation(), arg1.getAbbreviation()); } if (stringComparator.compare(arg0.getFormula(), arg1.getFormula()) != 0) { - logger.debug("formula different: \"" + arg0.getFormula() + "\", \"" + arg1.getFormula() + "\""); + logger.debug("formula different: \"{}\", \"{}\"", arg0.getFormula(), arg1.getFormula()); return stringComparator.compare(arg0.getFormula(), arg1.getFormula()); } @@ -184,46 +175,47 @@ public class ElementComparator extends Comparator<Element> { status = miriamDataSetComparator.compare(arg0.getMiriamData(), arg1.getMiriamData()); if (status != 0) { - logger.debug("miriam data different"); - logger.debug(arg0.getMiriamData()); - logger.debug(arg1.getMiriamData()); + logger.debug("miriam data different:\n{}\n{}", arg0.getMiriamData(), arg1.getMiriamData()); return status; } if (doubleComparator.compare(arg0.getNameX(), arg1.getNameX()) != 0) { - logger.debug("NameX different: " + arg0.getNameX() + ", " + arg1.getNameX()); + logger.debug("NameX different: {}, {}", arg0.getNameX(), arg1.getNameX()); return doubleComparator.compare(arg0.getNameX(), arg1.getNameX()); } if (doubleComparator.compare(arg0.getNameY(), arg1.getNameY()) != 0) { - logger.debug("NameY different: " + arg0.getNameY() + ", " + arg1.getNameY()); + logger.debug("NameY different: {}, {}", arg0.getNameY(), arg1.getNameY()); return doubleComparator.compare(arg0.getNameY(), arg1.getNameY()); } if (doubleComparator.compare(arg0.getNameWidth(), arg1.getNameWidth()) != 0) { - logger.debug("NameWidth different: " + arg0.getNameWidth() + ", " + arg1.getNameWidth()); + logger.debug("NameWidth different: {}, {}", arg0.getNameWidth(), arg1.getNameWidth()); return doubleComparator.compare(arg0.getNameWidth(), arg1.getNameWidth()); } if (doubleComparator.compare(arg0.getNameHeight(), arg1.getNameHeight()) != 0) { - logger.debug("NameHeight different: " + arg0.getNameHeight() + ", " + arg1.getNameHeight()); + logger.debug("NameHeight different: {}, {}", arg0.getNameHeight(), arg1.getNameHeight()); return doubleComparator.compare(arg0.getNameHeight(), arg1.getNameHeight()); } EnumComparator<VerticalAlign> verticalAlignComparator = new EnumComparator<>(); if (verticalAlignComparator.compare(arg0.getNameVerticalAlign(), arg1.getNameVerticalAlign()) != 0) { - logger.debug("Name vertical alignment different: " + arg0.getNameVerticalAlign() + ", " - + arg1.getNameVerticalAlign()); + logger.debug("Name vertical alignment different: {}, {}", arg0.getNameVerticalAlign(), arg1.getNameVerticalAlign()); return verticalAlignComparator.compare(arg0.getNameVerticalAlign(), arg1.getNameVerticalAlign()); } EnumComparator<HorizontalAlign> horizontalAlignComparator = new EnumComparator<>(); if (horizontalAlignComparator.compare(arg0.getNameHorizontalAlign(), arg1.getNameHorizontalAlign()) != 0) { - logger.debug("Name horizontal alignment different: " + arg0.getNameHorizontalAlign() + ", " - + arg1.getNameHorizontalAlign()); + logger.debug("Name horizontal alignment different: {}, {}", arg0.getNameHorizontalAlign(), arg1.getNameHorizontalAlign()); return horizontalAlignComparator.compare(arg0.getNameHorizontalAlign(), arg1.getNameHorizontalAlign()); } + if (stringComparator.compare(arg0.getImmediateLink(), arg1.getImmediateLink()) != 0) { + logger.debug("Immediate link different: {}, {}", arg0.getImmediateLink(), arg1.getImmediateLink()); + return stringComparator.compare(arg0.getImmediateLink(), arg1.getImmediateLink()); + } + return 0; } 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 4c8e741187..b6408a09ad 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 @@ -307,4 +307,24 @@ public class ElementComparatorTest extends ModelTestFunctions { assertEquals(0, comparator.compare(species2, species1)); } + @Test + public void testCompareImmediateLink() throws Exception { + SimpleMolecule species1 = createSimpleMolecule(); + SimpleMolecule species2 = new SimpleMolecule(species1); + + species1.setImmediateLink(faker.internet().url()); + assertTrue(comparator.compare(species1, species2) != 0); + assertTrue(comparator.compare(species2, species1) != 0); + + species1 = createSimpleMolecule(); + species2 = createSimpleMolecule(); + + species1.setImmediateLink(faker.internet().url()); + species2.setImmediateLink(species1.getImmediateLink()); + + assertEquals(0, comparator.compare(species1, species2)); + assertEquals(0, comparator.compare(species2, species1)); + + } + } diff --git a/model/src/test/java/lcsb/mapviewer/model/map/species/ElementTest.java b/model/src/test/java/lcsb/mapviewer/model/map/species/ElementTest.java index 1a5e038d82..2bab07e314 100644 --- a/model/src/test/java/lcsb/mapviewer/model/map/species/ElementTest.java +++ b/model/src/test/java/lcsb/mapviewer/model/map/species/ElementTest.java @@ -1,22 +1,5 @@ package lcsb.mapviewer.model.map.species; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; - -import java.awt.geom.Point2D; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.mockito.Mockito; - import lcsb.mapviewer.ModelTestFunctions; import lcsb.mapviewer.common.Configuration; import lcsb.mapviewer.common.exception.InvalidArgumentException; @@ -30,10 +13,27 @@ import lcsb.mapviewer.model.map.model.ElementSubmodelConnection; import lcsb.mapviewer.model.map.model.Model; import lcsb.mapviewer.model.map.model.ModelData; import lcsb.mapviewer.model.map.model.ModelFullIndexed; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mockito; + +import java.awt.geom.Point2D; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; public class ElementTest extends ModelTestFunctions { - private static double EPSILON = Configuration.EPSILON; + private static final double EPSILON = Configuration.EPSILON; @Before public void setUp() throws Exception { @@ -103,9 +103,11 @@ public class ElementTest extends ModelTestFunctions { GenericProtein protein = new GenericProtein(); protein.setId(-17); protein.setSubmodel(new ElementSubmodelConnection()); + protein.setImmediateLink(faker.internet().url()); Element copy = new GenericProtein(protein); assertNotNull(copy); assertEquals(protein.getId(), copy.getId()); + assertEquals(protein.getImmediateLink(), copy.getImmediateLink()); } @Test @@ -350,7 +352,7 @@ public class ElementTest extends ModelTestFunctions { synonyms = new ArrayList<>(); synonyms.add(syn); element.addSynonyms(synonyms); - assertFalse(syn.equals(element.getSynonyms().get(1))); + assertNotEquals(syn, element.getSynonyms().get(1)); } @Test @@ -369,7 +371,7 @@ public class ElementTest extends ModelTestFunctions { formerSymbols = new ArrayList<>(); formerSymbols.add(syn); element.addFormerSymbols(formerSymbols); - assertFalse(syn.equals(element.getFormerSymbols().get(1))); + assertNotEquals(syn, element.getFormerSymbols().get(1)); } } -- GitLab