Skip to content

Commit f86e377

Browse files
committed
v1.8.0-DEV1: Moved classes to packages to make them mpre compatible with Java Maven
1 parent f0694a4 commit f86e377

File tree

21 files changed

+238
-101
lines changed

21 files changed

+238
-101
lines changed

columns-parser/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ buildscript {
1010

1111
val projectVersion: String by project
1212

13-
group = "de.unimuenster.imi.fhir"
13+
group = "de.unimuenster.imi.fhir.columns_parser"
1414
version = projectVersion
1515

1616
plugins {

columns-parser/src/commonMain/kotlin/columns-model.kt renamed to columns-parser/src/commonMain/kotlin/de/unimuenster/imi/fhir/columns_parser/columns-model.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
package de.unimuenster.imi.fhir.columns_parser
2+
13
import kotlin.js.JsExport
24

35
@JsExport

columns-parser/src/commonMain/kotlin/columns-parser.kt renamed to columns-parser/src/commonMain/kotlin/de/unimuenster/imi/fhir/columns_parser/columns-parser.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
package de.unimuenster.imi.fhir.columns_parser
2+
13
import com.strumenta.antlrkotlin.examples.ColumnsLexer
24
import com.strumenta.antlrkotlin.examples.ColumnsTokens
35
import org.antlr.v4.kotlinruntime.CharStreams

columns-parser/src/jvmTest/kotlin/tests.kt

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
import de.unimuenster.imi.fhir.columns_parser.Column
2+
import de.unimuenster.imi.fhir.columns_parser.ExplodeLong
3+
import de.unimuenster.imi.fhir.columns_parser.ExplodeWide
4+
import de.unimuenster.imi.fhir.columns_parser.Join
5+
import de.unimuenster.imi.fhir.columns_parser.Singleton
6+
import de.unimuenster.imi.fhir.columns_parser.parseColumns
7+
import de.unimuenster.imi.fhir.columns_parser.stringifyColumns
18
import kotlin.test.Test
29
import kotlin.test.assertEquals
310
import kotlin.test.assertTrue
@@ -46,12 +53,13 @@ class Tests {
4653

4754
@Test
4855
fun explodeLong() {
49-
val columns = parseColumns("name:Patient.name@explodeLong(given:this.given,family:family),gender:gender")
56+
val columns =
57+
parseColumns("name:Patient.name@explodeLong(given:this.given,family:family),gender:gender")
5058
assertEquals(
51-
Column(
52-
name = "name",
53-
type = ExplodeLong(
54-
arrayOf(
59+
Column(
60+
name = "name",
61+
type = ExplodeLong(
62+
arrayOf(
5563
Column("given", "this.given", null),
5664
Column("family", "family", null)
5765
)

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
kotlin.code.style=official
2-
projectVersion=1.7.11
2+
projectVersion=1.8.0-DEV1
33
hapi_version=7.6.1

src/main/kotlin/fhirextinguisher/FhirExtinguisher.kt

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
11
package fhirextinguisher
22

3-
import BundleTransformer
4-
import BundleWrapper
5-
import Column
6-
import FhirPathEngineWrapperR4
7-
import FhirPathEngineWrapperSTU3
8-
import ResultTable
9-
import SubTable
10-
import TransformationParameters
3+
import de.unimuenster.imi.fhir.transform.BundleTransformer
4+
import de.unimuenster.imi.fhir.transform.BundleWrapper
5+
import de.unimuenster.imi.fhir.columns_parser.Column
6+
import de.unimuenster.imi.fhir.transform.FhirPathEngineWrapperR4
7+
import de.unimuenster.imi.fhir.transform.FhirPathEngineWrapperSTU3
8+
import de.unimuenster.imi.fhir.transform.ResultTable
9+
import de.unimuenster.imi.fhir.transform.SubTable
10+
import de.unimuenster.imi.fhir.transform.TransformationParameters
1111
import ca.uhn.fhir.context.FhirContext
1212
import ca.uhn.fhir.context.FhirVersionEnum
1313
import ca.uhn.fhir.rest.client.api.IClientInterceptor
14+
import de.unimuenster.imi.fhir.transform.RDataType
1415
import io.ktor.server.application.*
1516
import io.ktor.http.*
1617
import io.ktor.http.Parameters
@@ -26,7 +27,7 @@ import org.apache.commons.csv.CSVFormat
2627
import org.apache.commons.csv.CSVPrinter
2728
import org.hl7.fhir.instance.model.api.IBaseResource
2829
import org.hl7.fhir.r4.model.*
29-
import parseColumns
30+
import de.unimuenster.imi.fhir.columns_parser.parseColumns
3031
import java.time.LocalDateTime
3132
import java.time.format.DateTimeFormatter
3233

@@ -103,7 +104,7 @@ class FhirExtinguisher(
103104
val resultTables = mutableListOf<SubTable>()
104105
for (bundleEntry in bundleWrapper.entry) {
105106
resultTables += bundleTransformer.processBundleEntry(
106-
transformationParameters.columns!!,
107+
transformationParameters,
107108
bundleEntry,
108109
jsonParser.encodeResourceToString(bundleEntry.resource as IBaseResource)
109110
)
@@ -139,7 +140,7 @@ class FhirExtinguisher(
139140

140141
try {
141142

142-
val resultTable = processWithColumns(bundleUrl, fhirParams, transformationParameters.limit, transformationParameters.columns!!)
143+
val resultTable = processWithColumns(bundleUrl, fhirParams, transformationParameters)
143144
call.response.header(
144145
HttpHeaders.ContentDisposition, attachment("${defaultCsvFileName(bundleUrl, fhirParams)}.csv")
145146
)
@@ -174,8 +175,7 @@ class FhirExtinguisher(
174175
private fun processWithColumns(
175176
uri: String?,
176177
fhirParams: String,
177-
limit: Int?,
178-
columns: List<Column>
178+
transformationParameters: TransformationParameters
179179
): ResultTable {
180180
var count = 0
181181
var nextUrl: String? = "$uri?$fhirParams"
@@ -190,11 +190,11 @@ class FhirExtinguisher(
190190
val bundle = fhirClient.fetchResourceFromUrl(bundleClass, nextUrl)
191191
val bundleWrapper = BundleWrapper(bundleDefintion, bundle)
192192
nextUrl = bundleWrapper.link.find { it.relation == "next" }?.url
193-
cacheBundleReference(bundleWrapper, columns)
193+
cacheBundleReference(bundleWrapper, transformationParameters.columns!!)
194194
for (bundleEntry in bundleWrapper.entry) {
195-
subtables += bundleTransformer.processBundleEntry(columns, bundleEntry)
195+
subtables += bundleTransformer.processBundleEntry(transformationParameters, bundleEntry)
196196
count++
197-
if (limit != null && count >= limit) {
197+
if (transformationParameters.limit != null && count >= transformationParameters.limit as Int) {
198198
break@myloop;
199199
}
200200
}

transform-fhir/build.gradle.kts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ plugins {
66

77
val projectVersion: String by project
88

9-
group = "de.unimuenster.imi.fhir"
9+
group = "de.unimuenster.imi.fhir.transform"
1010
version = projectVersion
1111

1212
repositories {
@@ -27,6 +27,7 @@ dependencies {
2727
implementation("ca.uhn.hapi.fhir:hapi-fhir-structures-r4:$hapi_version")
2828
implementation("ca.uhn.hapi.fhir:hapi-fhir-structures-dstu3:$hapi_version")
2929
implementation("ca.uhn.hapi.fhir:hapi-fhir-validation:$hapi_version")
30+
implementation("ca.uhn.hapi.fhir:hapi-fhir-caching-caffeine:$hapi_version")
3031
implementation("ca.uhn.hapi.fhir:hapi-fhir-validation-resources-r4:$hapi_version")
3132
// implementation("com.github.ben-manes.caffeine:caffeine:2.8.8")
3233
implementation("org.fhir:ucum:1.0.9")

transform-fhir/src/main/kotlin/TransformationParameters.kt

Lines changed: 0 additions & 7 deletions
This file was deleted.

transform-fhir/src/main/kotlin/BundleTransformer.kt renamed to transform-fhir/src/main/kotlin/de/unimuenster/imi/fhir/transform/BundleTransformer.kt

Lines changed: 27 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
package de.unimuenster.imi.fhir.transform
2+
13
import ca.uhn.fhir.context.FhirContext
24
import ca.uhn.fhir.context.FhirVersionEnum
35
import mu.KotlinLogging
@@ -6,7 +8,7 @@ import org.hl7.fhir.instance.model.api.IBase
68
import org.hl7.fhir.instance.model.api.IBaseResource
79

810
class BundleTransformer(private val fhirContext: FhirContext) {
9-
private val log = KotlinLogging.logger("BundleTransformer")
11+
private val log = KotlinLogging.logger("de.unimuenster.imi.fhir.transform.BundleTransformer")
1012
private val fhirClient = fhirContext.newRestfulGenericClient("http://local/fhir")
1113
private val fhirPathEngine = if (fhirContext.version.version == FhirVersionEnum.DSTU3) {
1214
FhirPathEngineWrapperSTU3(fhirContext, fhirClient)
@@ -15,15 +17,14 @@ class BundleTransformer(private val fhirContext: FhirContext) {
1517
}
1618

1719
fun processBundle(
18-
resourceString: String,
19-
transformationParameters: TransformationParameters
20+
resourceString: String, transformationParameters: TransformationParameters
2021
): String {
2122
val jsonParser = fhirContext.newJsonParser()
2223

2324
val resource: IBase
2425
try {
25-
resource = jsonParser.parseResource(resourceString)
26-
} catch(e: Exception) {
26+
resource = jsonParser.parseResource(resourceString)
27+
} catch (e: Exception) {
2728
log.error("Could not convert resource to Bundle instance: ", e)
2829
throw Exception("ConversionError")
2930
}
@@ -34,9 +35,9 @@ class BundleTransformer(private val fhirContext: FhirContext) {
3435
val resultTables = mutableListOf<SubTable>()
3536
for (bundleEntry in bundleWrapper.entry) {
3637
resultTables += processBundleEntry(
37-
transformationParameters.columns!!,
38+
transformationParameters,
3839
bundleEntry,
39-
jsonParser.encodeResourceToString(bundleEntry.resource as IBaseResource)
40+
if (transformationParameters.addRaw) jsonParser.encodeResourceToString(bundleEntry.resource as IBaseResource) else null
4041
)
4142
}
4243

@@ -49,20 +50,34 @@ class BundleTransformer(private val fhirContext: FhirContext) {
4950
}
5051

5152
fun processBundleEntry(
52-
columns: List<Column>,
53+
transformationParameters: TransformationParameters,
5354
bundleEntry: BundleEntryComponentWrapper,
5455
addRaw: String? = null
5556
): SubTable {
5657
val table = SubTable()
5758
if (addRaw != null) {
58-
table.addColumn("\$raw", addRaw)
59+
if (transformationParameters.addResourceNameToColumn) {
60+
table.addColumn("${bundleEntry.resource?.fhirType()}.\$raw", addRaw)
61+
} else table.addColumn("\$raw", addRaw)
5962
}
6063

61-
for (column in columns) {
64+
for (column in transformationParameters.columns!!) {
6265
try {
63-
table.addColumn(column, bundleEntry.resource!!, fhirPathEngine)
66+
table.addColumn(
67+
column,
68+
bundleEntry.resource!!,
69+
fhirPathEngine,
70+
transformationParameters.addResourceNameToColumn
71+
)
6472
} catch (e: Exception) {
65-
table.addColumn(column.name, e.message ?: "ERROR")
73+
if (transformationParameters.addResourceNameToColumn) {
74+
table.addColumn(
75+
"${bundleEntry.resource?.fhirType()}.${column.name}",
76+
e.message ?: "ERROR"
77+
)
78+
} else {
79+
table.addColumn(column.name, e.message ?: "ERROR")
80+
}
6681
}
6782
}
6883
return table

transform-fhir/src/main/kotlin/BundleWrapper.kt renamed to transform-fhir/src/main/kotlin/de/unimuenster/imi/fhir/transform/BundleWrapper.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
package de.unimuenster.imi.fhir.transform
2+
13
import ca.uhn.fhir.context.BaseRuntimeElementCompositeDefinition
24
import org.hl7.fhir.instance.model.api.IBase
35
import java.beans.Introspector

0 commit comments

Comments
 (0)