From aa5b35970af967e972edd6ed435d75184b36d4d5 Mon Sep 17 00:00:00 2001 From: Paul-Christian Volkmer Date: Thu, 27 Jul 2023 23:16:19 +0200 Subject: [PATCH] Code polish for PR * Do not use component creation using annotation on classes since components will be created within AppConfiguration config class * Patient PseudonymizeService intentionally uses prefix. If no prefix is configured, the default value "UNKNOWN" will be used to prevent conflicts with other organizations and to show the source organization. --- .../pseudonym/GpasPseudonymGenerator.java | 43 ++++++++----------- .../etl/processor/config/AppConfiguration.kt | 6 ++- .../processor/output/KafkaMtbFileSender.kt | 5 +-- .../pseudonym/PseudonymizeService.kt | 5 +-- 4 files changed, 24 insertions(+), 35 deletions(-) diff --git a/src/main/java/dev/dnpm/etl/processor/pseudonym/GpasPseudonymGenerator.java b/src/main/java/dev/dnpm/etl/processor/pseudonym/GpasPseudonymGenerator.java index 8b93cdc..f13a034 100644 --- a/src/main/java/dev/dnpm/etl/processor/pseudonym/GpasPseudonymGenerator.java +++ b/src/main/java/dev/dnpm/etl/processor/pseudonym/GpasPseudonymGenerator.java @@ -22,21 +22,6 @@ package dev.dnpm.etl.processor.pseudonym; import ca.uhn.fhir.context.FhirContext; import ca.uhn.fhir.parser.IParser; import dev.dnpm.etl.processor.config.GPasConfigProperties; -import java.io.BufferedInputStream; -import java.io.FileInputStream; -import java.io.IOException; -import java.net.ConnectException; -import java.security.KeyManagementException; -import java.security.KeyStore; -import java.security.KeyStoreException; -import java.security.NoSuchAlgorithmException; -import java.security.cert.CertificateException; -import java.security.cert.CertificateFactory; -import java.security.cert.X509Certificate; -import java.util.Base64; -import java.util.HashMap; -import javax.net.ssl.SSLContext; -import javax.net.ssl.TrustManagerFactory; import org.apache.commons.lang3.StringUtils; import org.apache.hc.client5.http.impl.classic.CloseableHttpClient; import org.apache.hc.client5.http.impl.classic.HttpClients; @@ -54,13 +39,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.http.HttpEntity; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpMethod; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; +import org.springframework.http.*; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.retry.RetryCallback; import org.springframework.retry.RetryContext; @@ -69,12 +48,25 @@ import org.springframework.retry.RetryPolicy; import org.springframework.retry.backoff.ExponentialBackOffPolicy; import org.springframework.retry.policy.SimpleRetryPolicy; import org.springframework.retry.support.RetryTemplate; -import org.springframework.stereotype.Component; import org.springframework.web.client.RestClientException; import org.springframework.web.client.RestTemplate; -@Component -@ConditionalOnProperty(value = "app.pseudonymizer", havingValue = "GPAS") +import javax.net.ssl.SSLContext; +import javax.net.ssl.TrustManagerFactory; +import java.io.BufferedInputStream; +import java.io.FileInputStream; +import java.io.IOException; +import java.net.ConnectException; +import java.security.KeyManagementException; +import java.security.KeyStore; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; +import java.security.cert.CertificateException; +import java.security.cert.CertificateFactory; +import java.security.cert.X509Certificate; +import java.util.Base64; +import java.util.HashMap; + public class GpasPseudonymGenerator implements Generator { private final String gPasUrl; @@ -89,7 +81,6 @@ public class GpasPseudonymGenerator implements Generator { private SSLContext customSslContext; private RestTemplate restTemplate; - @Autowired public GpasPseudonymGenerator(GPasConfigProperties gpasCfg) { this.gPasUrl = gpasCfg.getUri(); diff --git a/src/main/kotlin/dev/dnpm/etl/processor/config/AppConfiguration.kt b/src/main/kotlin/dev/dnpm/etl/processor/config/AppConfiguration.kt index 50d848a..c677f2b 100644 --- a/src/main/kotlin/dev/dnpm/etl/processor/config/AppConfiguration.kt +++ b/src/main/kotlin/dev/dnpm/etl/processor/config/AppConfiguration.kt @@ -24,14 +24,16 @@ import dev.dnpm.etl.processor.monitoring.ReportService import dev.dnpm.etl.processor.output.KafkaMtbFileSender import dev.dnpm.etl.processor.output.MtbFileSender import dev.dnpm.etl.processor.output.RestMtbFileSender -import dev.dnpm.etl.processor.pseudonym.* +import dev.dnpm.etl.processor.pseudonym.AnonymizingGenerator +import dev.dnpm.etl.processor.pseudonym.Generator +import dev.dnpm.etl.processor.pseudonym.GpasPseudonymGenerator +import dev.dnpm.etl.processor.pseudonym.PseudonymizeService import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty import org.springframework.boot.context.properties.EnableConfigurationProperties import org.springframework.context.annotation.Bean import org.springframework.context.annotation.Configuration import org.springframework.kafka.core.KafkaTemplate import reactor.core.publisher.Sinks -import java.net.URI @Configuration @EnableConfigurationProperties( diff --git a/src/main/kotlin/dev/dnpm/etl/processor/output/KafkaMtbFileSender.kt b/src/main/kotlin/dev/dnpm/etl/processor/output/KafkaMtbFileSender.kt index 4bb0206..9867deb 100644 --- a/src/main/kotlin/dev/dnpm/etl/processor/output/KafkaMtbFileSender.kt +++ b/src/main/kotlin/dev/dnpm/etl/processor/output/KafkaMtbFileSender.kt @@ -23,9 +23,7 @@ import com.fasterxml.jackson.databind.ObjectMapper import de.ukw.ccc.bwhc.dto.MtbFile import org.slf4j.LoggerFactory import org.springframework.kafka.core.KafkaTemplate -import org.springframework.stereotype.Component -@Component class KafkaMtbFileSender( private val kafkaTemplate: KafkaTemplate, private val objectMapper: ObjectMapper @@ -37,7 +35,8 @@ class KafkaMtbFileSender( return try { val result = kafkaTemplate.sendDefault( String.format( - "{\"pid\": \"%s\", \"eid\": \"%s\"}", mtbFile.patient.id, + "{\"pid\": \"%s\", \"eid\": \"%s\"}", + mtbFile.patient.id, mtbFile.episode.id ), objectMapper.writeValueAsString(mtbFile) ) diff --git a/src/main/kotlin/dev/dnpm/etl/processor/pseudonym/PseudonymizeService.kt b/src/main/kotlin/dev/dnpm/etl/processor/pseudonym/PseudonymizeService.kt index 21e0f9a..364e296 100644 --- a/src/main/kotlin/dev/dnpm/etl/processor/pseudonym/PseudonymizeService.kt +++ b/src/main/kotlin/dev/dnpm/etl/processor/pseudonym/PseudonymizeService.kt @@ -19,7 +19,6 @@ package dev.dnpm.etl.processor.pseudonym -import ca.uhn.fhir.util.StringUtil import de.ukw.ccc.bwhc.dto.MtbFile import dev.dnpm.etl.processor.config.PseudonymizeConfigProperties @@ -29,9 +28,7 @@ class PseudonymizeService( ) { fun pseudonymize(mtbFile: MtbFile): MtbFile { - val patientPseudonym: String = if(configProperties.prefix.isNotEmpty()) - "${configProperties.prefix}_${generator.generate(mtbFile.patient.id)}" - else generator.generate(mtbFile.patient.id) + val patientPseudonym = "${configProperties.prefix}_${generator.generate(mtbFile.patient.id)}" mtbFile.episode.patient = patientPseudonym mtbFile.carePlans.forEach { it.patient = patientPseudonym }