diff --git a/src/main/java/ATCCodes/AtcCode.java b/src/main/java/ATCCodes/AtcCode.java index e8bf9f1..deb1419 100644 --- a/src/main/java/ATCCodes/AtcCode.java +++ b/src/main/java/ATCCodes/AtcCode.java @@ -48,4 +48,15 @@ public class AtcCode implements AgentCode { public int hashCode() { return Objects.hash(code.toLowerCase(), name.toLowerCase()); } + + /** + * Prüft auf gültiges ATCCode-Schema ab Ebene 2 + * @param code Der zu prüfende Code + * @return Gibt true zurück, wenn der angegebene Code dem ATCCode-Schema entspricht + */ + public static boolean isAtcCode(String code) { + return null != code + && ! code.isBlank() + && code.matches("[ABCDGHJLMNPRSV][0-2][1-9]([A-Z]([A-Z]([0-9]{2})?)?)?"); + } } \ No newline at end of file diff --git a/src/main/java/ATCCodes/services/OnkostarAgentCodeService.java b/src/main/java/ATCCodes/services/OnkostarAgentCodeService.java index f29f074..e0c75f4 100644 --- a/src/main/java/ATCCodes/services/OnkostarAgentCodeService.java +++ b/src/main/java/ATCCodes/services/OnkostarAgentCodeService.java @@ -1,6 +1,7 @@ package ATCCodes.services; import ATCCodes.AgentCode; +import ATCCodes.AtcCode; import ATCCodes.UnregisteredCode; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Service; @@ -47,8 +48,14 @@ public class OnkostarAgentCodeService implements AgentCodeService { return jdbcTemplate.query( sql, new Object[]{query + "%", "%" + query + "%", "%" + query + "%"}, - (resultSet, i) -> - new UnregisteredCode(resultSet.getString("code"), resultSet.getString("shortdesc")) + (resultSet, i) -> { + var code = resultSet.getString("code"); + var shortdesc = resultSet.getString("shortdesc"); + if (AtcCode.isAtcCode(code)) { + return new AtcCode(code, shortdesc); + } + return new UnregisteredCode(code, shortdesc); + } ); } } \ No newline at end of file diff --git a/src/test/java/ATCCodes/AtcCodeTest.java b/src/test/java/ATCCodes/AtcCodeTest.java new file mode 100644 index 0000000..c00e499 --- /dev/null +++ b/src/test/java/ATCCodes/AtcCodeTest.java @@ -0,0 +1,28 @@ +package ATCCodes; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +public class AtcCodeTest { + + @Test + void testShouldDetectAtcCodeScheme() { + assertTrue(AtcCode.isAtcCode("L01")); + assertTrue(AtcCode.isAtcCode("L01A")); + assertTrue(AtcCode.isAtcCode("L01AA")); + assertTrue(AtcCode.isAtcCode("L01AA01")); + } + + @Test + void testShouldDetectInvalidAtcCodeScheme() { + assertFalse(AtcCode.isAtcCode(null)); + assertFalse(AtcCode.isAtcCode(" ")); + assertFalse(AtcCode.isAtcCode("irgendwas")); + assertFalse(AtcCode.isAtcCode("L00AA")); + assertFalse(AtcCode.isAtcCode("Z01AA")); + assertFalse(AtcCode.isAtcCode("L01AA0")); + } + +}