From aece46188fa146d76fff4e62d43a16c15ebc974b Mon Sep 17 00:00:00 2001
From: x-rodubou <romuald.dubourg@kereval.com>
Date: Thu, 13 Jun 2024 10:36:16 +0200
Subject: [PATCH] [ADD] selector validator for each request

---
 .../adapter/servlet/MDHRestfullServer.java    | 23 ++++------
 .../interceptor/MHDValidatorFhirSelector.java | 24 +++++++++++
 .../interceptor/MHDValidatorHttpSelector.java | 43 +++++++++++++++++++
 .../src/main/resources/application.properties | 18 ++++----
 4 files changed, 86 insertions(+), 22 deletions(-)
 create mode 100644 mhd-fhir-server-simulator/src/main/java/net/ihe/gazelle/fhir/simulator/server/interlay/interceptor/MHDValidatorFhirSelector.java
 create mode 100644 mhd-fhir-server-simulator/src/main/java/net/ihe/gazelle/fhir/simulator/server/interlay/interceptor/MHDValidatorHttpSelector.java

diff --git a/mhd-fhir-server-simulator/src/main/java/net/ihe/gazelle/fhir/simulator/server/adapter/servlet/MDHRestfullServer.java b/mhd-fhir-server-simulator/src/main/java/net/ihe/gazelle/fhir/simulator/server/adapter/servlet/MDHRestfullServer.java
index 0419906..b4d2e17 100644
--- a/mhd-fhir-server-simulator/src/main/java/net/ihe/gazelle/fhir/simulator/server/adapter/servlet/MDHRestfullServer.java
+++ b/mhd-fhir-server-simulator/src/main/java/net/ihe/gazelle/fhir/simulator/server/adapter/servlet/MDHRestfullServer.java
@@ -5,14 +5,14 @@ import ca.uhn.fhir.narrative.DefaultThymeleafNarrativeGenerator;
 import ca.uhn.fhir.narrative.INarrativeGenerator;
 import ca.uhn.fhir.rest.server.IResourceProvider;
 import ca.uhn.fhir.rest.server.RestfulServer;
-import net.ihe.evsapi.client.domain.ValidationService;
+import net.ihe.gazelle.fhir.simulator.server.interlay.interceptor.MHDValidatorFhirSelector;
+import net.ihe.gazelle.fhir.simulator.server.interlay.interceptor.MHDValidatorHttpSelector;
 import net.ihe.gazelle.fhir.simulator.server.interlay.loader.DocumentReferencesProviderServiceImpl;
 import net.ihe.gazelle.fhir.simulator.server.interlay.loader.ListProviderServiceImpl;
 import net.ihe.gazelle.fhir.simulator.server.interlay.provider.DocumentReferencesResourceProvider;
 import net.ihe.gazelle.fhir.simulator.server.interlay.provider.ListResourceProvider;
 import net.ihe.gazelle.interceptors.FhirValidatorInterceptor;
 import net.ihe.gazelle.interceptors.HTTPValidatorInterceptor;
-import net.ihe.gazelle.model.ValidationConfiguration;
 import org.eclipse.microprofile.config.ConfigProvider;
 
 import java.util.ArrayList;
@@ -40,18 +40,13 @@ public class MDHRestfullServer extends RestfulServer {
         getFhirContext().setNarrativeGenerator(narrativeGen);
 
         String evsEndpoint = ConfigProvider.getConfig().getValue("evs.endpoint", String.class);
-        if (Boolean.TRUE.equals(ConfigProvider.getConfig().getValue("activate.http.validator", Boolean.class))) {
-            String httpValidationName = ConfigProvider.getConfig().getValue("http.validation.name", String.class);
-            String httpValidationSchematronName = ConfigProvider.getConfig().getValue("http.validation.schematron.name", String.class);
-            registerInterceptor(new HTTPValidatorInterceptor(new ValidationConfiguration().setEvsEndpoint(evsEndpoint).setValidationService(new ValidationService().setValidator(httpValidationName).setName(httpValidationSchematronName))));
-        }
-
-        if (Boolean.TRUE.equals(ConfigProvider.getConfig().getValue("activate.fhir.validator", Boolean.class))) {
-            String fhirValidationName = ConfigProvider.getConfig().getValue("fhir.validation.name", String.class);
-            String fhirValidationSchematronName = ConfigProvider.getConfig().getValue("fhir.validation.schematron.name", String.class);
-
-            registerInterceptor(new FhirValidatorInterceptor(new ValidationConfiguration().setEvsEndpoint(evsEndpoint).setValidationService(new ValidationService().setValidator(fhirValidationName).setName(fhirValidationSchematronName))));
-        }
+
+        registerInterceptor(new HTTPValidatorInterceptor(evsEndpoint, new MHDValidatorHttpSelector()));
+
+        registerInterceptor(new FhirValidatorInterceptor(evsEndpoint, new MHDValidatorFhirSelector()));
+
+
+
 
     }
 
diff --git a/mhd-fhir-server-simulator/src/main/java/net/ihe/gazelle/fhir/simulator/server/interlay/interceptor/MHDValidatorFhirSelector.java b/mhd-fhir-server-simulator/src/main/java/net/ihe/gazelle/fhir/simulator/server/interlay/interceptor/MHDValidatorFhirSelector.java
new file mode 100644
index 0000000..be126b3
--- /dev/null
+++ b/mhd-fhir-server-simulator/src/main/java/net/ihe/gazelle/fhir/simulator/server/interlay/interceptor/MHDValidatorFhirSelector.java
@@ -0,0 +1,24 @@
+package net.ihe.gazelle.fhir.simulator.server.interlay.interceptor;
+
+import ca.uhn.fhir.rest.api.RestOperationTypeEnum;
+import ca.uhn.fhir.rest.api.server.RequestDetails;
+import net.ihe.evsapi.client.domain.ValidationService;
+import net.ihe.gazelle.model.ValidatorSelector;
+import org.eclipse.microprofile.config.ConfigProvider;
+
+public class MHDValidatorFhirSelector implements ValidatorSelector {
+
+
+    @Override
+    public ValidationService getValidationService(RequestDetails requestDetails) {
+        String fhirValidationName = ConfigProvider.getConfig().getValue("fhir.validation.name", String.class);
+        if (requestDetails.getRestOperationType().equals(RestOperationTypeEnum.TRANSACTION)) {
+            String fhirValidationValidator = ConfigProvider.getConfig().getValue("fhir.validation.schematron.name-iti-65", String.class);
+            return new ValidationService().setValidator(fhirValidationValidator).setName(fhirValidationName);
+        } else {
+
+            return null;
+        }
+
+    }
+}
diff --git a/mhd-fhir-server-simulator/src/main/java/net/ihe/gazelle/fhir/simulator/server/interlay/interceptor/MHDValidatorHttpSelector.java b/mhd-fhir-server-simulator/src/main/java/net/ihe/gazelle/fhir/simulator/server/interlay/interceptor/MHDValidatorHttpSelector.java
new file mode 100644
index 0000000..5fc6017
--- /dev/null
+++ b/mhd-fhir-server-simulator/src/main/java/net/ihe/gazelle/fhir/simulator/server/interlay/interceptor/MHDValidatorHttpSelector.java
@@ -0,0 +1,43 @@
+package net.ihe.gazelle.fhir.simulator.server.interlay.interceptor;
+
+import ca.uhn.fhir.rest.api.RestOperationTypeEnum;
+import ca.uhn.fhir.rest.api.server.RequestDetails;
+import net.ihe.evsapi.client.domain.ValidationService;
+import net.ihe.gazelle.model.ValidatorSelector;
+import org.eclipse.microprofile.config.ConfigProvider;
+
+public class MHDValidatorHttpSelector implements ValidatorSelector {
+
+
+    @Override
+    public ValidationService getValidationService(RequestDetails requestDetails) {
+        String httpValidationName = ConfigProvider.getConfig().getValue("http.validation.name", String.class);
+        String httpValidationValidator;
+        if (requestDetails.getRestOperationType().equals(RestOperationTypeEnum.TRANSACTION)) {
+            httpValidationValidator = ConfigProvider.getConfig().getValue("http.validation.schematron.name-iti-65", String.class);
+            return new ValidationService().setValidator(httpValidationValidator).setName(httpValidationName);
+        }
+
+        if (requestDetails.getRestOperationType().equals(RestOperationTypeEnum.SEARCH_TYPE) && requestDetails.getResourceName().equals("List")) {
+            httpValidationValidator = ConfigProvider.getConfig().getValue("http.validation.schematron.name-iti-66", String.class);
+            return new ValidationService().setValidator(httpValidationValidator).setName(httpValidationName);
+        }
+
+        if (requestDetails.getRestOperationType().equals(RestOperationTypeEnum.SEARCH_TYPE) && requestDetails.getResourceName().equals("DocumentReference")) {
+            httpValidationValidator = ConfigProvider.getConfig().getValue("http.validation.schematron.name-iti-67", String.class);
+
+            return new ValidationService().setValidator(httpValidationValidator).setName(httpValidationName);
+        }
+
+        if (requestDetails.getRestOperationType().equals(RestOperationTypeEnum.READ) && requestDetails.getResourceName().equals("DocumentReference")) {
+            httpValidationValidator = ConfigProvider.getConfig().getValue("http.validation.schematron.name-iti-68", String.class);
+
+            return new ValidationService().setValidator(httpValidationValidator).setName(httpValidationName);
+        }
+
+
+        return null;
+
+
+    }
+}
diff --git a/mhd-fhir-server-simulator/src/main/resources/application.properties b/mhd-fhir-server-simulator/src/main/resources/application.properties
index b43c4b5..c7374be 100644
--- a/mhd-fhir-server-simulator/src/main/resources/application.properties
+++ b/mhd-fhir-server-simulator/src/main/resources/application.properties
@@ -1,8 +1,10 @@
-nist.fhir.toolkit.endpoint=http://localhost:7080/fhir
-activate.http.validator=false
-http.validation.name=Validator
-http.validation.schematron.name=Schematron-Validator
-activate.fhir.validator=false
-fhir.validation.name=Validator
-fhir.validation.schematron.name=Scheme-Validator
-evs.endpoint=http://localhost:8080/evs
+nist.fhir.toolkit.endpoint=https://qualification.ihe-europe.net/fhir
+http.validation.name=HTTP Message Validator
+http.validation.schematron.name-iti-65=CH_ITI-65-ProvideDocumentBundle_POST_MHD_Request
+http.validation.schematron.name-iti-66=CH_ITI-66-FindDocumentLists-GET_MHD_Request
+http.validation.schematron.name-iti-67=CH_ITI-67-FindDocumentReferences-GET_MHD_Request
+http.validation.schematron.name-iti-68=CH_ITI-68-RetrieveDocument-GET_MHD_Request
+
+fhir.validation.name=Matchbox
+fhir.validation.schematron.name-iti-65=CH:MHD [ITI-65] Provide Document Bundle Comprehensive Response
+evs.endpoint=https://qualification.ihe-europe.net/evs/rest/validations
-- 
GitLab