diff --git a/model/src/main/java/lcsb/mapviewer/model/map/model/AuthorComparator.java b/model/src/main/java/lcsb/mapviewer/model/map/model/AuthorComparator.java new file mode 100644 index 0000000000000000000000000000000000000000..0d9a5041c87718f0fd31bf857ff2725ef60efd77 --- /dev/null +++ b/model/src/main/java/lcsb/mapviewer/model/map/model/AuthorComparator.java @@ -0,0 +1,54 @@ +package lcsb.mapviewer.model.map.model; + +import org.apache.log4j.Logger; + +import lcsb.mapviewer.common.Comparator; +import lcsb.mapviewer.common.comparator.StringComparator; + +/** + * This class implements comparator interface for {@link Author}. + * + * @author Piotr Gawron + * + */ +public class AuthorComparator extends Comparator<Author> { + + /** + * Default class logger. + */ + private static Logger logger = Logger.getLogger(AuthorComparator.class); + + /** + * Default constructor. + */ + public AuthorComparator() { + super(Author.class); + } + + @Override + protected int internalCompare(Author arg0, Author arg1) { + StringComparator stringComparator = new StringComparator(); + int status = stringComparator.compare(arg0.getEmail(), arg1.getEmail()); + if (status != 0) { + logger.debug("email different: " + arg0.getEmail() + ", " + arg1.getEmail()); + return status; + } + status = stringComparator.compare(arg0.getFirstName(), arg1.getFirstName()); + if (status != 0) { + logger.debug("first name different: " + arg0.getFirstName() + ", " + arg1.getFirstName()); + return status; + } + status = stringComparator.compare(arg0.getLastName(), arg1.getLastName()); + if (status != 0) { + logger.debug("last name different: " + arg0.getLastName() + ", " + arg1.getLastName()); + return status; + } + status = stringComparator.compare(arg0.getOrganisation(), arg1.getOrganisation()); + if (status != 0) { + logger.debug("organisation different: " + arg0.getOrganisation() + ", " + arg1.getOrganisation()); + return status; + } + return 0; + } + +} diff --git a/model/src/main/java/lcsb/mapviewer/model/map/model/ModelComparator.java b/model/src/main/java/lcsb/mapviewer/model/map/model/ModelComparator.java index 8295ce7a1587454b694caa77a7aa99a76fe086f1..7f3e94ba4aa3226f5feca8ef16f4bd6c41a44148 100644 --- a/model/src/main/java/lcsb/mapviewer/model/map/model/ModelComparator.java +++ b/model/src/main/java/lcsb/mapviewer/model/map/model/ModelComparator.java @@ -161,6 +161,14 @@ public class ModelComparator extends Comparator<Model> { return status; } + SetComparator<Author> authorSetComparator = new SetComparator<>(new AuthorComparator()); + + status = authorSetComparator.compare(arg0.getAuthors(), arg1.getAuthors()); + if (status != 0) { + logger.debug("authors different"); + return status; + } + return 0; } diff --git a/model/src/test/java/lcsb/mapviewer/model/map/model/ModelComparatorTest.java b/model/src/test/java/lcsb/mapviewer/model/map/model/ModelComparatorTest.java index 878adb6632dc51e8a98e1667bd437468c509d746..7513748badb39df467eaa32a72455ec047d3a822 100644 --- a/model/src/test/java/lcsb/mapviewer/model/map/model/ModelComparatorTest.java +++ b/model/src/test/java/lcsb/mapviewer/model/map/model/ModelComparatorTest.java @@ -432,4 +432,21 @@ public class ModelComparatorTest { } } + @Test + public void testCompareAuthors() throws Exception { + try { + Model model1 = getModel(); + Model model2 = getModel(); + model1.addAuthor(new Author("x", "y")); + assertTrue("Models have different authors", comparator.compare(model1, model2) != 0); + assertTrue(comparator.compare(model2, model1) != 0); + model2.addAuthor(new Author(model1.getAuthors().iterator().next())); + assertEquals(0, comparator.compare(model1, model2)); + assertEquals(0, comparator.compare(model2, model1)); + } catch (Exception e) { + e.printStackTrace(); + throw e; + } + } + }