From 90e7c81594e417d29c2f2655d8ba6b5ddfa080b7 Mon Sep 17 00:00:00 2001 From: Abba Soungui YOUNOUSS Date: Tue, 4 Nov 2025 13:56:03 +0100 Subject: [PATCH] Override hashCode and equals methods of Entity. In order to make sure entities of same type, having the same name are equals, these two methods have been override to make sure that Sets contains only one object with a specific name. --- .../guacamole/ext/wallix/sync/db/Entity.java | 27 +++++- .../ext/wallix/sync/db/test/TestEntity.java | 84 +++++++++++++++++++ 2 files changed, 110 insertions(+), 1 deletion(-) create mode 100644 src/test/java/cm/soungui/guacamole/ext/wallix/sync/db/test/TestEntity.java diff --git a/src/main/java/cm/soungui/guacamole/ext/wallix/sync/db/Entity.java b/src/main/java/cm/soungui/guacamole/ext/wallix/sync/db/Entity.java index eab0f76..603f577 100644 --- a/src/main/java/cm/soungui/guacamole/ext/wallix/sync/db/Entity.java +++ b/src/main/java/cm/soungui/guacamole/ext/wallix/sync/db/Entity.java @@ -8,13 +8,16 @@ public class Entity { private String name; - public EntityType type; + private EntityType type; public int getId() { return id; } public void setId(int id) { + if (id < 0) { + throw new IllegalArgumentException("Id can't be null"); + } this.id = id; } @@ -33,5 +36,27 @@ public class Entity { public void setType(EntityType type) { this.type = type; } + + @Override + public int hashCode() { + return getName() == null ? super.hashCode() : getName().hashCode(); + } + + @Override + public boolean equals(Object obj) { + if(super.equals(obj)) { + return true; + } + if (obj instanceof Entity) { + Entity entity = (Entity) obj; + if (getType() != entity.getType()) { + return false; + } + + boolean namesAreTheSame = entity.getName() != null && getName() != null && getName().equals(entity.getName()); + return namesAreTheSame; + } + return false; + } } diff --git a/src/test/java/cm/soungui/guacamole/ext/wallix/sync/db/test/TestEntity.java b/src/test/java/cm/soungui/guacamole/ext/wallix/sync/db/test/TestEntity.java new file mode 100644 index 0000000..004a4df --- /dev/null +++ b/src/test/java/cm/soungui/guacamole/ext/wallix/sync/db/test/TestEntity.java @@ -0,0 +1,84 @@ +package cm.soungui.guacamole.ext.wallix.sync.db.test; + +import java.util.HashSet; +import java.util.Set; + +import cm.soungui.guacamole.ext.wallix.sync.db.Entity; +import cm.soungui.guacamole.ext.wallix.sync.db.User; +import cm.soungui.guacamole.ext.wallix.sync.db.UserGroup; +import junit.framework.TestCase; + +public class TestEntity extends TestCase { + + public final void testEqualsSameObject() { + User user1 = new User(); + + assertEquals(user1, user1); + } + + public final void testEqualsDifferentObject() { + User user1 = new User(); + User user2 = new User(); + + assertNotSame(user1, user2); + } + + public final void testEqualsSameName() { + User user1 = new User(); + user1.setName("name"); + User user2 = new User(); + user2.setName("name"); + + assertEquals(user1, user2); + } + + public final void testEqualsDifferentName() { + User user1 = new User(); + user1.setName("name"); + User user2 = new User(); + user2.setName("anotherName"); + + assertNotSame(user1, user2); + } + + public final void testEqualsDifferentType() { + User user1 = new User(); + user1.setName("name"); + UserGroup group = new UserGroup(); + group.setName("name"); + + assertNotSame(user1, group); + } + + public final void testAddDifferentNames() { + Set entities = new HashSet<>(); + + User user1 = new User(); + user1.setName("name"); + User user2 = new User(); + user2.setName("anotherName"); + + entities.add(user1); + entities.add(user2); + + assert(entities.size()==2); + } + + public final void testAddSameName() { + Set entities = new HashSet<>(); + + User user1 = new User(); + user1.setName("name"); + User user2 = new User(); + user2.setName("name"); + + entities.add(user1); + + assert(entities.contains(user2)); + + entities.add(user2); +// + assert(entities.size()==1); + } + +}