diff --git a/li.strolch.model/src/main/java/li/strolch/model/Locator.java b/li.strolch.model/src/main/java/li/strolch/model/Locator.java index cf4f6de2d..d57c98d91 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/Locator.java +++ b/li.strolch.model/src/main/java/li/strolch/model/Locator.java @@ -226,7 +226,23 @@ public class Locator { * Returns true if the given locator's path elements is the beginning of this locator's path elements * * @param locator - * @return + * + * @return true if the given locator's path elements is the beginning of this locator's path elements + */ + public boolean isEqualOrChildOf(Locator locator) { + if (locator.pathElements.size() > this.pathElements.size()) + return false; + return this.pathElements.subList(0, locator.pathElements.size()).equals(locator.pathElements); + } + + /** + * Returns true if the given locator's path elements is the beginning of this locator's path elements, but not if + * they are the same, i.e. must be an actual child + * + * @param locator + * + * @return true if the given locator's path elements is the beginning of this locator's path elements, but not if + * they are the same, i.e. must be an actual child */ public boolean isChildOf(Locator locator) { if (locator.pathElements.size() >= this.pathElements.size()) diff --git a/li.strolch.model/src/test/java/li/strolch/model/LocatorTest.java b/li.strolch.model/src/test/java/li/strolch/model/LocatorTest.java index 5895a17dc..8e560a0cd 100644 --- a/li.strolch.model/src/test/java/li/strolch/model/LocatorTest.java +++ b/li.strolch.model/src/test/java/li/strolch/model/LocatorTest.java @@ -94,4 +94,39 @@ public class LocatorTest { Locator child = Locator.valueOf("Resource/MyType/@myObj"); assertFalse(child.isChildOf(parent)); } + + @Test + public void shouldBeEqualOrChild1() { + Locator parent = Locator.valueOf("Resource/MyType/@myObj"); + Locator child = Locator.valueOf("Resource/MyType/@myObj/Bags/@bag1/Parameters/@param1"); + assertTrue(child.isEqualOrChildOf(parent)); + } + + @Test + public void shouldBeEqualOrChild2() { + Locator parent = Locator.valueOf("Resource/MyType/@myObj"); + Locator child = Locator.valueOf("Resource/MyType/@myObj/Bags/"); + assertTrue(child.isEqualOrChildOf(parent)); + } + + @Test + public void shouldBeEqualOrChild3() { + Locator parent = Locator.valueOf("Resource/MyType/@myObj"); + Locator child = Locator.valueOf("Resource/MyType/@myObj"); + assertTrue(child.isEqualOrChildOf(parent)); + } + + @Test + public void shouldNotBeEqualOrChild1() { + Locator parent = Locator.valueOf("Resource/MyType/@myObj"); + Locator child = Locator.valueOf("Resource/OtherType/@myObj/Bags/"); + assertFalse(child.isEqualOrChildOf(parent)); + } + + @Test + public void shouldNotBeEqualOrChild2() { + Locator parent = Locator.valueOf("Resource/MyType/@myObj"); + Locator child = Locator.valueOf("Resource/MyType/@myObj1"); + assertFalse(child.isEqualOrChildOf(parent)); + } }