diff --git a/src/main/java/DNPM/analyzer/TherapieplanAnalyzer.java b/src/main/java/DNPM/analyzer/TherapieplanAnalyzer.java index 1058137..97b491d 100644 --- a/src/main/java/DNPM/analyzer/TherapieplanAnalyzer.java +++ b/src/main/java/DNPM/analyzer/TherapieplanAnalyzer.java @@ -1,6 +1,8 @@ package DNPM.analyzer; import DNPM.services.FormService; +import DNPM.services.Studie; +import DNPM.services.StudienService; import de.itc.onkostar.api.Disease; import de.itc.onkostar.api.IOnkostarApi; import de.itc.onkostar.api.Item; @@ -13,6 +15,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; +import java.util.List; +import java.util.Map; import java.util.Objects; import java.util.Set; @@ -30,9 +34,12 @@ public class TherapieplanAnalyzer implements IProcedureAnalyzer { private final FormService formService; - public TherapieplanAnalyzer(final IOnkostarApi onkostarApi, final FormService formService) { + private final StudienService studienService; + + public TherapieplanAnalyzer(final IOnkostarApi onkostarApi, final FormService formService, final StudienService studienService) { this.onkostarApi = onkostarApi; this.formService = formService; + this.studienService = studienService; } @Override @@ -93,6 +100,33 @@ public class TherapieplanAnalyzer implements IProcedureAnalyzer { updateMtbInSubforms(procedure); } + + /** + * Übergibt alle Studien, deren (Kurz-)Beschreibung oder NCT-Nummer den übergebenen Eingabewert q enthält + * + *

Wurde der Eingabewert nicht angegeben oder ist leer, werden alle Studien übergeben. + * + *

Beispiel zur Nutzung in einem Formularscript + *

+     * executePluginMethod(
+     *   'TherapieplanAnalyzer',
+     *   'getStudien',
+     *   { q: 'NCT-12' },
+     *   (response) => console.log(response),
+     *   false
+     * );
+     * 
+ * @param input Map mit Eingabewerten + */ + public List getStudien(Map input) { + var query = input.get("q"); + + if (null == query || query.toString().isBlank()) { + return studienService.findAll(); + } + return studienService.findByQuery(query.toString()); + } + /** * Verlinke MTB und Übernahme Datum aus Hauptformular in weiteren Bereichen * "Humangenetische Beratung" und "Reevaluation", wenn erforderlich. diff --git a/src/main/java/DNPM/services/DefaultStudienService.java b/src/main/java/DNPM/services/DefaultStudienService.java index 99af071..8dbdb32 100644 --- a/src/main/java/DNPM/services/DefaultStudienService.java +++ b/src/main/java/DNPM/services/DefaultStudienService.java @@ -6,6 +6,11 @@ import org.springframework.stereotype.Service; import javax.sql.DataSource; import java.util.List; +/** + * Standardimplementierung zum Ermitteln von Studien + * + * @since 0.0.2 + */ @Service public class DefaultStudienService implements StudienService { @@ -38,11 +43,11 @@ public class DefaultStudienService implements StudienService { + "JOIN property_catalogue_version ON property_catalogue.id = property_catalogue_version.datacatalog_id " + "JOIN property_catalogue_version_entry pcve ON property_catalogue_version.id = pcve.property_version_id " + "LEFT JOIN studie ON pcve.id = studie.property_version_entry AND studie.aktiv " - + "WHERE property_catalogue.name = 'OS.Studien' AND (pcve.shortdesc LIKE ? OR pcve.description LIKE ?);"; + + "WHERE property_catalogue.name = 'OS.Studien' AND (pcve.shortdesc LIKE ? OR pcve.description LIKE ? OR studie.studien_nummer LIKE ?);"; var like = String.format("%%%s%%", query); - return this.jdbcTemplate.query(sql, new Object[]{like, like}, (resultSet, i) -> new Studie( + return this.jdbcTemplate.query(sql, new Object[]{like, like, like}, (resultSet, i) -> new Studie( resultSet.getString(1), resultSet.getString(2), resultSet.getString(3), diff --git a/src/main/java/DNPM/services/StudienService.java b/src/main/java/DNPM/services/StudienService.java index 0bac130..f6245de 100644 --- a/src/main/java/DNPM/services/StudienService.java +++ b/src/main/java/DNPM/services/StudienService.java @@ -4,8 +4,19 @@ import java.util.List; public interface StudienService { + /** + * Übergibt eine Liste mit allen Studien + * + * @return Liste mit allen Studien + */ List findAll(); + /** + * Übergibt eine Liste mit Studien, deren (Kurz-)Beschreibung oder Studiennummer den übergebenen Wert enthalten + * + * @param query Wert der enthalten sein muss + * @return Gefilterte Liste mit Studien + */ List findByQuery(String query); } diff --git a/src/test/java/DNPM/analyzer/TherapieplanAnalyzerTest.java b/src/test/java/DNPM/analyzer/TherapieplanAnalyzerTest.java index 57cc5b8..83d9d77 100644 --- a/src/test/java/DNPM/analyzer/TherapieplanAnalyzerTest.java +++ b/src/test/java/DNPM/analyzer/TherapieplanAnalyzerTest.java @@ -1,6 +1,7 @@ package DNPM.analyzer; import DNPM.services.FormService; +import DNPM.services.StudienService; import de.itc.onkostar.api.IOnkostarApi; import de.itc.onkostar.api.Item; import de.itc.onkostar.api.Procedure; @@ -8,11 +9,15 @@ import de.itc.onkostar.api.constants.JaNeinUnbekannt; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import java.util.Date; +import java.util.HashMap; +import java.util.Map; +import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.*; @@ -25,11 +30,14 @@ public class TherapieplanAnalyzerTest { @Mock private FormService formService; + @Mock + private StudienService studienService; + private TherapieplanAnalyzer therapieplanAnalyzer; @BeforeEach void setUp() { - this.therapieplanAnalyzer = new TherapieplanAnalyzer(onkostarApi, formService); + this.therapieplanAnalyzer = new TherapieplanAnalyzer(onkostarApi, formService, studienService); } @Test @@ -67,4 +75,30 @@ public class TherapieplanAnalyzerTest { verify(onkostarApi, never()).saveProcedure(any(Procedure.class), anyBoolean()); } + @Test + void shouldRequestAllStudienForEmptyQueryString() { + var input = Map.of("q", (Object)" "); + this.therapieplanAnalyzer.getStudien(input); + + verify(studienService, times(1)).findAll(); + } + + @Test + void shouldRequestAllStudienForEmptyInputMap() { + var input = new HashMap(); + this.therapieplanAnalyzer.getStudien(input); + + verify(studienService, times(1)).findAll(); + } + + @Test + void shouldRequestFilteredStudien() { + var input = Map.of("q", (Object)"NCT-123"); + this.therapieplanAnalyzer.getStudien(input); + + var captor = ArgumentCaptor.forClass(String.class); + verify(studienService, times(1)).findByQuery(captor.capture()); + assertThat(captor.getValue()).isEqualTo("NCT-123"); + } + }