diff --git a/src/main/java/org/hisp/dhis/model/OrgUnit.java b/src/main/java/org/hisp/dhis/model/OrgUnit.java index b8d67905..c64c4b11 100644 --- a/src/main/java/org/hisp/dhis/model/OrgUnit.java +++ b/src/main/java/org/hisp/dhis/model/OrgUnit.java @@ -92,4 +92,13 @@ public OrgUnit(String id, String name, String shortName, OrgUnit parent, Date op public DimensionItemType getDimensionItemType() { return DimensionItemType.ORGANISATION_UNIT; } + + /** + * Indicates whether this org unit has a parent. + * + * @return true if this org unit has a parent, false otherwise. + */ + public boolean hasParent() { + return parent != null; + } } diff --git a/src/main/java/org/hisp/dhis/util/UidUtils.java b/src/main/java/org/hisp/dhis/util/UidUtils.java index f24f1758..fa000053 100644 --- a/src/main/java/org/hisp/dhis/util/UidUtils.java +++ b/src/main/java/org/hisp/dhis/util/UidUtils.java @@ -78,13 +78,29 @@ public static List generateUids(int n) { } /** - * Tests whether the given code is a valid UID. + * Tests whether the given input is a valid UID. * - * @param code the code to validate. + * @param input the input to validate. * @return true if the code is valid. */ - public static boolean isValidUid(String code) { - return code != null && UID_PATTERN.matcher(code).matches(); + public static boolean isValidUid(String input) { + return input != null && UID_PATTERN.matcher(input).matches(); + } + + /** + * Tests whether the given input is a valid UID. Throws an {@link IllegalArgumentException} if + * not. + * + * @param input the input to validate. + * @return the input UID if valid. + * @throws IllegalArgumentException if input is not a valid UID. + */ + public static String requireUid(String input) { + if (!isValidUid(input)) { + String message = String.format("Input must be a valid UID: '%s'", input); + throw new IllegalArgumentException(message); + } + return input; } /** diff --git a/src/test/java/org/hisp/dhis/BaseDhis2Test.java b/src/test/java/org/hisp/dhis/BaseDhis2Test.java index bf991e53..1b20104f 100644 --- a/src/test/java/org/hisp/dhis/BaseDhis2Test.java +++ b/src/test/java/org/hisp/dhis/BaseDhis2Test.java @@ -104,11 +104,11 @@ void testWithMetadataImportParams() throws Exception { URI expected = new URI( """ - https://server.org/api/metadata\ - ?importStrategy=CREATE_AND_UPDATE\ - &atomicMode=ALL\ - &skipSharing=false\ - &async=false"""); + https://server.org/api/metadata\ + ?importStrategy=CREATE_AND_UPDATE\ + &atomicMode=ALL\ + &skipSharing=false\ + &async=false"""); assertEquals(expected, dhis2.withMetadataImportParams(uriBuilder)); } diff --git a/src/test/java/org/hisp/dhis/util/UidUtilsTest.java b/src/test/java/org/hisp/dhis/util/UidUtilsTest.java index be311d03..de9e81d9 100644 --- a/src/test/java/org/hisp/dhis/util/UidUtilsTest.java +++ b/src/test/java/org/hisp/dhis/util/UidUtilsTest.java @@ -31,6 +31,7 @@ import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.stream.IntStream; @@ -64,6 +65,15 @@ void testUidIsValid() { assertFalse(UidUtils.isValidUid("1T1hdS_WjfD")); } + @Test + void testRequireUid() { + assertEquals("mq4jAnN6fg3", UidUtils.requireUid("mq4jAnN6fg3")); + assertEquals("iz9HDQXFDrQ", UidUtils.requireUid("iz9HDQXFDrQ")); + + assertThrows(IllegalArgumentException.class, () -> UidUtils.requireUid("1T1hdSWjfDC")); + assertThrows(IllegalArgumentException.class, () -> UidUtils.requireUid("QX4LpiTZmUHg")); + } + @Test void testToUid() { assertToUid("PpZ!m3thN#sm8QVcOdwTcil4");