mirror of
https://github.com/pcvolkmer/onkostar-plugin-dnpm.git
synced 2025-07-03 01:32:55 +00:00
Klasse mit Hilfsfunktionen zum Prüfen und Ermitteln von Werten hinzugefügt
This commit is contained in:
@ -1,5 +1,6 @@
|
|||||||
package DNPM;
|
package DNPM;
|
||||||
|
|
||||||
|
import DNPM.analyzer.AnalyzerUtils;
|
||||||
import DNPM.services.systemtherapie.SystemtherapieService;
|
import DNPM.services.systemtherapie.SystemtherapieService;
|
||||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
@ -18,10 +19,7 @@ import org.hibernate.type.StandardBasicTypes;
|
|||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
public class DNPMHelper implements IProcedureAnalyzer {
|
public class DNPMHelper implements IProcedureAnalyzer {
|
||||||
|
|
||||||
@ -143,14 +141,13 @@ public class DNPMHelper implements IProcedureAnalyzer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public List<Map<String, String>> getSystemischeTherapienFromDiagnose(final Map<String, Object> input) {
|
public List<Map<String, String>> getSystemischeTherapienFromDiagnose(final Map<String, Object> input) {
|
||||||
var diagnoseId = input.get("DiagnoseId");
|
var diagnoseId = AnalyzerUtils.getRequiredId(input, "DiagnoseId");
|
||||||
|
if (diagnoseId.isEmpty()) {
|
||||||
if (null == diagnoseId || Integer.parseInt(diagnoseId.toString()) == 0) {
|
|
||||||
logger.error("Kein Parameter 'DiagnoseId' angegeben, gebe 'null' zurück");
|
logger.error("Kein Parameter 'DiagnoseId' angegeben, gebe 'null' zurück");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return systemtherapieService.getSystemischeTherapienFromDiagnose(Integer.parseInt(diagnoseId.toString()));
|
return systemtherapieService.getSystemischeTherapienFromDiagnose(diagnoseId.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
public Object getProzedurenFromDiagnose(final Map<String, Object> input) {
|
public Object getProzedurenFromDiagnose(final Map<String, Object> input) {
|
||||||
@ -189,9 +186,9 @@ public class DNPMHelper implements IProcedureAnalyzer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Object getEmpfehlung(final Map<String, Object> input) {
|
public Object getEmpfehlung(final Map<String, Object> input) {
|
||||||
var procedureID = input.get("ProcedureID");
|
var procedureID = AnalyzerUtils.getRequiredId(input, "ProcedureID");
|
||||||
|
|
||||||
if (null == procedureID || Integer.parseInt(procedureID.toString()) == 0) {
|
if (procedureID.isEmpty()) {
|
||||||
logger.error("Kein Parameter 'ProcedureID' angegeben, gebe 'null' zurück");
|
logger.error("Kein Parameter 'ProcedureID' angegeben, gebe 'null' zurück");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -202,7 +199,7 @@ public class DNPMHelper implements IProcedureAnalyzer {
|
|||||||
var sql = "SELECT prozedur.id, genname, geneid, geneidlink, empfehlung, beginndatum FROM prozedur "
|
var sql = "SELECT prozedur.id, genname, geneid, geneidlink, empfehlung, beginndatum FROM prozedur "
|
||||||
+ "LEFT JOIN dk_mtb_einzelempfehlung em ON em.id = prozedur.id "
|
+ "LEFT JOIN dk_mtb_einzelempfehlung em ON em.id = prozedur.id "
|
||||||
+ "JOIN data_form df ON prozedur.data_form_id = df.id AND df.name = 'MR.MTB_Einzelempfehlung' "
|
+ "JOIN data_form df ON prozedur.data_form_id = df.id AND df.name = 'MR.MTB_Einzelempfehlung' "
|
||||||
+ "WHERE prozedur.hauptprozedur_id = " + Integer.parseInt(procedureID.toString()) + " AND prozedur.geloescht = 0 "
|
+ "WHERE prozedur.hauptprozedur_id = " + procedureID.get() + " AND prozedur.geloescht = 0 "
|
||||||
+ "ORDER BY beginndatum";
|
+ "ORDER BY beginndatum";
|
||||||
|
|
||||||
SQLQuery query = session.createSQLQuery(sql)
|
SQLQuery query = session.createSQLQuery(sql)
|
||||||
@ -224,14 +221,14 @@ public class DNPMHelper implements IProcedureAnalyzer {
|
|||||||
|
|
||||||
public Object updateEmpfehlungPrio(final Map<String, Object> input) {
|
public Object updateEmpfehlungPrio(final Map<String, Object> input) {
|
||||||
// Auslesen und Prüfen der Parameter aus 'input'
|
// Auslesen und Prüfen der Parameter aus 'input'
|
||||||
var rid = input.get("rid");
|
var rid = AnalyzerUtils.getRequiredId(input, "rid");
|
||||||
if (null == rid || Integer.parseInt(rid.toString()) == 0) {
|
if (rid.isEmpty()) {
|
||||||
logger.error("Kein Parameter 'rid' angegeben, gebe 'false' zurück");
|
logger.error("Kein Parameter 'rid' angegeben, gebe 'false' zurück");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
var strDate = input.get("bd");
|
var strDate = AnalyzerUtils.getRequiredValueMatching(input, "bd", "[\\d]{4}-[\\d]{2}-[\\d]{2}");
|
||||||
if (null == strDate || !strDate.toString().matches("[\\d]{4}-[\\d]{2}-[\\d]{2}")) {
|
if (strDate.isEmpty()) {
|
||||||
logger.error("Kein oder ungültiger Parameter 'bd' angegeben, gebe 'false' zurück");
|
logger.error("Kein oder ungültiger Parameter 'bd' angegeben, gebe 'false' zurück");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -241,7 +238,7 @@ public class DNPMHelper implements IProcedureAnalyzer {
|
|||||||
//DateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd");
|
//DateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd");
|
||||||
|
|
||||||
try {
|
try {
|
||||||
String sql = "UPDATE prozedur SET beginndatum = '" + strDate + "' WHERE id = '" + rid + "' ";
|
String sql = "UPDATE prozedur SET beginndatum = '" + strDate.get() + "' WHERE id = '" + rid.get() + "' ";
|
||||||
SQLQuery result = onkostarApi.getSessionFactory().getCurrentSession().createSQLQuery(sql);
|
SQLQuery result = onkostarApi.getSessionFactory().getCurrentSession().createSQLQuery(sql);
|
||||||
result.executeUpdate();
|
result.executeUpdate();
|
||||||
return true;
|
return true;
|
||||||
|
143
src/main/java/DNPM/analyzer/AnalyzerUtils.java
Normal file
143
src/main/java/DNPM/analyzer/AnalyzerUtils.java
Normal file
@ -0,0 +1,143 @@
|
|||||||
|
package DNPM.analyzer;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Klasse mit Hilfsfunktionen für Analyzer
|
||||||
|
*
|
||||||
|
* @since 0.1.0
|
||||||
|
*/
|
||||||
|
public class AnalyzerUtils {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prüft, ob ein Optional mit Wert, wenn in InputMap ein Eintrag mit key <code>key</code> und Typ <code>type</code>
|
||||||
|
* gefunden wurde.
|
||||||
|
*
|
||||||
|
* @param input InputMap
|
||||||
|
* @param key Key des Werts
|
||||||
|
* @param type Typ des Werts
|
||||||
|
* @return <code>true</code>>, wenn ein Wert von dem Typ gefunden wurde
|
||||||
|
*/
|
||||||
|
public static boolean requiredValuePresent(final Map<String, Object> input, final String key, final Class<?> type) {
|
||||||
|
var value = input.get(key);
|
||||||
|
|
||||||
|
if (null == value) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return type.isInstance(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Übergibt ein Optional mit Wert, wenn in InputMap ein Eintrag mit key <code>key</code> und Typ <code>type</code>
|
||||||
|
* gefunden wurde. Anderenfalls ein leeres Optional
|
||||||
|
*
|
||||||
|
* <p><b>Beispiel</b>
|
||||||
|
* <pre>
|
||||||
|
* var id = AnalyzerUtils.getRequiredValue(input, "id", Integer.class);
|
||||||
|
* if (id.isEmpty()) {
|
||||||
|
* logger.error("Keine ID angegeben!");
|
||||||
|
* return false;
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* var idNummer = id.get();
|
||||||
|
* ...
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* @param input InputMap
|
||||||
|
* @param key Key des Werts
|
||||||
|
* @param type Typ des Werts
|
||||||
|
* @return Optional mit entsprechendem Wert oder leeres Optional
|
||||||
|
*/
|
||||||
|
public static <T> Optional<T> getRequiredValue(final Map<String, Object> input, final String key, final Class<T> type) {
|
||||||
|
if (! requiredValuePresent(input, key, type)) {
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
var result = Optional.of((T)input.get(key));
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prüft, ob ein Wert als Zeichenkette dem angegebenen RegExp entspricht
|
||||||
|
*
|
||||||
|
* @param input InputMap
|
||||||
|
* @param key Key des Werts
|
||||||
|
* @param regexp Der zu prüfende reguläre Ausdruck
|
||||||
|
* @return <code>true</code>>, wenn ein Wert gefunden wurde, der dem RegExp entspricht
|
||||||
|
*/
|
||||||
|
public static boolean requiredValueMatches(final Map<String, Object> input, final String key, final String regexp) {
|
||||||
|
var value = input.get(key);
|
||||||
|
|
||||||
|
if (null == value) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return value.toString().matches(regexp);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Übergibt ein Optional mit dem Wert als Zeichenkette, wenn er dem angegebenen RegExp entspricht.
|
||||||
|
* Hierzu wird die Methode <code>toString()</code> auf den Wert angewendet.
|
||||||
|
*
|
||||||
|
* @param input InputMap
|
||||||
|
* @param key Key des Werts
|
||||||
|
* @param regexp Der zu prüfende reguläre Ausdruck
|
||||||
|
* @return Optional mit entsprechendem Wert als Zeichenkette oder leeres Optional
|
||||||
|
*/
|
||||||
|
public static Optional<String> getRequiredValueMatching(final Map<String, Object> input, final String key, final String regexp) {
|
||||||
|
if (! requiredValueMatches(input, key, regexp)) {
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
|
|
||||||
|
return Optional.of(input.get(key).toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prüft, ob ein Wert eine ID ist und damit eine Zahl größer Null ist.
|
||||||
|
*
|
||||||
|
* @param input InputMap
|
||||||
|
* @param key Key des Werts
|
||||||
|
* @return <code>true</code>>, wenn ein Wert gefunden wurde, der dem RegExp entspricht
|
||||||
|
*/
|
||||||
|
public static boolean requiredValueIsId(final Map<String, Object> input, final String key) {
|
||||||
|
return requiredValuePresent(input, key, Integer.class) && Integer.valueOf(input.get(key).toString()) > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Übergibt ein Optional, wenn der Wert eine ID ist und damit eine Zahl größer Null ist.
|
||||||
|
* <p><b>Beispiel</b>
|
||||||
|
* <pre>
|
||||||
|
* var id = AnalyzerUtils.getRequiredId(input, "id");
|
||||||
|
* if (id.isEmpty()) {
|
||||||
|
* logger.error("Keine gültige ID angegeben!");
|
||||||
|
* return false;
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* // Ist hier immer größer als Null
|
||||||
|
* var idNummer = id.get();
|
||||||
|
* ...
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* @param input InputMap
|
||||||
|
* @param key Key des Werts
|
||||||
|
* @return Optional mit entsprechendem Wert oder leeres Optional
|
||||||
|
*/
|
||||||
|
public static Optional<Integer> getRequiredId(final Map<String, Object> input, final String key) {
|
||||||
|
if (! requiredValuePresent(input, key, Integer.class)) {
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
|
|
||||||
|
var id = (int)input.get(key);
|
||||||
|
|
||||||
|
if (id > 0) {
|
||||||
|
return Optional.of(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
137
src/test/java/DNPM/analyzer/AnalyzerUtilsTest.java
Normal file
137
src/test/java/DNPM/analyzer/AnalyzerUtilsTest.java
Normal file
@ -0,0 +1,137 @@
|
|||||||
|
package DNPM.analyzer;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.junit.jupiter.params.ParameterizedTest;
|
||||||
|
import org.junit.jupiter.params.provider.MethodSource;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
public class AnalyzerUtilsTest {
|
||||||
|
|
||||||
|
private final Map<String, Object> input = Map.of("value1", 1, "valueA", "A", "valueTrue", true);
|
||||||
|
|
||||||
|
private static Set<TestTypeData> testTypeData() {
|
||||||
|
return Set.of(
|
||||||
|
new TestTypeData("value1", Integer.class).withExpectedResult(true),
|
||||||
|
new TestTypeData("valueA", String.class).withExpectedResult(true),
|
||||||
|
new TestTypeData("valueTrue", Boolean.class).withExpectedResult(true),
|
||||||
|
|
||||||
|
new TestTypeData("value1", String.class).withExpectedResult(false),
|
||||||
|
new TestTypeData("valueA", Boolean.class).withExpectedResult(false),
|
||||||
|
new TestTypeData("valueTrue", Integer.class).withExpectedResult(false),
|
||||||
|
|
||||||
|
new TestTypeData("value1", Boolean.class).withExpectedResult(false),
|
||||||
|
new TestTypeData("valueA", Integer.class).withExpectedResult(false),
|
||||||
|
new TestTypeData("valueTrue", String.class).withExpectedResult(false)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ParameterizedTest
|
||||||
|
@MethodSource("testTypeData")
|
||||||
|
void testShouldReturnExpectedResultForTypedCheck(TestTypeData testData) {
|
||||||
|
var actual = AnalyzerUtils.requiredValuePresent(input, testData.key, testData.type);
|
||||||
|
assertThat(actual).isEqualTo(testData.result);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Set<TestMatchData> testMatchData() {
|
||||||
|
return Set.of(
|
||||||
|
new TestMatchData("value1", "[\\d]").withExpectedResult(true),
|
||||||
|
new TestMatchData("valueA", "[A-Z]").withExpectedResult(true),
|
||||||
|
|
||||||
|
new TestMatchData("value1", "[A-Z]").withExpectedResult(false),
|
||||||
|
new TestMatchData("valueA", "[a-z]").withExpectedResult(false),
|
||||||
|
new TestMatchData("valueA", "[\\d]").withExpectedResult(false)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ParameterizedTest
|
||||||
|
@MethodSource("testMatchData")
|
||||||
|
void testShouldReturnExpectedResultForMatchCheck(TestMatchData testData) {
|
||||||
|
var actual = AnalyzerUtils.requiredValueMatches(input, testData.key, testData.regexp);
|
||||||
|
assertThat(actual).isEqualTo(testData.result);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testShouldCheckIfInputValueIsIdNumber() {
|
||||||
|
assertThat(AnalyzerUtils.requiredValueIsId(Map.of("value", 0), "value")).isFalse();
|
||||||
|
assertThat(AnalyzerUtils.requiredValueIsId(Map.of("value", "ABC"), "value")).isFalse();
|
||||||
|
assertThat(AnalyzerUtils.requiredValueIsId(Map.of("value", 1234), "value")).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testShouldReturnInputValueAsOptional() {
|
||||||
|
assertThat(AnalyzerUtils.getRequiredValue(Map.of("value", 1234), "value", Integer.class)).isEqualTo(Optional.of(1234));
|
||||||
|
assertThat(AnalyzerUtils.getRequiredValue(Map.of("value", "ABC"), "value", String.class)).isEqualTo(Optional.of("ABC"));
|
||||||
|
|
||||||
|
assertThat(AnalyzerUtils.getRequiredValue(Map.of("value", 1234), "value1", Integer.class)).isEmpty();
|
||||||
|
assertThat(AnalyzerUtils.getRequiredValue(Map.of("value", "ABC"), "value1", String.class)).isEmpty();
|
||||||
|
assertThat(AnalyzerUtils.getRequiredValue(Map.of("value", 1234), "value", String.class)).isEmpty();
|
||||||
|
assertThat(AnalyzerUtils.getRequiredValue(Map.of("value", "ABC"), "value", Boolean.class)).isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testShouldReturnInputIdAsOptional() {
|
||||||
|
assertThat(AnalyzerUtils.getRequiredId(Map.of("value", 1234), "value")).isEqualTo(Optional.of(1234));
|
||||||
|
|
||||||
|
assertThat(AnalyzerUtils.getRequiredId(Map.of("value", 1234), "value1")).isEmpty();
|
||||||
|
assertThat(AnalyzerUtils.getRequiredId(Map.of("value", "ABC"), "value")).isEmpty();
|
||||||
|
assertThat(AnalyzerUtils.getRequiredId(Map.of("value", 0), "value")).isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testShouldReturnInputValueMatchingAsOptional() {
|
||||||
|
assertThat(AnalyzerUtils.getRequiredValueMatching(Map.of("value", 1234), "value", "[\\d]+")).isEqualTo(Optional.of("1234"));
|
||||||
|
assertThat(AnalyzerUtils.getRequiredValueMatching(Map.of("value", "ABC"), "value", "[A-Z]+")).isEqualTo(Optional.of("ABC"));
|
||||||
|
|
||||||
|
assertThat(AnalyzerUtils.getRequiredValueMatching(Map.of("value", "ABC"), "value1", "[A-Z]+")).isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class TestTypeData {
|
||||||
|
public final String key;
|
||||||
|
public final Class<?> type;
|
||||||
|
|
||||||
|
public boolean result;
|
||||||
|
|
||||||
|
public TestTypeData(String key, Class<?> type) {
|
||||||
|
this.key = key;
|
||||||
|
this.type = type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public TestTypeData withExpectedResult(boolean result) {
|
||||||
|
this.result = result;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return String.format("key: '%s', type: %s, result: %s", key, type.getSimpleName(), result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class TestMatchData {
|
||||||
|
public final String key;
|
||||||
|
public final String regexp;
|
||||||
|
|
||||||
|
public boolean result;
|
||||||
|
|
||||||
|
public TestMatchData(String key, String regexp) {
|
||||||
|
this.key = key;
|
||||||
|
this.regexp = regexp;
|
||||||
|
}
|
||||||
|
|
||||||
|
public TestMatchData withExpectedResult(boolean result) {
|
||||||
|
this.result = result;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return String.format("key: '%s', regexp: '%s', result: %s", key, regexp, result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Reference in New Issue
Block a user