summaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorPaul-Christian Volkmer2023-03-15 12:01:50 +0100
committerPaul-Christian Volkmer2023-03-15 12:01:50 +0100
commitf09826a8fff78361de9cbe5eccdfffb86a6e610a (patch)
treeb3f8e2dda25b6ba670b483e8bb760d7f6e97bb2b /src/main/java
parentc6c1ebdfbbf8a0cf9f3faa5a41e21309f64bed46 (diff)
Verwende Spring Configuration zur Pluginkonfiguration
Dies erlaubt eine dynamische Konfiguration der zu verwendenden Service-Implementierungen mit Anpassungen je nach Standort oder Einstellungen.
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/DNPM/analyzer/TherapieplanAnalyzer.java158
-rw-r--r--src/main/java/DNPM/config/PluginConfiguration.java42
-rw-r--r--src/main/java/DNPM/services/DefaultFormService.java7
-rw-r--r--src/main/java/DNPM/services/DefaultStudienService.java2
-rw-r--r--src/main/java/DNPM/services/DefaultTherapieplanService.java142
-rw-r--r--src/main/java/DNPM/services/FormService.java26
-rw-r--r--src/main/java/DNPM/services/MultipleMtbTherapieplanService.java12
-rw-r--r--src/main/java/DNPM/services/TherapieplanService.java15
8 files changed, 249 insertions, 155 deletions
diff --git a/src/main/java/DNPM/analyzer/TherapieplanAnalyzer.java b/src/main/java/DNPM/analyzer/TherapieplanAnalyzer.java
index 17317cb..29441cf 100644
--- a/src/main/java/DNPM/analyzer/TherapieplanAnalyzer.java
+++ b/src/main/java/DNPM/analyzer/TherapieplanAnalyzer.java
@@ -1,24 +1,18 @@
package DNPM.analyzer;
-import DNPM.services.FormService;
import DNPM.services.Studie;
import DNPM.services.StudienService;
+import DNPM.services.TherapieplanService;
import de.itc.onkostar.api.Disease;
-import de.itc.onkostar.api.IOnkostarApi;
-import de.itc.onkostar.api.Item;
import de.itc.onkostar.api.Procedure;
import de.itc.onkostar.api.analysis.AnalyseTriggerEvent;
import de.itc.onkostar.api.analysis.AnalyzerRequirement;
import de.itc.onkostar.api.analysis.IProcedureAnalyzer;
import de.itc.onkostar.api.analysis.OnkostarPluginType;
-import de.itc.onkostar.api.constants.JaNeinUnbekannt;
-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;
/**
@@ -29,18 +23,16 @@ import java.util.Set;
@Component
public class TherapieplanAnalyzer implements IProcedureAnalyzer {
- private final Logger logger = LoggerFactory.getLogger(this.getClass());
-
- private final IOnkostarApi onkostarApi;
-
- private final FormService formService;
-
private final StudienService studienService;
- public TherapieplanAnalyzer(final IOnkostarApi onkostarApi, final FormService formService, final StudienService studienService) {
- this.onkostarApi = onkostarApi;
- this.formService = formService;
+ private final TherapieplanService therapieplanService;
+
+ public TherapieplanAnalyzer(
+ final StudienService studienService,
+ final TherapieplanService therapieplanService
+ ) {
this.studienService = studienService;
+ this.therapieplanService = therapieplanService;
}
@Override
@@ -97,8 +89,7 @@ public class TherapieplanAnalyzer implements IProcedureAnalyzer {
@Override
public void analyze(Procedure procedure, Disease disease) {
- updateMtbInSections(procedure);
- updateMtbInSubforms(procedure);
+ therapieplanService.updateRequiredMtbEntries(procedure);
}
@@ -128,135 +119,4 @@ public class TherapieplanAnalyzer implements IProcedureAnalyzer {
return studienService.findByQuery(query.toString());
}
- /**
- * Verlinke MTB und Übernahme Datum aus Hauptformular in weiteren Bereichen
- * "Humangenetische Beratung" und "Reevaluation", wenn erforderlich.
- *
- * @param procedure Die Prozedur mit Hauptformular
- */
- private void updateMtbInSections(Procedure procedure) {
- if (
- this.hasMultipleMtbsEnabled() || (
- !isYes(procedure, "humangenberatung") && !isYes(procedure, "reevaluation")
- )
- ) {
- return;
- }
-
- var a = procedure.getValue("humangenberatung").getString();
- var b = procedure.getValue("reevaluation").getString();
-
- var mtbReference = procedure.getValue("referstemtb").getInt();
- var mtbDate = procedure.getValue("datum").getDate();
- var noUpdateRequired = true;
-
- if (
- isYes(procedure, "humangenberatung") && (
- !hasValue(procedure, "reftkhumangenber")
- || mtbReference != procedure.getValue("reftkhumangenber").getInt()
- )
- ) {
- procedure.setValue("reftkhumangenber", new Item("ref_tk_humangenber", mtbReference));
- noUpdateRequired = false;
- }
-
- if (
- isYes(procedure, "humangenberatung") && (
- !hasValue(procedure, "datumtkhumangenber")
- || !mtbDate.equals(procedure.getValue("datumtkhumangenber").getDate())
- )
- ) {
- procedure.setValue("datumtkhumangenber", new Item("datum_tk_humangenber", mtbDate));
- noUpdateRequired = false;
- }
-
- if (
- isYes(procedure, "reevaluation") && (
- !hasValue(procedure, "reftkreevaluation")
- || mtbReference != procedure.getValue("reftkreevaluation").getInt()
- )
- ) {
- procedure.setValue("reftkreevaluation", new Item("ref_tk_reevaluation", mtbReference));
- noUpdateRequired = false;
- }
-
- if (
- isYes(procedure, "reevaluation") && (
- !hasValue(procedure, "datumtkreevaluation")
- || !mtbDate.equals(procedure.getValue("datumtkreevaluation").getDate())
- )
- ) {
- procedure.setValue("datumtkreevaluation", new Item("datum_tk_reevaluation", mtbDate));
- noUpdateRequired = false;
- }
-
- if (noUpdateRequired) {
- return;
- }
-
- try {
- onkostarApi.saveProcedure(procedure, false);
- } catch (Exception e) {
- logger.error("Formular 'DNPM Therapieplan' konnte nicht aktualisiert werden", e);
- }
- }
-
- /**
- * Verlinke MTB und Übernahme Datum aus Hauptformular in Unterformularen
- *
- * @param procedure Die Prozedur mit Hauptformular
- */
- private void updateMtbInSubforms(Procedure procedure) {
- if (this.hasMultipleMtbsEnabled()) {
- return;
- }
-
- var mtbReference = procedure.getValue("referstemtb").getInt();
- var mtbDate = procedure.getValue("datum").getDate();
-
- formService.getSubFormProcedureIds(procedure.getId()).stream()
- .map(onkostarApi::getProcedure)
- .filter(Objects::nonNull)
- .forEach(subform -> {
- if (subform.getFormName().equals("DNPM UF Einzelempfehlung")) {
- if (mtbReference != subform.getValue("mtb").getInt() && !mtbDate.equals(subform.getValue("ufeedatum").getDate())) {
- subform.setValue("mtb", new Item("ref_tumorkonferenz", mtbReference));
- subform.setValue("ufeedatum", new Item("datum", mtbDate));
-
- try {
- onkostarApi.saveProcedure(subform, false);
- } catch (Exception e) {
- logger.error("Formular 'DNPM UF Einzelempfehlung' konnte nicht aktualisiert werden", e);
- }
- }
- }
-
- if (subform.getFormName().equals("DNPM UF Rebiopsie")) {
- if (mtbReference != subform.getValue("reftumorkonferenz").getInt() && !mtbDate.equals(subform.getValue("ufrbdatum").getDate())) {
- subform.setValue("reftumorkonferenz", new Item("ref_tumorkonferenz", mtbReference));
- subform.setValue("ufrbdatum", new Item("datum", mtbDate));
-
- try {
- onkostarApi.saveProcedure(subform, false);
- } catch (Exception e) {
- logger.error("Formular 'DNPM UF Rebiopsie' konnte nicht aktualisiert werden", e);
- }
- }
- }
- });
- }
-
- private boolean hasMultipleMtbsEnabled() {
- return null != onkostarApi.getGlobalSetting("mehrere_mtb_in_mtbepisode")
- && onkostarApi.getGlobalSetting("mehrere_mtb_in_mtbepisode").equals("true");
- }
-
- private boolean hasValue(final Procedure procedure, final String fieldName) {
- return null != procedure.getValue(fieldName);
- }
-
- private boolean isYes(final Procedure procedure, final String fieldName) {
- return hasValue(procedure, fieldName)
- && procedure.getValue(fieldName).getString().equals(JaNeinUnbekannt.JA.getCode());
- }
}
diff --git a/src/main/java/DNPM/config/PluginConfiguration.java b/src/main/java/DNPM/config/PluginConfiguration.java
new file mode 100644
index 0000000..d417132
--- /dev/null
+++ b/src/main/java/DNPM/config/PluginConfiguration.java
@@ -0,0 +1,42 @@
+package DNPM.config;
+
+import DNPM.services.*;
+import de.itc.onkostar.api.IOnkostarApi;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+
+import javax.sql.DataSource;
+
+/**
+ * Dynamische Konfiguration des Plugins basierend auf Onkostar-Einstellungen
+ *
+ * @since 0.0.2
+ */
+@Configuration
+@ComponentScan(basePackages = "DNPM.analyzer")
+public class PluginConfiguration {
+
+ @Bean
+ public FormService formService(final DataSource dataSource) {
+ return new DefaultFormService(dataSource);
+ }
+
+ @Bean
+ public StudienService studienService(final DataSource dataSource) {
+ return new DefaultStudienService(dataSource);
+ }
+
+ @Bean
+ public TherapieplanService therapieplanService(final IOnkostarApi onkostarApi, final FormService formService) {
+ if (
+ null != onkostarApi.getGlobalSetting("mehrere_mtb_in_mtbepisode")
+ && onkostarApi.getGlobalSetting("mehrere_mtb_in_mtbepisode").equals("true")
+ ) {
+ return new MultipleMtbTherapieplanService();
+ }
+
+ return new DefaultTherapieplanService(onkostarApi, formService);
+ }
+
+}
diff --git a/src/main/java/DNPM/services/DefaultFormService.java b/src/main/java/DNPM/services/DefaultFormService.java
index c7fb042..9feaeb2 100644
--- a/src/main/java/DNPM/services/DefaultFormService.java
+++ b/src/main/java/DNPM/services/DefaultFormService.java
@@ -2,12 +2,15 @@ package DNPM.services;
import DNPM.exceptions.FormException;
import org.springframework.jdbc.core.JdbcTemplate;
-import org.springframework.stereotype.Service;
import javax.sql.DataSource;
import java.util.List;
-@Service
+/**
+ * Standardimplementierung zum Ermitteln von Unter- und Hauptformularen
+ *
+ * @since 0.0.2
+ */
public class DefaultFormService implements FormService {
private final JdbcTemplate jdbcTemplate;
diff --git a/src/main/java/DNPM/services/DefaultStudienService.java b/src/main/java/DNPM/services/DefaultStudienService.java
index 596a288..1f115cf 100644
--- a/src/main/java/DNPM/services/DefaultStudienService.java
+++ b/src/main/java/DNPM/services/DefaultStudienService.java
@@ -1,7 +1,6 @@
package DNPM.services;
import org.springframework.jdbc.core.JdbcTemplate;
-import org.springframework.stereotype.Service;
import javax.sql.DataSource;
import java.util.List;
@@ -11,7 +10,6 @@ import java.util.List;
*
* @since 0.0.2
*/
-@Service
public class DefaultStudienService implements StudienService {
private final JdbcTemplate jdbcTemplate;
diff --git a/src/main/java/DNPM/services/DefaultTherapieplanService.java b/src/main/java/DNPM/services/DefaultTherapieplanService.java
new file mode 100644
index 0000000..f705ce8
--- /dev/null
+++ b/src/main/java/DNPM/services/DefaultTherapieplanService.java
@@ -0,0 +1,142 @@
+package DNPM.services;
+
+import de.itc.onkostar.api.IOnkostarApi;
+import de.itc.onkostar.api.Item;
+import de.itc.onkostar.api.Procedure;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.Objects;
+
+import static DNPM.services.FormService.hasValue;
+import static DNPM.services.FormService.isYes;
+
+public class DefaultTherapieplanService implements TherapieplanService {
+
+ private final Logger logger = LoggerFactory.getLogger(this.getClass());
+
+ private final IOnkostarApi onkostarApi;
+
+ private final FormService formService;
+
+ public DefaultTherapieplanService(final IOnkostarApi onkostarApi, final FormService formService) {
+ this.onkostarApi = onkostarApi;
+ this.formService = formService;
+ }
+
+ /**
+ * Verlinke MTB und Übernahme Datum aus Hauptformular in weiteren Bereichen
+ * "Humangenetische Beratung" und "Reevaluation" und Unterformularen, wenn erforderlich.
+ *
+ * @param procedure Die Prozedur mit Hauptformular
+ */
+ @Override
+ public void updateRequiredMtbEntries(Procedure procedure) {
+ this.updateMtbInSections(procedure);
+ this.updateMtbInSubforms(procedure);
+ }
+
+ private void updateMtbInSections(Procedure procedure) {
+ if (!isYes(procedure, "humangenberatung") && !isYes(procedure, "reevaluation")) {
+ return;
+ }
+
+ var mtbReference = procedure.getValue("referstemtb").getInt();
+ var mtbDate = procedure.getValue("datum").getDate();
+ var noUpdateRequired = true;
+
+ if (
+ isYes(procedure, "humangenberatung") && (
+ !hasValue(procedure, "reftkhumangenber")
+ || mtbReference != procedure.getValue("reftkhumangenber").getInt()
+ )
+ ) {
+ procedure.setValue("reftkhumangenber", new Item("ref_tk_humangenber", mtbReference));
+ noUpdateRequired = false;
+ }
+
+ if (
+ isYes(procedure, "humangenberatung") && (
+ !hasValue(procedure, "datumtkhumangenber")
+ || !mtbDate.equals(procedure.getValue("datumtkhumangenber").getDate())
+ )
+ ) {
+ procedure.setValue("datumtkhumangenber", new Item("datum_tk_humangenber", mtbDate));
+ noUpdateRequired = false;
+ }
+
+ if (
+ isYes(procedure, "reevaluation") && (
+ !hasValue(procedure, "reftkreevaluation")
+ || mtbReference != procedure.getValue("reftkreevaluation").getInt()
+ )
+ ) {
+ procedure.setValue("reftkreevaluation", new Item("ref_tk_reevaluation", mtbReference));
+ noUpdateRequired = false;
+ }
+
+ if (
+ isYes(procedure, "reevaluation") && (
+ !hasValue(procedure, "datumtkreevaluation")
+ || !mtbDate.equals(procedure.getValue("datumtkreevaluation").getDate())
+ )
+ ) {
+ procedure.setValue("datumtkreevaluation", new Item("datum_tk_reevaluation", mtbDate));
+ noUpdateRequired = false;
+ }
+
+ if (noUpdateRequired) {
+ return;
+ }
+
+ try {
+ onkostarApi.saveProcedure(procedure, false);
+ } catch (Exception e) {
+ logger.error("Formular 'DNPM Therapieplan' konnte nicht aktualisiert werden", e);
+ }
+ }
+
+ private void updateMtbInSubforms(Procedure procedure) {
+ if (
+ !hasValue(procedure, "referstemtb") || !hasValue(procedure, "datum")
+ ) {
+ return;
+ }
+
+ var mtbReference = procedure.getValue("referstemtb").getInt();
+ var mtbDate = procedure.getValue("datum").getDate();
+
+ formService.getSubFormProcedureIds(procedure.getId()).stream()
+ .map(onkostarApi::getProcedure)
+ .filter(Objects::nonNull)
+ .forEach(subform -> {
+ if (subform.getFormName().equals("DNPM UF Einzelempfehlung")) {
+ if (mtbReference != subform.getValue("mtb").getInt() && !mtbDate.equals(subform.getValue("ufeedatum").getDate())) {
+ subform.setValue("mtb", new Item("ref_tumorkonferenz", mtbReference));
+ subform.setValue("ufeedatum", new Item("datum", mtbDate));
+
+ try {
+ onkostarApi.saveProcedure(subform, false);
+ } catch (Exception e) {
+ logger.error("Formular 'DNPM UF Einzelempfehlung' konnte nicht aktualisiert werden", e);
+ }
+ }
+ }
+
+ if (subform.getFormName().equals("DNPM UF Rebiopsie")) {
+ if (mtbReference != subform.getValue("reftumorkonferenz").getInt() && !mtbDate.equals(subform.getValue("ufrbdatum").getDate())) {
+ subform.setValue("reftumorkonferenz", new Item("ref_tumorkonferenz", mtbReference));
+ subform.setValue("ufrbdatum", new Item("datum", mtbDate));
+
+ try {
+ onkostarApi.saveProcedure(subform, false);
+ } catch (Exception e) {
+ logger.error("Formular 'DNPM UF Rebiopsie' konnte nicht aktualisiert werden", e);
+ }
+ }
+ }
+ });
+ }
+
+
+}
diff --git a/src/main/java/DNPM/services/FormService.java b/src/main/java/DNPM/services/FormService.java
index 824d350..f10d6c3 100644
--- a/src/main/java/DNPM/services/FormService.java
+++ b/src/main/java/DNPM/services/FormService.java
@@ -1,6 +1,8 @@
package DNPM.services;
import DNPM.exceptions.FormException;
+import de.itc.onkostar.api.Procedure;
+import de.itc.onkostar.api.constants.JaNeinUnbekannt;
import java.util.List;
@@ -12,7 +14,7 @@ public interface FormService {
*
* @param procedureId Die Prozedur-ID des Unterformulars
* @return Die Prozedur-ID des zugehörigen Hauptformulars
- * @throws FormException
+ * @throws FormException Wird geworfen, wenn ein Fehler auftrat
*/
int getMainFormProcedureId(int procedureId) throws FormException;
@@ -22,8 +24,28 @@ public interface FormService {
*
* @param procedureId Die Prozedur-ID des Formulars
* @return Eine Liste mit Prozedur-IDs der Unterformulare
- * @throws FormException
*/
List<Integer> getSubFormProcedureIds(int procedureId);
+ /**
+ * Prüft, ob ein Formularfeld in der Prozedur einen Wert hat oder null ist
+ * @param procedure Die zu prüfende Prozedur
+ * @param fieldName Der Formularfeldname
+ * @return Gibt <code>true</code> zurück, wenn das Feld einen Wert hat
+ */
+ static boolean hasValue(final Procedure procedure, final String fieldName) {
+ return null != procedure.getValue(fieldName);
+ }
+
+ /**
+ * Prüft, ob ein Formularfeld mit Ja/Nein/Unbekannt den Wert Ja hat
+ * @param procedure Die zu prüfende Prozedur
+ * @param fieldName Der Formularfeldname
+ * @return Gibt <code>true</code> zurück, wenn das Feld den Wert "Ja" hat
+ */
+ static boolean isYes(final Procedure procedure, final String fieldName) {
+ return hasValue(procedure, fieldName)
+ && procedure.getValue(fieldName).getString().equals(JaNeinUnbekannt.JA.getCode());
+ }
+
}
diff --git a/src/main/java/DNPM/services/MultipleMtbTherapieplanService.java b/src/main/java/DNPM/services/MultipleMtbTherapieplanService.java
new file mode 100644
index 0000000..d4eb297
--- /dev/null
+++ b/src/main/java/DNPM/services/MultipleMtbTherapieplanService.java
@@ -0,0 +1,12 @@
+package DNPM.services;
+
+import de.itc.onkostar.api.Procedure;
+
+public class MultipleMtbTherapieplanService implements TherapieplanService {
+
+ @Override
+ public void updateRequiredMtbEntries(Procedure procedure) {
+ // No action required
+ }
+
+}
diff --git a/src/main/java/DNPM/services/TherapieplanService.java b/src/main/java/DNPM/services/TherapieplanService.java
new file mode 100644
index 0000000..e47d75e
--- /dev/null
+++ b/src/main/java/DNPM/services/TherapieplanService.java
@@ -0,0 +1,15 @@
+package DNPM.services;
+
+import de.itc.onkostar.api.Procedure;
+
+public interface TherapieplanService {
+
+ /**
+ * Verlinke MTB und Übernahme Datum aus Hauptformular in weiteren Bereichen
+ * "Humangenetische Beratung" und "Reevaluation" und Unterformularen, wenn erforderlich.
+ *
+ * @param procedure Die Prozedur mit Hauptformular
+ */
+ void updateRequiredMtbEntries(Procedure procedure);
+
+}