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");
+ }
+
}