mirror of
https://github.com/pcvolkmer/onkostar-plugin-dnpm.git
synced 2025-07-03 09:42:54 +00:00
Issue #4: Backend-Service-Methode zum Abfragen von Studien hinzugefügt
This commit is contained in:
@ -1,6 +1,8 @@
|
|||||||
package DNPM.analyzer;
|
package DNPM.analyzer;
|
||||||
|
|
||||||
import DNPM.services.FormService;
|
import DNPM.services.FormService;
|
||||||
|
import DNPM.services.Studie;
|
||||||
|
import DNPM.services.StudienService;
|
||||||
import de.itc.onkostar.api.Disease;
|
import de.itc.onkostar.api.Disease;
|
||||||
import de.itc.onkostar.api.IOnkostarApi;
|
import de.itc.onkostar.api.IOnkostarApi;
|
||||||
import de.itc.onkostar.api.Item;
|
import de.itc.onkostar.api.Item;
|
||||||
@ -13,6 +15,8 @@ import org.slf4j.Logger;
|
|||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
@ -30,9 +34,12 @@ public class TherapieplanAnalyzer implements IProcedureAnalyzer {
|
|||||||
|
|
||||||
private final FormService formService;
|
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.onkostarApi = onkostarApi;
|
||||||
this.formService = formService;
|
this.formService = formService;
|
||||||
|
this.studienService = studienService;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -93,6 +100,33 @@ public class TherapieplanAnalyzer implements IProcedureAnalyzer {
|
|||||||
updateMtbInSubforms(procedure);
|
updateMtbInSubforms(procedure);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Übergibt alle Studien, deren (Kurz-)Beschreibung oder NCT-Nummer den übergebenen Eingabewert <code>q</code> enthält
|
||||||
|
*
|
||||||
|
* <p>Wurde der Eingabewert nicht angegeben oder ist leer, werden alle Studien übergeben.
|
||||||
|
*
|
||||||
|
* <p>Beispiel zur Nutzung in einem Formularscript
|
||||||
|
* <pre>
|
||||||
|
* executePluginMethod(
|
||||||
|
* 'TherapieplanAnalyzer',
|
||||||
|
* 'getStudien',
|
||||||
|
* { q: 'NCT-12' },
|
||||||
|
* (response) => console.log(response),
|
||||||
|
* false
|
||||||
|
* );
|
||||||
|
* </pre>
|
||||||
|
* @param input Map mit Eingabewerten
|
||||||
|
*/
|
||||||
|
public List<Studie> getStudien(Map<String, Object> 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
|
* Verlinke MTB und Übernahme Datum aus Hauptformular in weiteren Bereichen
|
||||||
* "Humangenetische Beratung" und "Reevaluation", wenn erforderlich.
|
* "Humangenetische Beratung" und "Reevaluation", wenn erforderlich.
|
||||||
|
@ -6,6 +6,11 @@ import org.springframework.stereotype.Service;
|
|||||||
import javax.sql.DataSource;
|
import javax.sql.DataSource;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Standardimplementierung zum Ermitteln von Studien
|
||||||
|
*
|
||||||
|
* @since 0.0.2
|
||||||
|
*/
|
||||||
@Service
|
@Service
|
||||||
public class DefaultStudienService implements StudienService {
|
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 ON property_catalogue.id = property_catalogue_version.datacatalog_id "
|
||||||
+ "JOIN property_catalogue_version_entry pcve ON property_catalogue_version.id = pcve.property_version_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 "
|
+ "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);
|
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(1),
|
||||||
resultSet.getString(2),
|
resultSet.getString(2),
|
||||||
resultSet.getString(3),
|
resultSet.getString(3),
|
||||||
|
@ -4,8 +4,19 @@ import java.util.List;
|
|||||||
|
|
||||||
public interface StudienService {
|
public interface StudienService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Übergibt eine Liste mit allen Studien
|
||||||
|
*
|
||||||
|
* @return Liste mit allen Studien
|
||||||
|
*/
|
||||||
List<Studie> findAll();
|
List<Studie> 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<Studie> findByQuery(String query);
|
List<Studie> findByQuery(String query);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package DNPM.analyzer;
|
package DNPM.analyzer;
|
||||||
|
|
||||||
import DNPM.services.FormService;
|
import DNPM.services.FormService;
|
||||||
|
import DNPM.services.StudienService;
|
||||||
import de.itc.onkostar.api.IOnkostarApi;
|
import de.itc.onkostar.api.IOnkostarApi;
|
||||||
import de.itc.onkostar.api.Item;
|
import de.itc.onkostar.api.Item;
|
||||||
import de.itc.onkostar.api.Procedure;
|
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.BeforeEach;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.junit.jupiter.api.extension.ExtendWith;
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
|
import org.mockito.ArgumentCaptor;
|
||||||
import org.mockito.Mock;
|
import org.mockito.Mock;
|
||||||
import org.mockito.junit.jupiter.MockitoExtension;
|
import org.mockito.junit.jupiter.MockitoExtension;
|
||||||
|
|
||||||
import java.util.Date;
|
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.ArgumentMatchers.anyString;
|
||||||
import static org.mockito.Mockito.*;
|
import static org.mockito.Mockito.*;
|
||||||
|
|
||||||
@ -25,11 +30,14 @@ public class TherapieplanAnalyzerTest {
|
|||||||
@Mock
|
@Mock
|
||||||
private FormService formService;
|
private FormService formService;
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private StudienService studienService;
|
||||||
|
|
||||||
private TherapieplanAnalyzer therapieplanAnalyzer;
|
private TherapieplanAnalyzer therapieplanAnalyzer;
|
||||||
|
|
||||||
@BeforeEach
|
@BeforeEach
|
||||||
void setUp() {
|
void setUp() {
|
||||||
this.therapieplanAnalyzer = new TherapieplanAnalyzer(onkostarApi, formService);
|
this.therapieplanAnalyzer = new TherapieplanAnalyzer(onkostarApi, formService, studienService);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -67,4 +75,30 @@ public class TherapieplanAnalyzerTest {
|
|||||||
verify(onkostarApi, never()).saveProcedure(any(Procedure.class), anyBoolean());
|
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<String, Object>();
|
||||||
|
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");
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user