1
0
mirror of https://github.com/pcvolkmer/etl-processor.git synced 2025-04-19 17:26:51 +00:00

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.
This commit is contained in:
Paul-Christian Volkmer 2023-07-27 23:16:19 +02:00
parent 90c5b81c2b
commit aa5b35970a
4 changed files with 24 additions and 35 deletions

View File

@ -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();

View File

@ -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(

View File

@ -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<String, String>,
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)
)

View File

@ -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 }