summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul-Christian Volkmer2023-03-14 11:45:59 +0100
committerPaul-Christian Volkmer2023-03-14 11:45:59 +0100
commite10c7fba2d7f5358c12b90308f68b84269d1a0c5 (patch)
tree3b233da10eca0e06c428cba91f4ed39231300150
parentdfd0bcead45259e8fe317d54e7eeaa8d1f3b79fe (diff)
Issue #9: Entspricht der Code aus OS dem ATC-Schema, verwende Substanz als ATCCode
-rw-r--r--src/main/java/ATCCodes/AtcCode.java11
-rw-r--r--src/main/java/ATCCodes/services/OnkostarAgentCodeService.java11
-rw-r--r--src/test/java/ATCCodes/AtcCodeTest.java28
3 files changed, 48 insertions, 2 deletions
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 <code>true</code> 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"));
+ }
+
+}