From 3515a9bc7a43e907c178285dd04ac36daa55e9a5 Mon Sep 17 00:00:00 2001 From: Piotr Gawron <piotr.gawron@uni.lu> Date: Tue, 19 Mar 2019 09:25:58 +0100 Subject: [PATCH] miriam data comparator implemented --- .../model/map/MiriamDataComparator.java | 40 +++++++++++++++++ .../map/reaction/ReactionComparator.java | 27 +++++------ .../model/map/species/ElementComparator.java | 45 ++++--------------- .../map/reaction/ReactionComparatorTest.java | 14 ++++++ 4 files changed, 73 insertions(+), 53 deletions(-) create mode 100644 model/src/main/java/lcsb/mapviewer/model/map/MiriamDataComparator.java diff --git a/model/src/main/java/lcsb/mapviewer/model/map/MiriamDataComparator.java b/model/src/main/java/lcsb/mapviewer/model/map/MiriamDataComparator.java new file mode 100644 index 0000000000..d4a5240ea1 --- /dev/null +++ b/model/src/main/java/lcsb/mapviewer/model/map/MiriamDataComparator.java @@ -0,0 +1,40 @@ +package lcsb.mapviewer.model.map; + +import lcsb.mapviewer.common.Comparator; +import lcsb.mapviewer.common.comparator.StringComparator; + +/** + * Comparator of {@link MiriamData} object. + * + * @author Piotr Gawron + * + */ +public class MiriamDataComparator extends Comparator<MiriamData> { + + /** + * Default constructor. + */ + public MiriamDataComparator() { + super(MiriamData.class); + } + + @Override + protected int internalCompare(MiriamData arg0, MiriamData arg1) { + StringComparator stringComparator = new StringComparator(); + if (stringComparator.compare(arg0.getResource(), arg1.getResource()) != 0) { + return stringComparator.compare(arg0.getResource(), arg1.getResource()); + } + if (arg0.getDataType() != arg1.getDataType()) { + return -1; + } + if (arg0.getRelationType() != arg1.getRelationType()) { + return -1; + } + if (arg0.getAnnotator() != arg1.getAnnotator()) { + return -1; + } + + return 0; + } + +} diff --git a/model/src/main/java/lcsb/mapviewer/model/map/reaction/ReactionComparator.java b/model/src/main/java/lcsb/mapviewer/model/map/reaction/ReactionComparator.java index 2bb9e00ea2..91900fa4e9 100644 --- a/model/src/main/java/lcsb/mapviewer/model/map/reaction/ReactionComparator.java +++ b/model/src/main/java/lcsb/mapviewer/model/map/reaction/ReactionComparator.java @@ -10,10 +10,12 @@ import lcsb.mapviewer.common.Configuration; import lcsb.mapviewer.common.comparator.BooleanComparator; 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; import lcsb.mapviewer.common.comparator.StringSetComparator; import lcsb.mapviewer.model.map.MiriamData; +import lcsb.mapviewer.model.map.MiriamDataComparator; import lcsb.mapviewer.model.map.kinetics.SbmlKineticsComparator; /** @@ -129,23 +131,14 @@ public class ReactionComparator extends Comparator<Reaction> { return stringListComparator.compare(arg0.getSynonyms(), arg1.getSynonyms()); } - Set<String> hashCode1 = new HashSet<String>(); - Set<String> hashCode2 = new HashSet<String>(); + SetComparator<MiriamData> miriamDataSetComparator = new SetComparator<>(new MiriamDataComparator()); - for (MiriamData md : arg0.getMiriamData()) { - String hash = md.getRelationType() + " " + md.getDataType() + " " + md.getResource(); - hashCode1.add(hash); - } - - for (MiriamData md : arg1.getMiriamData()) { - String hash = md.getRelationType() + " " + md.getDataType() + " " + md.getResource(); - hashCode2.add(hash); - } - - StringSetComparator stringSetComparator = new StringSetComparator(); - if (stringSetComparator.compare(hashCode1, hashCode2) != 0) { - logger.debug("Miriam dataset different"); - return stringSetComparator.compare(hashCode1, hashCode2); + int status = miriamDataSetComparator.compare(arg0.getMiriamData(), arg1.getMiriamData()); + if (status != 0) { + logger.debug("miriam data different"); + logger.debug(arg0.getMiriamData()); + logger.debug(arg1.getMiriamData()); + return status; } if (arg0.getNodes().size() != arg1.getNodes().size()) { @@ -155,7 +148,7 @@ public class ReactionComparator extends Comparator<Reaction> { for (int i = 0; i < arg0.getNodes().size(); i++) { AbstractNode node0 = arg0.getNodes().get(i); - int status = -1; + status = -1; for (int j = 0; j < arg1.getNodes().size(); j++) { int tmpStatus = aNodeComparator.compare(node0, arg1.getNodes().get(j)); if (tmpStatus == 0) { 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 aef04ac56d..e02724a703 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,18 +1,16 @@ package lcsb.mapviewer.model.map.species; -import java.util.HashSet; -import java.util.Set; - import org.apache.log4j.Logger; 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.SetComparator; import lcsb.mapviewer.common.comparator.StringComparator; import lcsb.mapviewer.common.comparator.StringListComparator; -import lcsb.mapviewer.common.comparator.StringSetComparator; import lcsb.mapviewer.model.map.MiriamData; +import lcsb.mapviewer.model.map.MiriamDataComparator; import lcsb.mapviewer.model.map.compartment.CompartmentComparator; import lcsb.mapviewer.model.map.model.ElementSubmodelConnectionComparator; @@ -149,7 +147,6 @@ public class ElementComparator extends Comparator<Element> { return stringComparator.compare(arg0.getFormula(), arg1.getFormula()); } - StringSetComparator stringSetComparator = new StringSetComparator(); StringListComparator stringListComparator = new StringListComparator(); if (stringListComparator.compare(arg0.getSynonyms(), arg1.getSynonyms()) != 0) { @@ -162,38 +159,14 @@ public class ElementComparator extends Comparator<Element> { return stringListComparator.compare(arg0.getFormerSymbols(), arg1.getFormerSymbols()); } - Set<String> hashCode1 = new HashSet<>(); - Set<String> hashCode2 = new HashSet<>(); - - if (arg0.getMiriamData().size() != arg1.getMiriamData().size()) { - logger.debug( - "different number of annotations: " + arg0.getMiriamData().size() + ", " + arg1.getMiriamData().size()); - return ((Integer) arg0.getMiriamData().size()).compareTo(arg1.getMiriamData().size()); - } - - for (MiriamData md : arg0.getMiriamData()) { - String hash = md.getRelationType() + " " + md.getDataType() + " " + md.getResource(); - hashCode1.add(hash); - } - - for (MiriamData md : arg1.getMiriamData()) { - String hash = md.getRelationType() + " " + md.getDataType() + " " + md.getResource(); - hashCode2.add(hash); - } - - if (stringSetComparator.compare(hashCode1, hashCode2) != 0) { - logger.debug("different annotations: "); - logger.debug("A:"); - for (String string : hashCode1) { - logger.debug("|" + string + "|"); - } - logger.debug("B:"); - for (String string : hashCode2) { - logger.debug("|" + string + "|"); - } - logger.debug("--"); - return stringSetComparator.compare(hashCode1, hashCode2); + SetComparator<MiriamData> miriamDataSetComparator = new SetComparator<>(new MiriamDataComparator()); + status = miriamDataSetComparator.compare(arg0.getMiriamData(), arg1.getMiriamData()); + if (status != 0) { + logger.debug("miriam data different"); + logger.debug(arg0.getMiriamData()); + logger.debug(arg1.getMiriamData()); + return status; } return 0; diff --git a/model/src/test/java/lcsb/mapviewer/model/map/reaction/ReactionComparatorTest.java b/model/src/test/java/lcsb/mapviewer/model/map/reaction/ReactionComparatorTest.java index 271edc6538..689f253e07 100644 --- a/model/src/test/java/lcsb/mapviewer/model/map/reaction/ReactionComparatorTest.java +++ b/model/src/test/java/lcsb/mapviewer/model/map/reaction/ReactionComparatorTest.java @@ -295,4 +295,18 @@ public class ReactionComparatorTest { assertTrue(comparator.compare(reaction1, reaction2) != 0); assertTrue(comparator.compare(reaction2, reaction1) != 0); } + + @Test + public void testDifferentMiriamData() { + Reaction reaction1 = createReaction(); + Reaction reaction2 = createReaction(); + + reaction1.addMiriamData(new MiriamData(MiriamType.HGNC, "SNCA")); + assertTrue(comparator.compare(reaction1, reaction2) != 0); + assertTrue(comparator.compare(reaction2, reaction1) != 0); + + reaction2.addMiriamData(new MiriamData(MiriamType.HGNC, "SNCA")); + assertEquals(0, comparator.compare(reaction1, reaction2)); + assertEquals(0, comparator.compare(reaction2, reaction1)); + } } -- GitLab