summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul-Christian Volkmer2023-10-05 12:09:56 +0200
committerPaul-Christian Volkmer2023-10-05 12:09:56 +0200
commit4196664060e879c6159d7986a145f28be3c1798a (patch)
tree99073d2769f549a7296fd09414910ab13646968f
parent2824951e5ec3cfc19e595a323d6eb884f87f7b79 (diff)
Issue #12: Transform MTBFile objects by using transformation rules
-rw-r--r--src/main/kotlin/dev/dnpm/etl/processor/config/AppConfiguration.kt10
-rw-r--r--src/main/kotlin/dev/dnpm/etl/processor/services/RequestProcessor.kt3
-rw-r--r--src/main/kotlin/dev/dnpm/etl/processor/services/TransformationService.kt4
-rw-r--r--src/test/kotlin/dev/dnpm/etl/processor/services/RequestProcessorTest.kt21
-rw-r--r--src/test/kotlin/dev/dnpm/etl/processor/services/TransformationServiceTest.kt25
5 files changed, 41 insertions, 22 deletions
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 ccc4b78..70ae0f5 100644
--- a/src/main/kotlin/dev/dnpm/etl/processor/config/AppConfiguration.kt
+++ b/src/main/kotlin/dev/dnpm/etl/processor/config/AppConfiguration.kt
@@ -26,6 +26,7 @@ import dev.dnpm.etl.processor.pseudonym.Generator
import dev.dnpm.etl.processor.pseudonym.GpasPseudonymGenerator
import dev.dnpm.etl.processor.pseudonym.PseudonymizeService
import dev.dnpm.etl.processor.services.Transformation
+import dev.dnpm.etl.processor.services.TransformationService
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
import org.springframework.boot.context.properties.EnableConfigurationProperties
import org.springframework.context.annotation.Bean
@@ -73,10 +74,13 @@ class AppConfiguration {
}
@Bean
- fun transformations(configProperties: AppConfigProperties): List<Transformation> {
- return configProperties.transformations.map {
+ fun transformationService(
+ objectMapper: ObjectMapper,
+ configProperties: AppConfigProperties
+ ): TransformationService {
+ return TransformationService(objectMapper, configProperties.transformations.map {
Transformation.of(it.path) from it.from to it.to
- }
+ })
}
}
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 3cd912c..fd9a3f5 100644
--- a/src/main/kotlin/dev/dnpm/etl/processor/services/RequestProcessor.kt
+++ b/src/main/kotlin/dev/dnpm/etl/processor/services/RequestProcessor.kt
@@ -38,6 +38,7 @@ import java.util.*
@Service
class RequestProcessor(
private val pseudonymizeService: PseudonymizeService,
+ private val transformationService: TransformationService,
private val sender: MtbFileSender,
private val requestService: RequestService,
private val objectMapper: ObjectMapper,
@@ -50,7 +51,7 @@ class RequestProcessor(
mtbFile pseudonymizeWith pseudonymizeService
- val request = MtbFileSender.MtbFileRequest(requestId, mtbFile)
+ val request = MtbFileSender.MtbFileRequest(requestId, transformationService.transform(mtbFile))
requestService.save(
Request(
diff --git a/src/main/kotlin/dev/dnpm/etl/processor/services/TransformationService.kt b/src/main/kotlin/dev/dnpm/etl/processor/services/TransformationService.kt
index f33900d..26de550 100644
--- a/src/main/kotlin/dev/dnpm/etl/processor/services/TransformationService.kt
+++ b/src/main/kotlin/dev/dnpm/etl/processor/services/TransformationService.kt
@@ -24,8 +24,8 @@ import com.jayway.jsonpath.JsonPath
import com.jayway.jsonpath.PathNotFoundException
import de.ukw.ccc.bwhc.dto.MtbFile
-class TransformationService(private val objectMapper: ObjectMapper) {
- fun transform(mtbFile: MtbFile, vararg transformations: Transformation): MtbFile {
+class TransformationService(private val objectMapper: ObjectMapper, private val transformations: List<Transformation>) {
+ fun transform(mtbFile: MtbFile): MtbFile {
var json = objectMapper.writeValueAsString(mtbFile)
transformations.forEach { transformation ->
diff --git a/src/test/kotlin/dev/dnpm/etl/processor/services/RequestProcessorTest.kt b/src/test/kotlin/dev/dnpm/etl/processor/services/RequestProcessorTest.kt
index 7856833..9aaa091 100644
--- a/src/test/kotlin/dev/dnpm/etl/processor/services/RequestProcessorTest.kt
+++ b/src/test/kotlin/dev/dnpm/etl/processor/services/RequestProcessorTest.kt
@@ -37,6 +37,7 @@ import org.mockito.Mockito.*
import org.mockito.junit.jupiter.MockitoExtension
import org.mockito.kotlin.any
import org.mockito.kotlin.argumentCaptor
+import org.mockito.kotlin.whenever
import org.springframework.context.ApplicationEventPublisher
import java.time.Instant
import java.util.*
@@ -46,6 +47,7 @@ import java.util.*
class RequestProcessorTest {
private lateinit var pseudonymizeService: PseudonymizeService
+ private lateinit var transformationService: TransformationService
private lateinit var sender: MtbFileSender
private lateinit var requestService: RequestService
private lateinit var applicationEventPublisher: ApplicationEventPublisher
@@ -55,11 +57,13 @@ class RequestProcessorTest {
@BeforeEach
fun setup(
@Mock pseudonymizeService: PseudonymizeService,
+ @Mock transformationService: TransformationService,
@Mock sender: RestMtbFileSender,
@Mock requestService: RequestService,
@Mock applicationEventPublisher: ApplicationEventPublisher
) {
this.pseudonymizeService = pseudonymizeService
+ this.transformationService = transformationService
this.sender = sender
this.requestService = requestService
this.applicationEventPublisher = applicationEventPublisher
@@ -68,6 +72,7 @@ class RequestProcessorTest {
requestProcessor = RequestProcessor(
pseudonymizeService,
+ transformationService,
sender,
requestService,
objectMapper,
@@ -98,6 +103,10 @@ class RequestProcessorTest {
it.arguments[0] as String
}.`when`(pseudonymizeService).patientPseudonym(any())
+ doAnswer {
+ it.arguments[0]
+ }.whenever(transformationService).transform(any())
+
val mtbFile = MtbFile.builder()
.withPatient(
Patient.builder()
@@ -153,6 +162,10 @@ class RequestProcessorTest {
it.arguments[0] as String
}.`when`(pseudonymizeService).patientPseudonym(any())
+ doAnswer {
+ it.arguments[0]
+ }.whenever(transformationService).transform(any())
+
val mtbFile = MtbFile.builder()
.withPatient(
Patient.builder()
@@ -212,6 +225,10 @@ class RequestProcessorTest {
it.arguments[0] as String
}.`when`(pseudonymizeService).patientPseudonym(any())
+ doAnswer {
+ it.arguments[0]
+ }.whenever(transformationService).transform(any())
+
val mtbFile = MtbFile.builder()
.withPatient(
Patient.builder()
@@ -271,6 +288,10 @@ class RequestProcessorTest {
it.arguments[0] as String
}.`when`(pseudonymizeService).patientPseudonym(any())
+ doAnswer {
+ it.arguments[0]
+ }.whenever(transformationService).transform(any())
+
val mtbFile = MtbFile.builder()
.withPatient(
Patient.builder()
diff --git a/src/test/kotlin/dev/dnpm/etl/processor/services/TransformationServiceTest.kt b/src/test/kotlin/dev/dnpm/etl/processor/services/TransformationServiceTest.kt
index 5b34562..487b502 100644
--- a/src/test/kotlin/dev/dnpm/etl/processor/services/TransformationServiceTest.kt
+++ b/src/test/kotlin/dev/dnpm/etl/processor/services/TransformationServiceTest.kt
@@ -34,15 +34,16 @@ class TransformationServiceTest {
@BeforeEach
fun setup() {
- this.service = TransformationService(ObjectMapper())
+ this.service = TransformationService(
+ ObjectMapper(), listOf(
+ Transformation.of("consent.status") from Consent.Status.ACTIVE to Consent.Status.REJECTED,
+ Transformation.of("diagnoses[*].icd10.version") from "2013" to "2014",
+ )
+ )
}
@Test
fun shouldTransformMtbFile() {
- val transformations = arrayOf(
- Transformation.of("diagnoses[*].icd10.version") from "2013" to "2014",
- )
-
val mtbFile = MtbFile.builder().withDiagnoses(
listOf(
Diagnosis.builder().withId("1234").withIcd10(Icd10("F79.9").also {
@@ -51,7 +52,7 @@ class TransformationServiceTest {
)
).build()
- val actual = this.service.transform(mtbFile, *transformations)
+ val actual = this.service.transform(mtbFile)
assertThat(actual).isNotNull
assertThat(actual.diagnoses[0].icd10.version).isEqualTo("2014")
@@ -59,10 +60,6 @@ class TransformationServiceTest {
@Test
fun shouldOnlyTransformGivenValues() {
- val transformations = arrayOf(
- Transformation.of("diagnoses[*].icd10.version") from "2013" to "2014",
- )
-
val mtbFile = MtbFile.builder().withDiagnoses(
listOf(
Diagnosis.builder().withId("1234").withIcd10(Icd10("F79.9").also {
@@ -74,7 +71,7 @@ class TransformationServiceTest {
)
).build()
- val actual = this.service.transform(mtbFile, *transformations)
+ val actual = this.service.transform(mtbFile)
assertThat(actual).isNotNull
assertThat(actual.diagnoses[0].icd10.code).isEqualTo("F79.9")
@@ -85,15 +82,11 @@ class TransformationServiceTest {
@Test
fun shouldTransformMtbFileWithConsentEnum() {
- val transformations = arrayOf(
- Transformation.of("consent.status") from Consent.Status.ACTIVE to Consent.Status.REJECTED,
- )
-
val mtbFile = MtbFile.builder().withConsent(
Consent("123", "456", Consent.Status.ACTIVE)
).build()
- val actual = this.service.transform(mtbFile, *transformations)
+ val actual = this.service.transform(mtbFile)
assertThat(actual.consent).isNotNull
assertThat(actual.consent.status).isEqualTo(Consent.Status.REJECTED)