mirror of
https://github.com/pcvolkmer/onkostar-plugin-dnpm.git
synced 2025-07-03 17:52:53 +00:00
Verwende Factory, damit OS-API nicht beim Starten Einstellungen abrufen muss
Beim Start kann OS ggf nicht auf die Einstellungen zurückgreifen, da die Datenbankverbindung noch nicht fertig initialisiert ist. Aus diesem Grund muss die konkrete Implementierung des TherapieplanService zur Laufzeit nach dem vollständigen Start von OS ermittelt werden.
This commit is contained in:
@ -2,7 +2,7 @@ package DNPM.analyzer;
|
|||||||
|
|
||||||
import DNPM.services.Studie;
|
import DNPM.services.Studie;
|
||||||
import DNPM.services.StudienService;
|
import DNPM.services.StudienService;
|
||||||
import DNPM.services.TherapieplanService;
|
import DNPM.services.TherapieplanServiceFactory;
|
||||||
import de.itc.onkostar.api.Disease;
|
import de.itc.onkostar.api.Disease;
|
||||||
import de.itc.onkostar.api.Procedure;
|
import de.itc.onkostar.api.Procedure;
|
||||||
import de.itc.onkostar.api.analysis.AnalyseTriggerEvent;
|
import de.itc.onkostar.api.analysis.AnalyseTriggerEvent;
|
||||||
@ -25,14 +25,14 @@ public class TherapieplanAnalyzer implements IProcedureAnalyzer {
|
|||||||
|
|
||||||
private final StudienService studienService;
|
private final StudienService studienService;
|
||||||
|
|
||||||
private final TherapieplanService therapieplanService;
|
private final TherapieplanServiceFactory therapieplanServiceFactory;
|
||||||
|
|
||||||
public TherapieplanAnalyzer(
|
public TherapieplanAnalyzer(
|
||||||
final StudienService studienService,
|
final StudienService studienService,
|
||||||
final TherapieplanService therapieplanService
|
final TherapieplanServiceFactory therapieplanServiceFactory
|
||||||
) {
|
) {
|
||||||
this.studienService = studienService;
|
this.studienService = studienService;
|
||||||
this.therapieplanService = therapieplanService;
|
this.therapieplanServiceFactory = therapieplanServiceFactory;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -89,7 +89,7 @@ public class TherapieplanAnalyzer implements IProcedureAnalyzer {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void analyze(Procedure procedure, Disease disease) {
|
public void analyze(Procedure procedure, Disease disease) {
|
||||||
therapieplanService.updateRequiredMtbEntries(procedure);
|
therapieplanServiceFactory.currentUsableinstance().updateRequiredMtbEntries(procedure);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -108,6 +108,7 @@ public class TherapieplanAnalyzer implements IProcedureAnalyzer {
|
|||||||
* false
|
* false
|
||||||
* );
|
* );
|
||||||
* </pre>
|
* </pre>
|
||||||
|
*
|
||||||
* @param input Map mit Eingabewerten
|
* @param input Map mit Eingabewerten
|
||||||
*/
|
*/
|
||||||
public List<Studie> getStudien(Map<String, Object> input) {
|
public List<Studie> getStudien(Map<String, Object> input) {
|
||||||
|
@ -28,15 +28,8 @@ public class PluginConfiguration {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public TherapieplanService therapieplanService(final IOnkostarApi onkostarApi, final FormService formService) {
|
public TherapieplanServiceFactory therapieplanServiceFactory(final IOnkostarApi onkostarApi, final FormService formService) {
|
||||||
if (
|
return new TherapieplanServiceFactory(onkostarApi, formService);
|
||||||
null != onkostarApi.getGlobalSetting("mehrere_mtb_in_mtbepisode")
|
|
||||||
&& onkostarApi.getGlobalSetting("mehrere_mtb_in_mtbepisode").equals("true")
|
|
||||||
) {
|
|
||||||
return new MultipleMtbTherapieplanService();
|
|
||||||
}
|
|
||||||
|
|
||||||
return new DefaultTherapieplanService(onkostarApi, formService);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
27
src/main/java/DNPM/services/TherapieplanServiceFactory.java
Normal file
27
src/main/java/DNPM/services/TherapieplanServiceFactory.java
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
package DNPM.services;
|
||||||
|
|
||||||
|
import de.itc.onkostar.api.IOnkostarApi;
|
||||||
|
|
||||||
|
public class TherapieplanServiceFactory {
|
||||||
|
|
||||||
|
private final IOnkostarApi onkostarApi;
|
||||||
|
|
||||||
|
private final FormService formService;
|
||||||
|
|
||||||
|
public TherapieplanServiceFactory(IOnkostarApi onkostarApi, FormService formService) {
|
||||||
|
this.onkostarApi = onkostarApi;
|
||||||
|
this.formService = formService;
|
||||||
|
}
|
||||||
|
|
||||||
|
public TherapieplanService currentUsableinstance() {
|
||||||
|
if (
|
||||||
|
null != onkostarApi.getGlobalSetting("mehrere_mtb_in_mtbepisode")
|
||||||
|
&& onkostarApi.getGlobalSetting("mehrere_mtb_in_mtbepisode").equals("true")
|
||||||
|
) {
|
||||||
|
return new MultipleMtbTherapieplanService();
|
||||||
|
}
|
||||||
|
|
||||||
|
return new DefaultTherapieplanService(onkostarApi, formService);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,7 +1,8 @@
|
|||||||
package DNPM.analyzer;
|
package DNPM.analyzer;
|
||||||
|
|
||||||
|
import DNPM.services.MultipleMtbTherapieplanService;
|
||||||
import DNPM.services.StudienService;
|
import DNPM.services.StudienService;
|
||||||
import DNPM.services.TherapieplanService;
|
import DNPM.services.TherapieplanServiceFactory;
|
||||||
import de.itc.onkostar.api.IOnkostarApi;
|
import de.itc.onkostar.api.IOnkostarApi;
|
||||||
import de.itc.onkostar.api.Procedure;
|
import de.itc.onkostar.api.Procedure;
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
@ -15,9 +16,7 @@ import java.util.HashMap;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
import static org.mockito.Mockito.*;
|
||||||
import static org.mockito.Mockito.times;
|
|
||||||
import static org.mockito.Mockito.verify;
|
|
||||||
|
|
||||||
@ExtendWith(MockitoExtension.class)
|
@ExtendWith(MockitoExtension.class)
|
||||||
public class TherapieplanAnalyzerTest {
|
public class TherapieplanAnalyzerTest {
|
||||||
@ -29,25 +28,27 @@ public class TherapieplanAnalyzerTest {
|
|||||||
private StudienService studienService;
|
private StudienService studienService;
|
||||||
|
|
||||||
@Mock
|
@Mock
|
||||||
private TherapieplanService therapieplanService;
|
private TherapieplanServiceFactory therapieplanServiceFactory;
|
||||||
|
|
||||||
private TherapieplanAnalyzer therapieplanAnalyzer;
|
private TherapieplanAnalyzer therapieplanAnalyzer;
|
||||||
|
|
||||||
@BeforeEach
|
@BeforeEach
|
||||||
void setUp() {
|
void setUp() {
|
||||||
this.therapieplanAnalyzer = new TherapieplanAnalyzer(studienService, therapieplanService);
|
this.therapieplanAnalyzer = new TherapieplanAnalyzer(studienService, therapieplanServiceFactory);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void shouldRunServiceMethodsOnAnalyzeCalled() {
|
void shouldRunServiceMethodsOnAnalyzeCalled() {
|
||||||
|
when(this.therapieplanServiceFactory.currentUsableinstance()).thenReturn(new MultipleMtbTherapieplanService());
|
||||||
|
|
||||||
this.therapieplanAnalyzer.analyze(new Procedure(onkostarApi), null);
|
this.therapieplanAnalyzer.analyze(new Procedure(onkostarApi), null);
|
||||||
|
|
||||||
verify(this.therapieplanService, times(1)).updateRequiredMtbEntries(any(Procedure.class));
|
verify(this.therapieplanServiceFactory, times(1)).currentUsableinstance();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void shouldRequestAllStudienForEmptyQueryString() {
|
void shouldRequestAllStudienForEmptyQueryString() {
|
||||||
var input = Map.of("q", (Object)" ");
|
var input = Map.of("q", (Object) " ");
|
||||||
this.therapieplanAnalyzer.getStudien(input);
|
this.therapieplanAnalyzer.getStudien(input);
|
||||||
|
|
||||||
verify(studienService, times(1)).findAll();
|
verify(studienService, times(1)).findAll();
|
||||||
@ -63,7 +64,7 @@ public class TherapieplanAnalyzerTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
void shouldRequestFilteredStudien() {
|
void shouldRequestFilteredStudien() {
|
||||||
var input = Map.of("q", (Object)"NCT-123");
|
var input = Map.of("q", (Object) "NCT-123");
|
||||||
this.therapieplanAnalyzer.getStudien(input);
|
this.therapieplanAnalyzer.getStudien(input);
|
||||||
|
|
||||||
var captor = ArgumentCaptor.forClass(String.class);
|
var captor = ArgumentCaptor.forClass(String.class);
|
||||||
|
@ -1,8 +1,7 @@
|
|||||||
package DNPM.config;
|
package DNPM.config;
|
||||||
|
|
||||||
import DNPM.services.DefaultTherapieplanService;
|
|
||||||
import DNPM.services.FormService;
|
import DNPM.services.FormService;
|
||||||
import DNPM.services.MultipleMtbTherapieplanService;
|
import DNPM.services.TherapieplanServiceFactory;
|
||||||
import de.itc.onkostar.api.IOnkostarApi;
|
import de.itc.onkostar.api.IOnkostarApi;
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
@ -11,9 +10,6 @@ import org.mockito.Mock;
|
|||||||
import org.mockito.junit.jupiter.MockitoExtension;
|
import org.mockito.junit.jupiter.MockitoExtension;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
import static org.mockito.ArgumentMatchers.anyString;
|
|
||||||
import static org.mockito.Mockito.doAnswer;
|
|
||||||
import static org.mockito.Mockito.when;
|
|
||||||
|
|
||||||
@ExtendWith(MockitoExtension.class)
|
@ExtendWith(MockitoExtension.class)
|
||||||
public class PluginConfigurationTest {
|
public class PluginConfigurationTest {
|
||||||
@ -32,41 +28,8 @@ public class PluginConfigurationTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testShouldReturnDefaultTherapieplanServiceIfSettingIsFalse() {
|
void testShouldReturnTherapieplanServiceFactory() {
|
||||||
doAnswer(invocationOnMock -> {
|
var actual = this.configuration.therapieplanServiceFactory(onkostarApi, formService);
|
||||||
var settingName = invocationOnMock.getArgument(0, String.class);
|
assertThat(actual).isInstanceOf(TherapieplanServiceFactory.class);
|
||||||
if (settingName.equals("mehrere_mtb_in_mtbepisode")) {
|
|
||||||
return "false";
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}).when(onkostarApi).getGlobalSetting(anyString());
|
|
||||||
|
|
||||||
var actual = this.configuration.therapieplanService(onkostarApi, formService);
|
|
||||||
|
|
||||||
assertThat(actual).isInstanceOf(DefaultTherapieplanService.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testShouldReturnDefaultTherapieplanServiceIfNoSetting() {
|
|
||||||
when(onkostarApi.getGlobalSetting(anyString())).thenReturn(null);
|
|
||||||
|
|
||||||
var actual = this.configuration.therapieplanService(onkostarApi, formService);
|
|
||||||
|
|
||||||
assertThat(actual).isInstanceOf(DefaultTherapieplanService.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testShouldReturnMultipleMtbTherapieplanServiceIfSettingIsTrue() {
|
|
||||||
doAnswer(invocationOnMock -> {
|
|
||||||
var settingName = invocationOnMock.getArgument(0, String.class);
|
|
||||||
if (settingName.equals("mehrere_mtb_in_mtbepisode")) {
|
|
||||||
return "true";
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}).when(onkostarApi).getGlobalSetting(anyString());
|
|
||||||
|
|
||||||
var actual = this.configuration.therapieplanService(onkostarApi, formService);
|
|
||||||
|
|
||||||
assertThat(actual).isInstanceOf(MultipleMtbTherapieplanService.class);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,73 @@
|
|||||||
|
package DNPM.config;
|
||||||
|
|
||||||
|
import DNPM.services.DefaultTherapieplanService;
|
||||||
|
import DNPM.services.FormService;
|
||||||
|
import DNPM.services.MultipleMtbTherapieplanService;
|
||||||
|
import DNPM.services.TherapieplanServiceFactory;
|
||||||
|
import de.itc.onkostar.api.IOnkostarApi;
|
||||||
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
|
import org.mockito.Mock;
|
||||||
|
import org.mockito.junit.jupiter.MockitoExtension;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
import static org.mockito.ArgumentMatchers.anyString;
|
||||||
|
import static org.mockito.Mockito.doAnswer;
|
||||||
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
|
@ExtendWith(MockitoExtension.class)
|
||||||
|
public class TherapieplanServiceFactoryTest {
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private IOnkostarApi onkostarApi;
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private FormService formService;
|
||||||
|
|
||||||
|
private TherapieplanServiceFactory therapieplanServiceFactory;
|
||||||
|
|
||||||
|
@BeforeEach
|
||||||
|
void setup() {
|
||||||
|
this.therapieplanServiceFactory = new TherapieplanServiceFactory(onkostarApi, formService);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testShouldReturnDefaultTherapieplanServiceIfSettingIsFalse() {
|
||||||
|
doAnswer(invocationOnMock -> {
|
||||||
|
var settingName = invocationOnMock.getArgument(0, String.class);
|
||||||
|
if (settingName.equals("mehrere_mtb_in_mtbepisode")) {
|
||||||
|
return "false";
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}).when(onkostarApi).getGlobalSetting(anyString());
|
||||||
|
|
||||||
|
var actual = this.therapieplanServiceFactory.currentUsableinstance();
|
||||||
|
|
||||||
|
assertThat(actual).isInstanceOf(DefaultTherapieplanService.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testShouldReturnDefaultTherapieplanServiceIfNoSetting() {
|
||||||
|
when(onkostarApi.getGlobalSetting(anyString())).thenReturn(null);
|
||||||
|
|
||||||
|
var actual = this.therapieplanServiceFactory.currentUsableinstance();
|
||||||
|
|
||||||
|
assertThat(actual).isInstanceOf(DefaultTherapieplanService.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testShouldReturnMultipleMtbTherapieplanServiceIfSettingIsTrue() {
|
||||||
|
doAnswer(invocationOnMock -> {
|
||||||
|
var settingName = invocationOnMock.getArgument(0, String.class);
|
||||||
|
if (settingName.equals("mehrere_mtb_in_mtbepisode")) {
|
||||||
|
return "true";
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}).when(onkostarApi).getGlobalSetting(anyString());
|
||||||
|
|
||||||
|
var actual = this.therapieplanServiceFactory.currentUsableinstance();
|
||||||
|
|
||||||
|
assertThat(actual).isInstanceOf(MultipleMtbTherapieplanService.class);
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user