1
0
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:
2023-03-28 13:33:12 +02:00
parent 9b44e3660a
commit cd07078df3
3 changed files with 293 additions and 16 deletions

View File

@ -1,5 +1,6 @@
package DNPM;
import DNPM.analyzer.AnalyzerUtils;
import DNPM.services.systemtherapie.SystemtherapieService;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
@ -18,10 +19,7 @@ import org.hibernate.type.StandardBasicTypes;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
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) {
var diagnoseId = input.get("DiagnoseId");
if (null == diagnoseId || Integer.parseInt(diagnoseId.toString()) == 0) {
var diagnoseId = AnalyzerUtils.getRequiredId(input, "DiagnoseId");
if (diagnoseId.isEmpty()) {
logger.error("Kein Parameter 'DiagnoseId' angegeben, gebe 'null' zurück");
return null;
}
return systemtherapieService.getSystemischeTherapienFromDiagnose(Integer.parseInt(diagnoseId.toString()));
return systemtherapieService.getSystemischeTherapienFromDiagnose(diagnoseId.get());
}
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) {
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");
return null;
}
@ -202,7 +199,7 @@ public class DNPMHelper implements IProcedureAnalyzer {
var sql = "SELECT prozedur.id, genname, geneid, geneidlink, empfehlung, beginndatum FROM prozedur "
+ "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' "
+ "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";
SQLQuery query = session.createSQLQuery(sql)
@ -224,14 +221,14 @@ public class DNPMHelper implements IProcedureAnalyzer {
public Object updateEmpfehlungPrio(final Map<String, Object> input) {
// Auslesen und Prüfen der Parameter aus 'input'
var rid = input.get("rid");
if (null == rid || Integer.parseInt(rid.toString()) == 0) {
var rid = AnalyzerUtils.getRequiredId(input, "rid");
if (rid.isEmpty()) {
logger.error("Kein Parameter 'rid' angegeben, gebe 'false' zurück");
return false;
}
var strDate = input.get("bd");
if (null == strDate || !strDate.toString().matches("[\\d]{4}-[\\d]{2}-[\\d]{2}")) {
var strDate = AnalyzerUtils.getRequiredValueMatching(input, "bd", "[\\d]{4}-[\\d]{2}-[\\d]{2}");
if (strDate.isEmpty()) {
logger.error("Kein oder ungültiger Parameter 'bd' angegeben, gebe 'false' zurück");
return false;
}
@ -241,7 +238,7 @@ public class DNPMHelper implements IProcedureAnalyzer {
//DateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd");
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);
result.executeUpdate();
return true;

View 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();
}
}

View 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);
}
}
}