diff --git a/src/main/java/dev/dnpm/etl/processor/consent/GicsConsentService.java b/src/main/java/dev/dnpm/etl/processor/consent/GicsConsentService.java index 4e0d9c1..b6288d3 100644 --- a/src/main/java/dev/dnpm/etl/processor/consent/GicsConsentService.java +++ b/src/main/java/dev/dnpm/etl/processor/consent/GicsConsentService.java @@ -8,7 +8,6 @@ import java.util.Date; import java.util.Optional; import org.apache.commons.lang3.NotImplementedException; import org.apache.commons.lang3.StringUtils; -import org.hl7.fhir.instance.model.api.IBaseResource; import org.hl7.fhir.r4.model.BooleanType; import org.hl7.fhir.r4.model.Bundle; import org.hl7.fhir.r4.model.Coding; @@ -185,7 +184,7 @@ public class GicsConsentService implements ICheckConsent { throw new IllegalStateException( "consent data request failed - stopping processing! - try again or fix other problems first."); } - IBaseResource iBaseResource = fhirContext.newXmlParser() + var iBaseResource = fhirContext.newJsonParser() .parseResource(consentDataSerialized); if (iBaseResource instanceof OperationOutcome) { // log error - very likely a configuration error diff --git a/src/main/kotlin/dev/dnpm/etl/processor/config/IBaseResourceDeserializer.kt b/src/main/kotlin/dev/dnpm/etl/processor/config/ConsentResourceDeserializer.kt similarity index 56% rename from src/main/kotlin/dev/dnpm/etl/processor/config/IBaseResourceDeserializer.kt rename to src/main/kotlin/dev/dnpm/etl/processor/config/ConsentResourceDeserializer.kt index 4fe94ca..5469b1b 100644 --- a/src/main/kotlin/dev/dnpm/etl/processor/config/IBaseResourceDeserializer.kt +++ b/src/main/kotlin/dev/dnpm/etl/processor/config/ConsentResourceDeserializer.kt @@ -1,20 +1,18 @@ package dev.dnpm.etl.processor.config -import ca.uhn.fhir.context.FhirContext import com.fasterxml.jackson.core.JsonParser import com.fasterxml.jackson.databind.DeserializationContext import com.fasterxml.jackson.databind.JsonDeserializer import com.fasterxml.jackson.databind.JsonNode -import org.hl7.fhir.instance.model.api.IBaseResource +import org.hl7.fhir.r4.model.Consent -class IBaseResourceDeserializer : JsonDeserializer() { - override fun deserialize(p: JsonParser?, ctxt: DeserializationContext?): IBaseResource { - val fhirContext = FhirContext.forR4() +class ConsentResourceDeserializer : JsonDeserializer() { + override fun deserialize(p: JsonParser?, ctxt: DeserializationContext?): Consent { val jsonNode = p?.readValueAsTree() val json = jsonNode?.toString() - return fhirContext.newJsonParser().parseResource(json) as IBaseResource + return JacksonConfig.fhirContext().newJsonParser().parseResource(json) as Consent } } \ No newline at end of file diff --git a/src/main/kotlin/dev/dnpm/etl/processor/config/ConsentResourceSerializer.kt b/src/main/kotlin/dev/dnpm/etl/processor/config/ConsentResourceSerializer.kt new file mode 100644 index 0000000..812ce44 --- /dev/null +++ b/src/main/kotlin/dev/dnpm/etl/processor/config/ConsentResourceSerializer.kt @@ -0,0 +1,15 @@ +package dev.dnpm.etl.processor.config + +import com.fasterxml.jackson.core.JsonGenerator +import com.fasterxml.jackson.databind.JsonSerializer +import com.fasterxml.jackson.databind.SerializerProvider +import org.hl7.fhir.r4.model.Consent + +class ConsentResourceSerializer : JsonSerializer() { + override fun serialize( + value: Consent, gen: JsonGenerator, serializers: SerializerProvider + ) { + val json = JacksonConfig.fhirContext().newJsonParser().encodeResourceToString(value) + gen.writeRawValue(json) + } +} \ No newline at end of file diff --git a/src/main/kotlin/dev/dnpm/etl/processor/config/FhirResourceModule.kt b/src/main/kotlin/dev/dnpm/etl/processor/config/FhirResourceModule.kt index 43f9f35..2ae0dd3 100644 --- a/src/main/kotlin/dev/dnpm/etl/processor/config/FhirResourceModule.kt +++ b/src/main/kotlin/dev/dnpm/etl/processor/config/FhirResourceModule.kt @@ -2,11 +2,11 @@ package dev.dnpm.etl.processor.config import com.fasterxml.jackson.databind.module.SimpleModule -import org.hl7.fhir.instance.model.api.IBaseResource +import org.hl7.fhir.r4.model.Consent class FhirResourceModule : SimpleModule() { init { - addSerializer(IBaseResource::class.java, IBaseResourceSerializer()) - addDeserializer(IBaseResource::class.java, IBaseResourceDeserializer()) + addSerializer(Consent::class.java, ConsentResourceSerializer()) + addDeserializer(Consent::class.java, ConsentResourceDeserializer()) } } \ No newline at end of file diff --git a/src/main/kotlin/dev/dnpm/etl/processor/config/IBaseResourceSerializer.kt b/src/main/kotlin/dev/dnpm/etl/processor/config/IBaseResourceSerializer.kt deleted file mode 100644 index 49b488e..0000000 --- a/src/main/kotlin/dev/dnpm/etl/processor/config/IBaseResourceSerializer.kt +++ /dev/null @@ -1,19 +0,0 @@ -package dev.dnpm.etl.processor.config - -import ca.uhn.fhir.context.FhirContext -import com.fasterxml.jackson.core.JsonGenerator -import com.fasterxml.jackson.databind.JsonSerializer -import com.fasterxml.jackson.databind.SerializerProvider -import org.hl7.fhir.instance.model.api.IBaseResource - -class IBaseResourceSerializer : JsonSerializer() { - override fun serialize( - value: IBaseResource, - gen: JsonGenerator, - serializers: SerializerProvider - ) { - val fhirContext = FhirContext.forR4() - val json = fhirContext.newJsonParser().encodeResourceToString(value) - gen.writeRawValue(json) - } -} \ No newline at end of file diff --git a/src/main/kotlin/dev/dnpm/etl/processor/config/JacksonConfig.kt b/src/main/kotlin/dev/dnpm/etl/processor/config/JacksonConfig.kt index 76f5138..fb03d66 100644 --- a/src/main/kotlin/dev/dnpm/etl/processor/config/JacksonConfig.kt +++ b/src/main/kotlin/dev/dnpm/etl/processor/config/JacksonConfig.kt @@ -1,5 +1,6 @@ package dev.dnpm.etl.processor.config +import ca.uhn.fhir.context.FhirContext import org.springframework.context.annotation.Bean import org.springframework.context.annotation.Configuration import com.fasterxml.jackson.databind.ObjectMapper @@ -9,11 +10,18 @@ import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule @Configuration class JacksonConfig { + companion object { + var fhirContext: FhirContext = FhirContext.forR4() + + @JvmStatic + fun fhirContext(): FhirContext { + return fhirContext + } + } + @Bean - fun objectMapper(): ObjectMapper = - ObjectMapper() - .registerModule(FhirResourceModule()) - .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS).registerModule( - JavaTimeModule() - ); + fun objectMapper(): ObjectMapper = ObjectMapper().registerModule(FhirResourceModule()) + .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS).registerModule( + JavaTimeModule() + ) } diff --git a/src/main/kotlin/dev/dnpm/etl/processor/monitoring/ConnectionCheckService.kt b/src/main/kotlin/dev/dnpm/etl/processor/monitoring/ConnectionCheckService.kt index 30641a5..fe02b69 100644 --- a/src/main/kotlin/dev/dnpm/etl/processor/monitoring/ConnectionCheckService.kt +++ b/src/main/kotlin/dev/dnpm/etl/processor/monitoring/ConnectionCheckService.kt @@ -177,7 +177,7 @@ class GPasConnectionCheckService( fun check() { result = try { val uri = UriComponentsBuilder.fromUriString( - gPasConfigProperties.uri?.replace("/\$\$pseudonymizeAllowCreate", "/metadata").toString() + gPasConfigProperties.uri?.replace("/\$pseudonymizeAllowCreate", "/metadata").toString() ).build().toUri() val headers = HttpHeaders() diff --git a/src/main/kotlin/dev/dnpm/etl/processor/services/RequestProcessor.kt b/src/main/kotlin/dev/dnpm/etl/processor/services/RequestProcessor.kt index 3bb010c..cdbba90 100644 --- a/src/main/kotlin/dev/dnpm/etl/processor/services/RequestProcessor.kt +++ b/src/main/kotlin/dev/dnpm/etl/processor/services/RequestProcessor.kt @@ -42,7 +42,6 @@ import dev.pcvolkmer.mv64e.mtb.MvhMetadata import dev.pcvolkmer.mv64e.mtb.Provision import org.apache.commons.codec.binary.Base32 import org.apache.commons.codec.digest.DigestUtils -import org.hl7.fhir.instance.model.api.IBaseResource import org.hl7.fhir.r4.model.Bundle import org.hl7.fhir.r4.model.Consent import org.slf4j.Logger @@ -53,7 +52,6 @@ import java.io.IOException import java.lang.RuntimeException import java.time.Clock import java.time.Instant -import java.time.ZoneId import java.util.* @Service @@ -107,7 +105,7 @@ class RequestProcessor( initMetaDataAtMtbFile(mtbFile) val personIdentifierValue = extractPatientIdentifier(mtbFile) - val requestDate = Date.from(Instant.now(Clock.system(ZoneId.of("ECT")))) + val requestDate = Date.from(Instant.now(Clock.systemUTC())) // 1. Broad consent Entry exists? // 1.1. -> yes and research consent is given -> send mtb file @@ -192,7 +190,7 @@ class RequestProcessor( mtbFile: Mtb, broadConsent: Bundle ) { broadConsent.entry.forEach { it -> - mtbFile.metadata.researchConsents.add(mapOf(it.resource.id to it as IBaseResource)) + mtbFile.metadata.researchConsents.add(mapOf(it.resource.id to it.resource as Consent)) } }