From 76e21abf96f30675afe75ce3141c2c772dc0b5de Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Thu, 11 Jan 2024 16:39:14 +1000
Subject: [PATCH 001/175] Update code examples on Spark installation page
---
site/docs/libraries/installation/spark.md | 46 ++++++++++++++++++-----
1 file changed, 36 insertions(+), 10 deletions(-)
diff --git a/site/docs/libraries/installation/spark.md b/site/docs/libraries/installation/spark.md
index 38f538319d..3ad8d7edb2 100644
--- a/site/docs/libraries/installation/spark.md
+++ b/site/docs/libraries/installation/spark.md
@@ -28,22 +28,45 @@ import TabItem from "@theme/TabItem";
```python
-from pathling import PathlingContext, find_jar
+from pathling import PathlingContext
from pyspark.sql import SparkSession
spark = (
- SparkSession.builder
- .config("spark.jars", find_jar())
- .config("spark.jars.packages", "io.delta:delta-core_2.12:2.2.0")
- .config("spark.sql.extensions", "io.delta.sql.DeltaSparkSessionExtension")
- .config("spark.sql.catalog.spark_catalog",
- "org.apache.spark.sql.delta.catalog.DeltaCatalog")
- .getOrCreate()
+ SparkSession.builder.config(
+ "spark.jars.packages",
+ "au.csiro.pathling:library-runtime:6.4.2,"
+ "io.delta:delta-core_2.12:2.4.0,"
+ )
+ .config(
+ "spark.sql.extensions", "io.delta.sql.DeltaSparkSessionExtension"
+ )
+ .config(
+ "spark.sql.catalog.spark_catalog",
+ "org.apache.spark.sql.delta.catalog.DeltaCatalog",
+ )
)
pc = PathlingContext.create(spark)
```
+
+
+
+```r
+library(sparklyr)
+library(pathling)
+
+sc <- spark_connect(master = "local",
+ packages = c(paste("au.csiro.pathling:library-runtime:", pathling_version()),
+ "io.delta:delta-core_2.12:2.4.0"),
+ config = list("sparklyr.shell.conf" = c(
+ "spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension",
+ "spark.sql.catalog.spark_catalog=org.apache.spark.sql.delta.catalog.DeltaCatalog"
+ )), version = "3.4.0")
+
+pc <- pathling_connect(sc)
+```
+
@@ -51,7 +74,8 @@ pc = PathlingContext.create(spark)
import au.csiro.pathling.library.PathlingContext
val spark = SparkSession.builder
- .config("spark.jars.packages", "io.delta:delta-core_2.12:2.2.0")
+ .config("spark.jars.packages", "au.csiro.pathling:library-runtime:6.4.2," +
+ "io.delta:delta-core_2.12:2.4.0")
.config("spark.sql.extensions", "io.delta.sql.DeltaSparkSessionExtension")
.config("spark.sql.catalog.spark_catalog",
"org.apache.spark.sql.delta.catalog.DeltaCatalog")
@@ -71,7 +95,9 @@ class MyApp {
public static void main(String[] args) {
SparkSession spark = SparkSession.builder()
- .config("spark.jars.packages", "io.delta:delta-core_2.12:2.2.0")
+ .config("spark.jars.packages",
+ "au.csiro.pathling:library-runtime:6.4.2," +
+ "io.delta:delta-core_2.12:2.4.0")
.config("spark.sql.extensions",
"io.delta.sql.DeltaSparkSessionExtension")
.config("spark.sql.catalog.spark_catalog",
From cef7711fef8690c4bc1c4edd79e3b63ce33a3959 Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Wed, 7 Feb 2024 13:48:09 +1000
Subject: [PATCH 002/175] Add schema specification to docs
---
.../{encoders.md => encoders/index.md} | 0
site/docs/libraries/encoders/schema.md | 518 ++++++++++++++++++
2 files changed, 518 insertions(+)
rename site/docs/libraries/{encoders.md => encoders/index.md} (100%)
create mode 100644 site/docs/libraries/encoders/schema.md
diff --git a/site/docs/libraries/encoders.md b/site/docs/libraries/encoders/index.md
similarity index 100%
rename from site/docs/libraries/encoders.md
rename to site/docs/libraries/encoders/index.md
diff --git a/site/docs/libraries/encoders/schema.md b/site/docs/libraries/encoders/schema.md
new file mode 100644
index 0000000000..2cd29500c2
--- /dev/null
+++ b/site/docs/libraries/encoders/schema.md
@@ -0,0 +1,518 @@
+# Schema specification
+
+This specification describes a scheme for encoding resource definitions from the
+FHIR specification as a Spark SQL schema.
+
+The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "
+SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be
+interpreted as described in [RFC 2119](https://www.ietf.org/rfc/rfc2119.txt).
+
+## Version compatibility
+
+The following versions of FHIR are supported by this specification:
+
+- [4.0.1 (R4)](https://hl7.org/fhir/R4)
+
+## Resource type support
+
+All R4 resource types are supported by this specification, except the following:
+
+- Parameters
+- Task
+- StructureDefinition
+- StructureMap
+- Bundle
+
+## Configuration options
+
+There are several options that determine the encoding strategy. Schemas that
+have been encoded according to this specification with the same configuration
+values SHALL be identical and compatible.
+
+| Option | Description |
+|----------------------------|-----------------------------------------------------------|
+| Maximum nesting level | The maximum depth of nested element data that is encoded. |
+| Extension encoding enabled | Whether extension content is included within the schema. |
+| Supported open types | The list of types that are encoded for open choice types. |
+
+## Out of scope
+
+The following areas are not currently supported by this specification:
+
+- Primitive extensions
+- Profiled resources
+
+## Encoding strategy
+
+All columns and struct fields SHALL be encoded as nullable, unless otherwise
+specified.
+
+### Primitive elements
+
+Each primitive element within a resource definition SHALL be encoded as a column
+within the schema with the same name (except where otherwise specified). The
+data type SHALL be determined by the element type according to the following
+table:
+
+| FHIR type | Spark SQL type | Additional requirements |
+|-----------------|----------------|--------------------------------------------------------------------------------------------------|
+| boolean | boolean | |
+| canonical | string | Compliant with the [FHIR canonical format](https://hl7.org/fhir/R4/datatypes.html#canonical) |
+| code | string | Compliant with the [FHIR code format](https://hl7.org/fhir/R4/datatypes.html#code) |
+| dateTime | string | Compliant with the [FHIR dateTime format](https://hl7.org/fhir/R4/datatypes.html#dateTime) |
+| date | string | Compliant with the [FHIR date format](https://hl7.org/fhir/R4/datatypes.html#date) |
+| decimal | decimal(32,6) | See [Decimal encoding](#decimal-encoding) |
+| id | string | See [ID encoding](#id-encoding) |
+| instant | timestamp | |
+| integer | integer | Compliant with the [FHIR integer format](https://hl7.org/fhir/R4/datatypes.html#integer) |
+| markdown | string | Compliant with the [FHIR markdown format](https://hl7.org/fhir/R4/datatypes.html#markdown) |
+| oid | string | Compliant with the [FHIR oid format](https://hl7.org/fhir/R4/datatypes.html#oid) |
+| positiveInt | integer | Compliant with the [FHIR positiveInt format](https://hl7.org/fhir/R4/datatypes.html#positiveInt) |
+| string | string | Compliant with the [FHIR string format](https://hl7.org/fhir/R4/datatypes.html#string) |
+| time | string | Compliant with the [FHIR time format](https://hl7.org/fhir/R4/datatypes.html#time) |
+| unsignedInt | integer | Compliant with the [FHIR unsignedInt format](https://hl7.org/fhir/R4/datatypes.html#unsignedInt) |
+| uri | string | Compliant with the [FHIR uri format](https://hl7.org/fhir/R4/datatypes.html#uri) |
+| url | string | Compliant with the [FHIR url format](https://hl7.org/fhir/R4/datatypes.html#url) |
+| uuid | string | Compliant with the [FHIR uuid format](https://hl7.org/fhir/R4/datatypes.html#uuid) |
+
+#### Decimal encoding
+
+An element of type `decimal` SHALL be encoded as a decimal column with a
+precision of 32 and a scale of 6.
+
+In addition to this column, an integer column SHALL be encoded with the
+suffix `_scale`. This column SHALL contain the scale of the decimal value from
+the original FHIR data.
+
+#### ID encoding
+
+An element of type `id` SHALL be encoded as a string column. This column SHALL
+contain the FHIR resource logical ID.
+
+In addition to this column, a string column SHALL be encoded with the
+suffix `_versioned`. This column SHALL contain a fully qualified logical ID,
+including the resource type and the technical version. The data in this column
+SHALL follow the format `[resource type]/[logical ID]/_history/[version]`.
+
+### Choice types
+
+If the choice type is open (i.e. a type of `*`), the struct SHALL contain a
+field for each type listed in the configuration value "supported open types".
+
+If the choice type is not open, it SHALL be encoded as a struct column with a
+field for each of its valid types.
+
+The name of each field SHALL follow the format `value[type]`, where `[type]` is
+the name of the type in upper camel case.
+
+### Complex and backbone elements
+
+Each complex and backbone element within a resource definition SHALL be encoded
+as a struct column within the schema with the same name. The struct SHALL
+contain fields for each of the child elements of the complex or backbone
+element.
+
+The encoding rules for each field SHALL follow the same rules as described in
+the [primitive elements](#primitive-elements) and [choice types](#choice-types)
+section (and this section in the case of nested complex or backbone elements).
+
+If the "extension encoding enabled" option is set to true, an additional column
+SHALL be encoded with the name `_fid`. This column SHALL have a type of integer.
+This column SHALL contain a value that uniquely identifies the complex or
+backbone element within the resource.
+
+#### Quantity encoding
+
+If the complex element is of
+type [Quantity](https://hl7.org/fhir/R4/datatypes.html#Quantity), an additional
+two columns SHALL be encoded as part of the struct. These columns SHALL be
+named `_value_canonicalized` and `_code_canonicalized`.
+
+The `_value_canonicalized` column SHALL be encoded as a struct with the
+following fields:
+
+- `value` with a type of decimal, precision 38 and scale 0.
+- `scale` with a type of integer.
+
+The `_code_canonicalized` column SHALL be encoded as a string column.
+
+Implementations loading data into this schema MAY use these columns to store
+canonicalized versions of the `value` and `code` fields from the original FHIR
+data, for easier comparison and querying.
+
+### Extension encoding
+
+If the "extension encoding enabled" option is set to true, an additional column
+SHALL be encoded at the root of the schema named `_extension`. This column SHALL
+have a type of map, with an integer key and an array value.
+
+The array SHALL contain a struct type that is encoded as
+the [Extension](https://hl7.org/fhir/R4/extensibility.html#extension) type, as
+described in [Complex and backbone elements](#complex-and-backbone-elements).
+
+Implementations loading data into this schema SHALL use this column to store
+extension data from the original FHIR data (except for primitive extensions).
+The map SHALL contain a reference to the `_fid` of the element that the
+extension is attached to.
+
+## Example
+
+The following schema is an example of the encoding of
+the [Patient](https://hl7.org/fhir/R4/patient.html) resource type with the
+following configuration values:
+
+- Maximum nesting level: `3`
+- Extension encoding enabled: `true`
+- Supported open types: `boolean`, `code`, `date`, `dateTime`, `decimal`,
+ `integer`, `string`, `Coding`, `CodeableConcept`, `Address`, `Identifier`,
+ `Reference`
+
+```
+root
+ |-- id: string (nullable = true)
+ |-- id_versioned: string (nullable = true)
+ |-- meta: struct (nullable = true)
+ | |-- id: string (nullable = true)
+ | |-- versionId: string (nullable = true)
+ | |-- versionId_versioned: string (nullable = true)
+ | |-- lastUpdated: timestamp (nullable = true)
+ | |-- source: string (nullable = true)
+ | |-- profile: array (nullable = true)
+ | | |-- element: string (containsNull = true)
+ | |-- security: array (nullable = true)
+ | | |-- element: struct (containsNull = true)
+ | | | |-- id: string (nullable = true)
+ | | | |-- system: string (nullable = true)
+ | | | |-- version: string (nullable = true)
+ | | | |-- code: string (nullable = true)
+ | | | |-- display: string (nullable = true)
+ | | | |-- userSelected: boolean (nullable = true)
+ | | | |-- _fid: integer (nullable = true)
+ | |-- tag: array (nullable = true)
+ | | |-- element: struct (containsNull = true)
+ | | | |-- id: string (nullable = true)
+ | | | |-- system: string (nullable = true)
+ | | | |-- version: string (nullable = true)
+ | | | |-- code: string (nullable = true)
+ | | | |-- display: string (nullable = true)
+ | | | |-- userSelected: boolean (nullable = true)
+ | | | |-- _fid: integer (nullable = true)
+ | |-- _fid: integer (nullable = true)
+ |-- implicitRules: string (nullable = true)
+ |-- language: string (nullable = true)
+ |-- text: struct (nullable = true)
+ | |-- id: string (nullable = true)
+ | |-- status: string (nullable = true)
+ | |-- div: string (nullable = true)
+ | |-- _fid: integer (nullable = true)
+ |-- identifier: array (nullable = true)
+ | |-- element: struct (containsNull = true)
+ | | |-- id: string (nullable = true)
+ | | |-- use: string (nullable = true)
+ | | |-- type: struct (nullable = true)
+ | | | |-- id: string (nullable = true)
+ | | | |-- coding: array (nullable = true)
+ | | | | |-- element: struct (containsNull = true)
+ | | | | | |-- id: string (nullable = true)
+ | | | | | |-- system: string (nullable = true)
+ | | | | | |-- version: string (nullable = true)
+ | | | | | |-- code: string (nullable = true)
+ | | | | | |-- display: string (nullable = true)
+ | | | | | |-- userSelected: boolean (nullable = true)
+ | | | | | |-- _fid: integer (nullable = true)
+ | | | |-- text: string (nullable = true)
+ | | | |-- _fid: integer (nullable = true)
+ | | |-- system: string (nullable = true)
+ | | |-- value: string (nullable = true)
+ | | |-- period: struct (nullable = true)
+ | | | |-- id: string (nullable = true)
+ | | | |-- start: string (nullable = true)
+ | | | |-- end: string (nullable = true)
+ | | | |-- _fid: integer (nullable = true)
+ | | |-- assigner: struct (nullable = true)
+ | | | |-- reference: string (nullable = true)
+ | | | |-- display: string (nullable = true)
+ | | | |-- _fid: integer (nullable = true)
+ | | |-- _fid: integer (nullable = true)
+ |-- active: boolean (nullable = true)
+ |-- name: array (nullable = true)
+ | |-- element: struct (containsNull = true)
+ | | |-- id: string (nullable = true)
+ | | |-- use: string (nullable = true)
+ | | |-- text: string (nullable = true)
+ | | |-- family: string (nullable = true)
+ | | |-- given: array (nullable = true)
+ | | | |-- element: string (containsNull = true)
+ | | |-- prefix: array (nullable = true)
+ | | | |-- element: string (containsNull = true)
+ | | |-- suffix: array (nullable = true)
+ | | | |-- element: string (containsNull = true)
+ | | |-- period: struct (nullable = true)
+ | | | |-- id: string (nullable = true)
+ | | | |-- start: string (nullable = true)
+ | | | |-- end: string (nullable = true)
+ | | | |-- _fid: integer (nullable = true)
+ | | |-- _fid: integer (nullable = true)
+ |-- telecom: array (nullable = true)
+ | |-- element: struct (containsNull = true)
+ | | |-- id: string (nullable = true)
+ | | |-- system: string (nullable = true)
+ | | |-- value: string (nullable = true)
+ | | |-- use: string (nullable = true)
+ | | |-- rank: integer (nullable = true)
+ | | |-- period: struct (nullable = true)
+ | | | |-- id: string (nullable = true)
+ | | | |-- start: string (nullable = true)
+ | | | |-- end: string (nullable = true)
+ | | | |-- _fid: integer (nullable = true)
+ | | |-- _fid: integer (nullable = true)
+ |-- gender: string (nullable = true)
+ |-- birthDate: string (nullable = true)
+ |-- deceasedBoolean: boolean (nullable = true)
+ |-- deceasedDateTime: string (nullable = true)
+ |-- address: array (nullable = true)
+ | |-- element: struct (containsNull = true)
+ | | |-- id: string (nullable = true)
+ | | |-- use: string (nullable = true)
+ | | |-- type: string (nullable = true)
+ | | |-- text: string (nullable = true)
+ | | |-- line: array (nullable = true)
+ | | | |-- element: string (containsNull = true)
+ | | |-- city: string (nullable = true)
+ | | |-- district: string (nullable = true)
+ | | |-- state: string (nullable = true)
+ | | |-- postalCode: string (nullable = true)
+ | | |-- country: string (nullable = true)
+ | | |-- period: struct (nullable = true)
+ | | | |-- id: string (nullable = true)
+ | | | |-- start: string (nullable = true)
+ | | | |-- end: string (nullable = true)
+ | | | |-- _fid: integer (nullable = true)
+ | | |-- _fid: integer (nullable = true)
+ |-- maritalStatus: struct (nullable = true)
+ | |-- id: string (nullable = true)
+ | |-- coding: array (nullable = true)
+ | | |-- element: struct (containsNull = true)
+ | | | |-- id: string (nullable = true)
+ | | | |-- system: string (nullable = true)
+ | | | |-- version: string (nullable = true)
+ | | | |-- code: string (nullable = true)
+ | | | |-- display: string (nullable = true)
+ | | | |-- userSelected: boolean (nullable = true)
+ | | | |-- _fid: integer (nullable = true)
+ | |-- text: string (nullable = true)
+ | |-- _fid: integer (nullable = true)
+ |-- multipleBirthBoolean: boolean (nullable = true)
+ |-- multipleBirthInteger: integer (nullable = true)
+ |-- photo: array (nullable = true)
+ | |-- element: struct (containsNull = true)
+ | | |-- id: string (nullable = true)
+ | | |-- contentType: string (nullable = true)
+ | | |-- language: string (nullable = true)
+ | | |-- data: binary (nullable = true)
+ | | |-- url: string (nullable = true)
+ | | |-- size: integer (nullable = true)
+ | | |-- hash: binary (nullable = true)
+ | | |-- title: string (nullable = true)
+ | | |-- creation: string (nullable = true)
+ | | |-- _fid: integer (nullable = true)
+ |-- contact: array (nullable = true)
+ | |-- element: struct (containsNull = true)
+ | | |-- id: string (nullable = true)
+ | | |-- relationship: array (nullable = true)
+ | | | |-- element: struct (containsNull = true)
+ | | | | |-- id: string (nullable = true)
+ | | | | |-- coding: array (nullable = true)
+ | | | | | |-- element: struct (containsNull = true)
+ | | | | | | |-- id: string (nullable = true)
+ | | | | | | |-- system: string (nullable = true)
+ | | | | | | |-- version: string (nullable = true)
+ | | | | | | |-- code: string (nullable = true)
+ | | | | | | |-- display: string (nullable = true)
+ | | | | | | |-- userSelected: boolean (nullable = true)
+ | | | | | | |-- _fid: integer (nullable = true)
+ | | | | |-- text: string (nullable = true)
+ | | | | |-- _fid: integer (nullable = true)
+ | | |-- name: struct (nullable = true)
+ | | | |-- id: string (nullable = true)
+ | | | |-- use: string (nullable = true)
+ | | | |-- text: string (nullable = true)
+ | | | |-- family: string (nullable = true)
+ | | | |-- given: array (nullable = true)
+ | | | | |-- element: string (containsNull = true)
+ | | | |-- prefix: array (nullable = true)
+ | | | | |-- element: string (containsNull = true)
+ | | | |-- suffix: array (nullable = true)
+ | | | | |-- element: string (containsNull = true)
+ | | | |-- period: struct (nullable = true)
+ | | | | |-- id: string (nullable = true)
+ | | | | |-- start: string (nullable = true)
+ | | | | |-- end: string (nullable = true)
+ | | | | |-- _fid: integer (nullable = true)
+ | | | |-- _fid: integer (nullable = true)
+ | | |-- telecom: array (nullable = true)
+ | | | |-- element: struct (containsNull = true)
+ | | | | |-- id: string (nullable = true)
+ | | | | |-- system: string (nullable = true)
+ | | | | |-- value: string (nullable = true)
+ | | | | |-- use: string (nullable = true)
+ | | | | |-- rank: integer (nullable = true)
+ | | | | |-- period: struct (nullable = true)
+ | | | | | |-- id: string (nullable = true)
+ | | | | | |-- start: string (nullable = true)
+ | | | | | |-- end: string (nullable = true)
+ | | | | | |-- _fid: integer (nullable = true)
+ | | | | |-- _fid: integer (nullable = true)
+ | | |-- address: struct (nullable = true)
+ | | | |-- id: string (nullable = true)
+ | | | |-- use: string (nullable = true)
+ | | | |-- type: string (nullable = true)
+ | | | |-- text: string (nullable = true)
+ | | | |-- line: array (nullable = true)
+ | | | | |-- element: string (containsNull = true)
+ | | | |-- city: string (nullable = true)
+ | | | |-- district: string (nullable = true)
+ | | | |-- state: string (nullable = true)
+ | | | |-- postalCode: string (nullable = true)
+ | | | |-- country: string (nullable = true)
+ | | | |-- period: struct (nullable = true)
+ | | | | |-- id: string (nullable = true)
+ | | | | |-- start: string (nullable = true)
+ | | | | |-- end: string (nullable = true)
+ | | | | |-- _fid: integer (nullable = true)
+ | | | |-- _fid: integer (nullable = true)
+ | | |-- gender: string (nullable = true)
+ | | |-- organization: struct (nullable = true)
+ | | | |-- reference: string (nullable = true)
+ | | | |-- display: string (nullable = true)
+ | | | |-- _fid: integer (nullable = true)
+ | | |-- period: struct (nullable = true)
+ | | | |-- id: string (nullable = true)
+ | | | |-- start: string (nullable = true)
+ | | | |-- end: string (nullable = true)
+ | | | |-- _fid: integer (nullable = true)
+ | | |-- _fid: integer (nullable = true)
+ |-- communication: array (nullable = true)
+ | |-- element: struct (containsNull = true)
+ | | |-- id: string (nullable = true)
+ | | |-- language: struct (nullable = true)
+ | | | |-- id: string (nullable = true)
+ | | | |-- coding: array (nullable = true)
+ | | | | |-- element: struct (containsNull = true)
+ | | | | | |-- id: string (nullable = true)
+ | | | | | |-- system: string (nullable = true)
+ | | | | | |-- version: string (nullable = true)
+ | | | | | |-- code: string (nullable = true)
+ | | | | | |-- display: string (nullable = true)
+ | | | | | |-- userSelected: boolean (nullable = true)
+ | | | | | |-- _fid: integer (nullable = true)
+ | | | |-- text: string (nullable = true)
+ | | | |-- _fid: integer (nullable = true)
+ | | |-- preferred: boolean (nullable = true)
+ | | |-- _fid: integer (nullable = true)
+ |-- generalPractitioner: array (nullable = true)
+ | |-- element: struct (containsNull = true)
+ | | |-- reference: string (nullable = true)
+ | | |-- display: string (nullable = true)
+ | | |-- _fid: integer (nullable = true)
+ |-- managingOrganization: struct (nullable = true)
+ | |-- reference: string (nullable = true)
+ | |-- display: string (nullable = true)
+ | |-- _fid: integer (nullable = true)
+ |-- link: array (nullable = true)
+ | |-- element: struct (containsNull = true)
+ | | |-- id: string (nullable = true)
+ | | |-- other: struct (nullable = true)
+ | | | |-- reference: string (nullable = true)
+ | | | |-- display: string (nullable = true)
+ | | | |-- _fid: integer (nullable = true)
+ | | |-- type: string (nullable = true)
+ | | |-- _fid: integer (nullable = true)
+ |-- _fid: integer (nullable = true)
+ |-- _extension: map (nullable = true)
+ | |-- key: integer
+ | |-- value: array (valueContainsNull = false)
+ | | |-- element: struct (containsNull = true)
+ | | | |-- id: string (nullable = true)
+ | | | |-- url: string (nullable = true)
+ | | | |-- valueAddress: struct (nullable = true)
+ | | | | |-- id: string (nullable = true)
+ | | | | |-- use: string (nullable = true)
+ | | | | |-- type: string (nullable = true)
+ | | | | |-- text: string (nullable = true)
+ | | | | |-- line: array (nullable = true)
+ | | | | | |-- element: string (containsNull = true)
+ | | | | |-- city: string (nullable = true)
+ | | | | |-- district: string (nullable = true)
+ | | | | |-- state: string (nullable = true)
+ | | | | |-- postalCode: string (nullable = true)
+ | | | | |-- country: string (nullable = true)
+ | | | | |-- period: struct (nullable = true)
+ | | | | | |-- id: string (nullable = true)
+ | | | | | |-- start: string (nullable = true)
+ | | | | | |-- end: string (nullable = true)
+ | | | | | |-- _fid: integer (nullable = true)
+ | | | | |-- _fid: integer (nullable = true)
+ | | | |-- valueBoolean: boolean (nullable = true)
+ | | | |-- valueCode: string (nullable = true)
+ | | | |-- valueCodeableConcept: struct (nullable = true)
+ | | | | |-- id: string (nullable = true)
+ | | | | |-- coding: array (nullable = true)
+ | | | | | |-- element: struct (containsNull = true)
+ | | | | | | |-- id: string (nullable = true)
+ | | | | | | |-- system: string (nullable = true)
+ | | | | | | |-- version: string (nullable = true)
+ | | | | | | |-- code: string (nullable = true)
+ | | | | | | |-- display: string (nullable = true)
+ | | | | | | |-- userSelected: boolean (nullable = true)
+ | | | | | | |-- _fid: integer (nullable = true)
+ | | | | |-- text: string (nullable = true)
+ | | | | |-- _fid: integer (nullable = true)
+ | | | |-- valueCoding: struct (nullable = true)
+ | | | | |-- id: string (nullable = true)
+ | | | | |-- system: string (nullable = true)
+ | | | | |-- version: string (nullable = true)
+ | | | | |-- code: string (nullable = true)
+ | | | | |-- display: string (nullable = true)
+ | | | | |-- userSelected: boolean (nullable = true)
+ | | | | |-- _fid: integer (nullable = true)
+ | | | |-- valueDateTime: string (nullable = true)
+ | | | |-- valueDate: string (nullable = true)
+ | | | |-- valueDecimal: decimal(32,6) (nullable = true)
+ | | | |-- valueDecimal_scale: integer (nullable = true)
+ | | | |-- valueIdentifier: struct (nullable = true)
+ | | | | |-- id: string (nullable = true)
+ | | | | |-- use: string (nullable = true)
+ | | | | |-- type: struct (nullable = true)
+ | | | | | |-- id: string (nullable = true)
+ | | | | | |-- coding: array (nullable = true)
+ | | | | | | |-- element: struct (containsNull = true)
+ | | | | | | | |-- id: string (nullable = true)
+ | | | | | | | |-- system: string (nullable = true)
+ | | | | | | | |-- version: string (nullable = true)
+ | | | | | | | |-- code: string (nullable = true)
+ | | | | | | | |-- display: string (nullable = true)
+ | | | | | | | |-- userSelected: boolean (nullable = true)
+ | | | | | | | |-- _fid: integer (nullable = true)
+ | | | | | |-- text: string (nullable = true)
+ | | | | | |-- _fid: integer (nullable = true)
+ | | | | |-- system: string (nullable = true)
+ | | | | |-- value: string (nullable = true)
+ | | | | |-- period: struct (nullable = true)
+ | | | | | |-- id: string (nullable = true)
+ | | | | | |-- start: string (nullable = true)
+ | | | | | |-- end: string (nullable = true)
+ | | | | | |-- _fid: integer (nullable = true)
+ | | | | |-- assigner: struct (nullable = true)
+ | | | | | |-- reference: string (nullable = true)
+ | | | | | |-- display: string (nullable = true)
+ | | | | | |-- _fid: integer (nullable = true)
+ | | | | |-- _fid: integer (nullable = true)
+ | | | |-- valueInteger: integer (nullable = true)
+ | | | |-- valueReference: struct (nullable = true)
+ | | | | |-- reference: string (nullable = true)
+ | | | | |-- display: string (nullable = true)
+ | | | | |-- _fid: integer (nullable = true)
+ | | | |-- valueString: string (nullable = true)
+ | | | |-- _fid: integer (nullable = true)
+```
From 3b73234c570096cc07a64819db8ed25e0fbed88b Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Wed, 7 Feb 2024 14:47:35 +1000
Subject: [PATCH 003/175] Add Parquet specification to docs
---
site/docs/libraries/encoders/schema.md | 1009 ++++++++++++++----------
1 file changed, 575 insertions(+), 434 deletions(-)
diff --git a/site/docs/libraries/encoders/schema.md b/site/docs/libraries/encoders/schema.md
index 2cd29500c2..feab17946a 100644
--- a/site/docs/libraries/encoders/schema.md
+++ b/site/docs/libraries/encoders/schema.md
@@ -1,7 +1,7 @@
-# Schema specification
+# Parquet specification
-This specification describes a scheme for encoding resource definitions from the
-FHIR specification as a Spark SQL schema.
+This specification describes a scheme for representing FHIR resources within a
+[Parquet](https://parquet.apache.org/) schema.
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "
SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be
@@ -25,494 +25,635 @@ All R4 resource types are supported by this specification, except the following:
## Configuration options
-There are several options that determine the encoding strategy. Schemas that
-have been encoded according to this specification with the same configuration
-values SHALL be identical and compatible.
+There are several options that determine the structure of the schema. Any two
+schemas that conform to this specification with the same configuration values
+SHALL be identical and compatible.
-| Option | Description |
-|----------------------------|-----------------------------------------------------------|
-| Maximum nesting level | The maximum depth of nested element data that is encoded. |
-| Extension encoding enabled | Whether extension content is included within the schema. |
-| Supported open types | The list of types that are encoded for open choice types. |
+| Option | Description |
+|-----------------------|-------------------------------------------------------------|
+| Maximum nesting level | The maximum supported depth of nested element data. |
+| Extensions enabled | Whether extension content is included within the schema. |
+| Supported open types | The list of types that are supported for open choice types. |
## Out of scope
-The following areas are not currently supported by this specification:
+The following features are not currently supported by this specification:
- Primitive extensions
- Profiled resources
-## Encoding strategy
+## Schema structure
-All columns and struct fields SHALL be encoded as nullable, unless otherwise
-specified.
+All fields SHALL be encoded as `OPTIONAL`, unless otherwise specified. All
+groups SHALL be encoded as `REQUIRED`.
### Primitive elements
-Each primitive element within a resource definition SHALL be encoded as a column
-within the schema with the same name (except where otherwise specified). The
-data type SHALL be determined by the element type according to the following
+Each primitive element within a resource definition SHALL be represented as a
+field within the schema with the same name (except where otherwise specified).
+The data type SHALL be determined by the element type according to the following
table:
-| FHIR type | Spark SQL type | Additional requirements |
-|-----------------|----------------|--------------------------------------------------------------------------------------------------|
-| boolean | boolean | |
-| canonical | string | Compliant with the [FHIR canonical format](https://hl7.org/fhir/R4/datatypes.html#canonical) |
-| code | string | Compliant with the [FHIR code format](https://hl7.org/fhir/R4/datatypes.html#code) |
-| dateTime | string | Compliant with the [FHIR dateTime format](https://hl7.org/fhir/R4/datatypes.html#dateTime) |
-| date | string | Compliant with the [FHIR date format](https://hl7.org/fhir/R4/datatypes.html#date) |
-| decimal | decimal(32,6) | See [Decimal encoding](#decimal-encoding) |
-| id | string | See [ID encoding](#id-encoding) |
-| instant | timestamp | |
-| integer | integer | Compliant with the [FHIR integer format](https://hl7.org/fhir/R4/datatypes.html#integer) |
-| markdown | string | Compliant with the [FHIR markdown format](https://hl7.org/fhir/R4/datatypes.html#markdown) |
-| oid | string | Compliant with the [FHIR oid format](https://hl7.org/fhir/R4/datatypes.html#oid) |
-| positiveInt | integer | Compliant with the [FHIR positiveInt format](https://hl7.org/fhir/R4/datatypes.html#positiveInt) |
-| string | string | Compliant with the [FHIR string format](https://hl7.org/fhir/R4/datatypes.html#string) |
-| time | string | Compliant with the [FHIR time format](https://hl7.org/fhir/R4/datatypes.html#time) |
-| unsignedInt | integer | Compliant with the [FHIR unsignedInt format](https://hl7.org/fhir/R4/datatypes.html#unsignedInt) |
-| uri | string | Compliant with the [FHIR uri format](https://hl7.org/fhir/R4/datatypes.html#uri) |
-| url | string | Compliant with the [FHIR url format](https://hl7.org/fhir/R4/datatypes.html#url) |
-| uuid | string | Compliant with the [FHIR uuid format](https://hl7.org/fhir/R4/datatypes.html#uuid) |
-
-#### Decimal encoding
-
-An element of type `decimal` SHALL be encoded as a decimal column with a
-precision of 32 and a scale of 6.
+| FHIR type | Spark SQL type | Additional requirements |
+|-------------|----------------|----------------------------------------------------------------------------------------------|
+| boolean | BOOLEAN | |
+| canonical | BINARY (UTF8) | Compliant with the [FHIR canonical format](https://hl7.org/fhir/R4/datatypes.html#canonical) |
+| code | BINARY (UTF8) | Compliant with the [FHIR code format](https://hl7.org/fhir/R4/datatypes.html#code) |
+| dateTime | BINARY (UTF8) | Compliant with the [FHIR dateTime format](https://hl7.org/fhir/R4/datatypes.html#dateTime) |
+| date | BINARY (UTF8) | Compliant with the [FHIR date format](https://hl7.org/fhir/R4/datatypes.html#date) |
+| decimal | DECIMAL(32,6) | See [Decimal type](#decimal-type) |
+| id | BINARY (UTF8) | See [ID type](#id-type) |
+| instant | INT96 | |
+| integer | INT32 | Compliant with the [FHIR integer format](https://hl7.org/fhir/R4/datatypes.html#integer) |
+| markdown | BINARY (UTF8) | Compliant with the [FHIR markdown format](https://hl7.org/fhir/R4/datatypes.html#markdown) |
+| oid | BINARY (UTF8) | Compliant with the [FHIR oid format](https://hl7.org/fhir/R4/datatypes.html#oid) |
+| positiveInt | INT32 | liant with the [FHIR positiveInt format](https://hl7.org/fhir/R4/datatypes.html#positiveInt) |
+| string | BINARY (UTF8) | Compliant with the [FHIR string format](https://hl7.org/fhir/R4/datatypes.html#string) |
+| time | BINARY (UTF8) | Compliant with the [FHIR time format](https://hl7.org/fhir/R4/datatypes.html#time) |
+| unsignedInt | INT32 | liant with the [FHIR unsignedInt format](https://hl7.org/fhir/R4/datatypes.html#unsignedInt) |
+| uri | BINARY (UTF8) | Compliant with the [FHIR uri format](https://hl7.org/fhir/R4/datatypes.html#uri) |
+| url | BINARY (UTF8) | Compliant with the [FHIR url format](https://hl7.org/fhir/R4/datatypes.html#url) |
+| uuid | BINARY (UTF8) | Compliant with the [FHIR uuid format](https://hl7.org/fhir/R4/datatypes.html#uuid) |
-In addition to this column, an integer column SHALL be encoded with the
-suffix `_scale`. This column SHALL contain the scale of the decimal value from
-the original FHIR data.
+### Complex and backbone elements
-#### ID encoding
+Each complex and backbone element within a resource definition SHALL be
+represented as a group within the schema with the same name. The group SHALL
+contain a fields for each of the child elements.
-An element of type `id` SHALL be encoded as a string column. This column SHALL
-contain the FHIR resource logical ID.
+Each field SHALL be represented as described in
+the [Primitive elements](#primitive-elements) and [Choice types](#choice-types)
+sections (or this section in the case of a nested complex or backbone element).
-In addition to this column, a string column SHALL be encoded with the
-suffix `_versioned`. This column SHALL contain a fully qualified logical ID,
-including the resource type and the technical version. The data in this column
-SHALL follow the format `[resource type]/[logical ID]/_history/[version]`.
+If the "extensions enabled" option is set to true, an additional field
+SHALL be included with the name `_fid`. This field SHALL have a type of `INT32`.
+This field SHALL contain a value that uniquely identifies the complex or
+backbone element within the resource.
### Choice types
-If the choice type is open (i.e. a type of `*`), the struct SHALL contain a
+If the choice type is open (i.e. a type of `*`), the group SHALL contain a
field for each type listed in the configuration value "supported open types".
-If the choice type is not open, it SHALL be encoded as a struct column with a
+If the choice type is not open, it SHALL be represented as a group with a
field for each of its valid types.
The name of each field SHALL follow the format `value[type]`, where `[type]` is
the name of the type in upper camel case.
-### Complex and backbone elements
+### Decimal type
-Each complex and backbone element within a resource definition SHALL be encoded
-as a struct column within the schema with the same name. The struct SHALL
-contain fields for each of the child elements of the complex or backbone
-element.
+An element of type `decimal` SHALL be represented as a `DECIMAL` field with a
+precision of 32 and a scale of 6.
-The encoding rules for each field SHALL follow the same rules as described in
-the [primitive elements](#primitive-elements) and [choice types](#choice-types)
-section (and this section in the case of nested complex or backbone elements).
+In addition, an `INT32` field SHALL be included with the suffix `_scale`. This
+field SHALL be used to store the scale of the decimal value from the original
+FHIR data.
-If the "extension encoding enabled" option is set to true, an additional column
-SHALL be encoded with the name `_fid`. This column SHALL have a type of integer.
-This column SHALL contain a value that uniquely identifies the complex or
-backbone element within the resource.
+### ID type
+
+An element of type `id` SHALL be represented as a `BINARY (UTF8)` field. This
+field SHALL be used to store the FHIR resource logical ID.
+
+In addition to this field, a `BINARY (UTF8)` field SHALL be included with the
+suffix `_versioned`. This field SHALL be used to store a fully qualified logical
+ID that includes the resource type and the technical version. The data in this
+field SHALL follow the format `[resource type]/[logical ID]/_history/[version]`.
-#### Quantity encoding
+### Quantity type
-If the complex element is of
+If a complex element is of
type [Quantity](https://hl7.org/fhir/R4/datatypes.html#Quantity), an additional
-two columns SHALL be encoded as part of the struct. These columns SHALL be
+two fields SHALL be included as part of the group. These fields SHALL be
named `_value_canonicalized` and `_code_canonicalized`.
-The `_value_canonicalized` column SHALL be encoded as a struct with the
+The `_value_canonicalized` field SHALL be encoded as a group with the
following fields:
- `value` with a type of decimal, precision 38 and scale 0.
- `scale` with a type of integer.
-The `_code_canonicalized` column SHALL be encoded as a string column.
+The `_code_canonicalized` field SHALL be encoded as a string field.
-Implementations loading data into this schema MAY use these columns to store
-canonicalized versions of the `value` and `code` fields from the original FHIR
-data, for easier comparison and querying.
+These fields MAY be used to store canonicalized versions of the `value`
+and `code` fields from the original FHIR data, for easier comparison and
+querying.
-### Extension encoding
+### Extensions
-If the "extension encoding enabled" option is set to true, an additional column
-SHALL be encoded at the root of the schema named `_extension`. This column SHALL
-have a type of map, with an integer key and an array value.
+If the "extensions enabled" option is true, an additional field SHALL be
+included at the root of the schema named `_extension`. This field SHALL have a
+type of `MAP`, with an `INT32` key and a repeated group value.
-The array SHALL contain a struct type that is encoded as
+The group used for each value in the map SHALL be represented using
the [Extension](https://hl7.org/fhir/R4/extensibility.html#extension) type, as
described in [Complex and backbone elements](#complex-and-backbone-elements).
-Implementations loading data into this schema SHALL use this column to store
-extension data from the original FHIR data (except for primitive extensions).
-The map SHALL contain a reference to the `_fid` of the element that the
-extension is attached to.
+If the "extensions enabled" option is true, this field SHALL be used to store
+extension data from the original FHIR data (excluding primitive extensions).
+Each key within the map SHALL contain a reference to the `_fid` of the element
+that the extension is attached to.
## Example
-The following schema is an example of the encoding of
-the [Patient](https://hl7.org/fhir/R4/patient.html) resource type with the
+The following schema is an example of how to represent
+the [Patient](https://hl7.org/fhir/R4/patient.html) resource type using the
following configuration values:
- Maximum nesting level: `3`
-- Extension encoding enabled: `true`
+- Extensions enabled: `true`
- Supported open types: `boolean`, `code`, `date`, `dateTime`, `decimal`,
`integer`, `string`, `Coding`, `CodeableConcept`, `Address`, `Identifier`,
`Reference`
```
-root
- |-- id: string (nullable = true)
- |-- id_versioned: string (nullable = true)
- |-- meta: struct (nullable = true)
- | |-- id: string (nullable = true)
- | |-- versionId: string (nullable = true)
- | |-- versionId_versioned: string (nullable = true)
- | |-- lastUpdated: timestamp (nullable = true)
- | |-- source: string (nullable = true)
- | |-- profile: array (nullable = true)
- | | |-- element: string (containsNull = true)
- | |-- security: array (nullable = true)
- | | |-- element: struct (containsNull = true)
- | | | |-- id: string (nullable = true)
- | | | |-- system: string (nullable = true)
- | | | |-- version: string (nullable = true)
- | | | |-- code: string (nullable = true)
- | | | |-- display: string (nullable = true)
- | | | |-- userSelected: boolean (nullable = true)
- | | | |-- _fid: integer (nullable = true)
- | |-- tag: array (nullable = true)
- | | |-- element: struct (containsNull = true)
- | | | |-- id: string (nullable = true)
- | | | |-- system: string (nullable = true)
- | | | |-- version: string (nullable = true)
- | | | |-- code: string (nullable = true)
- | | | |-- display: string (nullable = true)
- | | | |-- userSelected: boolean (nullable = true)
- | | | |-- _fid: integer (nullable = true)
- | |-- _fid: integer (nullable = true)
- |-- implicitRules: string (nullable = true)
- |-- language: string (nullable = true)
- |-- text: struct (nullable = true)
- | |-- id: string (nullable = true)
- | |-- status: string (nullable = true)
- | |-- div: string (nullable = true)
- | |-- _fid: integer (nullable = true)
- |-- identifier: array (nullable = true)
- | |-- element: struct (containsNull = true)
- | | |-- id: string (nullable = true)
- | | |-- use: string (nullable = true)
- | | |-- type: struct (nullable = true)
- | | | |-- id: string (nullable = true)
- | | | |-- coding: array (nullable = true)
- | | | | |-- element: struct (containsNull = true)
- | | | | | |-- id: string (nullable = true)
- | | | | | |-- system: string (nullable = true)
- | | | | | |-- version: string (nullable = true)
- | | | | | |-- code: string (nullable = true)
- | | | | | |-- display: string (nullable = true)
- | | | | | |-- userSelected: boolean (nullable = true)
- | | | | | |-- _fid: integer (nullable = true)
- | | | |-- text: string (nullable = true)
- | | | |-- _fid: integer (nullable = true)
- | | |-- system: string (nullable = true)
- | | |-- value: string (nullable = true)
- | | |-- period: struct (nullable = true)
- | | | |-- id: string (nullable = true)
- | | | |-- start: string (nullable = true)
- | | | |-- end: string (nullable = true)
- | | | |-- _fid: integer (nullable = true)
- | | |-- assigner: struct (nullable = true)
- | | | |-- reference: string (nullable = true)
- | | | |-- display: string (nullable = true)
- | | | |-- _fid: integer (nullable = true)
- | | |-- _fid: integer (nullable = true)
- |-- active: boolean (nullable = true)
- |-- name: array (nullable = true)
- | |-- element: struct (containsNull = true)
- | | |-- id: string (nullable = true)
- | | |-- use: string (nullable = true)
- | | |-- text: string (nullable = true)
- | | |-- family: string (nullable = true)
- | | |-- given: array (nullable = true)
- | | | |-- element: string (containsNull = true)
- | | |-- prefix: array (nullable = true)
- | | | |-- element: string (containsNull = true)
- | | |-- suffix: array (nullable = true)
- | | | |-- element: string (containsNull = true)
- | | |-- period: struct (nullable = true)
- | | | |-- id: string (nullable = true)
- | | | |-- start: string (nullable = true)
- | | | |-- end: string (nullable = true)
- | | | |-- _fid: integer (nullable = true)
- | | |-- _fid: integer (nullable = true)
- |-- telecom: array (nullable = true)
- | |-- element: struct (containsNull = true)
- | | |-- id: string (nullable = true)
- | | |-- system: string (nullable = true)
- | | |-- value: string (nullable = true)
- | | |-- use: string (nullable = true)
- | | |-- rank: integer (nullable = true)
- | | |-- period: struct (nullable = true)
- | | | |-- id: string (nullable = true)
- | | | |-- start: string (nullable = true)
- | | | |-- end: string (nullable = true)
- | | | |-- _fid: integer (nullable = true)
- | | |-- _fid: integer (nullable = true)
- |-- gender: string (nullable = true)
- |-- birthDate: string (nullable = true)
- |-- deceasedBoolean: boolean (nullable = true)
- |-- deceasedDateTime: string (nullable = true)
- |-- address: array (nullable = true)
- | |-- element: struct (containsNull = true)
- | | |-- id: string (nullable = true)
- | | |-- use: string (nullable = true)
- | | |-- type: string (nullable = true)
- | | |-- text: string (nullable = true)
- | | |-- line: array (nullable = true)
- | | | |-- element: string (containsNull = true)
- | | |-- city: string (nullable = true)
- | | |-- district: string (nullable = true)
- | | |-- state: string (nullable = true)
- | | |-- postalCode: string (nullable = true)
- | | |-- country: string (nullable = true)
- | | |-- period: struct (nullable = true)
- | | | |-- id: string (nullable = true)
- | | | |-- start: string (nullable = true)
- | | | |-- end: string (nullable = true)
- | | | |-- _fid: integer (nullable = true)
- | | |-- _fid: integer (nullable = true)
- |-- maritalStatus: struct (nullable = true)
- | |-- id: string (nullable = true)
- | |-- coding: array (nullable = true)
- | | |-- element: struct (containsNull = true)
- | | | |-- id: string (nullable = true)
- | | | |-- system: string (nullable = true)
- | | | |-- version: string (nullable = true)
- | | | |-- code: string (nullable = true)
- | | | |-- display: string (nullable = true)
- | | | |-- userSelected: boolean (nullable = true)
- | | | |-- _fid: integer (nullable = true)
- | |-- text: string (nullable = true)
- | |-- _fid: integer (nullable = true)
- |-- multipleBirthBoolean: boolean (nullable = true)
- |-- multipleBirthInteger: integer (nullable = true)
- |-- photo: array (nullable = true)
- | |-- element: struct (containsNull = true)
- | | |-- id: string (nullable = true)
- | | |-- contentType: string (nullable = true)
- | | |-- language: string (nullable = true)
- | | |-- data: binary (nullable = true)
- | | |-- url: string (nullable = true)
- | | |-- size: integer (nullable = true)
- | | |-- hash: binary (nullable = true)
- | | |-- title: string (nullable = true)
- | | |-- creation: string (nullable = true)
- | | |-- _fid: integer (nullable = true)
- |-- contact: array (nullable = true)
- | |-- element: struct (containsNull = true)
- | | |-- id: string (nullable = true)
- | | |-- relationship: array (nullable = true)
- | | | |-- element: struct (containsNull = true)
- | | | | |-- id: string (nullable = true)
- | | | | |-- coding: array (nullable = true)
- | | | | | |-- element: struct (containsNull = true)
- | | | | | | |-- id: string (nullable = true)
- | | | | | | |-- system: string (nullable = true)
- | | | | | | |-- version: string (nullable = true)
- | | | | | | |-- code: string (nullable = true)
- | | | | | | |-- display: string (nullable = true)
- | | | | | | |-- userSelected: boolean (nullable = true)
- | | | | | | |-- _fid: integer (nullable = true)
- | | | | |-- text: string (nullable = true)
- | | | | |-- _fid: integer (nullable = true)
- | | |-- name: struct (nullable = true)
- | | | |-- id: string (nullable = true)
- | | | |-- use: string (nullable = true)
- | | | |-- text: string (nullable = true)
- | | | |-- family: string (nullable = true)
- | | | |-- given: array (nullable = true)
- | | | | |-- element: string (containsNull = true)
- | | | |-- prefix: array (nullable = true)
- | | | | |-- element: string (containsNull = true)
- | | | |-- suffix: array (nullable = true)
- | | | | |-- element: string (containsNull = true)
- | | | |-- period: struct (nullable = true)
- | | | | |-- id: string (nullable = true)
- | | | | |-- start: string (nullable = true)
- | | | | |-- end: string (nullable = true)
- | | | | |-- _fid: integer (nullable = true)
- | | | |-- _fid: integer (nullable = true)
- | | |-- telecom: array (nullable = true)
- | | | |-- element: struct (containsNull = true)
- | | | | |-- id: string (nullable = true)
- | | | | |-- system: string (nullable = true)
- | | | | |-- value: string (nullable = true)
- | | | | |-- use: string (nullable = true)
- | | | | |-- rank: integer (nullable = true)
- | | | | |-- period: struct (nullable = true)
- | | | | | |-- id: string (nullable = true)
- | | | | | |-- start: string (nullable = true)
- | | | | | |-- end: string (nullable = true)
- | | | | | |-- _fid: integer (nullable = true)
- | | | | |-- _fid: integer (nullable = true)
- | | |-- address: struct (nullable = true)
- | | | |-- id: string (nullable = true)
- | | | |-- use: string (nullable = true)
- | | | |-- type: string (nullable = true)
- | | | |-- text: string (nullable = true)
- | | | |-- line: array (nullable = true)
- | | | | |-- element: string (containsNull = true)
- | | | |-- city: string (nullable = true)
- | | | |-- district: string (nullable = true)
- | | | |-- state: string (nullable = true)
- | | | |-- postalCode: string (nullable = true)
- | | | |-- country: string (nullable = true)
- | | | |-- period: struct (nullable = true)
- | | | | |-- id: string (nullable = true)
- | | | | |-- start: string (nullable = true)
- | | | | |-- end: string (nullable = true)
- | | | | |-- _fid: integer (nullable = true)
- | | | |-- _fid: integer (nullable = true)
- | | |-- gender: string (nullable = true)
- | | |-- organization: struct (nullable = true)
- | | | |-- reference: string (nullable = true)
- | | | |-- display: string (nullable = true)
- | | | |-- _fid: integer (nullable = true)
- | | |-- period: struct (nullable = true)
- | | | |-- id: string (nullable = true)
- | | | |-- start: string (nullable = true)
- | | | |-- end: string (nullable = true)
- | | | |-- _fid: integer (nullable = true)
- | | |-- _fid: integer (nullable = true)
- |-- communication: array (nullable = true)
- | |-- element: struct (containsNull = true)
- | | |-- id: string (nullable = true)
- | | |-- language: struct (nullable = true)
- | | | |-- id: string (nullable = true)
- | | | |-- coding: array (nullable = true)
- | | | | |-- element: struct (containsNull = true)
- | | | | | |-- id: string (nullable = true)
- | | | | | |-- system: string (nullable = true)
- | | | | | |-- version: string (nullable = true)
- | | | | | |-- code: string (nullable = true)
- | | | | | |-- display: string (nullable = true)
- | | | | | |-- userSelected: boolean (nullable = true)
- | | | | | |-- _fid: integer (nullable = true)
- | | | |-- text: string (nullable = true)
- | | | |-- _fid: integer (nullable = true)
- | | |-- preferred: boolean (nullable = true)
- | | |-- _fid: integer (nullable = true)
- |-- generalPractitioner: array (nullable = true)
- | |-- element: struct (containsNull = true)
- | | |-- reference: string (nullable = true)
- | | |-- display: string (nullable = true)
- | | |-- _fid: integer (nullable = true)
- |-- managingOrganization: struct (nullable = true)
- | |-- reference: string (nullable = true)
- | |-- display: string (nullable = true)
- | |-- _fid: integer (nullable = true)
- |-- link: array (nullable = true)
- | |-- element: struct (containsNull = true)
- | | |-- id: string (nullable = true)
- | | |-- other: struct (nullable = true)
- | | | |-- reference: string (nullable = true)
- | | | |-- display: string (nullable = true)
- | | | |-- _fid: integer (nullable = true)
- | | |-- type: string (nullable = true)
- | | |-- _fid: integer (nullable = true)
- |-- _fid: integer (nullable = true)
- |-- _extension: map (nullable = true)
- | |-- key: integer
- | |-- value: array (valueContainsNull = false)
- | | |-- element: struct (containsNull = true)
- | | | |-- id: string (nullable = true)
- | | | |-- url: string (nullable = true)
- | | | |-- valueAddress: struct (nullable = true)
- | | | | |-- id: string (nullable = true)
- | | | | |-- use: string (nullable = true)
- | | | | |-- type: string (nullable = true)
- | | | | |-- text: string (nullable = true)
- | | | | |-- line: array (nullable = true)
- | | | | | |-- element: string (containsNull = true)
- | | | | |-- city: string (nullable = true)
- | | | | |-- district: string (nullable = true)
- | | | | |-- state: string (nullable = true)
- | | | | |-- postalCode: string (nullable = true)
- | | | | |-- country: string (nullable = true)
- | | | | |-- period: struct (nullable = true)
- | | | | | |-- id: string (nullable = true)
- | | | | | |-- start: string (nullable = true)
- | | | | | |-- end: string (nullable = true)
- | | | | | |-- _fid: integer (nullable = true)
- | | | | |-- _fid: integer (nullable = true)
- | | | |-- valueBoolean: boolean (nullable = true)
- | | | |-- valueCode: string (nullable = true)
- | | | |-- valueCodeableConcept: struct (nullable = true)
- | | | | |-- id: string (nullable = true)
- | | | | |-- coding: array (nullable = true)
- | | | | | |-- element: struct (containsNull = true)
- | | | | | | |-- id: string (nullable = true)
- | | | | | | |-- system: string (nullable = true)
- | | | | | | |-- version: string (nullable = true)
- | | | | | | |-- code: string (nullable = true)
- | | | | | | |-- display: string (nullable = true)
- | | | | | | |-- userSelected: boolean (nullable = true)
- | | | | | | |-- _fid: integer (nullable = true)
- | | | | |-- text: string (nullable = true)
- | | | | |-- _fid: integer (nullable = true)
- | | | |-- valueCoding: struct (nullable = true)
- | | | | |-- id: string (nullable = true)
- | | | | |-- system: string (nullable = true)
- | | | | |-- version: string (nullable = true)
- | | | | |-- code: string (nullable = true)
- | | | | |-- display: string (nullable = true)
- | | | | |-- userSelected: boolean (nullable = true)
- | | | | |-- _fid: integer (nullable = true)
- | | | |-- valueDateTime: string (nullable = true)
- | | | |-- valueDate: string (nullable = true)
- | | | |-- valueDecimal: decimal(32,6) (nullable = true)
- | | | |-- valueDecimal_scale: integer (nullable = true)
- | | | |-- valueIdentifier: struct (nullable = true)
- | | | | |-- id: string (nullable = true)
- | | | | |-- use: string (nullable = true)
- | | | | |-- type: struct (nullable = true)
- | | | | | |-- id: string (nullable = true)
- | | | | | |-- coding: array (nullable = true)
- | | | | | | |-- element: struct (containsNull = true)
- | | | | | | | |-- id: string (nullable = true)
- | | | | | | | |-- system: string (nullable = true)
- | | | | | | | |-- version: string (nullable = true)
- | | | | | | | |-- code: string (nullable = true)
- | | | | | | | |-- display: string (nullable = true)
- | | | | | | | |-- userSelected: boolean (nullable = true)
- | | | | | | | |-- _fid: integer (nullable = true)
- | | | | | |-- text: string (nullable = true)
- | | | | | |-- _fid: integer (nullable = true)
- | | | | |-- system: string (nullable = true)
- | | | | |-- value: string (nullable = true)
- | | | | |-- period: struct (nullable = true)
- | | | | | |-- id: string (nullable = true)
- | | | | | |-- start: string (nullable = true)
- | | | | | |-- end: string (nullable = true)
- | | | | | |-- _fid: integer (nullable = true)
- | | | | |-- assigner: struct (nullable = true)
- | | | | | |-- reference: string (nullable = true)
- | | | | | |-- display: string (nullable = true)
- | | | | | |-- _fid: integer (nullable = true)
- | | | | |-- _fid: integer (nullable = true)
- | | | |-- valueInteger: integer (nullable = true)
- | | | |-- valueReference: struct (nullable = true)
- | | | | |-- reference: string (nullable = true)
- | | | | |-- display: string (nullable = true)
- | | | | |-- _fid: integer (nullable = true)
- | | | |-- valueString: string (nullable = true)
- | | | |-- _fid: integer (nullable = true)
+message spark_schema {
+ optional binary id (STRING);
+ optional binary id_versioned (STRING);
+ optional group meta {
+ optional binary id (STRING);
+ optional binary versionId (STRING);
+ optional binary versionId_versioned (STRING);
+ optional int96 lastUpdated;
+ optional binary source (STRING);
+ optional group profile (LIST) {
+ repeated group list {
+ optional binary element (STRING);
+ }
+ }
+ optional group security (LIST) {
+ repeated group list {
+ optional group element {
+ optional binary id (STRING);
+ optional binary system (STRING);
+ optional binary version (STRING);
+ optional binary code (STRING);
+ optional binary display (STRING);
+ optional boolean userSelected;
+ optional int32 _fid;
+ }
+ }
+ }
+ optional group tag (LIST) {
+ repeated group list {
+ optional group element {
+ optional binary id (STRING);
+ optional binary system (STRING);
+ optional binary version (STRING);
+ optional binary code (STRING);
+ optional binary display (STRING);
+ optional boolean userSelected;
+ optional int32 _fid;
+ }
+ }
+ }
+ optional int32 _fid;
+ }
+ optional binary implicitRules (STRING);
+ optional binary language (STRING);
+ optional group text {
+ optional binary id (STRING);
+ optional binary status (STRING);
+ optional binary div (STRING);
+ optional int32 _fid;
+ }
+ optional group identifier (LIST) {
+ repeated group list {
+ optional group element {
+ optional binary id (STRING);
+ optional binary use (STRING);
+ optional group type {
+ optional binary id (STRING);
+ optional group coding (LIST) {
+ repeated group list {
+ optional group element {
+ optional binary id (STRING);
+ optional binary system (STRING);
+ optional binary version (STRING);
+ optional binary code (STRING);
+ optional binary display (STRING);
+ optional boolean userSelected;
+ optional int32 _fid;
+ }
+ }
+ }
+ optional binary text (STRING);
+ optional int32 _fid;
+ }
+ optional binary system (STRING);
+ optional binary value (STRING);
+ optional group period {
+ optional binary id (STRING);
+ optional binary start (STRING);
+ optional binary end (STRING);
+ optional int32 _fid;
+ }
+ optional group assigner {
+ optional binary reference (STRING);
+ optional binary display (STRING);
+ optional int32 _fid;
+ }
+ optional int32 _fid;
+ }
+ }
+ }
+ optional boolean active;
+ optional group name (LIST) {
+ repeated group list {
+ optional group element {
+ optional binary id (STRING);
+ optional binary use (STRING);
+ optional binary text (STRING);
+ optional binary family (STRING);
+ optional group given (LIST) {
+ repeated group list {
+ optional binary element (STRING);
+ }
+ }
+ optional group prefix (LIST) {
+ repeated group list {
+ optional binary element (STRING);
+ }
+ }
+ optional group suffix (LIST) {
+ repeated group list {
+ optional binary element (STRING);
+ }
+ }
+ optional group period {
+ optional binary id (STRING);
+ optional binary start (STRING);
+ optional binary end (STRING);
+ optional int32 _fid;
+ }
+ optional int32 _fid;
+ }
+ }
+ }
+ optional group telecom (LIST) {
+ repeated group list {
+ optional group element {
+ optional binary id (STRING);
+ optional binary system (STRING);
+ optional binary value (STRING);
+ optional binary use (STRING);
+ optional int32 rank;
+ optional group period {
+ optional binary id (STRING);
+ optional binary start (STRING);
+ optional binary end (STRING);
+ optional int32 _fid;
+ }
+ optional int32 _fid;
+ }
+ }
+ }
+ optional binary gender (STRING);
+ optional binary birthDate (STRING);
+ optional boolean deceasedBoolean;
+ optional binary deceasedDateTime (STRING);
+ optional group address (LIST) {
+ repeated group list {
+ optional group element {
+ optional binary id (STRING);
+ optional binary use (STRING);
+ optional binary type (STRING);
+ optional binary text (STRING);
+ optional group line (LIST) {
+ repeated group list {
+ optional binary element (STRING);
+ }
+ }
+ optional binary city (STRING);
+ optional binary district (STRING);
+ optional binary state (STRING);
+ optional binary postalCode (STRING);
+ optional binary country (STRING);
+ optional group period {
+ optional binary id (STRING);
+ optional binary start (STRING);
+ optional binary end (STRING);
+ optional int32 _fid;
+ }
+ optional int32 _fid;
+ }
+ }
+ }
+ optional group maritalStatus {
+ optional binary id (STRING);
+ optional group coding (LIST) {
+ repeated group list {
+ optional group element {
+ optional binary id (STRING);
+ optional binary system (STRING);
+ optional binary version (STRING);
+ optional binary code (STRING);
+ optional binary display (STRING);
+ optional boolean userSelected;
+ optional int32 _fid;
+ }
+ }
+ }
+ optional binary text (STRING);
+ optional int32 _fid;
+ }
+ optional boolean multipleBirthBoolean;
+ optional int32 multipleBirthInteger;
+ optional group photo (LIST) {
+ repeated group list {
+ optional group element {
+ optional binary id (STRING);
+ optional binary contentType (STRING);
+ optional binary language (STRING);
+ optional binary data;
+ optional binary url (STRING);
+ optional int32 size;
+ optional binary hash;
+ optional binary title (STRING);
+ optional binary creation (STRING);
+ optional int32 _fid;
+ }
+ }
+ }
+ optional group contact (LIST) {
+ repeated group list {
+ optional group element {
+ optional binary id (STRING);
+ optional group relationship (LIST) {
+ repeated group list {
+ optional group element {
+ optional binary id (STRING);
+ optional group coding (LIST) {
+ repeated group list {
+ optional group element {
+ optional binary id (STRING);
+ optional binary system (STRING);
+ optional binary version (STRING);
+ optional binary code (STRING);
+ optional binary display (STRING);
+ optional boolean userSelected;
+ optional int32 _fid;
+ }
+ }
+ }
+ optional binary text (STRING);
+ optional int32 _fid;
+ }
+ }
+ }
+ optional group name {
+ optional binary id (STRING);
+ optional binary use (STRING);
+ optional binary text (STRING);
+ optional binary family (STRING);
+ optional group given (LIST) {
+ repeated group list {
+ optional binary element (STRING);
+ }
+ }
+ optional group prefix (LIST) {
+ repeated group list {
+ optional binary element (STRING);
+ }
+ }
+ optional group suffix (LIST) {
+ repeated group list {
+ optional binary element (STRING);
+ }
+ }
+ optional group period {
+ optional binary id (STRING);
+ optional binary start (STRING);
+ optional binary end (STRING);
+ optional int32 _fid;
+ }
+ optional int32 _fid;
+ }
+ optional group telecom (LIST) {
+ repeated group list {
+ optional group element {
+ optional binary id (STRING);
+ optional binary system (STRING);
+ optional binary value (STRING);
+ optional binary use (STRING);
+ optional int32 rank;
+ optional group period {
+ optional binary id (STRING);
+ optional binary start (STRING);
+ optional binary end (STRING);
+ optional int32 _fid;
+ }
+ optional int32 _fid;
+ }
+ }
+ }
+ optional group address {
+ optional binary id (STRING);
+ optional binary use (STRING);
+ optional binary type (STRING);
+ optional binary text (STRING);
+ optional group line (LIST) {
+ repeated group list {
+ optional binary element (STRING);
+ }
+ }
+ optional binary city (STRING);
+ optional binary district (STRING);
+ optional binary state (STRING);
+ optional binary postalCode (STRING);
+ optional binary country (STRING);
+ optional group period {
+ optional binary id (STRING);
+ optional binary start (STRING);
+ optional binary end (STRING);
+ optional int32 _fid;
+ }
+ optional int32 _fid;
+ }
+ optional binary gender (STRING);
+ optional group organization {
+ optional binary reference (STRING);
+ optional binary display (STRING);
+ optional int32 _fid;
+ }
+ optional group period {
+ optional binary id (STRING);
+ optional binary start (STRING);
+ optional binary end (STRING);
+ optional int32 _fid;
+ }
+ optional int32 _fid;
+ }
+ }
+ }
+ optional group communication (LIST) {
+ repeated group list {
+ optional group element {
+ optional binary id (STRING);
+ optional group language {
+ optional binary id (STRING);
+ optional group coding (LIST) {
+ repeated group list {
+ optional group element {
+ optional binary id (STRING);
+ optional binary system (STRING);
+ optional binary version (STRING);
+ optional binary code (STRING);
+ optional binary display (STRING);
+ optional boolean userSelected;
+ optional int32 _fid;
+ }
+ }
+ }
+ optional binary text (STRING);
+ optional int32 _fid;
+ }
+ optional boolean preferred;
+ optional int32 _fid;
+ }
+ }
+ }
+ optional group generalPractitioner (LIST) {
+ repeated group list {
+ optional group element {
+ optional binary reference (STRING);
+ optional binary display (STRING);
+ optional int32 _fid;
+ }
+ }
+ }
+ optional group managingOrganization {
+ optional binary reference (STRING);
+ optional binary display (STRING);
+ optional int32 _fid;
+ }
+ optional group link (LIST) {
+ repeated group list {
+ optional group element {
+ optional binary id (STRING);
+ optional group other {
+ optional binary reference (STRING);
+ optional binary display (STRING);
+ optional int32 _fid;
+ }
+ optional binary type (STRING);
+ optional int32 _fid;
+ }
+ }
+ }
+ optional int32 _fid;
+ optional group _extension (MAP) {
+ repeated group key_value {
+ required int32 key;
+ required group value (LIST) {
+ repeated group list {
+ optional group element {
+ optional binary id (STRING);
+ optional binary url (STRING);
+ optional group valueAddress {
+ optional binary id (STRING);
+ optional binary use (STRING);
+ optional binary type (STRING);
+ optional binary text (STRING);
+ optional group line (LIST) {
+ repeated group list {
+ optional binary element (STRING);
+ }
+ }
+ optional binary city (STRING);
+ optional binary district (STRING);
+ optional binary state (STRING);
+ optional binary postalCode (STRING);
+ optional binary country (STRING);
+ optional group period {
+ optional binary id (STRING);
+ optional binary start (STRING);
+ optional binary end (STRING);
+ optional int32 _fid;
+ }
+ optional int32 _fid;
+ }
+ optional boolean valueBoolean;
+ optional binary valueCode (STRING);
+ optional group valueCodeableConcept {
+ optional binary id (STRING);
+ optional group coding (LIST) {
+ repeated group list {
+ optional group element {
+ optional binary id (STRING);
+ optional binary system (STRING);
+ optional binary version (STRING);
+ optional binary code (STRING);
+ optional binary display (STRING);
+ optional boolean userSelected;
+ optional int32 _fid;
+ }
+ }
+ }
+ optional binary text (STRING);
+ optional int32 _fid;
+ }
+ optional group valueCoding {
+ optional binary id (STRING);
+ optional binary system (STRING);
+ optional binary version (STRING);
+ optional binary code (STRING);
+ optional binary display (STRING);
+ optional boolean userSelected;
+ optional int32 _fid;
+ }
+ optional binary valueDateTime (STRING);
+ optional binary valueDate (STRING);
+ optional fixed_len_byte_array(14) valueDecimal (DECIMAL(32,6));
+ optional int32 valueDecimal_scale;
+ optional group valueIdentifier {
+ optional binary id (STRING);
+ optional binary use (STRING);
+ optional group type {
+ optional binary id (STRING);
+ optional group coding (LIST) {
+ repeated group list {
+ optional group element {
+ optional binary id (STRING);
+ optional binary system (STRING);
+ optional binary version (STRING);
+ optional binary code (STRING);
+ optional binary display (STRING);
+ optional boolean userSelected;
+ optional int32 _fid;
+ }
+ }
+ }
+ optional binary text (STRING);
+ optional int32 _fid;
+ }
+ optional binary system (STRING);
+ optional binary value (STRING);
+ optional group period {
+ optional binary id (STRING);
+ optional binary start (STRING);
+ optional binary end (STRING);
+ optional int32 _fid;
+ }
+ optional group assigner {
+ optional binary reference (STRING);
+ optional binary display (STRING);
+ optional int32 _fid;
+ }
+ optional int32 _fid;
+ }
+ optional int32 valueInteger;
+ optional group valueReference {
+ optional binary reference (STRING);
+ optional binary display (STRING);
+ optional int32 _fid;
+ }
+ optional binary valueString (STRING);
+ optional int32 _fid;
+ }
+ }
+ }
+ }
+ }
+}
```
From 92901c4a2ad7555e626f523effd8b53f252e7d25 Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Wed, 7 Feb 2024 14:50:34 +1000
Subject: [PATCH 004/175] Fix cut off words within primitive element type table
---
site/docs/libraries/encoders/schema.md | 40 +++++++++++++-------------
1 file changed, 20 insertions(+), 20 deletions(-)
diff --git a/site/docs/libraries/encoders/schema.md b/site/docs/libraries/encoders/schema.md
index feab17946a..0c24f9d302 100644
--- a/site/docs/libraries/encoders/schema.md
+++ b/site/docs/libraries/encoders/schema.md
@@ -54,26 +54,26 @@ field within the schema with the same name (except where otherwise specified).
The data type SHALL be determined by the element type according to the following
table:
-| FHIR type | Spark SQL type | Additional requirements |
-|-------------|----------------|----------------------------------------------------------------------------------------------|
-| boolean | BOOLEAN | |
-| canonical | BINARY (UTF8) | Compliant with the [FHIR canonical format](https://hl7.org/fhir/R4/datatypes.html#canonical) |
-| code | BINARY (UTF8) | Compliant with the [FHIR code format](https://hl7.org/fhir/R4/datatypes.html#code) |
-| dateTime | BINARY (UTF8) | Compliant with the [FHIR dateTime format](https://hl7.org/fhir/R4/datatypes.html#dateTime) |
-| date | BINARY (UTF8) | Compliant with the [FHIR date format](https://hl7.org/fhir/R4/datatypes.html#date) |
-| decimal | DECIMAL(32,6) | See [Decimal type](#decimal-type) |
-| id | BINARY (UTF8) | See [ID type](#id-type) |
-| instant | INT96 | |
-| integer | INT32 | Compliant with the [FHIR integer format](https://hl7.org/fhir/R4/datatypes.html#integer) |
-| markdown | BINARY (UTF8) | Compliant with the [FHIR markdown format](https://hl7.org/fhir/R4/datatypes.html#markdown) |
-| oid | BINARY (UTF8) | Compliant with the [FHIR oid format](https://hl7.org/fhir/R4/datatypes.html#oid) |
-| positiveInt | INT32 | liant with the [FHIR positiveInt format](https://hl7.org/fhir/R4/datatypes.html#positiveInt) |
-| string | BINARY (UTF8) | Compliant with the [FHIR string format](https://hl7.org/fhir/R4/datatypes.html#string) |
-| time | BINARY (UTF8) | Compliant with the [FHIR time format](https://hl7.org/fhir/R4/datatypes.html#time) |
-| unsignedInt | INT32 | liant with the [FHIR unsignedInt format](https://hl7.org/fhir/R4/datatypes.html#unsignedInt) |
-| uri | BINARY (UTF8) | Compliant with the [FHIR uri format](https://hl7.org/fhir/R4/datatypes.html#uri) |
-| url | BINARY (UTF8) | Compliant with the [FHIR url format](https://hl7.org/fhir/R4/datatypes.html#url) |
-| uuid | BINARY (UTF8) | Compliant with the [FHIR uuid format](https://hl7.org/fhir/R4/datatypes.html#uuid) |
+| FHIR type | Spark SQL type | Additional requirements |
+|-------------|----------------|--------------------------------------------------------------------------------------------------|
+| boolean | BOOLEAN | |
+| canonical | BINARY (UTF8) | Compliant with the [FHIR canonical format](https://hl7.org/fhir/R4/datatypes.html#canonical) |
+| code | BINARY (UTF8) | Compliant with the [FHIR code format](https://hl7.org/fhir/R4/datatypes.html#code) |
+| dateTime | BINARY (UTF8) | Compliant with the [FHIR dateTime format](https://hl7.org/fhir/R4/datatypes.html#dateTime) |
+| date | BINARY (UTF8) | Compliant with the [FHIR date format](https://hl7.org/fhir/R4/datatypes.html#date) |
+| decimal | DECIMAL(32,6) | See [Decimal type](#decimal-type) |
+| id | BINARY (UTF8) | See [ID type](#id-type) |
+| instant | INT96 | |
+| integer | INT32 | Compliant with the [FHIR integer format](https://hl7.org/fhir/R4/datatypes.html#integer) |
+| markdown | BINARY (UTF8) | Compliant with the [FHIR markdown format](https://hl7.org/fhir/R4/datatypes.html#markdown) |
+| oid | BINARY (UTF8) | Compliant with the [FHIR oid format](https://hl7.org/fhir/R4/datatypes.html#oid) |
+| positiveInt | INT32 | Compliant with the [FHIR positiveInt format](https://hl7.org/fhir/R4/datatypes.html#positiveInt) |
+| string | BINARY (UTF8) | Compliant with the [FHIR string format](https://hl7.org/fhir/R4/datatypes.html#string) |
+| time | BINARY (UTF8) | Compliant with the [FHIR time format](https://hl7.org/fhir/R4/datatypes.html#time) |
+| unsignedInt | INT32 | Compliant with the [FHIR unsignedInt format](https://hl7.org/fhir/R4/datatypes.html#unsignedInt) |
+| uri | BINARY (UTF8) | Compliant with the [FHIR uri format](https://hl7.org/fhir/R4/datatypes.html#uri) |
+| url | BINARY (UTF8) | Compliant with the [FHIR url format](https://hl7.org/fhir/R4/datatypes.html#url) |
+| uuid | BINARY (UTF8) | Compliant with the [FHIR uuid format](https://hl7.org/fhir/R4/datatypes.html#uuid) |
### Complex and backbone elements
From 23a11222aa0db4860e1310fa72ab95c997be89f1 Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Wed, 7 Feb 2024 14:53:10 +1000
Subject: [PATCH 005/175] Add contained resources to out of scope
---
site/docs/libraries/encoders/schema.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/site/docs/libraries/encoders/schema.md b/site/docs/libraries/encoders/schema.md
index 0c24f9d302..98ee842e1a 100644
--- a/site/docs/libraries/encoders/schema.md
+++ b/site/docs/libraries/encoders/schema.md
@@ -41,6 +41,7 @@ The following features are not currently supported by this specification:
- Primitive extensions
- Profiled resources
+- Contained resources
## Schema structure
From 9cfba9ddbd8a2c9c2f28c5f476b40a57ef900bfe Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Wed, 7 Feb 2024 16:26:14 +1000
Subject: [PATCH 006/175] Fix link on Kafka page
---
site/docs/libraries/kafka.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/site/docs/libraries/kafka.md b/site/docs/libraries/kafka.md
index 9848f71290..48a29d7027 100644
--- a/site/docs/libraries/kafka.md
+++ b/site/docs/libraries/kafka.md
@@ -49,4 +49,4 @@ result = med_administrations.select(
```
For more information about Spark's Kafka integration, see
-the [Structured Streaming + Kafka Integration Guide](https://spark.apache.org/docs/3.3.1/structured-streaming-kafka-integration.html#content).
+the [Structured Streaming + Kafka Integration Guide](https://spark.apache.org/docs/latest/structured-streaming-kafka-integration.html).
From 615d27d8ea83143520cfc7005a802322e55718a3 Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Wed, 7 Feb 2024 17:01:32 +1000
Subject: [PATCH 007/175] Add meta descriptions and social preview image to
site
---
site/docs/index.md | 4 ++++
site/docs/libraries/encoders/index.md | 1 +
site/docs/libraries/encoders/schema.md | 4 ++++
site/docs/libraries/fhirpath-query.md | 1 +
site/docs/libraries/index.md | 1 +
site/docs/libraries/installation/databricks.md | 1 +
site/docs/libraries/installation/index.md | 1 +
site/docs/libraries/installation/spark.md | 1 +
site/docs/libraries/installation/windows.md | 1 +
site/docs/libraries/javascript/pathling-client.md | 4 ++++
site/docs/libraries/javascript/pathling-import.md | 4 ++++
site/docs/libraries/kafka.md | 1 +
site/docs/libraries/terminology.md | 1 +
site/docs/roadmap.md | 4 ++++
site/docs/server/async.md | 1 +
site/docs/server/authorization.md | 1 +
site/docs/server/caching.md | 1 +
site/docs/server/configuration.md | 1 +
site/docs/server/getting-started.md | 1 +
site/docs/server/index.md | 1 +
site/docs/server/kubernetes.md | 1 +
site/docs/server/operations/aggregate.md | 1 +
site/docs/server/operations/extract.md | 1 +
site/docs/server/operations/import.md | 1 +
site/docs/server/operations/search.md | 1 +
site/docs/server/operations/update.md | 1 +
site/docs/server/sync.md | 1 +
site/docusaurus.config.js | 3 ++-
28 files changed, 44 insertions(+), 1 deletion(-)
diff --git a/site/docs/index.md b/site/docs/index.md
index 6fa3852ffd..e4c19df380 100644
--- a/site/docs/index.md
+++ b/site/docs/index.md
@@ -1,3 +1,7 @@
+---
+description: Pathling is a set of tools that make it easier to use FHIR and clinical terminology within health data analytics.
+---
+
# Overview
Pathling is a set of tools that make it easier to
diff --git a/site/docs/libraries/encoders/index.md b/site/docs/libraries/encoders/index.md
index 2eccc88a9a..11a6ea7b91 100644
--- a/site/docs/libraries/encoders/index.md
+++ b/site/docs/libraries/encoders/index.md
@@ -1,5 +1,6 @@
---
sidebar_position: 2
+description: The Pathling library can be used to transform FHIR Bundles or NDJSON into Spark data sets.
---
# FHIR encoders
diff --git a/site/docs/libraries/encoders/schema.md b/site/docs/libraries/encoders/schema.md
index 98ee842e1a..e2cac84a95 100644
--- a/site/docs/libraries/encoders/schema.md
+++ b/site/docs/libraries/encoders/schema.md
@@ -1,3 +1,7 @@
+---
+description: A scheme for representing FHIR resources within a Parquet schema.
+---
+
# Parquet specification
This specification describes a scheme for representing FHIR resources within a
diff --git a/site/docs/libraries/fhirpath-query.md b/site/docs/libraries/fhirpath-query.md
index 754237c312..a206dae8df 100644
--- a/site/docs/libraries/fhirpath-query.md
+++ b/site/docs/libraries/fhirpath-query.md
@@ -1,5 +1,6 @@
---
sidebar_position: 3
+description: The Pathling library can be used to query datasets of FHIR resources using FHIRPath. This is useful for aggregating data, and creating custom views.
---
# FHIRPath query
diff --git a/site/docs/libraries/index.md b/site/docs/libraries/index.md
index 8390d93f36..8cfe967fbc 100644
--- a/site/docs/libraries/index.md
+++ b/site/docs/libraries/index.md
@@ -1,6 +1,7 @@
---
sidebar_position: 1
sidebar_label: Introduction
+description: Pathling provides a set of libraries that provide assistance with using FHIR and terminology services from Apache Spark applications and data science workflows.
---
# Libraries
diff --git a/site/docs/libraries/installation/databricks.md b/site/docs/libraries/installation/databricks.md
index f28d856673..71f9dea873 100644
--- a/site/docs/libraries/installation/databricks.md
+++ b/site/docs/libraries/installation/databricks.md
@@ -1,5 +1,6 @@
---
sidebar_position: 3
+description: Instructions for installing the Pathling library on a Databricks cluster.
---
# Databricks installation
diff --git a/site/docs/libraries/installation/index.md b/site/docs/libraries/installation/index.md
index 5f437a2e48..fbf42eca27 100644
--- a/site/docs/libraries/installation/index.md
+++ b/site/docs/libraries/installation/index.md
@@ -2,6 +2,7 @@
sidebar_position: 1
title: Installation
sidebar_label: Installation
+description: Instructions for installing the Pathling libraries for Python, R, Scala, and Java.
---
### Python
diff --git a/site/docs/libraries/installation/spark.md b/site/docs/libraries/installation/spark.md
index 3ad8d7edb2..45cd74d4cf 100644
--- a/site/docs/libraries/installation/spark.md
+++ b/site/docs/libraries/installation/spark.md
@@ -1,5 +1,6 @@
---
sidebar_position: 4
+description: Instructions for configuring Apache Spark to use the Pathling library.
---
# Spark configuration
diff --git a/site/docs/libraries/installation/windows.md b/site/docs/libraries/installation/windows.md
index 62d83d92b2..7f70b98f7b 100644
--- a/site/docs/libraries/installation/windows.md
+++ b/site/docs/libraries/installation/windows.md
@@ -1,5 +1,6 @@
---
sidebar_position: 2
+description: Instructions for installing the Pathling libraries on Windows.
---
# Windows installation
diff --git a/site/docs/libraries/javascript/pathling-client.md b/site/docs/libraries/javascript/pathling-client.md
index a785487c85..b9a15f00f1 100644
--- a/site/docs/libraries/javascript/pathling-client.md
+++ b/site/docs/libraries/javascript/pathling-client.md
@@ -1,3 +1,7 @@
+---
+description: A client library for the Pathling FHIR API, for use with JavaScript and TypeScript.
+---
+
# pathling-client
[pathling-client](https://www.npmjs.com/package/pathling-client) is a client
diff --git a/site/docs/libraries/javascript/pathling-import.md b/site/docs/libraries/javascript/pathling-import.md
index c6d3617248..e4dc3df651 100644
--- a/site/docs/libraries/javascript/pathling-import.md
+++ b/site/docs/libraries/javascript/pathling-import.md
@@ -1,3 +1,7 @@
+---
+description: A set of functions written in TypeScript that facilitate the export of resources from a FHIR server and import into Pathling, via a staging S3 bucket. They can also be used as AWS Lambda functions.
+---
+
# pathling-import
[pathling-import](https://www.npmjs.com/package/pathling-import) is a set of
diff --git a/site/docs/libraries/kafka.md b/site/docs/libraries/kafka.md
index 48a29d7027..1a597b33af 100644
--- a/site/docs/libraries/kafka.md
+++ b/site/docs/libraries/kafka.md
@@ -1,5 +1,6 @@
---
sidebar_position: 7
+description: Pathling supports Kafka as a streaming data source, and all the operations available within the library are able to execute continuously across a stream of data.
---
# Kafka integration
diff --git a/site/docs/libraries/terminology.md b/site/docs/libraries/terminology.md
index c51505cac0..2b5223ebc9 100644
--- a/site/docs/libraries/terminology.md
+++ b/site/docs/libraries/terminology.md
@@ -1,5 +1,6 @@
---
sidebar_position: 4
+description: The Pathling library provides a set of functions for querying a FHIR terminology server from within your queries and transformations.
---
# Terminology functions
diff --git a/site/docs/roadmap.md b/site/docs/roadmap.md
index 521039ad75..2072211426 100644
--- a/site/docs/roadmap.md
+++ b/site/docs/roadmap.md
@@ -1,3 +1,7 @@
+---
+description: We are continually adding new features to the various different components of Pathling.
+---
+
# Roadmap
We are continually adding new features to the various different components of
diff --git a/site/docs/server/async.md b/site/docs/server/async.md
index 5e5f8e5c8d..c57db31187 100644
--- a/site/docs/server/async.md
+++ b/site/docs/server/async.md
@@ -1,6 +1,7 @@
---
sidebar_position: 7
sidebar_label: Async
+description: Pathling implements the Asynchronous Request Pattern within the FHIR specification, to provide a way to execute long-running requests and check on their progress using a status endpoint.
---
# Asynchronous processing
diff --git a/site/docs/server/authorization.md b/site/docs/server/authorization.md
index ffc6c60ac7..1355a51327 100644
--- a/site/docs/server/authorization.md
+++ b/site/docs/server/authorization.md
@@ -1,5 +1,6 @@
---
sidebar_position: 6
+description: Pathling can perform the role of a resource server within the OpenID Connect framework.
---
# Authorization
diff --git a/site/docs/server/caching.md b/site/docs/server/caching.md
index f1a10000a6..be509c62c0 100644
--- a/site/docs/server/caching.md
+++ b/site/docs/server/caching.md
@@ -1,5 +1,6 @@
---
sidebar_position: 8
+description: Pathling implements ETag-based cache validation, which enables clients to skip processing of queries when the underlying data has not changed.
---
# Caching
diff --git a/site/docs/server/configuration.md b/site/docs/server/configuration.md
index a045cefa49..3988ab13e1 100644
--- a/site/docs/server/configuration.md
+++ b/site/docs/server/configuration.md
@@ -1,5 +1,6 @@
---
sidebar_position: 5
+description: Configuration options for the Pathling server.
---
# Configuration
diff --git a/site/docs/server/getting-started.md b/site/docs/server/getting-started.md
index 988d594252..0b3c293984 100644
--- a/site/docs/server/getting-started.md
+++ b/site/docs/server/getting-started.md
@@ -1,5 +1,6 @@
---
sidebar_position: 2
+description: Instructions for getting started with Pathling server.
---
# Getting started
diff --git a/site/docs/server/index.md b/site/docs/server/index.md
index d684e2d95d..01074af4bd 100644
--- a/site/docs/server/index.md
+++ b/site/docs/server/index.md
@@ -1,6 +1,7 @@
---
sidebar_position: 1
sidebar_label: Introduction
+description: Pathling provides a server based on the HL7 FHIR standard, implementing special functionality designed to ease the delivery of apps and augment tasks related to health data analytics.
---
# Server
diff --git a/site/docs/server/kubernetes.md b/site/docs/server/kubernetes.md
index d779d8c841..8b4fcc2028 100644
--- a/site/docs/server/kubernetes.md
+++ b/site/docs/server/kubernetes.md
@@ -1,6 +1,7 @@
---
sidebar_position: 10
sidebar_label: Kubernetes
+description: Instructions for deploying Pathling server on Kubernetes using Helm.
---
# Kubernetes
diff --git a/site/docs/server/operations/aggregate.md b/site/docs/server/operations/aggregate.md
index be66d2dd01..a580236f60 100644
--- a/site/docs/server/operations/aggregate.md
+++ b/site/docs/server/operations/aggregate.md
@@ -1,5 +1,6 @@
---
sidebar_position: 3
+description: The aggregate operation allows a user to perform aggregate queries on data held within the Pathling FHIR server.
---
# Aggregate
diff --git a/site/docs/server/operations/extract.md b/site/docs/server/operations/extract.md
index b098c8b7fc..54edce7bda 100644
--- a/site/docs/server/operations/extract.md
+++ b/site/docs/server/operations/extract.md
@@ -1,5 +1,6 @@
---
sidebar_position: 4
+description: The extract operation allows a user to create arbitrary tabular extracts from FHIR data, by specifying columns in terms of set of FHIRPath expressions that are used to populate them.
---
# Extract
diff --git a/site/docs/server/operations/import.md b/site/docs/server/operations/import.md
index 37c9f560b0..ae5238e95b 100644
--- a/site/docs/server/operations/import.md
+++ b/site/docs/server/operations/import.md
@@ -1,5 +1,6 @@
---
sidebar_position: 1
+description: The import operation allows FHIR data to be imported into the server, making it available for query via other operations such as search, aggregate and extract.
---
# Import
diff --git a/site/docs/server/operations/search.md b/site/docs/server/operations/search.md
index 79efcad00e..37498be9c0 100644
--- a/site/docs/server/operations/search.md
+++ b/site/docs/server/operations/search.md
@@ -1,5 +1,6 @@
---
sidebar_position: 2
+description: Pathling server supports a FHIRPath-based search profile that allows you to retrieve a set of FHIR resources from the server filtered by one or more FHIRPath expressions.
---
# Search
diff --git a/site/docs/server/operations/update.md b/site/docs/server/operations/update.md
index 5e392e2331..1c9e544f72 100644
--- a/site/docs/server/operations/update.md
+++ b/site/docs/server/operations/update.md
@@ -1,5 +1,6 @@
---
sidebar_position: 5
+description: Pathling implements the update and batch operations from the FHIR REST API, to allow for the creation and update of individual resources within the server.
---
# Update and batch
diff --git a/site/docs/server/sync.md b/site/docs/server/sync.md
index d362eed58d..f3a58e86d3 100644
--- a/site/docs/server/sync.md
+++ b/site/docs/server/sync.md
@@ -1,6 +1,7 @@
---
sidebar_position: 9
sidebar_label: Synchronization
+description: Synchronize Pathling server with other FHIR servers using subscriptions or bulk data export.
---
# Synchronization with other FHIR servers
diff --git a/site/docusaurus.config.js b/site/docusaurus.config.js
index 9fdc6ba3b3..f66e05f42a 100644
--- a/site/docusaurus.config.js
+++ b/site/docusaurus.config.js
@@ -95,7 +95,8 @@ const config = {
theme: lightCodeTheme,
darkTheme: darkCodeTheme,
additionalLanguages: ["java", "scala", "yaml", "docker", "r"]
- }
+ },
+ image: "/assets/images/social-preview.png",
})
};
From 629d62cb22a175417c2a467a6593e401e947ccd3 Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Thu, 8 Feb 2024 06:32:54 +1000
Subject: [PATCH 008/175] Change Java and Scala installation advice to use
library-runtime
---
site/docs/libraries/installation/index.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/site/docs/libraries/installation/index.md b/site/docs/libraries/installation/index.md
index fbf42eca27..6e51a34852 100644
--- a/site/docs/libraries/installation/index.md
+++ b/site/docs/libraries/installation/index.md
@@ -39,7 +39,7 @@ To add the Pathling library to your project, add the following to
your [SBT](https://www.scala-sbt.org/) configuration:
```scala
-libraryDependencies += "au.csiro.pathling" % "library-api" % "[version]"
+libraryDependencies += "au.csiro.pathling" % "library-runtime" % "[version]"
```
### Java
@@ -50,7 +50,7 @@ your `pom.xml`:
```xml
au.csiro.pathling
- library-api
+ library-runtime
[version]
```
From b72d032c07c9cf21bc872452eda7a8ee1d2833b0 Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Thu, 8 Feb 2024 09:41:43 +1000
Subject: [PATCH 009/175] Fix heading on primitive element type table
---
site/docs/libraries/encoders/schema.md | 40 +++++++++++++-------------
1 file changed, 20 insertions(+), 20 deletions(-)
diff --git a/site/docs/libraries/encoders/schema.md b/site/docs/libraries/encoders/schema.md
index e2cac84a95..bdf1eadd61 100644
--- a/site/docs/libraries/encoders/schema.md
+++ b/site/docs/libraries/encoders/schema.md
@@ -59,26 +59,26 @@ field within the schema with the same name (except where otherwise specified).
The data type SHALL be determined by the element type according to the following
table:
-| FHIR type | Spark SQL type | Additional requirements |
-|-------------|----------------|--------------------------------------------------------------------------------------------------|
-| boolean | BOOLEAN | |
-| canonical | BINARY (UTF8) | Compliant with the [FHIR canonical format](https://hl7.org/fhir/R4/datatypes.html#canonical) |
-| code | BINARY (UTF8) | Compliant with the [FHIR code format](https://hl7.org/fhir/R4/datatypes.html#code) |
-| dateTime | BINARY (UTF8) | Compliant with the [FHIR dateTime format](https://hl7.org/fhir/R4/datatypes.html#dateTime) |
-| date | BINARY (UTF8) | Compliant with the [FHIR date format](https://hl7.org/fhir/R4/datatypes.html#date) |
-| decimal | DECIMAL(32,6) | See [Decimal type](#decimal-type) |
-| id | BINARY (UTF8) | See [ID type](#id-type) |
-| instant | INT96 | |
-| integer | INT32 | Compliant with the [FHIR integer format](https://hl7.org/fhir/R4/datatypes.html#integer) |
-| markdown | BINARY (UTF8) | Compliant with the [FHIR markdown format](https://hl7.org/fhir/R4/datatypes.html#markdown) |
-| oid | BINARY (UTF8) | Compliant with the [FHIR oid format](https://hl7.org/fhir/R4/datatypes.html#oid) |
-| positiveInt | INT32 | Compliant with the [FHIR positiveInt format](https://hl7.org/fhir/R4/datatypes.html#positiveInt) |
-| string | BINARY (UTF8) | Compliant with the [FHIR string format](https://hl7.org/fhir/R4/datatypes.html#string) |
-| time | BINARY (UTF8) | Compliant with the [FHIR time format](https://hl7.org/fhir/R4/datatypes.html#time) |
-| unsignedInt | INT32 | Compliant with the [FHIR unsignedInt format](https://hl7.org/fhir/R4/datatypes.html#unsignedInt) |
-| uri | BINARY (UTF8) | Compliant with the [FHIR uri format](https://hl7.org/fhir/R4/datatypes.html#uri) |
-| url | BINARY (UTF8) | Compliant with the [FHIR url format](https://hl7.org/fhir/R4/datatypes.html#url) |
-| uuid | BINARY (UTF8) | Compliant with the [FHIR uuid format](https://hl7.org/fhir/R4/datatypes.html#uuid) |
+| FHIR type | Parquet type | Additional requirements |
+|-------------|---------------|--------------------------------------------------------------------------------------------------|
+| boolean | BOOLEAN | |
+| canonical | BINARY (UTF8) | Compliant with the [FHIR canonical format](https://hl7.org/fhir/R4/datatypes.html#canonical) |
+| code | BINARY (UTF8) | Compliant with the [FHIR code format](https://hl7.org/fhir/R4/datatypes.html#code) |
+| dateTime | BINARY (UTF8) | Compliant with the [FHIR dateTime format](https://hl7.org/fhir/R4/datatypes.html#dateTime) |
+| date | BINARY (UTF8) | Compliant with the [FHIR date format](https://hl7.org/fhir/R4/datatypes.html#date) |
+| decimal | DECIMAL(32,6) | See [Decimal type](#decimal-type) |
+| id | BINARY (UTF8) | See [ID type](#id-type) |
+| instant | INT96 | |
+| integer | INT32 | Compliant with the [FHIR integer format](https://hl7.org/fhir/R4/datatypes.html#integer) |
+| markdown | BINARY (UTF8) | Compliant with the [FHIR markdown format](https://hl7.org/fhir/R4/datatypes.html#markdown) |
+| oid | BINARY (UTF8) | Compliant with the [FHIR oid format](https://hl7.org/fhir/R4/datatypes.html#oid) |
+| positiveInt | INT32 | Compliant with the [FHIR positiveInt format](https://hl7.org/fhir/R4/datatypes.html#positiveInt) |
+| string | BINARY (UTF8) | Compliant with the [FHIR string format](https://hl7.org/fhir/R4/datatypes.html#string) |
+| time | BINARY (UTF8) | Compliant with the [FHIR time format](https://hl7.org/fhir/R4/datatypes.html#time) |
+| unsignedInt | INT32 | Compliant with the [FHIR unsignedInt format](https://hl7.org/fhir/R4/datatypes.html#unsignedInt) |
+| uri | BINARY (UTF8) | Compliant with the [FHIR uri format](https://hl7.org/fhir/R4/datatypes.html#uri) |
+| url | BINARY (UTF8) | Compliant with the [FHIR url format](https://hl7.org/fhir/R4/datatypes.html#url) |
+| uuid | BINARY (UTF8) | Compliant with the [FHIR uuid format](https://hl7.org/fhir/R4/datatypes.html#uuid) |
### Complex and backbone elements
From 6b638f4075ede9ebf69e01704ad517dc6fecfe2d Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Sun, 17 Mar 2024 18:02:44 +1000
Subject: [PATCH 010/175] Add intro video embed to docs index page
---
site/docs/index.md | 16 +++++++++-------
1 file changed, 9 insertions(+), 7 deletions(-)
diff --git a/site/docs/index.md b/site/docs/index.md
index e4c19df380..fc1c448bf1 100644
--- a/site/docs/index.md
+++ b/site/docs/index.md
@@ -9,13 +9,7 @@ use [FHIR®](https://hl7.org/fhir) and clinical terminology within health
data analytics. It is built on [Apache Spark](https://spark.apache.org), and
includes both language libraries and a server implementation.
-import Components from '@site/src/images/components.png';
-import Components2x from '@site/src/images/components@2x.png';
-import ComponentsDark from '@site/src/images/components-dark.png';
-import ComponentsDark2x from '@site/src/images/components-dark@2x.png';
-
-
-
+
## What can it do?
@@ -73,6 +67,14 @@ aggregate, group and transform FHIR data.
See [Server](/docs/server) for more information.
+import Components from '@site/src/images/components.png';
+import Components2x from '@site/src/images/components@2x.png';
+import ComponentsDark from '@site/src/images/components-dark.png';
+import ComponentsDark2x from '@site/src/images/components-dark@2x.png';
+
+
+
+
## Licensing and attribution
Pathling is a product of the
From 968be82e6c6713cf1eccf313d6a77956d7606c2b Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Sun, 17 Mar 2024 19:22:13 +1000
Subject: [PATCH 011/175] Fix width of video on mobile
---
site/docs/index.md | 7 ++++++-
site/src/css/custom.css | 14 ++++++++++++++
2 files changed, 20 insertions(+), 1 deletion(-)
diff --git a/site/docs/index.md b/site/docs/index.md
index fc1c448bf1..65257546ea 100644
--- a/site/docs/index.md
+++ b/site/docs/index.md
@@ -9,7 +9,12 @@ use [FHIR®](https://hl7.org/fhir) and clinical terminology within health
data analytics. It is built on [Apache Spark](https://spark.apache.org), and
includes both language libraries and a server implementation.
-
+
## What can it do?
diff --git a/site/src/css/custom.css b/site/src/css/custom.css
index ae57b0aa76..94e37174cd 100644
--- a/site/src/css/custom.css
+++ b/site/src/css/custom.css
@@ -98,3 +98,17 @@ code {
table {
font-size: 90%;
}
+
+.yt-embed {
+ /* Default styling for screens wider than 560px */
+ width: 560px;
+ height: 315px;
+}
+
+@media screen and (max-width: 560px) {
+ .yt-embed {
+ /* Adjustments for screens 560px wide or less */
+ width: 92vw;
+ height: calc(92vw * 0.5625);
+ }
+}
From cb514f1b4ce0057a36e1d1515505107b226d9ccf Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Fri, 22 Mar 2024 14:09:57 +1000
Subject: [PATCH 012/175] Update MIMIC-IV example in documentation
---
site/docs/libraries/fhirpath-query.md | 11 ++++-------
1 file changed, 4 insertions(+), 7 deletions(-)
diff --git a/site/docs/libraries/fhirpath-query.md b/site/docs/libraries/fhirpath-query.md
index a206dae8df..31cd0f3ef6 100644
--- a/site/docs/libraries/fhirpath-query.md
+++ b/site/docs/libraries/fhirpath-query.md
@@ -336,7 +336,7 @@ NdjsonSource data = pc.read().ndjson("/usr/share/staging/ndjson");
You can also accommodate a custom naming scheme within the NDJSON files by using
the [file_name_mapper](https://pathling.csiro.au/docs/python/pathling.html#pathling.datasource.DataSources.ndjson)
argument. Here is an example of how to import the
-[MIMIC-IV FHIR data set](https://physionet.org/content/mimic-iv-fhir-demo/2.0/):
+[MIMIC-IV FHIR data set](https://physionet.org/content/mimic-iv-fhir/1.0/):
@@ -345,12 +345,9 @@ argument. Here is an example of how to import the
```python
data = pc.read.ndjson(
"/usr/share/staging/ndjson",
- file_name_mapper=lambda file_name: [
- re.search(
- r"^(\w+?)(?:ICU|Chartevents|Datetimeevents|Labevents|"
- r"MicroOrg|MicroSusc|MicroTest|Outputevents|Lab)?$",
- file_name)
- .group(1)])
+ file_name_mapper=lambda file_name: re.findall(r"Mimic(\w+?)(?:ED|ICU|"
+ r"Chartevents|Datetimeevents|Labevents|MicroOrg|MicroSusc|MicroTest|"
+ r"Outputevents|Lab|Mix|VitalSigns|VitalSignsED)?$", file_name))
```
From 720bbb8eff13b048397c6e79456d1791b9bf5dd4 Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Mon, 25 Mar 2024 11:06:20 +1000
Subject: [PATCH 013/175] Add missing getOrCreate() to Spark configuration
example
---
site/docs/libraries/installation/spark.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/site/docs/libraries/installation/spark.md b/site/docs/libraries/installation/spark.md
index 45cd74d4cf..e0ecfc66c5 100644
--- a/site/docs/libraries/installation/spark.md
+++ b/site/docs/libraries/installation/spark.md
@@ -44,7 +44,7 @@ spark = (
.config(
"spark.sql.catalog.spark_catalog",
"org.apache.spark.sql.delta.catalog.DeltaCatalog",
- )
+ ).getOrCreate()
)
pc = PathlingContext.create(spark)
From 9a0361a7929dbc20b7b57a31d35b26c8c3d6979d Mon Sep 17 00:00:00 2001
From: Piotr Szul
Date: Wed, 10 Apr 2024 12:02:05 +1000
Subject: [PATCH 014/175] Implementing full encoding and decoding support for
References that includes the 'identifier' fields with 0 level nesting
('assigner' removed from Identifiers used in references).
---
.../pathling/encoders/SchemaProcessor.scala | 15 +-
.../pathling/encoders/SerializerBuilder.scala | 30 ++--
.../datatypes/R4DataTypeMappings.scala | 31 +----
.../pathling/encoders/FhirEncodersTest.java | 70 ++++++++--
.../encoders/LightweightFhirEncodersTest.java | 67 ++++++++-
.../encoders/SchemaConverterTest.java | 129 ++++++++++++------
.../au/csiro/pathling/encoders/TestData.java | 26 ++++
7 files changed, 271 insertions(+), 97 deletions(-)
diff --git a/encoders/src/main/scala/au/csiro/pathling/encoders/SchemaProcessor.scala b/encoders/src/main/scala/au/csiro/pathling/encoders/SchemaProcessor.scala
index 731b05f58e..59b568f634 100644
--- a/encoders/src/main/scala/au/csiro/pathling/encoders/SchemaProcessor.scala
+++ b/encoders/src/main/scala/au/csiro/pathling/encoders/SchemaProcessor.scala
@@ -24,6 +24,7 @@ package au.csiro.pathling.encoders
import au.csiro.pathling.schema._
import ca.uhn.fhir.context._
+import org.hl7.fhir.instance.model.api.IBaseReference
/**
@@ -95,8 +96,20 @@ trait SchemaProcessor[DT, SF] extends SchemaVisitor[DT, SF] with EncoderSettings
}
}
+ private def includeElement(elementDefinition: BaseRuntimeElementDefinition[_]): Boolean = {
+ val nestingLevel = EncodingContext.currentNestingLevel(elementDefinition)
+ if (classOf[IBaseReference].isAssignableFrom(elementDefinition.getImplementingClass)) {
+ // special provision for references which disallows any nesting
+ // in particular for R4 removes the `assigner` field from the
+ // Identifier type instances nested inside a Reference (in it's `identifier` fiels)
+ nestingLevel <= 0
+ } else {
+ nestingLevel <= maxNestingLevel
+ }
+ }
+
override def visitElement(elementCtx: ElementCtx[DT, SF]): Seq[SF] = {
- if (EncodingContext.currentNestingLevel(elementCtx.elementDefinition) <= maxNestingLevel) {
+ if (includeElement(elementCtx.elementDefinition)) {
buildValue(elementCtx.childDefinition, elementCtx.elementDefinition, elementCtx.elementName)
} else {
Nil
diff --git a/encoders/src/main/scala/au/csiro/pathling/encoders/SerializerBuilder.scala b/encoders/src/main/scala/au/csiro/pathling/encoders/SerializerBuilder.scala
index 25e4489ab2..c99d5da816 100644
--- a/encoders/src/main/scala/au/csiro/pathling/encoders/SerializerBuilder.scala
+++ b/encoders/src/main/scala/au/csiro/pathling/encoders/SerializerBuilder.scala
@@ -24,10 +24,8 @@
package au.csiro.pathling.encoders
import au.csiro.pathling.encoders.ExtensionSupport.{EXTENSIONS_FIELD_NAME, FID_FIELD_NAME}
-import au.csiro.pathling.encoders.QuantitySupport.{CODE_CANONICALIZED_FIELD_NAME, VALUE_CANONICALIZED_FIELD_NAME}
import au.csiro.pathling.encoders.SerializerBuilderProcessor.{dataTypeToUtf8Expr, getChildExpression, objectTypeFor}
-import au.csiro.pathling.encoders.datatypes.{DataTypeMappings, DecimalCustomCoder}
-import au.csiro.pathling.encoders.terminology.ucum.Ucum
+import au.csiro.pathling.encoders.datatypes.DataTypeMappings
import au.csiro.pathling.schema.SchemaVisitor.isCollection
import au.csiro.pathling.schema._
import ca.uhn.fhir.context.BaseRuntimeElementDefinition.ChildTypeEnum
@@ -36,7 +34,7 @@ import org.apache.spark.sql.catalyst.expressions.objects.{ExternalMapToCatalyst,
import org.apache.spark.sql.catalyst.expressions.{BoundReference, CreateNamedStruct, Expression, If, IsNull, Literal}
import org.apache.spark.sql.types._
import org.apache.spark.unsafe.types.UTF8String
-import org.hl7.fhir.instance.model.api.{IBaseDatatype, IBaseHasExtensions, IBaseResource}
+import org.hl7.fhir.instance.model.api.{IBaseDatatype, IBaseHasExtensions, IBaseReference, IBaseResource}
import org.hl7.fhir.r4.model.{Base, Extension, Quantity}
import org.hl7.fhir.utilities.xhtml.XhtmlNode
@@ -226,16 +224,22 @@ private[encoders] object SerializerBuilderProcessor {
// Primitive single-value types typically use the Element suffix in their
// accessors, with the exception of the "div" field for reasons that are not clear.
//noinspection DuplicatedCode
- if (field.isInstanceOf[RuntimeChildPrimitiveDatatypeDefinition] &&
- field.getMax == 1 &&
- field.getElementName != "div")
- "get" + field.getElementName.capitalize + "Element"
- else {
- if (field.getElementName.equals("class")) {
- "get" + field.getElementName.capitalize + "_"
- } else {
+ field match {
+ case p: RuntimeChildPrimitiveDatatypeDefinition if p.getMax == 1 && p
+ .getElementName != "div" =>
+ if ("reference" == p.getElementName && classOf[IBaseReference]
+ .isAssignableFrom(p.getField.getDeclaringClass)) {
+ // special case for subclasses of IBaseReference
+ // for some obscure reason the accessor getReferenceElement returns IdType rather than StringType and
+ // getReferenceElement_ needs to be used instead.
+ "getReferenceElement_"
+ } else {
+ "get" + p.getElementName.capitalize + "Element"
+ }
+ case f if f.getElementName.equals("class") =>
+ "get" + f.getElementName.capitalize + "_"
+ case _ =>
"get" + field.getElementName.capitalize
- }
}
}
diff --git a/encoders/src/main/scala/au/csiro/pathling/encoders/datatypes/R4DataTypeMappings.scala b/encoders/src/main/scala/au/csiro/pathling/encoders/datatypes/R4DataTypeMappings.scala
index 920e1afad2..43cbe00e22 100644
--- a/encoders/src/main/scala/au/csiro/pathling/encoders/datatypes/R4DataTypeMappings.scala
+++ b/encoders/src/main/scala/au/csiro/pathling/encoders/datatypes/R4DataTypeMappings.scala
@@ -30,7 +30,6 @@ import ca.uhn.fhir.model.api.TemporalPrecisionEnum
import org.apache.spark.sql.catalyst.analysis.GetColumnByOrdinal
import org.apache.spark.sql.catalyst.expressions.objects.{InitializeJavaBean, Invoke, NewInstance, StaticInvoke}
import org.apache.spark.sql.catalyst.expressions.{Cast, Expression, Literal}
-import org.apache.spark.sql.internal.SQLConf
import org.apache.spark.sql.types.{DataType, DataTypes, ObjectType}
import org.hl7.fhir.instance.model.api.{IBase, IBaseDatatype, IPrimitiveType}
import org.hl7.fhir.r4.model._
@@ -55,36 +54,13 @@ class R4DataTypeMappings extends DataTypeMappings {
override def baseType(): Class[_ <: IBaseDatatype] = classOf[org.hl7.fhir.r4.model.Type]
- override def overrideCompositeExpression(inputObject: Expression,
+ override def overrideCompositeExpression(inputObject: Expression,
definition: BaseRuntimeElementCompositeDefinition[_]): Option[Seq[ExpressionWithName]] = {
-
- if (definition.getImplementingClass == classOf[Reference]) {
- // Reference type, so return only supported fields. We also explicitly use the IIDType for the
- // reference element, since that differs from the conventions used to infer other types.
- val reference = dataTypeToUtf8Expr(
- Invoke(inputObject,
- "getReferenceElement",
- ObjectType(classOf[IdType])))
-
- val display = dataTypeToUtf8Expr(
- Invoke(inputObject,
- "getDisplayElement",
- ObjectType(classOf[org.hl7.fhir.r4.model.StringType])))
-
- Some(List(("reference", reference), ("display", display)))
- } else {
- None
- }
+ None
}
override def skipField(definition: BaseRuntimeElementCompositeDefinition[_],
child: BaseRuntimeChildDefinition): Boolean = {
-
- // References may be recursive, so include only the reference adn display name.
- val skipRecursiveReference = definition.getImplementingClass == classOf[Reference] &&
- !(child.getElementName == "reference" ||
- child.getElementName == "display")
-
// Contains elements are currently not encoded in our Spark dataset.
val skipContains = definition
.getImplementingClass == classOf[ValueSet.ValueSetExpansionContainsComponent] &&
@@ -95,8 +71,7 @@ class R4DataTypeMappings extends DataTypeMappings {
// "modifierExtensionExtension", not "extensionExtension".
// See: https://github.com/hapifhir/hapi-fhir/issues/3414
val skipModifierExtension = child.getElementName.equals("modifierExtension")
-
- skipRecursiveReference || skipContains || skipModifierExtension
+ skipContains || skipModifierExtension
}
override def primitiveEncoderExpression(inputObject: Expression,
diff --git a/encoders/src/test/java/au/csiro/pathling/encoders/FhirEncodersTest.java b/encoders/src/test/java/au/csiro/pathling/encoders/FhirEncodersTest.java
index 426f55801f..67197fa20f 100644
--- a/encoders/src/test/java/au/csiro/pathling/encoders/FhirEncodersTest.java
+++ b/encoders/src/test/java/au/csiro/pathling/encoders/FhirEncodersTest.java
@@ -23,7 +23,9 @@
package au.csiro.pathling.encoders;
+import static org.apache.spark.sql.functions.col;
import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertSame;
import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -273,13 +275,57 @@ public void coding() {
@Test
public void reference() {
+ final Condition conditionWithReferences = TestData.conditionWithReferencesWithIdentifiers();
- assertEquals(condition.getSubject().getReference(),
- conditionsDataset.select("subject.reference").head().get(0));
- assertEquals(condition.getSubject().getReference(),
- decodedCondition.getSubject().getReference());
+ final Dataset conditionL3Dataset = spark
+ .createDataset(ImmutableList.of(conditionWithReferences), ENCODERS_L3.of(Condition.class));
+
+ final Condition decodedL3Condition = conditionL3Dataset.head();
+
+ assertEquals(
+ RowFactory.create("withReferencesWithIdentifiers", "Patient/example", "urn:id"),
+ conditionL3Dataset.select("id", "subject.reference", "subject.identifier.value")
+ .head());
+
+ assertEquals("Patient/example",
+ decodedL3Condition.getSubject().getReference());
+
+ assertEquals("urn:id",
+ decodedL3Condition.getSubject().getIdentifier().getValue());
+
+ // the assigner should be pruned from the reference identifier.
+ assertTrue(conditionWithReferences.getSubject().getIdentifier().hasAssigner());
+ assertFalse(decodedL3Condition.getSubject().getIdentifier().hasAssigner());
}
+
+ @Test
+ public void identifier() {
+ final Condition conditionWithIdentifiers = TestData.conditionWithIdentifiersWithReferences();
+
+ final Dataset conditionL3Dataset = spark
+ .createDataset(ImmutableList.of(conditionWithIdentifiers), ENCODERS_L3.of(Condition.class));
+
+ final Condition decodedL3Condition = conditionL3Dataset.head();
+
+ assertEquals(
+ RowFactory.create("withIdentifiersWithReferences", "urn:id01", "Organization/001",
+ "urn:id02"),
+ conditionL3Dataset.select(
+ col("id"),
+ col("identifier.value").getItem(0),
+ col("identifier.assigner.reference").getItem(0),
+ col("identifier.assigner.identifier.value").getItem(0)
+ ).head());
+
+ // the assigner should be pruned from the reference identifier.
+ assertTrue(conditionWithIdentifiers.getIdentifier().get(0).getAssigner().getIdentifier()
+ .hasAssigner());
+ assertFalse(
+ decodedL3Condition.getIdentifier().get(0).getAssigner().getIdentifier().hasAssigner());
+ }
+
+
@Test
public void integer() {
@@ -325,13 +371,13 @@ public void choiceBigDecimalInQuestionnaire() {
.getAnswerDecimalType().getValue();
final BigDecimal queriedDecimal = (BigDecimal) questionnaireDataset
- .select(functions.col("item").getItem(0).getField("enableWhen").getItem(0)
+ .select(col("item").getItem(0).getField("enableWhen").getItem(0)
.getField("answerDecimal"))
.head()
.get(0);
final int queriedDecimal_scale = questionnaireDataset
- .select(functions.col("item").getItem(0).getField("enableWhen").getItem(0)
+ .select(col("item").getItem(0).getField("enableWhen").getItem(0)
.getField("answerDecimal_scale"))
.head()
.getInt(0);
@@ -360,13 +406,13 @@ public void choiceBigDecimalInQuestionnaireResponse() {
.getValueDecimalType().getValue();
final BigDecimal queriedDecimal = (BigDecimal) questionnaireResponseDataset
- .select(functions.col("item").getItem(0).getField("answer").getItem(0)
+ .select(col("item").getItem(0).getField("answer").getItem(0)
.getField("valueDecimal"))
.head()
.get(0);
final int queriedDecimal_scale = questionnaireResponseDataset
- .select(functions.col("item").getItem(0).getField("answer").getItem(0)
+ .select(col("item").getItem(0).getField("answer").getItem(0)
.getField("valueDecimal_scale"))
.head()
.getInt(0);
@@ -516,13 +562,13 @@ public void testNestedQuestionnaire() {
assertEquals(Stream.of("Item/0", "Item/0", "Item/0", "Item/0").map(RowFactory::create)
.collect(Collectors.toUnmodifiableList()),
- questionnaireDataset_L3.select(functions.col("item").getItem(0).getField("linkId"))
+ questionnaireDataset_L3.select(col("item").getItem(0).getField("linkId"))
.collectAsList());
assertEquals(Stream.of(null, "Item/1.0", "Item/1.0", "Item/1.0").map(RowFactory::create)
.collect(Collectors.toUnmodifiableList()),
questionnaireDataset_L3
- .select(functions.col("item")
+ .select(col("item")
.getItem(1).getField("item")
.getItem(0).getField("linkId"))
.collectAsList());
@@ -530,7 +576,7 @@ public void testNestedQuestionnaire() {
assertEquals(Stream.of(null, null, "Item/2.1.0", "Item/2.1.0").map(RowFactory::create)
.collect(Collectors.toUnmodifiableList()),
questionnaireDataset_L3
- .select(functions.col("item")
+ .select(col("item")
.getItem(2).getField("item")
.getItem(1).getField("item")
.getItem(0).getField("linkId"))
@@ -539,7 +585,7 @@ public void testNestedQuestionnaire() {
assertEquals(Stream.of(null, null, null, "Item/3.2.1.0").map(RowFactory::create)
.collect(Collectors.toUnmodifiableList()),
questionnaireDataset_L3
- .select(functions.col("item")
+ .select(col("item")
.getItem(3).getField("item")
.getItem(2).getField("item")
.getItem(1).getField("item")
diff --git a/encoders/src/test/java/au/csiro/pathling/encoders/LightweightFhirEncodersTest.java b/encoders/src/test/java/au/csiro/pathling/encoders/LightweightFhirEncodersTest.java
index 849ded3fcd..9cbcdedf10 100644
--- a/encoders/src/test/java/au/csiro/pathling/encoders/LightweightFhirEncodersTest.java
+++ b/encoders/src/test/java/au/csiro/pathling/encoders/LightweightFhirEncodersTest.java
@@ -43,14 +43,20 @@
import org.apache.spark.sql.catalyst.encoders.ExpressionEncoder;
import org.apache.spark.sql.catalyst.encoders.RowEncoder;
import org.hl7.fhir.r4.model.BaseResource;
+import org.hl7.fhir.r4.model.CodeableConcept;
+import org.hl7.fhir.r4.model.Coding;
import org.hl7.fhir.r4.model.Condition;
import org.hl7.fhir.r4.model.Device;
+import org.hl7.fhir.r4.model.Expression;
import org.hl7.fhir.r4.model.IdType;
+import org.hl7.fhir.r4.model.Identifier;
+import org.hl7.fhir.r4.model.Identifier.IdentifierUse;
import org.hl7.fhir.r4.model.MolecularSequence;
import org.hl7.fhir.r4.model.MolecularSequence.MolecularSequenceQualityRocComponent;
import org.hl7.fhir.r4.model.Observation;
import org.hl7.fhir.r4.model.PlanDefinition;
import org.hl7.fhir.r4.model.PlanDefinition.PlanDefinitionActionComponent;
+import org.hl7.fhir.r4.model.Reference;
import org.json4s.jackson.JsonMethods;
import org.junit.jupiter.api.Test;
import scala.collection.mutable.WrappedArray;
@@ -162,6 +168,65 @@ public void testHtmlNarrative() {
assertSerDeIsIdentity(encoder, conditionWithNarrative);
}
+ @Test
+ public void testReference() {
+ final ExpressionEncoder encoder = fhirEncoders
+ .of(Condition.class);
+ final Condition conditionWithFullReference = new Condition();
+ final Identifier identifier = new Identifier()
+ .setSystem("urn:id-system")
+ .setValue("id-valule")
+ .setUse(IdentifierUse.OFFICIAL)
+ .setType(new CodeableConcept().addCoding(new Coding().setCode("code").setSystem("system"))
+ .setText("text"));
+ final Reference referenceWithAllFields = new Reference("Patient/1234")
+ .setDisplay("Some Display Name")
+ .setType("Patient")
+ .setIdentifier(identifier);
+ // Set also the Element inherited fields
+ referenceWithAllFields.setId("some-id");
+ conditionWithFullReference.setSubject(referenceWithAllFields);
+ assertSerDeIsIdentity(encoder, conditionWithFullReference);
+ }
+
+ @Test
+ public void testIdentifier() {
+ final ExpressionEncoder encoder = fhirEncoders
+ .of(Condition.class);
+ final Condition conditionWithIdentifierWithAssigner = new Condition();
+
+ final Reference assignerReference = new Reference("Organization/1234")
+ .setDisplay("Some Display Name")
+ .setType("Organization");
+
+ final Identifier identifier = new Identifier()
+ .setSystem("urn:id-system")
+ .setValue("id-valule")
+ .setUse(IdentifierUse.OFFICIAL)
+ .setAssigner(assignerReference)
+ .setType(new CodeableConcept().addCoding(new Coding().setCode("code").setSystem("system"))
+ .setText("text"));
+ conditionWithIdentifierWithAssigner.addIdentifier(identifier);
+ assertSerDeIsIdentity(encoder, conditionWithIdentifierWithAssigner);
+ }
+
+ @Test
+ public void testExpression() {
+
+ // Expression contains 'reference' field
+ // We are checking that it is encoded in generic way not and not the subject to special case for Reference 'reference' field.
+ final ExpressionEncoder encoder = fhirEncoders
+ .of(PlanDefinition.class);
+
+ final PlanDefinition planDefinition = new PlanDefinition();
+
+ final PlanDefinitionActionComponent actionComponent = planDefinition
+ .getActionFirstRep();
+ actionComponent.getConditionFirstRep().setExpression(new Expression().setLanguage("language")
+ .setExpression("expression").setDescription("description"));
+ assertSerDeIsIdentity(encoder, planDefinition);
+ }
+
@Test
public void testThrowsExceptionWhenUnsupportedResource() {
for (final String resourceName : EXCLUDED_RESOURCES) {
@@ -264,7 +329,7 @@ public void testQuantityArrayCanonicalization() {
final List properties = deviceRow.getList(deviceRow.fieldIndex("property"));
final Row propertyRow = properties.get(0);
final List quantityArray = propertyRow.getList(propertyRow.fieldIndex("valueQuantity"));
-
+
final Row quantity1 = quantityArray.get(0);
assertQuantity(quantity1, "0.0010", "m");
diff --git a/encoders/src/test/java/au/csiro/pathling/encoders/SchemaConverterTest.java b/encoders/src/test/java/au/csiro/pathling/encoders/SchemaConverterTest.java
index 02fc596650..eb36ee8467 100644
--- a/encoders/src/test/java/au/csiro/pathling/encoders/SchemaConverterTest.java
+++ b/encoders/src/test/java/au/csiro/pathling/encoders/SchemaConverterTest.java
@@ -25,6 +25,7 @@
import static au.csiro.pathling.test.SchemaAsserts.assertFieldNotPresent;
import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertInstanceOf;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -93,9 +94,8 @@ public class SchemaConverterTest {
private StructType medRequestSchema;
private StructType questionnaireSchema;
private StructType questionnaireResponseSchema;
-
private StructType deviceSchema;
-
+ private StructType observationSchema_L2;
/**
* Traverses a DataType recursively passing all encountered StructTypes to the provided consumer.
@@ -173,16 +173,17 @@ public void setUp() {
questionnaireSchema = converter_L0.resourceSchema(Questionnaire.class);
questionnaireResponseSchema = converter_L0.resourceSchema(QuestionnaireResponse.class);
deviceSchema = converter_L0.resourceSchema(Device.class);
+ observationSchema_L2 = converter_L2.resourceSchema(Observation.class);
}
@Test
public void resourceHasId() {
- assertTrue(getField(conditionSchema, true, "id") instanceof StringType);
+ assertInstanceOf(StringType.class, getField(conditionSchema, true, "id"));
}
@Test
public void boundCodeToStruct() {
- assertTrue(getField(conditionSchema, true, "verificationStatus") instanceof StructType);
+ assertInstanceOf(StructType.class, getField(conditionSchema, true, "verificationStatus"));
}
@Test
@@ -190,11 +191,11 @@ public void codingToStruct() {
final DataType codingType = getField(conditionSchema, true, "severity", "coding");
- assertTrue(getField(codingType, true, "system") instanceof StringType);
- assertTrue(getField(codingType, true, "version") instanceof StringType);
- assertTrue(getField(codingType, true, "code") instanceof StringType);
- assertTrue(getField(codingType, true, "display") instanceof StringType);
- assertTrue(getField(codingType, true, "userSelected") instanceof BooleanType);
+ assertInstanceOf(StringType.class, getField(codingType, true, "system"));
+ assertInstanceOf(StringType.class, getField(codingType, true, "version"));
+ assertInstanceOf(StringType.class, getField(codingType, true, "code"));
+ assertInstanceOf(StringType.class, getField(codingType, true, "display"));
+ assertInstanceOf(BooleanType.class, getField(codingType, true, "userSelected"));
}
@Test
@@ -202,30 +203,30 @@ public void codeableConceptToStruct() {
final DataType codeableType = getField(conditionSchema, true, "severity");
- assertTrue(codeableType instanceof StructType);
- assertTrue(getField(codeableType, true, "coding") instanceof ArrayType);
- assertTrue(getField(codeableType, true, "text") instanceof StringType);
+ assertInstanceOf(StructType.class, codeableType);
+ assertInstanceOf(ArrayType.class, getField(codeableType, true, "coding"));
+ assertInstanceOf(StringType.class, getField(codeableType, true, "text"));
}
@Test
public void idToString() {
- assertTrue(getField(conditionSchema, true, "id") instanceof StringType);
+ assertInstanceOf(StringType.class, getField(conditionSchema, true, "id"));
}
@Test
public void narrativeToStruct() {
- assertTrue(getField(conditionSchema, true, "text", "status") instanceof StringType);
- assertTrue(getField(conditionSchema, true, "text", "div") instanceof StringType);
+ assertInstanceOf(StringType.class, getField(conditionSchema, true, "text", "status"));
+ assertInstanceOf(StringType.class, getField(conditionSchema, true, "text", "div"));
}
@Test
public void expandChoiceFields() {
- assertTrue(getField(conditionSchema, true, "onsetPeriod") instanceof StructType);
- assertTrue(getField(conditionSchema, true, "onsetRange") instanceof StructType);
- assertTrue(getField(conditionSchema, true, "onsetDateTime") instanceof StringType);
- assertTrue(getField(conditionSchema, true, "onsetString") instanceof StringType);
- assertTrue(getField(conditionSchema, true, "onsetAge") instanceof StructType);
+ assertInstanceOf(StructType.class, getField(conditionSchema, true, "onsetPeriod"));
+ assertInstanceOf(StructType.class, getField(conditionSchema, true, "onsetRange"));
+ assertInstanceOf(StringType.class, getField(conditionSchema, true, "onsetDateTime"));
+ assertInstanceOf(StringType.class, getField(conditionSchema, true, "onsetString"));
+ assertInstanceOf(StructType.class, getField(conditionSchema, true, "onsetAge"));
}
@Test
@@ -244,19 +245,21 @@ public void orderChoiceFields() {
@Test
public void decimalWithinChoiceField() {
- assertTrue(getField(questionnaireSchema, true, "item", "enableWhen",
- "answerDecimal") instanceof DecimalType);
- assertTrue(getField(questionnaireSchema, true, "item", "enableWhen",
- "answerDecimal_scale") instanceof IntegerType);
- assertTrue(getField(questionnaireResponseSchema, true, "item", "answer",
- "valueDecimal") instanceof DecimalType);
- assertTrue(getField(questionnaireResponseSchema, true, "item", "answer",
- "valueDecimal_scale") instanceof IntegerType);
+ assertInstanceOf(DecimalType.class, getField(questionnaireSchema, true, "item", "enableWhen",
+ "answerDecimal"));
+ assertInstanceOf(IntegerType.class, getField(questionnaireSchema, true, "item", "enableWhen",
+ "answerDecimal_scale"));
+ assertInstanceOf(DecimalType.class,
+ getField(questionnaireResponseSchema, true, "item", "answer",
+ "valueDecimal"));
+ assertInstanceOf(IntegerType.class,
+ getField(questionnaireResponseSchema, true, "item", "answer",
+ "valueDecimal_scale"));
}
@Test
public void instantToTimestamp() {
- assertTrue(getField(observationSchema, true, "issued") instanceof TimestampType);
+ assertInstanceOf(TimestampType.class, getField(observationSchema, true, "issued"));
}
@Test
@@ -266,17 +269,59 @@ public void timeToString() {
@Test
public void bigDecimalToDecimal() {
- assertTrue(
- getField(observationSchema, true, "valueQuantity", "value") instanceof DecimalType);
+ assertInstanceOf(DecimalType.class,
+ getField(observationSchema, true, "valueQuantity", "value"));
}
@Test
public void reference() {
- assertTrue(
- getField(observationSchema, true, "subject", "reference") instanceof StringType);
- assertTrue(getField(observationSchema, true, "subject", "display") instanceof StringType);
+ assertInstanceOf(StringType.class, getField(observationSchema, true, "subject", "id"));
+ assertInstanceOf(StringType.class, getField(observationSchema, true, "subject", "reference"));
+ assertInstanceOf(StringType.class, getField(observationSchema, true, "subject", "display"));
+ assertInstanceOf(StringType.class, getField(observationSchema, true, "subject", "type"));
+ assertInstanceOf(StructType.class, getField(observationSchema, true, "subject", "identifier"));
+ assertInstanceOf(StringType.class,
+ getField(observationSchema, true, "subject", "identifier", "value"));
+
}
+ @Test
+ public void identifier() {
+ assertInstanceOf(StringType.class,
+ unArray(getField(observationSchema, true, "identifier", "value")));
+ // `assigner` field should be present in the root level `Identifier` schema.
+ assertInstanceOf(StructType.class,
+ unArray(getField(observationSchema, true, "identifier", "assigner")));
+ assertInstanceOf(StringType.class,
+ unArray(getField(observationSchema, true, "identifier", "assigner", "reference")));
+
+ }
+
+ @Test
+ public void identifierInReference() {
+ //
+ // Identifier (assigner) in root Reference
+ //
+ assertFieldNotPresent("assigner", getField(observationSchema, true, "subject", "identifier"));
+ // The `assigner` field should not be present in Identifier schema of the Reference `identifier` field.
+ assertFieldNotPresent("assigner",
+ getField(observationSchema_L2, true, "subject", "identifier"));
+
+ //
+ // Identifier (assigner) in a Reference nested in an Identifier
+ //
+ // the `identifier` field should not be present because for normal nesting rules for 0-level nesting
+ assertFieldNotPresent("identifier",
+ unArray(getField(observationSchema, true, "identifier", "assigner")));
+ // the `identifier` field should be present because for normal nesting rules for 2-level nesting
+ assertInstanceOf(StructType.class,
+ unArray(getField(observationSchema_L2, true, "identifier", "assigner", "identifier")));
+ // but it should not have the assigner field
+ assertFieldNotPresent("assigner",
+ unArray(getField(observationSchema_L2, true, "identifier", "assigner", "identifier")));
+ }
+
+
@Test
public void preferredNameOnly() {
@@ -374,7 +419,7 @@ public void testExtensions() {
final MapType extensionsContainerType = (MapType) getField(extensionSchema, true,
"_extension");
assertEquals(DataTypes.IntegerType, extensionsContainerType.keyType());
- assertTrue(extensionsContainerType.valueType() instanceof ArrayType);
+ assertInstanceOf(ArrayType.class, extensionsContainerType.valueType());
traverseSchema(extensionSchema, t -> {
assertEquals(DataTypes.IntegerType, t.fields()[t.fieldIndex("_fid")].dataType());
@@ -424,13 +469,13 @@ public void testQuantityArray() {
}
private void assertQuantityType(final DataType quantityType) {
- assertTrue(getField(quantityType, true, "value") instanceof DecimalType);
- assertTrue(getField(quantityType, true, "value_scale") instanceof IntegerType);
- assertTrue(getField(quantityType, true, "comparator") instanceof StringType);
- assertTrue(getField(quantityType, true, "unit") instanceof StringType);
- assertTrue(getField(quantityType, true, "system") instanceof StringType);
- assertTrue(getField(quantityType, true, "code") instanceof StringType);
+ assertInstanceOf(DecimalType.class, getField(quantityType, true, "value"));
+ assertInstanceOf(IntegerType.class, getField(quantityType, true, "value_scale"));
+ assertInstanceOf(StringType.class, getField(quantityType, true, "comparator"));
+ assertInstanceOf(StringType.class, getField(quantityType, true, "unit"));
+ assertInstanceOf(StringType.class, getField(quantityType, true, "system"));
+ assertInstanceOf(StringType.class, getField(quantityType, true, "code"));
assertEquals(FlexiDecimal.DATA_TYPE, getField(quantityType, true, "_value_canonicalized"));
- assertTrue(getField(quantityType, true, "_code_canonicalized") instanceof StringType);
+ assertInstanceOf(StringType.class, getField(quantityType, true, "_code_canonicalized"));
}
}
diff --git a/encoders/src/test/java/au/csiro/pathling/encoders/TestData.java b/encoders/src/test/java/au/csiro/pathling/encoders/TestData.java
index 010d1586a3..6a4f3195f4 100644
--- a/encoders/src/test/java/au/csiro/pathling/encoders/TestData.java
+++ b/encoders/src/test/java/au/csiro/pathling/encoders/TestData.java
@@ -138,6 +138,31 @@ public static Condition newCondition() {
return condition;
}
+ public static Condition conditionWithReferencesWithIdentifiers() {
+ final Condition condition = new Condition();
+ condition.setId("withReferencesWithIdentifiers");
+ condition.setSubject(
+ new Reference("Patient/example")
+ .setDisplay("Display name")
+ .setIdentifier(
+ new Identifier().setValue("urn:id").setAssigner(new Reference("Organization/001")))
+ );
+ return condition;
+ }
+
+ public static Condition conditionWithIdentifiersWithReferences() {
+ final Condition condition = new Condition();
+ condition.setId("withIdentifiersWithReferences");
+ condition
+ .addIdentifier()
+ .setValue("urn:id01")
+ .setAssigner(new Reference("Organization/001")
+ .setIdentifier(new Identifier().setValue("urn:id02")
+ .setAssigner(new Reference("Organization/002"))));
+ return condition;
+ }
+
+
public static Condition conditionWithVersion() {
final Condition condition = new Condition();
final IdType id = new IdType("Condition", "with-version", "1");
@@ -145,6 +170,7 @@ public static Condition conditionWithVersion() {
return condition;
}
+
/**
* Returns a FHIR Observation for testing purposes.
*/
From 238e20022683c63e5d530300717809d02529911d Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Wed, 10 Apr 2024 16:38:54 +1000
Subject: [PATCH 015/175] Add additional test coverage for the new Reference
structure
---
.../pathling/encoders/FhirEncodersTest.java | 33 ++++++++++++++++---
.../au/csiro/pathling/encoders/TestData.java | 15 ++++++++-
2 files changed, 42 insertions(+), 6 deletions(-)
diff --git a/encoders/src/test/java/au/csiro/pathling/encoders/FhirEncodersTest.java b/encoders/src/test/java/au/csiro/pathling/encoders/FhirEncodersTest.java
index 67197fa20f..281ba09ad3 100644
--- a/encoders/src/test/java/au/csiro/pathling/encoders/FhirEncodersTest.java
+++ b/encoders/src/test/java/au/csiro/pathling/encoders/FhirEncodersTest.java
@@ -283,9 +283,22 @@ public void reference() {
final Condition decodedL3Condition = conditionL3Dataset.head();
assertEquals(
- RowFactory.create("withReferencesWithIdentifiers", "Patient/example", "urn:id"),
- conditionL3Dataset.select("id", "subject.reference", "subject.identifier.value")
- .head());
+ RowFactory.create(
+ "withReferencesWithIdentifiers",
+ "Patient/example",
+ "http://terminology.hl7.org/CodeSystem/v2-0203",
+ "MR",
+ "https://fhir.example.com/identifiers/mrn",
+ "urn:id"
+ ),
+ conditionL3Dataset.select(
+ col("id"),
+ col("subject.reference"),
+ col("subject.identifier.type.coding.system").getItem(0),
+ col("subject.identifier.type.coding.code").getItem(0),
+ col("subject.identifier.system"),
+ col("subject.identifier.value")
+ ).head());
assertEquals("Patient/example",
decodedL3Condition.getSubject().getReference());
@@ -309,10 +322,20 @@ public void identifier() {
final Condition decodedL3Condition = conditionL3Dataset.head();
assertEquals(
- RowFactory.create("withIdentifiersWithReferences", "urn:id01", "Organization/001",
- "urn:id02"),
+ RowFactory.create(
+ "withIdentifiersWithReferences",
+ "http://terminology.hl7.org/CodeSystem/v2-0203",
+ "MR",
+ "https://fhir.example.com/identifiers/mrn",
+ "urn:id01",
+ "Organization/001",
+ "urn:id02"
+ ),
conditionL3Dataset.select(
col("id"),
+ col("identifier.type.coding").getItem(0).getField("system").getItem(0),
+ col("identifier.type.coding").getItem(0).getField("code").getItem(0),
+ col("identifier.system").getItem(0),
col("identifier.value").getItem(0),
col("identifier.assigner.reference").getItem(0),
col("identifier.assigner.identifier.value").getItem(0)
diff --git a/encoders/src/test/java/au/csiro/pathling/encoders/TestData.java b/encoders/src/test/java/au/csiro/pathling/encoders/TestData.java
index 6a4f3195f4..1faa47c94b 100644
--- a/encoders/src/test/java/au/csiro/pathling/encoders/TestData.java
+++ b/encoders/src/test/java/au/csiro/pathling/encoders/TestData.java
@@ -141,11 +141,19 @@ public static Condition newCondition() {
public static Condition conditionWithReferencesWithIdentifiers() {
final Condition condition = new Condition();
condition.setId("withReferencesWithIdentifiers");
+ final Coding typeCoding = new Coding("http://terminology.hl7.org/CodeSystem/v2-0203", "MR",
+ null);
+ final CodeableConcept typeConcept = new CodeableConcept(typeCoding);
condition.setSubject(
new Reference("Patient/example")
.setDisplay("Display name")
.setIdentifier(
- new Identifier().setValue("urn:id").setAssigner(new Reference("Organization/001")))
+ new Identifier()
+ .setType(typeConcept)
+ .setSystem("https://fhir.example.com/identifiers/mrn")
+ .setValue("urn:id")
+ .setAssigner(new Reference("Organization/001"))
+ )
);
return condition;
}
@@ -153,8 +161,13 @@ public static Condition conditionWithReferencesWithIdentifiers() {
public static Condition conditionWithIdentifiersWithReferences() {
final Condition condition = new Condition();
condition.setId("withIdentifiersWithReferences");
+ final Coding typeCoding = new Coding("http://terminology.hl7.org/CodeSystem/v2-0203", "MR",
+ null);
+ final CodeableConcept typeConcept = new CodeableConcept(typeCoding);
condition
.addIdentifier()
+ .setType(typeConcept)
+ .setSystem("https://fhir.example.com/identifiers/mrn")
.setValue("urn:id01")
.setAssigner(new Reference("Organization/001")
.setIdentifier(new Identifier().setValue("urn:id02")
From cb7b8004b1f788a4af9b76a4e4f87d2ed92ab2f9 Mon Sep 17 00:00:00 2001
From: Piotr Szul
Date: Thu, 11 Apr 2024 11:28:57 +1000
Subject: [PATCH 016/175] Fixing R build to always run 'doxygen2' and generate
the 'NAMESPACE' file required for package installation.
---
lib/R/pom.xml | 30 +++++++++++++++---------------
1 file changed, 15 insertions(+), 15 deletions(-)
diff --git a/lib/R/pom.xml b/lib/R/pom.xml
index ea01f38eff..e5c86b1abc 100644
--- a/lib/R/pom.xml
+++ b/lib/R/pom.xml
@@ -225,6 +225,21 @@
+
+ generate-docs
+ process-sources
+
+ exec
+
+
+ Rscript
+ ${project.basedir}
+
+ -e
+ roxygen2::roxygenise()
+
+
+
test
test
@@ -308,21 +323,6 @@
org.codehaus.mojo
exec-maven-plugin
-
- generate-docs
- process-sources
-
- exec
-
-
- Rscript
- ${project.basedir}
-
- -e
- roxygen2::roxygenise()
-
-
-
generate-site
process-sources
From 6d4446bf00eef1e71212bd2ab20d7845d3fb7c28 Mon Sep 17 00:00:00 2001
From: Piotr Szul
Date: Thu, 11 Apr 2024 12:41:17 +1000
Subject: [PATCH 017/175] Adding support for all reference fields to
ReferentPath. (removing the special case implementation)
---
.../pathling/fhirpath/parser/ParserTest.java | 10 +-
.../fhirpath/element/ReferencePath.java | 12 --
.../fhirpath/parser/FhirpathTest.java | 115 ++++++++++++++++++
3 files changed, 116 insertions(+), 21 deletions(-)
create mode 100644 fhirpath/src/test/java/au/csiro/pathling/fhirpath/parser/FhirpathTest.java
diff --git a/fhir-server/src/test/java/au/csiro/pathling/fhirpath/parser/ParserTest.java b/fhir-server/src/test/java/au/csiro/pathling/fhirpath/parser/ParserTest.java
index ab17db6576..d27ec73230 100644
--- a/fhir-server/src/test/java/au/csiro/pathling/fhirpath/parser/ParserTest.java
+++ b/fhir-server/src/test/java/au/csiro/pathling/fhirpath/parser/ParserTest.java
@@ -836,15 +836,7 @@ void testQuantityAdditionWithOverflow() {
.selectResult()
.hasRows(spark, "responses/ParserTest/testQuantityAdditionWithOverflow_code.csv");
}
-
- @Test
- void testTraversalToUnsupportedReferenceChild() {
- final String expression = "reverseResolve(MedicationRequest.subject).requester.identifier";
- final InvalidUserInputError error = assertThrows(InvalidUserInputError.class,
- expression);
- assertEquals("No such child: " + expression, error.getMessage());
- }
-
+
@Test
void testResolutionOfExtensionReference() {
mockResource(ResourceType.PATIENT, ResourceType.ENCOUNTER, ResourceType.GOAL);
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/ReferencePath.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/ReferencePath.java
index 61fa51bd55..b5219bdd7d 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/ReferencePath.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/ReferencePath.java
@@ -69,16 +69,4 @@ public Column getResourceEquality(@Nonnull final Column targetId,
@Nonnull final Column targetCode) {
return Referrer.resourceEqualityFor(this, targetCode, targetId);
}
-
- @Nonnull
- @Override
- public Optional getChildElement(@Nonnull final String name) {
- // We only encode the reference and display elements of the Reference type.
- if (name.equals("reference") || name.equals("display")) {
- return super.getChildElement(name);
- } else {
- return Optional.empty();
- }
- }
-
}
diff --git a/fhirpath/src/test/java/au/csiro/pathling/fhirpath/parser/FhirpathTest.java b/fhirpath/src/test/java/au/csiro/pathling/fhirpath/parser/FhirpathTest.java
new file mode 100644
index 0000000000..5cfe6cd8d5
--- /dev/null
+++ b/fhirpath/src/test/java/au/csiro/pathling/fhirpath/parser/FhirpathTest.java
@@ -0,0 +1,115 @@
+/*
+ * Copyright 2023 Commonwealth Scientific and Industrial Research
+ * Organisation (CSIRO) ABN 41 687 119 230.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package au.csiro.pathling.fhirpath.parser;
+
+import static au.csiro.pathling.test.assertions.Assertions.assertThat;
+import static org.mockito.Mockito.when;
+
+import au.csiro.pathling.encoders.FhirEncoders;
+import au.csiro.pathling.fhirpath.ResourcePath;
+import au.csiro.pathling.io.source.DataSource;
+import au.csiro.pathling.terminology.TerminologyService;
+import au.csiro.pathling.terminology.TerminologyServiceFactory;
+import au.csiro.pathling.test.SpringBootUnitTest;
+import au.csiro.pathling.test.assertions.FhirPathAssertion;
+import au.csiro.pathling.test.builders.ParserContextBuilder;
+import ca.uhn.fhir.context.FhirContext;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+import javax.annotation.Nonnull;
+import org.apache.spark.sql.Dataset;
+import org.apache.spark.sql.Row;
+import org.apache.spark.sql.RowFactory;
+import org.apache.spark.sql.SparkSession;
+import org.hl7.fhir.r4.model.Condition;
+import org.hl7.fhir.r4.model.Enumerations.ResourceType;
+import org.hl7.fhir.r4.model.Identifier;
+import org.hl7.fhir.r4.model.Reference;
+import org.hl7.fhir.r4.model.Resource;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.mock.mockito.MockBean;
+
+@SpringBootUnitTest
+public class FhirpathTest {
+
+ @Autowired
+ protected SparkSession spark;
+
+ @Autowired
+ FhirContext fhirContext;
+
+ @Autowired
+ TerminologyService terminologyService;
+
+ @Autowired
+ FhirEncoders fhirEncoders;
+
+ @Autowired
+ TerminologyServiceFactory terminologyServiceFactory;
+
+ @MockBean
+ DataSource dataSource;
+
+
+ @SuppressWarnings("SameParameterValue")
+ @Nonnull
+ protected FhirPathAssertion assertThatResultOf(@Nonnull final ResourceType resourceType,
+ @Nonnull final String expression) {
+ final ResourcePath subjectResource = ResourcePath
+ .build(fhirContext, dataSource, resourceType, resourceType.toCode(), true);
+
+ final ParserContext parserContext = new ParserContextBuilder(spark, fhirContext)
+ .terminologyClientFactory(terminologyServiceFactory)
+ .database(dataSource)
+ .inputContext(subjectResource)
+ .build();
+ final Parser resourceParser = new Parser(parserContext);
+ return assertThat(resourceParser.parse(expression));
+ }
+
+
+ void withResources(@Nonnull final Resource resources) {
+
+ // group resources by type
+ // and then encode them into a dataset and setup the mock datasorce
+
+ Stream.of(resources).collect(Collectors.groupingBy(Resource::getResourceType))
+ .forEach((resourceType, resourcesOfType) -> {
+ final ResourceType resourceTypeEnum = ResourceType.fromCode(resourceType.name());
+ final Dataset dataset = spark.createDataset(resourcesOfType,
+ fhirEncoders.of(resourceTypeEnum.toCode()))
+ .toDF();
+ when(dataSource.read(resourceTypeEnum)).thenReturn(dataset.cache());
+ });
+ }
+
+
+ @Test
+ void testTraversalIntoReferenceIdentifier() {
+ withResources(
+ new Condition()
+ .setSubject(new Reference().setIdentifier(new Identifier().setValue("value")))
+ .setId("001")
+ );
+ assertThatResultOf(ResourceType.CONDITION, "subject.identifier.value")
+ .selectResult()
+ .hasRows(RowFactory.create("001", "value"));
+ }
+
+}
From 65e10846f8f67c5bffa02cab5fe8772e71222879 Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Fri, 12 Apr 2024 09:37:55 +1000
Subject: [PATCH 018/175] Improve comment within SchemaProcessor#includeElement
---
.../scala/au/csiro/pathling/encoders/SchemaProcessor.scala | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/encoders/src/main/scala/au/csiro/pathling/encoders/SchemaProcessor.scala b/encoders/src/main/scala/au/csiro/pathling/encoders/SchemaProcessor.scala
index 59b568f634..d5a1b30dc0 100644
--- a/encoders/src/main/scala/au/csiro/pathling/encoders/SchemaProcessor.scala
+++ b/encoders/src/main/scala/au/csiro/pathling/encoders/SchemaProcessor.scala
@@ -99,9 +99,9 @@ trait SchemaProcessor[DT, SF] extends SchemaVisitor[DT, SF] with EncoderSettings
private def includeElement(elementDefinition: BaseRuntimeElementDefinition[_]): Boolean = {
val nestingLevel = EncodingContext.currentNestingLevel(elementDefinition)
if (classOf[IBaseReference].isAssignableFrom(elementDefinition.getImplementingClass)) {
- // special provision for references which disallows any nesting
- // in particular for R4 removes the `assigner` field from the
- // Identifier type instances nested inside a Reference (in it's `identifier` fiels)
+ // This is a special provision for References which disallows any nesting.
+ // It removes the `assigner` field from the Identifier type instances
+ // nested inside a Reference (in its `identifier` element).
nestingLevel <= 0
} else {
nestingLevel <= maxNestingLevel
From 55216e042fd58c49d69df376ba5f8cd66007b3a1 Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Fri, 12 Apr 2024 11:18:37 +1000
Subject: [PATCH 019/175] Improve comment within SerializerBuilder#accessorFor
---
.../au/csiro/pathling/encoders/SerializerBuilder.scala | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/encoders/src/main/scala/au/csiro/pathling/encoders/SerializerBuilder.scala b/encoders/src/main/scala/au/csiro/pathling/encoders/SerializerBuilder.scala
index c99d5da816..87ff0a1d9c 100644
--- a/encoders/src/main/scala/au/csiro/pathling/encoders/SerializerBuilder.scala
+++ b/encoders/src/main/scala/au/csiro/pathling/encoders/SerializerBuilder.scala
@@ -229,9 +229,11 @@ private[encoders] object SerializerBuilderProcessor {
.getElementName != "div" =>
if ("reference" == p.getElementName && classOf[IBaseReference]
.isAssignableFrom(p.getField.getDeclaringClass)) {
- // special case for subclasses of IBaseReference
- // for some obscure reason the accessor getReferenceElement returns IdType rather than StringType and
- // getReferenceElement_ needs to be used instead.
+ // Special case for subclasses of IBaseReference.
+ // The accessor getReferenceElement returns IdType rather than
+ // StringType and getReferenceElement_ needs to be used instead.
+ // All subclasses of IBaseReference have a getReferenceElement_
+ // method.
"getReferenceElement_"
} else {
"get" + p.getElementName.capitalize + "Element"
From 9c38295050aeed80548ae0db2aba1f1b6578a157 Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Fri, 12 Apr 2024 11:23:21 +1000
Subject: [PATCH 020/175] Rename FhirpathTest to FhirPathTest
---
.../fhirpath/parser/{FhirpathTest.java => FhirPathTest.java} | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
rename fhirpath/src/test/java/au/csiro/pathling/fhirpath/parser/{FhirpathTest.java => FhirPathTest.java} (99%)
diff --git a/fhirpath/src/test/java/au/csiro/pathling/fhirpath/parser/FhirpathTest.java b/fhirpath/src/test/java/au/csiro/pathling/fhirpath/parser/FhirPathTest.java
similarity index 99%
rename from fhirpath/src/test/java/au/csiro/pathling/fhirpath/parser/FhirpathTest.java
rename to fhirpath/src/test/java/au/csiro/pathling/fhirpath/parser/FhirPathTest.java
index 5cfe6cd8d5..d69bc21170 100644
--- a/fhirpath/src/test/java/au/csiro/pathling/fhirpath/parser/FhirpathTest.java
+++ b/fhirpath/src/test/java/au/csiro/pathling/fhirpath/parser/FhirPathTest.java
@@ -46,7 +46,7 @@
import org.springframework.boot.test.mock.mockito.MockBean;
@SpringBootUnitTest
-public class FhirpathTest {
+public class FhirPathTest {
@Autowired
protected SparkSession spark;
From c5247f17a0a099a895e4fda845aeb5d99bd557a4 Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Wed, 17 Apr 2024 10:55:15 +1000
Subject: [PATCH 021/175] Update version to 7.0.0-SNAPSHOT
---
deployment/helm/pom.xml | 2 +-
encoders/pom.xml | 2 +-
fhir-server/pom.xml | 2 +-
fhirpath/pom.xml | 2 +-
lib/R/pom.xml | 2 +-
lib/import/pom.xml | 2 +-
lib/js/pom.xml | 2 +-
lib/python/Dockerfile | 2 +-
lib/python/pom.xml | 2 +-
library-api/pom.xml | 2 +-
library-runtime/pom.xml | 2 +-
pom.xml | 2 +-
site/docs/libraries/installation/spark.md | 6 +++---
site/pom.xml | 2 +-
terminology/pom.xml | 2 +-
utilities/pom.xml | 2 +-
16 files changed, 18 insertions(+), 18 deletions(-)
diff --git a/deployment/helm/pom.xml b/deployment/helm/pom.xml
index e43d3f35e2..0edb8cf54e 100644
--- a/deployment/helm/pom.xml
+++ b/deployment/helm/pom.xml
@@ -24,7 +24,7 @@
au.csiro.pathling
pathling
- 6.4.2
+ 7.0.0-SNAPSHOT
../../pom.xml
helm
diff --git a/encoders/pom.xml b/encoders/pom.xml
index 89081d9e25..1b01e2aa90 100644
--- a/encoders/pom.xml
+++ b/encoders/pom.xml
@@ -30,7 +30,7 @@
au.csiro.pathling
pathling
- 6.4.2
+ 7.0.0-SNAPSHOT
encoders
jar
diff --git a/fhir-server/pom.xml b/fhir-server/pom.xml
index 5ec4d88594..22d401f426 100644
--- a/fhir-server/pom.xml
+++ b/fhir-server/pom.xml
@@ -24,7 +24,7 @@
au.csiro.pathling
pathling
- 6.4.2
+ 7.0.0-SNAPSHOT
fhir-server
jar
diff --git a/fhirpath/pom.xml b/fhirpath/pom.xml
index ba17ab397c..5c01dfde13 100644
--- a/fhirpath/pom.xml
+++ b/fhirpath/pom.xml
@@ -24,7 +24,7 @@
au.csiro.pathling
pathling
- 6.4.2
+ 7.0.0-SNAPSHOT
fhirpath
jar
diff --git a/lib/R/pom.xml b/lib/R/pom.xml
index e5c86b1abc..f961205d70 100644
--- a/lib/R/pom.xml
+++ b/lib/R/pom.xml
@@ -24,7 +24,7 @@
au.csiro.pathling
pathling
- 6.4.2
+ 7.0.0-SNAPSHOT
../../pom.xml
r
diff --git a/lib/import/pom.xml b/lib/import/pom.xml
index 5fdafe6c1d..94779d092d 100644
--- a/lib/import/pom.xml
+++ b/lib/import/pom.xml
@@ -24,7 +24,7 @@
au.csiro.pathling
pathling
- 6.4.2
+ 7.0.0-SNAPSHOT
../../pom.xml
import
diff --git a/lib/js/pom.xml b/lib/js/pom.xml
index 4227e648e8..718a13bf9f 100644
--- a/lib/js/pom.xml
+++ b/lib/js/pom.xml
@@ -24,7 +24,7 @@
au.csiro.pathling
pathling
- 6.4.2
+ 7.0.0-SNAPSHOT
../../pom.xml
js
diff --git a/lib/python/Dockerfile b/lib/python/Dockerfile
index 69498c3f69..3e3d55e5c9 100644
--- a/lib/python/Dockerfile
+++ b/lib/python/Dockerfile
@@ -1,7 +1,7 @@
FROM jupyter/all-spark-notebook
USER root
-RUN echo "spark.jars.packages au.csiro.pathling:library-runtime:6.4.2" >> /usr/local/spark/conf/spark-defaults.conf
+RUN echo "spark.jars.packages au.csiro.pathling:library-runtime:7.0.0-SNAPSHOT" >> /usr/local/spark/conf/spark-defaults.conf
USER ${NB_UID}
diff --git a/lib/python/pom.xml b/lib/python/pom.xml
index 47133b47dc..c3a2054da8 100644
--- a/lib/python/pom.xml
+++ b/lib/python/pom.xml
@@ -24,7 +24,7 @@
au.csiro.pathling
pathling
- 6.4.2
+ 7.0.0-SNAPSHOT
../../pom.xml
python
diff --git a/library-api/pom.xml b/library-api/pom.xml
index 0e4c7996e2..d8ac726df5 100644
--- a/library-api/pom.xml
+++ b/library-api/pom.xml
@@ -25,7 +25,7 @@
pathling
au.csiro.pathling
- 6.4.2
+ 7.0.0-SNAPSHOT
library-api
jar
diff --git a/library-runtime/pom.xml b/library-runtime/pom.xml
index b23a42e74b..4358674d0b 100644
--- a/library-runtime/pom.xml
+++ b/library-runtime/pom.xml
@@ -25,7 +25,7 @@
pathling
au.csiro.pathling
- 6.4.2
+ 7.0.0-SNAPSHOT
library-runtime
jar
diff --git a/pom.xml b/pom.xml
index ba84385ff3..cb3ccdffc8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -22,7 +22,7 @@
4.0.0
au.csiro.pathling
pathling
- 6.4.2
+ 7.0.0-SNAPSHOT
pom
Pathling
diff --git a/site/docs/libraries/installation/spark.md b/site/docs/libraries/installation/spark.md
index e0ecfc66c5..e0d367df35 100644
--- a/site/docs/libraries/installation/spark.md
+++ b/site/docs/libraries/installation/spark.md
@@ -35,7 +35,7 @@ from pyspark.sql import SparkSession
spark = (
SparkSession.builder.config(
"spark.jars.packages",
- "au.csiro.pathling:library-runtime:6.4.2,"
+ "au.csiro.pathling:library-runtime:7.0.0-SNAPSHOT,"
"io.delta:delta-core_2.12:2.4.0,"
)
.config(
@@ -75,7 +75,7 @@ pc <- pathling_connect(sc)
import au.csiro.pathling.library.PathlingContext
val spark = SparkSession.builder
- .config("spark.jars.packages", "au.csiro.pathling:library-runtime:6.4.2," +
+ .config("spark.jars.packages", "au.csiro.pathling:library-runtime:7.0.0-SNAPSHOT," +
"io.delta:delta-core_2.12:2.4.0")
.config("spark.sql.extensions", "io.delta.sql.DeltaSparkSessionExtension")
.config("spark.sql.catalog.spark_catalog",
@@ -97,7 +97,7 @@ class MyApp {
public static void main(String[] args) {
SparkSession spark = SparkSession.builder()
.config("spark.jars.packages",
- "au.csiro.pathling:library-runtime:6.4.2," +
+ "au.csiro.pathling:library-runtime:7.0.0-SNAPSHOT," +
"io.delta:delta-core_2.12:2.4.0")
.config("spark.sql.extensions",
"io.delta.sql.DeltaSparkSessionExtension")
diff --git a/site/pom.xml b/site/pom.xml
index 2546a81f38..90a8cbf6f1 100644
--- a/site/pom.xml
+++ b/site/pom.xml
@@ -13,7 +13,7 @@
au.csiro.pathling
pathling
- 6.4.2
+ 7.0.0-SNAPSHOT
../pom.xml
site
diff --git a/terminology/pom.xml b/terminology/pom.xml
index 4afc9539a3..8fd50cd61a 100644
--- a/terminology/pom.xml
+++ b/terminology/pom.xml
@@ -25,7 +25,7 @@
pathling
au.csiro.pathling
- 6.4.2
+ 7.0.0-SNAPSHOT
terminology
jar
diff --git a/utilities/pom.xml b/utilities/pom.xml
index 6e321c8dc0..6576ddef3a 100644
--- a/utilities/pom.xml
+++ b/utilities/pom.xml
@@ -8,7 +8,7 @@
pathling
au.csiro.pathling
- 6.4.2
+ 7.0.0-SNAPSHOT
utilities
jar
From 718703bee674eacc75f13c47380039b9707c32fc Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Wed, 17 Apr 2024 11:05:20 +1000
Subject: [PATCH 022/175] Update Spark to 3.5.0
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index cb3ccdffc8..b23464e38c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -72,7 +72,7 @@
6
UTF-8
- 3.4.2
+ 3.5.0
2.12
2.12.17
2.4.0
From 4193eb033d2d54103a9725f2e905212315e24187 Mon Sep 17 00:00:00 2001
From: Piotr Szul
Date: Thu, 18 Apr 2024 09:37:05 +1000
Subject: [PATCH 023/175] Adapting LightweightFhirEncodersTest to the catalyst
API changes in Spark 3.5.0.
---
.../pathling/encoders/LightweightFhirEncodersTest.java | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/encoders/src/test/java/au/csiro/pathling/encoders/LightweightFhirEncodersTest.java b/encoders/src/test/java/au/csiro/pathling/encoders/LightweightFhirEncodersTest.java
index 9cbcdedf10..6f1d11f512 100644
--- a/encoders/src/test/java/au/csiro/pathling/encoders/LightweightFhirEncodersTest.java
+++ b/encoders/src/test/java/au/csiro/pathling/encoders/LightweightFhirEncodersTest.java
@@ -41,7 +41,6 @@
import org.apache.spark.sql.Row;
import org.apache.spark.sql.catalyst.InternalRow;
import org.apache.spark.sql.catalyst.encoders.ExpressionEncoder;
-import org.apache.spark.sql.catalyst.encoders.RowEncoder;
import org.hl7.fhir.r4.model.BaseResource;
import org.hl7.fhir.r4.model.CodeableConcept;
import org.hl7.fhir.r4.model.Coding;
@@ -256,7 +255,7 @@ public void testEncodesExtensions() {
// Deserialize the InternalRow to a Row with explicit schema.
final ExpressionEncoder rowEncoder = EncoderUtils
- .defaultResolveAndBind(RowEncoder.apply(encoder.schema()));
+ .defaultResolveAndBind(ExpressionEncoder.apply(encoder.schema()));
final Row conditionRow = rowEncoder.createDeserializer().apply(serializedRow);
// Get the extensionContainer.
@@ -306,7 +305,7 @@ public void testQuantityCanonicalization() {
final InternalRow serializedRow = resolvedEncoder.createSerializer().apply(observation);
final ExpressionEncoder rowEncoder = EncoderUtils.defaultResolveAndBind(
- RowEncoder.apply(encoder.schema()));
+ ExpressionEncoder.apply(encoder.schema()));
final Row observationRow = rowEncoder.createDeserializer().apply(serializedRow);
final Row quantityRow = observationRow.getStruct(observationRow.fieldIndex("valueQuantity"));
@@ -323,7 +322,7 @@ public void testQuantityArrayCanonicalization() {
final InternalRow serializedRow = resolvedEncoder.createSerializer().apply(device);
final ExpressionEncoder rowEncoder = EncoderUtils.defaultResolveAndBind(
- RowEncoder.apply(encoder.schema()));
+ ExpressionEncoder.apply(encoder.schema()));
final Row deviceRow = rowEncoder.createDeserializer().apply(serializedRow);
final List properties = deviceRow.getList(deviceRow.fieldIndex("property"));
From 610e501ea35fa192d9e5736fc7aa0354ec016d4b Mon Sep 17 00:00:00 2001
From: Piotr Szul
Date: Thu, 18 Apr 2024 11:44:06 +1000
Subject: [PATCH 024/175] Bumping up delta version to 3.1.0 (for Spark 3.5.0)
and changing the dependency name to 'delta-spark'.
---
LICENSE | 2 +-
fhir-server/pom.xml | 2 +-
fhirpath/pom.xml | 2 +-
lib/R/R/dependencies.R | 2 +-
lib/python/examples/query.py | 2 +-
lib/python/pathling/context.py | 2 +-
lib/python/pom.xml | 2 +-
lib/python/tests/conftest.py | 2 +-
library-api/pom.xml | 2 +-
pom.xml | 4 ++--
site/docs/libraries/installation/spark.md | 8 ++++----
11 files changed, 15 insertions(+), 15 deletions(-)
diff --git a/LICENSE b/LICENSE
index 0e0ba8bf6b..7623319917 100644
--- a/LICENSE
+++ b/LICENSE
@@ -202,7 +202,7 @@ separate files distributed with the Software.
* (Apache License, Version 2.0) Apache Commons BeanUtils (commons-beanutils:commons-beanutils:1.9.4 - https://commons.apache.org/proper/commons-beanutils/)
* (Apache License, Version 2.0) Apache Commons IO (commons-io:commons-io:2.13.0 - https://commons.apache.org/proper/commons-io/)
* (Apache License, Version 2.0) Commons Lang (commons-lang:commons-lang:2.6 - http://commons.apache.org/lang/)
-* (Apache License, Version 2.0) delta-core (io.delta:delta-core_2.12:2.4.0 - https://delta.io/)
+* (Apache License, Version 2.0) delta-spark (io.delta:delta-spark_2.12:3.1.0 - https://delta.io/)
* (Apache License, Version 2.0) micrometer-registry-prometheus (io.micrometer:micrometer-registry-prometheus:1.11.3 - https://github.com/micrometer-metrics/micrometer)
* (MIT License) Sentry SDK (io.sentry:sentry:6.6.0 - https://github.com/getsentry/sentry-java)
* (Apache License, Version 2.0) Jakarta Bean Validation API (jakarta.validation:jakarta.validation-api:2.0.2 - https://beanvalidation.org)
diff --git a/fhir-server/pom.xml b/fhir-server/pom.xml
index 22d401f426..3208343f45 100644
--- a/fhir-server/pom.xml
+++ b/fhir-server/pom.xml
@@ -65,7 +65,7 @@
io.delta
- delta-core_${pathling.scalaVersion}
+ delta-spark_${pathling.scalaVersion}
org.apache.hadoop
diff --git a/fhirpath/pom.xml b/fhirpath/pom.xml
index 5c01dfde13..e3ee630cc4 100644
--- a/fhirpath/pom.xml
+++ b/fhirpath/pom.xml
@@ -51,7 +51,7 @@
io.delta
- delta-core_${pathling.scalaVersion}
+ delta-spark_${pathling.scalaVersion}
provided
diff --git a/lib/R/R/dependencies.R b/lib/R/R/dependencies.R
index 3540621b21..c792c675a4 100644
--- a/lib/R/R/dependencies.R
+++ b/lib/R/R/dependencies.R
@@ -18,7 +18,7 @@ spark_dependencies <- function(spark_version, scala_version, ...) {
sparklyr::spark_dependency(
packages = c(
paste0("au.csiro.pathling:library-runtime:", pathling_version()),
- paste0("io.delta:delta-core_", spark_info$scala_version, ":", spark_info$delta_version),
+ paste0("io.delta:delta-spark_", spark_info$scala_version, ":", spark_info$delta_version),
paste0("org.apache.hadoop:hadoop-aws:", spark_info$hadoop_version)
)
)
diff --git a/lib/python/examples/query.py b/lib/python/examples/query.py
index f52e20db48..e837cb4617 100755
--- a/lib/python/examples/query.py
+++ b/lib/python/examples/query.py
@@ -36,7 +36,7 @@
spark = (
SparkSession.builder.config(
"spark.jars.packages",
- f"au.csiro.pathling:library-runtime:{__java_version__},io.delta:delta-core_2.12:2.2.0",
+ f"au.csiro.pathling:library-runtime:{__java_version__},io.delta:delta-spark_2.12:3.1.0",
)
.config(
"spark.sql.extensions",
diff --git a/lib/python/pathling/context.py b/lib/python/pathling/context.py
index fb887615c8..72e0e27e3f 100644
--- a/lib/python/pathling/context.py
+++ b/lib/python/pathling/context.py
@@ -184,7 +184,7 @@ def _new_spark_session():
SparkSession.builder.config(
"spark.jars.packages",
f"au.csiro.pathling:library-runtime:{__java_version__},"
- f"io.delta:delta-core_{__scala_version__}:{__delta_version__},"
+ f"io.delta:delta-spark_{__scala_version__}:{__delta_version__},"
f"org.apache.hadoop:hadoop-aws:{__hadoop_version__}",
)
.config(
diff --git a/lib/python/pom.xml b/lib/python/pom.xml
index c3a2054da8..050a83cc81 100644
--- a/lib/python/pom.xml
+++ b/lib/python/pom.xml
@@ -225,7 +225,7 @@
--jars
${project.build.directory}/dependency/*
--packages
- au.csiro.pathling:library-runtime:${project.version},io.delta:delta-core_${pathling.scalaVersion}:${pathling.deltaVersion}
+ au.csiro.pathling:library-runtime:${project.version},io.delta:delta-spark_${pathling.scalaVersion}:${pathling.deltaVersion}
--conf
spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension
--conf
diff --git a/lib/python/tests/conftest.py b/lib/python/tests/conftest.py
index e3b249f6d6..3aee982b7c 100644
--- a/lib/python/tests/conftest.py
+++ b/lib/python/tests/conftest.py
@@ -74,7 +74,7 @@ def pathling_ctx(request, temp_warehouse_dir):
.config(
"spark.jars.packages",
f"au.csiro.pathling:library-runtime:{__java_version__},"
- f"io.delta:delta-core_{__scala_version__}:{__delta_version__},"
+ f"io.delta:delta-spark_{__scala_version__}:{__delta_version__},"
f"org.apache.hadoop:hadoop-aws:{__hadoop_version__}",
)
.config("spark.sql.extensions", "io.delta.sql.DeltaSparkSessionExtension")
diff --git a/library-api/pom.xml b/library-api/pom.xml
index d8ac726df5..011295aaf7 100644
--- a/library-api/pom.xml
+++ b/library-api/pom.xml
@@ -70,7 +70,7 @@
io.delta
- delta-core_${pathling.scalaVersion}
+ delta-spark_${pathling.scalaVersion}
provided
diff --git a/pom.xml b/pom.xml
index b23464e38c..859ab914cd 100644
--- a/pom.xml
+++ b/pom.xml
@@ -75,7 +75,7 @@
3.5.0
2.12
2.12.17
- 2.4.0
+ 3.1.0
3.3.4
3
@@ -312,7 +312,7 @@
io.delta
- delta-core_${pathling.scalaVersion}
+ delta-spark_${pathling.scalaVersion}
${pathling.deltaVersion}
diff --git a/site/docs/libraries/installation/spark.md b/site/docs/libraries/installation/spark.md
index e0d367df35..7ecea06491 100644
--- a/site/docs/libraries/installation/spark.md
+++ b/site/docs/libraries/installation/spark.md
@@ -36,7 +36,7 @@ spark = (
SparkSession.builder.config(
"spark.jars.packages",
"au.csiro.pathling:library-runtime:7.0.0-SNAPSHOT,"
- "io.delta:delta-core_2.12:2.4.0,"
+ "io.delta:delta-spark_2.12:3.1.0,"
)
.config(
"spark.sql.extensions", "io.delta.sql.DeltaSparkSessionExtension"
@@ -59,7 +59,7 @@ library(pathling)
sc <- spark_connect(master = "local",
packages = c(paste("au.csiro.pathling:library-runtime:", pathling_version()),
- "io.delta:delta-core_2.12:2.4.0"),
+ "io.delta:delta-spark_2.12:3.1.0"),
config = list("sparklyr.shell.conf" = c(
"spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension",
"spark.sql.catalog.spark_catalog=org.apache.spark.sql.delta.catalog.DeltaCatalog"
@@ -76,7 +76,7 @@ import au.csiro.pathling.library.PathlingContext
val spark = SparkSession.builder
.config("spark.jars.packages", "au.csiro.pathling:library-runtime:7.0.0-SNAPSHOT," +
- "io.delta:delta-core_2.12:2.4.0")
+ "io.delta:delta-spark_2.12:3.1.0")
.config("spark.sql.extensions", "io.delta.sql.DeltaSparkSessionExtension")
.config("spark.sql.catalog.spark_catalog",
"org.apache.spark.sql.delta.catalog.DeltaCatalog")
@@ -98,7 +98,7 @@ class MyApp {
SparkSession spark = SparkSession.builder()
.config("spark.jars.packages",
"au.csiro.pathling:library-runtime:7.0.0-SNAPSHOT," +
- "io.delta:delta-core_2.12:2.4.0")
+ "io.delta:delta-spark_2.12:3.1.0")
.config("spark.sql.extensions",
"io.delta.sql.DeltaSparkSessionExtension")
.config("spark.sql.catalog.spark_catalog",
From f4e40b2734ce8fb60a63a17e7a9bede4cb312bd5 Mon Sep 17 00:00:00 2001
From: Piotr Szul
Date: Thu, 18 Apr 2024 11:45:37 +1000
Subject: [PATCH 025/175] Updating the expected suffix for operation
definitions to match the major version update to 7.
---
.../integration/OperationDefinitionTest.java | 2 +-
...pabilityStatement.CapabilityStatement.json | 848 +++++++++---------
2 files changed, 425 insertions(+), 425 deletions(-)
diff --git a/fhir-server/src/test/java/au/csiro/pathling/test/integration/OperationDefinitionTest.java b/fhir-server/src/test/java/au/csiro/pathling/test/integration/OperationDefinitionTest.java
index f7784de370..9d2e81ca65 100644
--- a/fhir-server/src/test/java/au/csiro/pathling/test/integration/OperationDefinitionTest.java
+++ b/fhir-server/src/test/java/au/csiro/pathling/test/integration/OperationDefinitionTest.java
@@ -49,7 +49,7 @@ class OperationDefinitionTest extends IntegrationTest {
private static final List OPERATIONS = List.of("aggregate", "search", "extract", "import",
"result", "job");
- private static final String SUFFIX = "6";
+ private static final String SUFFIX = "7";
@Test
void operationDefinitions() throws MalformedURLException, URISyntaxException {
diff --git a/fhir-server/src/test/resources/responses/CapabilityStatementTest/capabilityStatement.CapabilityStatement.json b/fhir-server/src/test/resources/responses/CapabilityStatementTest/capabilityStatement.CapabilityStatement.json
index 1880c7b2d1..ca88baa797 100644
--- a/fhir-server/src/test/resources/responses/CapabilityStatementTest/capabilityStatement.CapabilityStatement.json
+++ b/fhir-server/src/test/resources/responses/CapabilityStatementTest/capabilityStatement.CapabilityStatement.json
@@ -1,6 +1,6 @@
{
"resourceType": "CapabilityStatement",
- "url": "https://pathling.csiro.au/fhir/CapabilityStatement/pathling-fhir-api-6",
+ "url": "https://pathling.csiro.au/fhir/CapabilityStatement/pathling-fhir-api-7",
"name": "pathling-fhir-api",
"title": "Pathling FHIR API",
"status": "active",
@@ -40,15 +40,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -69,15 +69,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -98,15 +98,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -127,15 +127,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -156,15 +156,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -185,15 +185,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -214,15 +214,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -243,15 +243,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -272,15 +272,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -301,15 +301,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -330,15 +330,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -359,15 +359,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -388,15 +388,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -417,15 +417,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -446,15 +446,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -475,15 +475,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -504,15 +504,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -533,15 +533,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -562,15 +562,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -591,15 +591,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -620,15 +620,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -649,15 +649,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -678,15 +678,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -707,15 +707,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -736,15 +736,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -765,15 +765,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -794,15 +794,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -823,15 +823,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -852,15 +852,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -881,15 +881,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -910,15 +910,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -939,15 +939,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -968,15 +968,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -997,15 +997,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -1026,15 +1026,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -1055,15 +1055,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -1084,15 +1084,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -1113,15 +1113,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -1142,15 +1142,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -1171,15 +1171,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -1200,15 +1200,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -1229,15 +1229,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -1258,15 +1258,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -1287,15 +1287,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -1316,15 +1316,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -1345,15 +1345,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -1374,15 +1374,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -1403,15 +1403,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -1432,15 +1432,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -1461,15 +1461,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -1490,15 +1490,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -1519,15 +1519,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -1548,15 +1548,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -1577,15 +1577,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -1606,15 +1606,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -1635,15 +1635,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -1664,15 +1664,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -1693,15 +1693,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -1722,15 +1722,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -1751,15 +1751,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -1780,15 +1780,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -1809,15 +1809,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -1838,15 +1838,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -1867,15 +1867,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -1896,15 +1896,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -1925,15 +1925,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -1954,15 +1954,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -1983,15 +1983,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -2012,15 +2012,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -2041,15 +2041,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -2070,15 +2070,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -2099,15 +2099,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -2128,15 +2128,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -2157,15 +2157,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -2186,15 +2186,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -2215,15 +2215,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -2244,15 +2244,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -2273,15 +2273,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -2302,15 +2302,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -2331,15 +2331,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -2360,15 +2360,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -2389,15 +2389,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -2418,15 +2418,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -2447,15 +2447,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -2476,15 +2476,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -2505,15 +2505,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -2534,15 +2534,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -2563,15 +2563,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -2592,15 +2592,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -2621,15 +2621,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -2650,15 +2650,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -2679,15 +2679,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -2708,15 +2708,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -2737,15 +2737,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -2766,15 +2766,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -2795,15 +2795,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -2824,15 +2824,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -2853,15 +2853,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -2882,15 +2882,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -2911,15 +2911,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -2940,15 +2940,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -2969,15 +2969,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -2998,15 +2998,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -3027,15 +3027,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -3056,15 +3056,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -3085,15 +3085,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -3114,15 +3114,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -3143,15 +3143,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -3172,15 +3172,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -3201,15 +3201,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -3230,15 +3230,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -3259,15 +3259,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -3288,15 +3288,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -3317,15 +3317,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -3346,15 +3346,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -3375,15 +3375,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -3404,15 +3404,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -3433,15 +3433,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -3462,15 +3462,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -3491,15 +3491,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -3520,15 +3520,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -3549,15 +3549,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -3578,15 +3578,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -3607,15 +3607,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -3636,15 +3636,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -3665,15 +3665,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -3694,15 +3694,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -3723,15 +3723,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -3752,15 +3752,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -3781,15 +3781,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -3810,15 +3810,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -3839,15 +3839,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -3868,15 +3868,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -3897,15 +3897,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -3926,15 +3926,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -3955,15 +3955,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -3984,15 +3984,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -4013,15 +4013,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -4042,15 +4042,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -4071,15 +4071,15 @@
"operation": [
{
"name": "aggregate",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/aggregate-7"
},
{
"name": "extract",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/extract-7"
},
{
"name": "fhirPath",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/search-7"
}
]
},
@@ -4101,15 +4101,15 @@
"operation": [
{
"name": "import",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/import-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/import-7"
},
{
"name": "result",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/result-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/result-7"
},
{
"name": "job",
- "definition": "https://pathling.csiro.au/fhir/OperationDefinition/job-6"
+ "definition": "https://pathling.csiro.au/fhir/OperationDefinition/job-7"
}
]
}
From 354f26eb3951e79a2f6a8fdf684216872d09d3ee Mon Sep 17 00:00:00 2001
From: Piotr Szul
Date: Thu, 18 Apr 2024 11:56:20 +1000
Subject: [PATCH 026/175] Updating pyspark version to 3.5.0.
---
lib/python/requirements/package.txt | 2 +-
lib/python/setup.py | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/lib/python/requirements/package.txt b/lib/python/requirements/package.txt
index 7de8ec0292..5d6a4130ad 100644
--- a/lib/python/requirements/package.txt
+++ b/lib/python/requirements/package.txt
@@ -1,2 +1,2 @@
-pyspark==3.4.1
+pyspark==3.5.0
deprecated==1.2.14
diff --git a/lib/python/setup.py b/lib/python/setup.py
index 244e815bdc..f346434749 100644
--- a/lib/python/setup.py
+++ b/lib/python/setup.py
@@ -62,8 +62,8 @@
"Programming Language :: Python :: 3.10",
],
license="Apache License, version 2.0",
- python_requires=">=3.7",
- install_requires=["pyspark>=3.4.0,<3.5.0", "deprecated>=1.2.13"],
+ python_requires=">=3.8",
+ install_requires=["pyspark>=3.5.0,<3.6.0", "deprecated>=1.2.13"],
include_package_data=True,
data_files=[
("share/pathling/examples", glob.glob("examples/*.py")),
From 24e4d8f790dac53093bd4118a2fd5a24c62c73d7 Mon Sep 17 00:00:00 2001
From: Piotr Szul
Date: Thu, 18 Apr 2024 11:57:54 +1000
Subject: [PATCH 027/175] Updating pyspark version to 3.5.0 and minimal python
version to 3.8 (as per spark 3.5 requirements).
---
lib/python/setup.py | 1 -
1 file changed, 1 deletion(-)
diff --git a/lib/python/setup.py b/lib/python/setup.py
index f346434749..291bfd50be 100644
--- a/lib/python/setup.py
+++ b/lib/python/setup.py
@@ -56,7 +56,6 @@
classifiers=[
"Development Status :: 3 - Alpha",
"License :: OSI Approved :: Apache Software License",
- "Programming Language :: Python :: 3.7",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
From 39082c1539f93bd42a58f33ed0223ff3055a7613 Mon Sep 17 00:00:00 2001
From: Piotr Szul
Date: Thu, 18 Apr 2024 13:25:51 +1000
Subject: [PATCH 028/175] Updating spark version for R.
---
lib/R/pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/R/pom.xml b/lib/R/pom.xml
index f961205d70..5b26177e50 100644
--- a/lib/R/pom.xml
+++ b/lib/R/pom.xml
@@ -63,7 +63,7 @@
of the sparklyr version that we depend upon that is on the archive site. The reason we can't
use the latest from the CDN is that the files drop off the CDN when a new version is released.
-->
- 3.4.0
+ 3.5.0
${pathling.scalaVersion}
${pathling.hadoopMajorVersion}
${pathling.hadoopVersion}
From d6515bbec77b9a6224d35a68462ff0bc2cd63530 Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Fri, 19 Apr 2024 10:09:33 +1000
Subject: [PATCH 029/175] Upgrade HAPI to 7.0.2 and move to Java 17
---
CONTRIBUTING.md | 2 +-
fhir-server/pom.xml | 2 +-
lib/import/azure-pipelines.yml | 2 +-
pom.xml | 12 ++++++------
site/docs/libraries/installation/databricks.md | 6 +++---
.../caching/CachingTerminologyService.java | 4 ++--
6 files changed, 14 insertions(+), 14 deletions(-)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 9fef2d9a2f..72112e3d57 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -30,7 +30,7 @@ Your branch should be named `issue/[GitHub issue #]`.
You will need the following software to build the solution:
-* Java 11
+* Java 17
* Maven 3+
* Node.js 19.x
* Python 3.7+
diff --git a/fhir-server/pom.xml b/fhir-server/pom.xml
index 3208343f45..3087d20ad4 100644
--- a/fhir-server/pom.xml
+++ b/fhir-server/pom.xml
@@ -37,7 +37,7 @@
latest
arm64
1.36
- amazoncorretto:11
+ amazoncorretto:17
diff --git a/lib/import/azure-pipelines.yml b/lib/import/azure-pipelines.yml
index 69f0bff1c2..d3a5cceac0 100644
--- a/lib/import/azure-pipelines.yml
+++ b/lib/import/azure-pipelines.yml
@@ -34,7 +34,7 @@ stages:
options: "-pl lib/import -am"
mavenOptions: "$(mavenOptions)"
javaHomeOption: "JDKVersion"
- jdkVersionOption: "1.11"
+ jdkVersionOption: "1.17"
jdkArchitectureOption: "x64"
goals: "package"
timeoutInMinutes: 5
diff --git a/pom.xml b/pom.xml
index 859ab914cd..fe1624d539 100644
--- a/pom.xml
+++ b/pom.xml
@@ -79,7 +79,7 @@
3.3.4
3
- 6.10.0
+ 7.0.2
2.7.18
5.7.10
4.9.3
@@ -685,8 +685,8 @@
maven-compiler-plugin
3.11.0
-
- 11
+
+ 17
-Xlint:all
@@ -714,8 +714,8 @@
-
- 11
+
+ 17
-feature
@@ -837,7 +837,7 @@
au.csiro.pathling:encoders
-
+
https://spark.apache.org/docs/latest/api/java/
https://hapifhir.io/hapi-fhir/apidocs/hapi-fhir-base/
diff --git a/site/docs/libraries/installation/databricks.md b/site/docs/libraries/installation/databricks.md
index 71f9dea873..324d3545db 100644
--- a/site/docs/libraries/installation/databricks.md
+++ b/site/docs/libraries/installation/databricks.md
@@ -6,7 +6,7 @@ description: Instructions for installing the Pathling library on a Databricks cl
# Databricks installation
Pathling has been tested
-on [Databricks Runtime 13.3 LTS](https://docs.databricks.com/en/release-notes/runtime/13.3lts.html).
+on [Databricks Runtime 14.3 LTS](https://docs.databricks.com/en/release-notes/runtime/14.3lts.html).
To install the Pathling library on a [Databricks](https://www.databricks.com/)
cluster, navigate to the "Compute" section and click on the cluster. Click on
@@ -30,9 +30,9 @@ information.
## Environment variables
By default, Databricks uses Java 8 within its clusters, while Pathling requires
-Java 11. To enable Java 11 support within your cluster, navigate to __Advanced
+Java 17. To enable Java 17 support within your cluster, navigate to __Advanced
Options > Spark > Environment Variables__ and add the following:
```bash
-JNAME=zulu11-ca-amd64
+JNAME=zulu17-ca-amd64
```
diff --git a/terminology/src/main/java/au/csiro/pathling/terminology/caching/CachingTerminologyService.java b/terminology/src/main/java/au/csiro/pathling/terminology/caching/CachingTerminologyService.java
index b04be2384a..1b73447dfb 100644
--- a/terminology/src/main/java/au/csiro/pathling/terminology/caching/CachingTerminologyService.java
+++ b/terminology/src/main/java/au/csiro/pathling/terminology/caching/CachingTerminologyService.java
@@ -39,6 +39,7 @@
import ca.uhn.fhir.rest.gclient.IOperationUntypedWithInput;
import ca.uhn.fhir.rest.server.exceptions.BaseServerResponseException;
import ca.uhn.fhir.rest.server.exceptions.NotModifiedException;
+import jakarta.ws.rs.core.CacheControl;
import java.io.Closeable;
import java.io.Serializable;
import java.time.Instant;
@@ -49,7 +50,6 @@
import java.util.Optional;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
-import javax.ws.rs.core.CacheControl;
import org.hl7.fhir.r4.model.Coding;
import org.hl7.fhir.r4.model.codesystems.ConceptSubsumptionOutcome;
import org.infinispan.Cache;
@@ -141,7 +141,7 @@ public ConceptSubsumptionOutcome subsumes(@Nonnull final Coding codingA,
public List lookup(@Nonnull final Coding coding,
@Nullable final String property, @Nullable final String acceptLanguage) {
final LookupParameters parameters = new LookupParameters(ImmutableCoding.of(coding), property,
- acceptLanguage);
+ acceptLanguage);
final LookupExecutor executor = new LookupExecutor(terminologyClient, parameters);
return getFromCache(lookupCache, parameters, executor);
}
From d769a6b343c1a97652f137d71d44756cda9f0512 Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Fri, 19 Apr 2024 10:17:57 +1000
Subject: [PATCH 030/175] Update Java version to 17 within GitHub Actions
---
.github/workflows/python-pre-release.yml | 2 +-
.github/workflows/release-js-client.yml | 2 +-
.github/workflows/release-js-import.yml | 2 +-
.github/workflows/release.yml | 6 +++---
.github/workflows/site.yml | 2 +-
.github/workflows/test.yml | 24 ++++++++++++------------
6 files changed, 19 insertions(+), 19 deletions(-)
diff --git a/.github/workflows/python-pre-release.yml b/.github/workflows/python-pre-release.yml
index e570126eed..6d5112831d 100644
--- a/.github/workflows/python-pre-release.yml
+++ b/.github/workflows/python-pre-release.yml
@@ -23,7 +23,7 @@ jobs:
- name: Set up JDK
uses: actions/setup-java@v2
with:
- java-version: 11
+ java-version: 17
distribution: "zulu"
- name: Cache local Maven repository
uses: actions/cache@v3
diff --git a/.github/workflows/release-js-client.yml b/.github/workflows/release-js-client.yml
index 30908d7933..478980fa66 100644
--- a/.github/workflows/release-js-client.yml
+++ b/.github/workflows/release-js-client.yml
@@ -22,7 +22,7 @@ jobs:
- name: Set up JDK
uses: actions/setup-java@v2
with:
- java-version: 11
+ java-version: 17
distribution: 'zulu'
- name: Cache local Maven repository
uses: actions/cache@v3
diff --git a/.github/workflows/release-js-import.yml b/.github/workflows/release-js-import.yml
index 6487bae664..7649b0f181 100644
--- a/.github/workflows/release-js-import.yml
+++ b/.github/workflows/release-js-import.yml
@@ -22,7 +22,7 @@ jobs:
- name: Set up JDK
uses: actions/setup-java@v2
with:
- java-version: 11
+ java-version: 17
distribution: 'zulu'
- name: Cache local Maven repository
uses: actions/cache@v3
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 678fc53010..1a6f16bec4 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -26,7 +26,7 @@ jobs:
- name: Set up JDK
uses: actions/setup-java@v2
with:
- java-version: 11
+ java-version: 17
distribution: "zulu"
- name: Cache local Maven repository
uses: actions/cache@v3
@@ -70,7 +70,7 @@ jobs:
- name: Set up JDK
uses: actions/setup-java@v2
with:
- java-version: 11
+ java-version: 17
distribution: "zulu"
- name: Cache local Maven repository
uses: actions/cache@v3
@@ -103,7 +103,7 @@ jobs:
- name: Set up JDK
uses: actions/setup-java@v2
with:
- java-version: 11
+ java-version: 17
distribution: "zulu"
- name: Cache local Maven repository
uses: actions/cache@v3
diff --git a/.github/workflows/site.yml b/.github/workflows/site.yml
index 66236570ac..5ca3f8f871 100644
--- a/.github/workflows/site.yml
+++ b/.github/workflows/site.yml
@@ -19,7 +19,7 @@ jobs:
- name: Set up JDK
uses: actions/setup-java@v2
with:
- java-version: 11
+ java-version: 17
distribution: "zulu"
- name: Set up Helm
uses: azure/setup-helm@v3
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 8f153dd684..bd1af351be 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -32,7 +32,7 @@ jobs:
- name: Set up JDK
uses: actions/setup-java@v2
with:
- java-version: 11
+ java-version: 17
distribution: "zulu"
- name: Cache local Maven repository
uses: actions/cache@v3
@@ -89,7 +89,7 @@ jobs:
- name: Set up JDK
uses: actions/setup-java@v2
with:
- java-version: 11
+ java-version: 17
distribution: "zulu"
- name: Cache local Maven repository
uses: actions/cache@v3
@@ -166,7 +166,7 @@ jobs:
- name: Set up JDK
uses: actions/setup-java@v2
with:
- java-version: 11
+ java-version: 17
distribution: "zulu"
- name: Cache local Maven repository
uses: actions/cache@v3
@@ -244,7 +244,7 @@ jobs:
- name: Set up JDK
uses: actions/setup-java@v2
with:
- java-version: 11
+ java-version: 17
distribution: "zulu"
- name: Cache local Maven repository
uses: actions/cache@v3
@@ -334,7 +334,7 @@ jobs:
- name: Set up JDK
uses: actions/setup-java@v2
with:
- java-version: 11
+ java-version: 17
distribution: "zulu"
- name: Cache local Maven repository
uses: actions/cache@v3
@@ -410,7 +410,7 @@ jobs:
- name: Set up JDK
uses: actions/setup-java@v2
with:
- java-version: 11
+ java-version: 17
distribution: "zulu"
- name: Cache local Maven repository
uses: actions/cache@v3
@@ -460,7 +460,7 @@ jobs:
- name: Set up JDK
uses: actions/setup-java@v2
with:
- java-version: 11
+ java-version: 17
distribution: "zulu"
- uses: actions/setup-node@v3
with:
@@ -490,7 +490,7 @@ jobs:
- name: Set up JDK
uses: actions/setup-java@v2
with:
- java-version: 11
+ java-version: 17
distribution: "zulu"
- uses: actions/setup-node@v3
with:
@@ -525,7 +525,7 @@ jobs:
- name: Set up JDK
uses: actions/setup-java@v2
with:
- java-version: 11
+ java-version: 17
distribution: "zulu"
- name: Cache local Maven repository
uses: actions/cache@v3
@@ -590,7 +590,7 @@ jobs:
- name: Set up JDK
uses: actions/setup-java@v2
with:
- java-version: 11
+ java-version: 17
distribution: "zulu"
- name: Cache local Maven repository
uses: actions/cache@v3
@@ -663,7 +663,7 @@ jobs:
- name: Set up JDK
uses: actions/setup-java@v2
with:
- java-version: 11
+ java-version: 17
distribution: "zulu"
- name: Set up Helm
uses: azure/setup-helm@v3
@@ -766,7 +766,7 @@ jobs:
- name: Set up JDK
uses: actions/setup-java@v2
with:
- java-version: 11
+ java-version: 17
distribution: "zulu"
- name: Cache local Maven repository
uses: actions/cache@v3
From 04f304e88d72ec04338a833bcffb411be950d798 Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Fri, 19 Apr 2024 10:48:47 +1000
Subject: [PATCH 031/175] Move legacy javax imports across to jakarta
---
.../encoders/terminology/ucum/Ucum.java | 8 ++---
.../pathling/sql/types/FlexiDecimal.java | 4 +--
.../support/FhirConversionSupport.java | 2 +-
.../pathling/support/r4/FhirTraversal.java | 2 +-
.../support/r4/R4FhirConversionSupport.java | 2 +-
.../pathling/encoders/QuantitySupport.scala | 6 ++--
.../pathling/encoders/SchemaConverter.scala | 3 +-
.../encoders/AllResourcesEncodingTest.java | 2 +-
.../pathling/sql/types/FlexiDecimalTest.java | 6 ++--
.../pathling/aggregate/AggregateExecutor.java | 2 +-
.../pathling/aggregate/AggregateProvider.java | 4 +--
.../pathling/aggregate/AggregateResponse.java | 2 +-
.../pathling/aggregate/DrillDownBuilder.java | 2 +-
.../au/csiro/pathling/async/AsyncAspect.java | 6 ++--
.../java/au/csiro/pathling/async/Job.java | 5 ++-
.../au/csiro/pathling/async/JobProvider.java | 9 +++--
.../au/csiro/pathling/async/JobRegistry.java | 4 +--
.../ProcessingNotCompletedException.java | 2 +-
.../au/csiro/pathling/async/RequestTag.java | 2 +-
.../pathling/async/RequestTagFactory.java | 4 +--
.../csiro/pathling/async/SparkListener.java | 5 ++-
.../caching/EntityTagInterceptor.java | 8 ++---
.../pathling/config/AsyncConfiguration.java | 2 +-
.../config/AuthorizationConfiguration.java | 4 +--
.../pathling/config/ServerConfiguration.java | 4 +--
.../pathling/config/SparkConfiguration.java | 1 -
.../pathling/errors/AccessDeniedError.java | 4 +--
.../pathling/errors/DiagnosticContext.java | 7 ++--
.../errors/DiagnosticContextInterceptor.java | 4 +--
.../errors/ErrorHandlingInterceptor.java | 8 ++---
.../errors/ErrorReportingInitialization.java | 2 +-
.../errors/ErrorReportingInterceptor.java | 8 ++---
.../pathling/extract/ExtractExecutor.java | 2 +-
.../pathling/extract/ExtractProvider.java | 4 +--
.../pathling/extract/ExtractResponse.java | 2 +-
.../pathling/extract/ResultProvider.java | 7 ++--
.../pathling/fhir/ConformanceProvider.java | 9 +++--
.../au/csiro/pathling/fhir/Dependencies.java | 4 +--
.../pathling/fhir/FhirContextFactory.java | 2 +-
.../au/csiro/pathling/fhir/FhirServer.java | 14 +++-----
.../fhir/ResourceProviderFactory.java | 2 +-
.../fhir/SmartConfigurationInterceptor.java | 8 ++---
.../au/csiro/pathling/io/AccessRules.java | 2 +-
.../csiro/pathling/io/CacheableDatabase.java | 2 +-
.../io/CacheableFileSystemPersistence.java | 4 +--
.../au/csiro/pathling/io/ResultReader.java | 5 ++-
.../au/csiro/pathling/io/ResultWriter.java | 2 +-
.../csiro/pathling/search/SearchExecutor.java | 4 +--
.../csiro/pathling/search/SearchProvider.java | 4 +--
.../pathling/security/OidcConfiguration.java | 2 +-
.../PathlingAuthenticationConverter.java | 2 +-
.../pathling/security/PathlingAuthority.java | 4 +--
.../security/PathlingJwtDecoderBuilder.java | 4 +--
.../security/PathlingJwtDecoderFactory.java | 4 +--
.../pathling/security/SecurityAspect.java | 2 +-
.../security/SecurityConfiguration.java | 2 +-
.../security/ga4gh/JwtAnyIssuerValidator.java | 4 +--
.../security/ga4gh/ManifestConverter.java | 2 +-
.../PassportAuthenticationConverter.java | 4 +--
.../ga4gh/PassportDecoderBuilder.java | 2 +-
.../ga4gh/PassportDecoderFactory.java | 4 +--
.../security/ga4gh/PassportScopeEnforcer.java | 2 +-
.../security/ga4gh/ScopeAwareDatabase.java | 4 +--
.../security/ga4gh/VisaDecoderBuilder.java | 2 +-
.../security/ga4gh/VisaDecoderFactory.java | 4 +--
.../java/au/csiro/pathling/spark/Spark.java | 3 +-
.../java/au/csiro/pathling/spark/Udfs.java | 5 ++-
.../csiro/pathling/update/BatchProvider.java | 4 +--
.../csiro/pathling/update/ImportExecutor.java | 2 +-
.../au/csiro/pathling/update/ImportLock.java | 2 +-
.../csiro/pathling/update/ImportProvider.java | 7 ++--
.../csiro/pathling/update/UpdateProvider.java | 4 +--
...ecoderProviderConfigurationUtilsProxy.java | 2 +-
.../aggregate/AggregateExecutorTest.java | 2 +-
.../aggregate/AggregateRequestBuilder.java | 2 +-
.../aggregate/DrillDownBuilderTest.java | 2 +-
.../aggregate/GroupingLiteralTest.java | 2 +-
.../csiro/pathling/async/AsyncAspectTest.java | 5 +--
.../csiro/pathling/async/JobRegistryTest.java | 15 ++++----
.../extract/ExtractRequestBuilder.java | 4 +--
.../fhir/EntityTagInterceptorTest.java | 8 ++---
.../fhirpath/parser/AbstractParserTest.java | 2 +-
.../pathling/fhirpath/parser/ParserTest.java | 9 ++---
.../jmh/AbstractJmhSpringBootState.java | 2 +-
.../java/au/csiro/pathling/jmh/JmhUtils.java | 4 +--
.../pathling/jmh/SpringBootJmhContext.java | 4 +--
.../search/SearchExecutorBuilder.java | 4 +--
.../pathling/search/SearchExecutorTest.java | 2 +-
.../security/PathlingAuthorityTest.java | 2 +-
.../pathling/security/SecurityAspectTest.java | 2 +-
.../csiro/pathling/security/SecurityTest.java | 2 +-
.../security/ga4gh/ManifestConverterTest.java | 2 +-
.../test/IntegrationTestDependencies.java | 2 +-
.../csiro/pathling/test/TestDataImporter.java | 3 +-
.../test/benchmark/AggregateBenchmark.java | 2 +-
.../test/benchmark/DecimalDevBenchmark.java | 2 +-
.../test/benchmark/SearchDevBenchmark.java | 2 +-
.../benchmark/TerminologyBenchmarkTest.java | 2 +-
.../benchmark/TerminologyDevBenchmark.java | 2 +-
.../fhir/ErrorHandlingInterceptorTest.java | 2 +-
.../pathling/test/integration/AsyncTest.java | 6 ++--
.../MultipleAggregationsAndResolveTest.java | 2 +-
.../pathling/test/integration/SentryTest.java | 4 +--
...ogyServiceWithLanguageIntegrationTest.java | 3 --
.../integration/modification/ImportTest.java | 2 +-
.../modification/ModificationTest.java | 2 +-
.../pathling/test/system/DockerImageTest.java | 4 +--
.../pathling/update/BatchProviderTest.java | 2 +-
.../java/au/csiro/pathling/QueryExecutor.java | 4 +--
.../java/au/csiro/pathling/QueryHelpers.java | 2 +-
.../aggregate/AggregateQueryExecutor.java | 2 +-
.../pathling/aggregate/AggregateRequest.java | 2 +-
.../pathling/config/QueryConfiguration.java | 3 +-
.../pathling/config/StorageConfiguration.java | 2 +-
.../extract/ExtractQueryExecutor.java | 2 +-
.../pathling/extract/ExtractRequest.java | 2 +-
.../fhirpath/CalendarDurationUtils.java | 2 +-
.../csiro/pathling/fhirpath/Comparable.java | 2 +-
.../au/csiro/pathling/fhirpath/FhirPath.java | 2 +-
.../pathling/fhirpath/FunctionInput.java | 2 +-
.../pathling/fhirpath/Materializable.java | 2 +-
.../pathling/fhirpath/NonLiteralPath.java | 2 +-
.../au/csiro/pathling/fhirpath/Numeric.java | 2 +-
.../au/csiro/pathling/fhirpath/Orderable.java | 3 +-
.../au/csiro/pathling/fhirpath/Referrer.java | 2 +-
.../pathling/fhirpath/ResourceDefinition.java | 2 +-
.../csiro/pathling/fhirpath/ResourcePath.java | 2 +-
.../au/csiro/pathling/fhirpath/Temporal.java | 6 ++--
.../pathling/fhirpath/TerminologyUtils.java | 3 +-
.../fhirpath/UntypedResourcePath.java | 2 +-
.../comparison/CodingSqlComparator.java | 2 +-
.../comparison/DateTimeSqlComparator.java | 2 +-
.../comparison/QuantitySqlComparator.java | 2 +-
.../fhirpath/element/BooleanPath.java | 2 +-
.../pathling/fhirpath/element/CodingPath.java | 4 +--
.../pathling/fhirpath/element/DatePath.java | 2 +-
.../fhirpath/element/DateTimePath.java | 2 +-
.../fhirpath/element/DecimalPath.java | 2 +-
.../fhirpath/element/ElementDefinition.java | 4 +--
.../fhirpath/element/ElementPath.java | 2 +-
.../fhirpath/element/ExtensionPath.java | 2 +-
.../fhirpath/element/IntegerPath.java | 6 ++--
.../fhirpath/element/QuantityPath.java | 2 +-
.../fhirpath/element/ReferenceDefinition.java | 3 +-
.../element/ReferenceExtensionDefinition.java | 2 +-
.../fhirpath/element/ReferencePath.java | 2 +-
.../pathling/fhirpath/element/StringPath.java | 2 +-
.../pathling/fhirpath/element/TimePath.java | 2 +-
.../fhirpath/encoding/QuantityEncoding.java | 4 +--
.../fhirpath/function/AggregateFunction.java | 2 +-
.../pathling/fhirpath/function/Arguments.java | 4 +--
.../function/BooleansTestFunction.java | 2 +-
.../fhirpath/function/CountFunction.java | 2 +-
.../fhirpath/function/EmptyFunction.java | 2 +-
.../fhirpath/function/ExistsFunction.java | 4 +--
.../fhirpath/function/ExtensionFunction.java | 2 +-
.../fhirpath/function/FirstFunction.java | 2 +-
.../fhirpath/function/IifFunction.java | 2 +-
.../fhirpath/function/NamedFunction.java | 9 +++--
.../fhirpath/function/NamedFunctionInput.java | 2 +-
.../fhirpath/function/NotFunction.java | 2 +-
.../fhirpath/function/OfTypeFunction.java | 5 +--
.../fhirpath/function/ResolveFunction.java | 2 +-
.../function/ReverseResolveFunction.java | 2 +-
.../fhirpath/function/SumFunction.java | 2 +-
.../fhirpath/function/UntilFunction.java | 4 +--
.../fhirpath/function/WhereFunction.java | 2 +-
.../terminology/DesignationFunction.java | 4 +--
.../function/terminology/DisplayFunction.java | 2 +-
.../terminology/MemberOfFunction.java | 4 +--
.../terminology/PropertyFunction.java | 4 +--
.../terminology/SubsumesFunction.java | 5 +--
.../terminology/TranslateFunction.java | 6 ++--
.../fhirpath/literal/BooleanLiteralPath.java | 2 +-
.../fhirpath/literal/CodingLiteralPath.java | 2 +-
.../fhirpath/literal/DateLiteralPath.java | 2 +-
.../fhirpath/literal/DateTimeLiteralPath.java | 2 +-
.../fhirpath/literal/DecimalLiteralPath.java | 2 +-
.../fhirpath/literal/IntegerLiteralPath.java | 2 +-
.../fhirpath/literal/LiteralPath.java | 4 +--
.../fhirpath/literal/NullLiteralPath.java | 2 +-
.../fhirpath/literal/QuantityLiteralPath.java | 4 +--
.../fhirpath/literal/StringLiteralPath.java | 3 +-
.../fhirpath/literal/TimeLiteralPath.java | 2 +-
.../fhirpath/operator/BooleanOperator.java | 2 +-
.../fhirpath/operator/CombineOperator.java | 3 +-
.../fhirpath/operator/ComparisonOperator.java | 2 +-
.../operator/DateArithmeticOperator.java | 2 +-
.../fhirpath/operator/MathOperator.java | 2 +-
.../fhirpath/operator/MembershipOperator.java | 2 +-
.../pathling/fhirpath/operator/Operator.java | 2 +-
.../fhirpath/operator/OperatorInput.java | 2 +-
.../fhirpath/operator/PathTraversalInput.java | 2 +-
.../operator/PathTraversalOperator.java | 2 +-
.../fhirpath/parser/InvocationVisitor.java | 4 +--
.../fhirpath/parser/LiteralTermVisitor.java | 5 ++-
.../pathling/fhirpath/parser/Parser.java | 2 +-
.../fhirpath/parser/ParserContext.java | 2 +-
.../fhirpath/parser/ParserErrorListener.java | 2 +-
.../pathling/fhirpath/parser/TermVisitor.java | 5 ++-
.../pathling/fhirpath/parser/Visitor.java | 5 ++-
.../csiro/pathling/io/CatalogPersistence.java | 2 +-
.../java/au/csiro/pathling/io/Database.java | 4 +--
.../pathling/io/FileSystemPersistence.java | 4 +--
.../java/au/csiro/pathling/io/ImportMode.java | 4 +--
.../csiro/pathling/io/PersistenceScheme.java | 2 +-
.../csiro/pathling/io/source/DataSource.java | 4 +--
.../pathling/query/ExpressionWithLabel.java | 9 ++---
.../pathling/security/ResourceAccess.java | 4 +--
.../pathling/sql/FhirpathUDFRegistrar.java | 2 +-
.../au/csiro/pathling/sql/SqlExpressions.java | 2 +-
.../sql/dates/TemporalArithmeticFunction.java | 4 +--
.../sql/dates/TemporalComparisonFunction.java | 4 +--
.../datetime/DateTimeComparisonFunction.java | 2 +-
.../datetime/DateTimeEqualsFunction.java | 4 +--
.../datetime/DateTimeGreaterThanFunction.java | 4 +--
.../DateTimeGreaterThanOrEqualToFunction.java | 4 +--
.../datetime/DateTimeLessThanFunction.java | 4 +--
.../DateTimeLessThanOrEqualToFunction.java | 4 +--
.../dates/time/TimeComparisonFunction.java | 2 +-
.../sql/dates/time/TimeEqualsFunction.java | 4 +--
.../pathling/sql/dates/time/TimeFunction.java | 4 +--
.../dates/time/TimeGreaterThanFunction.java | 4 +--
.../TimeGreaterThanOrEqualToFunction.java | 4 +--
.../sql/dates/time/TimeLessThanFunction.java | 4 +--
.../time/TimeLessThanOrEqualToFunction.java | 4 +--
.../pathling/sql/misc/CodingToLiteral.java | 2 +-
.../sql/misc/TemporalDifferenceFunction.java | 4 +--
.../csiro/pathling/UnitTestDependencies.java | 8 ++---
.../fhirpath/CanBeCombinedWithTest.java | 2 +-
.../function/BooleansTestFunctionTest.java | 2 +-
.../function/ResolveFunctionTest.java | 2 +-
.../fhirpath/function/UntilFunctionTest.java | 2 +-
.../terminology/DesignationFunctionTest.java | 2 +-
.../terminology/PropertyFunctionTest.java | 2 +-
.../terminology/SubsumesFunctionTest.java | 2 +-
.../terminology/TranslateFunctionTest.java | 2 +-
.../operator/ComparisonOperatorTest.java | 2 +-
.../fhirpath/operator/DateArithmeticTest.java | 2 +-
.../operator/MathOperatorQuantityTest.java | 2 +-
.../fhirpath/operator/MathOperatorTest.java | 4 +--
.../QuantityOperatorsPrecisionTest.java | 2 +-
.../fhirpath/parser/FhirPathTest.java | 2 +-
.../pathling/sql/udf/TerminologyUdfTest.java | 4 +--
.../au/csiro/pathling/test/DefaultAnswer.java | 3 +-
.../au/csiro/pathling/test/SharedMocks.java | 2 +-
.../pathling/test/SpringBootUnitTest.java | 7 ++--
.../csiro/pathling/test/TimingExtension.java | 5 ++-
.../pathling/test/assertions/Assertions.java | 2 +-
.../assertions/BaseFhirPathAssertion.java | 2 +-
.../test/assertions/DatasetAssert.java | 2 +-
.../test/assertions/ElementPathAssertion.java | 2 +-
.../test/assertions/FhirPathAssertion.java | 2 +-
.../test/assertions/LiteralPathAssertion.java | 4 +--
.../assertions/ResourcePathAssertion.java | 2 +-
.../test/builders/DatasetBuilder.java | 4 +--
.../test/builders/ElementPathBuilder.java | 4 +--
.../test/builders/ParserContextBuilder.java | 4 +--
.../test/builders/ResourceDatasetBuilder.java | 2 +-
.../test/builders/ResourcePathBuilder.java | 4 +--
.../builders/UntypedResourcePathBuilder.java | 4 +--
.../test/fixtures/PatientListBuilder.java | 4 +--
.../fixtures/PatientResourceRowFixture.java | 4 +--
.../pathling/test/helpers/FhirHelpers.java | 3 +-
.../pathling/test/helpers/SparkHelpers.java | 2 +-
.../pathling/test/helpers/TestHelpers.java | 4 +--
.../stubs/TestTerminologyServiceFactory.java | 2 +-
.../library/DecodeResourceMapPartitions.java | 3 +-
.../library/EncodeBundleMapPartitions.java | 2 +-
.../pathling/library/EncodeMapPartitions.java | 3 +-
.../library/EncodeResourceMapPartitions.java | 2 +-
.../pathling/library/PathlingContext.java | 4 +--
.../pathling/library/ResourceParser.java | 2 +-
.../pathling/library/TerminologyHelpers.java | 4 +--
.../pathling/library/io/sink/CatalogSink.java | 2 +-
.../pathling/library/io/sink/DataSink.java | 2 +-
.../library/io/sink/DataSinkBuilder.java | 4 +--
.../library/io/sink/DatabaseSink.java | 2 +-
.../pathling/library/io/sink/DeltaSink.java | 2 +-
.../pathling/library/io/sink/NdjsonSink.java | 2 +-
.../pathling/library/io/sink/ParquetSink.java | 2 +-
.../library/io/source/AbstractSource.java | 4 +--
.../library/io/source/BundlesSource.java | 2 +-
.../library/io/source/CatalogSource.java | 2 +-
.../library/io/source/DataSourceBuilder.java | 4 +--
.../library/io/source/DatabaseSource.java | 4 +--
.../library/io/source/DatasetSource.java | 4 +--
.../library/io/source/DeltaSource.java | 2 +-
.../library/io/source/FileSource.java | 6 ++--
.../library/io/source/NdjsonSource.java | 2 +-
.../library/io/source/ParquetSource.java | 2 +-
.../io/source/QueryableDataSource.java | 4 +--
.../library/query/AggregateQuery.java | 4 +--
.../pathling/library/query/ExtractQuery.java | 4 +--
.../pathling/library/query/QueryBuilder.java | 4 +--
.../library/query/QueryDispatcher.java | 2 +-
.../pathling/library/PathlingContextTest.java | 2 +-
.../pathling/library/ResourceParserTest.java | 6 ++--
.../csiro/pathling/library/TestHelpers.java | 2 +-
.../pathling/library/io/DataSourcesTest.java | 2 +-
.../HttpClientCachingConfiguration.java | 6 ++--
.../config/HttpClientCachingStorageType.java | 3 +-
.../config/HttpClientConfiguration.java | 1 -
.../config/TerminologyAuthConfiguration.java | 4 +--
.../config/TerminologyConfiguration.java | 2 +-
.../fhir/AcceptLanguageInterceptor.java | 4 +--
.../au/csiro/pathling/fhir/AccessContext.java | 2 +-
.../au/csiro/pathling/fhir/AccessScope.java | 4 +--
.../pathling/fhir/ClientAuthInterceptor.java | 4 +--
.../fhir/ClientCredentialsResponse.java | 2 +-
.../fhir/DefaultTerminologyClient.java | 6 ++--
.../csiro/pathling/fhir/ParametersUtils.java | 4 +--
.../pathling/fhir/TerminologyClient.java | 36 +++++++++++--------
.../pathling/fhir/UserAgentInterceptor.java | 4 +--
.../pathling/fhirpath/CodingHelpers.java | 2 +-
.../fhirpath/encoding/CodingEncoding.java | 4 +--
.../fhirpath/encoding/ImmutableCoding.java | 4 +--
.../fhirpath/literal/CodingLiteral.java | 4 +--
.../au/csiro/pathling/sql/Terminology.java | 4 +--
.../pathling/sql/TerminologySupport.java | 2 +-
.../pathling/sql/udf/DesignationUdf.java | 4 +--
.../au/csiro/pathling/sql/udf/DisplayUdf.java | 4 +--
.../csiro/pathling/sql/udf/MemberOfUdf.java | 4 +--
.../csiro/pathling/sql/udf/PropertyUdf.java | 4 +--
.../csiro/pathling/sql/udf/SubsumesUdf.java | 4 +--
.../sql/udf/TerminologyUdfHelpers.java | 4 +--
.../sql/udf/TerminologyUdfRegistrar.java | 12 +++----
.../csiro/pathling/sql/udf/TranslateUdf.java | 4 +--
.../terminology/BaseTerminologyService.java | 4 +--
.../DefaultTerminologyService.java | 6 ++--
.../DefaultTerminologyServiceFactory.java | 2 +-
.../terminology/RequestRetryHandler.java | 2 +-
.../terminology/TerminologyFunctions.java | 4 +--
.../terminology/TerminologyOperation.java | 2 +-
.../terminology/TerminologyParameters.java | 5 ++-
.../terminology/TerminologyResult.java | 4 +--
.../terminology/TerminologyService.java | 10 +++---
.../TerminologyServiceFactory.java | 2 +-
.../caching/CachingTerminologyService.java | 4 +--
.../InMemoryCachingTerminologyService.java | 2 +-
.../PersistentCachingTerminologyService.java | 2 +-
.../terminology/lookup/LookupExecutor.java | 7 ++--
.../terminology/lookup/LookupParameters.java | 5 +--
.../mock/MockTerminologyService.java | 4 +--
.../mock/MockTerminologyServiceFactory.java | 2 +-
.../subsumes/SubsumesExecutor.java | 2 +-
.../translate/TranslateExecutor.java | 4 +--
.../validatecode/ValidateCodeExecutor.java | 2 +-
.../pathling/fhirpath/CodingHelpersTest.java | 4 +--
.../DefaultTerminologyServiceTest.java | 2 +-
.../pathling/terminology/MappingTest.java | 4 +--
.../PropertiesParametersBuilder.java | 2 +-
.../CachingTerminologyServiceTest.java | 2 +-
.../test/AbstractTerminologyTestBase.java | 4 +--
.../pathling/test/helpers/FhirMatchers.java | 10 +++---
.../test/helpers/TerminologyHelpers.java | 4 +--
.../helpers/TerminologyServiceHelpers.java | 9 ++---
.../au/csiro/pathling/PathlingVersion.java | 2 +-
.../au/csiro/pathling/fhir/FhirUtils.java | 2 +-
.../fhirpath/literal/StringLiteral.java | 2 +-
.../csiro/pathling/spark/SparkConfigurer.java | 2 +-
.../sql/udf/AbstractUDFRegistrar.java | 2 +-
.../sql/udf/SqlFunctionRegistrar.java | 4 +--
.../au/csiro/pathling/utilities/Datasets.java | 17 +++++----
.../au/csiro/pathling/utilities/Default.java | 4 +--
.../au/csiro/pathling/utilities/Lists.java | 4 +--
.../pathling/utilities/ObjectHolder.java | 4 +--
.../pathling/utilities/Preconditions.java | 4 +--
.../pathling/utilities/ResourceCloser.java | 2 +-
.../au/csiro/pathling/utilities/Streams.java | 2 +-
.../au/csiro/pathling/utilities/Strings.java | 2 +-
.../csiro/pathling/utilities/Versioning.java | 2 +-
.../pathling/validation/ValidationUtils.java | 7 ++--
.../au/csiro/pathling/test/TestResources.java | 2 +-
374 files changed, 627 insertions(+), 665 deletions(-)
diff --git a/encoders/src/main/java/au/csiro/pathling/encoders/terminology/ucum/Ucum.java b/encoders/src/main/java/au/csiro/pathling/encoders/terminology/ucum/Ucum.java
index 60a1c3650e..cbaa8c95be 100644
--- a/encoders/src/main/java/au/csiro/pathling/encoders/terminology/ucum/Ucum.java
+++ b/encoders/src/main/java/au/csiro/pathling/encoders/terminology/ucum/Ucum.java
@@ -23,19 +23,15 @@
package au.csiro.pathling.encoders.terminology.ucum;
-import au.csiro.pathling.encoders.datatypes.DecimalCustomCoder;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.io.InputStream;
import java.math.BigDecimal;
-import java.math.RoundingMode;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
-import au.csiro.pathling.sql.types.FlexiDecimal;
import org.fhir.ucum.Decimal;
import org.fhir.ucum.Pair;
import org.fhir.ucum.UcumEssenceService;
import org.fhir.ucum.UcumException;
import org.fhir.ucum.UcumService;
-import org.hl7.fhir.r4.model.DecimalType;
/**
* Makes UCUM services available to the rest of the application.
diff --git a/encoders/src/main/java/au/csiro/pathling/sql/types/FlexiDecimal.java b/encoders/src/main/java/au/csiro/pathling/sql/types/FlexiDecimal.java
index 9f68eac165..f0be3f75ab 100644
--- a/encoders/src/main/java/au/csiro/pathling/sql/types/FlexiDecimal.java
+++ b/encoders/src/main/java/au/csiro/pathling/sql/types/FlexiDecimal.java
@@ -24,10 +24,10 @@
package au.csiro.pathling.sql.types;
import au.csiro.pathling.encoders.datatypes.DecimalCustomCoder;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.math.BigDecimal;
import java.math.RoundingMode;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.RowFactory;
diff --git a/encoders/src/main/java/au/csiro/pathling/support/FhirConversionSupport.java b/encoders/src/main/java/au/csiro/pathling/support/FhirConversionSupport.java
index a370e0be0b..6e4c59f246 100644
--- a/encoders/src/main/java/au/csiro/pathling/support/FhirConversionSupport.java
+++ b/encoders/src/main/java/au/csiro/pathling/support/FhirConversionSupport.java
@@ -25,11 +25,11 @@
import au.csiro.pathling.support.r4.R4FhirConversionSupport;
import ca.uhn.fhir.context.FhirVersionEnum;
+import jakarta.annotation.Nonnull;
import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import javax.annotation.Nonnull;
import org.hl7.fhir.instance.model.api.IBase;
import org.hl7.fhir.instance.model.api.IBaseBundle;
import org.hl7.fhir.instance.model.api.IBaseResource;
diff --git a/encoders/src/main/java/au/csiro/pathling/support/r4/FhirTraversal.java b/encoders/src/main/java/au/csiro/pathling/support/r4/FhirTraversal.java
index 840c677bb9..08275b9c6b 100644
--- a/encoders/src/main/java/au/csiro/pathling/support/r4/FhirTraversal.java
+++ b/encoders/src/main/java/au/csiro/pathling/support/r4/FhirTraversal.java
@@ -23,9 +23,9 @@
package au.csiro.pathling.support.r4;
+import jakarta.annotation.Nonnull;
import java.util.Objects;
import java.util.function.Consumer;
-import javax.annotation.Nonnull;
import org.hl7.fhir.r4.model.Base;
/**
diff --git a/encoders/src/main/java/au/csiro/pathling/support/r4/R4FhirConversionSupport.java b/encoders/src/main/java/au/csiro/pathling/support/r4/R4FhirConversionSupport.java
index 82efcf7473..5342f3da8b 100644
--- a/encoders/src/main/java/au/csiro/pathling/support/r4/R4FhirConversionSupport.java
+++ b/encoders/src/main/java/au/csiro/pathling/support/r4/R4FhirConversionSupport.java
@@ -24,9 +24,9 @@
package au.csiro.pathling.support.r4;
import au.csiro.pathling.support.FhirConversionSupport;
+import jakarta.annotation.Nonnull;
import java.util.List;
import java.util.stream.Collectors;
-import javax.annotation.Nonnull;
import org.hl7.fhir.instance.model.api.IBase;
import org.hl7.fhir.instance.model.api.IBaseBundle;
import org.hl7.fhir.instance.model.api.IBaseResource;
diff --git a/encoders/src/main/scala/au/csiro/pathling/encoders/QuantitySupport.scala b/encoders/src/main/scala/au/csiro/pathling/encoders/QuantitySupport.scala
index ad789d07c2..d43b711f3f 100644
--- a/encoders/src/main/scala/au/csiro/pathling/encoders/QuantitySupport.scala
+++ b/encoders/src/main/scala/au/csiro/pathling/encoders/QuantitySupport.scala
@@ -26,11 +26,9 @@ package au.csiro.pathling.encoders
import au.csiro.pathling.encoders.terminology.ucum.Ucum
import au.csiro.pathling.sql.types.FlexiDecimal
import au.csiro.pathling.sql.types.FlexiDecimalSupport.createFlexiDecimalSerializer
-import org.apache.spark.sql.Column
+import org.apache.spark.sql.catalyst.expressions.Expression
import org.apache.spark.sql.catalyst.expressions.objects.{Invoke, StaticInvoke}
-import org.apache.spark.sql.catalyst.expressions.{CreateNamedStruct, Expression, If, IsNull, Literal}
-import org.apache.spark.sql.functions.{lit, struct}
-import org.apache.spark.sql.types.{DataTypes, Decimal, DecimalType, ObjectType, StructField}
+import org.apache.spark.sql.types.{DataTypes, ObjectType, StructField}
import org.apache.spark.unsafe.types.UTF8String
/**
diff --git a/encoders/src/main/scala/au/csiro/pathling/encoders/SchemaConverter.scala b/encoders/src/main/scala/au/csiro/pathling/encoders/SchemaConverter.scala
index 96bfacce85..2ca837c0cc 100644
--- a/encoders/src/main/scala/au/csiro/pathling/encoders/SchemaConverter.scala
+++ b/encoders/src/main/scala/au/csiro/pathling/encoders/SchemaConverter.scala
@@ -24,8 +24,7 @@
package au.csiro.pathling.encoders
import au.csiro.pathling.encoders.ExtensionSupport.{EXTENSIONS_FIELD_NAME, FID_FIELD_NAME}
-import au.csiro.pathling.encoders.QuantitySupport.{CODE_CANONICALIZED_FIELD_NAME, VALUE_CANONICALIZED_FIELD_NAME}
-import au.csiro.pathling.encoders.datatypes.{DataTypeMappings, DecimalCustomCoder}
+import au.csiro.pathling.encoders.datatypes.DataTypeMappings
import au.csiro.pathling.schema.SchemaVisitor
import au.csiro.pathling.schema.SchemaVisitor.isCollection
import ca.uhn.fhir.context._
diff --git a/encoders/src/test/java/au/csiro/pathling/encoders/AllResourcesEncodingTest.java b/encoders/src/test/java/au/csiro/pathling/encoders/AllResourcesEncodingTest.java
index 19ca8d1dc0..25dabafe52 100644
--- a/encoders/src/test/java/au/csiro/pathling/encoders/AllResourcesEncodingTest.java
+++ b/encoders/src/test/java/au/csiro/pathling/encoders/AllResourcesEncodingTest.java
@@ -31,9 +31,9 @@
import ca.uhn.fhir.context.FhirContext;
import ca.uhn.fhir.context.RuntimeResourceDefinition;
import com.google.common.collect.ImmutableSet;
+import jakarta.annotation.Nonnull;
import java.util.Set;
import java.util.stream.Stream;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.catalyst.InternalRow;
import org.apache.spark.sql.catalyst.encoders.ExpressionEncoder;
import org.apache.spark.sql.catalyst.encoders.ExpressionEncoder.Serializer;
diff --git a/encoders/src/test/java/au/csiro/pathling/sql/types/FlexiDecimalTest.java b/encoders/src/test/java/au/csiro/pathling/sql/types/FlexiDecimalTest.java
index 48026f7a62..ad9abda91b 100644
--- a/encoders/src/test/java/au/csiro/pathling/sql/types/FlexiDecimalTest.java
+++ b/encoders/src/test/java/au/csiro/pathling/sql/types/FlexiDecimalTest.java
@@ -23,12 +23,12 @@
package au.csiro.pathling.sql.types;
-import org.junit.jupiter.api.Test;
-import java.math.BigDecimal;
-
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNull;
+import java.math.BigDecimal;
+import org.junit.jupiter.api.Test;
+
public class FlexiDecimalTest {
@Test
diff --git a/fhir-server/src/main/java/au/csiro/pathling/aggregate/AggregateExecutor.java b/fhir-server/src/main/java/au/csiro/pathling/aggregate/AggregateExecutor.java
index cabd5a73cc..95714e7f9c 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/aggregate/AggregateExecutor.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/aggregate/AggregateExecutor.java
@@ -24,13 +24,13 @@
import au.csiro.pathling.io.source.DataSource;
import au.csiro.pathling.terminology.TerminologyServiceFactory;
import ca.uhn.fhir.context.FhirContext;
+import jakarta.annotation.Nonnull;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Optional;
import java.util.function.Function;
import java.util.stream.Collectors;
-import javax.annotation.Nonnull;
import lombok.extern.slf4j.Slf4j;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SparkSession;
diff --git a/fhir-server/src/main/java/au/csiro/pathling/aggregate/AggregateProvider.java b/fhir-server/src/main/java/au/csiro/pathling/aggregate/AggregateProvider.java
index e39f08ac1d..f7b056e2f5 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/aggregate/AggregateProvider.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/aggregate/AggregateProvider.java
@@ -25,10 +25,10 @@
import ca.uhn.fhir.rest.annotation.OperationParam;
import ca.uhn.fhir.rest.server.IResourceProvider;
import ca.uhn.fhir.rest.server.servlet.ServletRequestDetails;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.util.List;
import java.util.Optional;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import org.hl7.fhir.instance.model.api.IBaseResource;
import org.hl7.fhir.r4.model.Enumerations.ResourceType;
import org.hl7.fhir.r4.model.Parameters;
diff --git a/fhir-server/src/main/java/au/csiro/pathling/aggregate/AggregateResponse.java b/fhir-server/src/main/java/au/csiro/pathling/aggregate/AggregateResponse.java
index a84682224c..00acfdd927 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/aggregate/AggregateResponse.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/aggregate/AggregateResponse.java
@@ -17,9 +17,9 @@
package au.csiro.pathling.aggregate;
+import jakarta.annotation.Nonnull;
import java.util.List;
import java.util.Optional;
-import javax.annotation.Nonnull;
import lombok.Getter;
import lombok.Value;
import org.hl7.fhir.r4.model.Parameters;
diff --git a/fhir-server/src/main/java/au/csiro/pathling/aggregate/DrillDownBuilder.java b/fhir-server/src/main/java/au/csiro/pathling/aggregate/DrillDownBuilder.java
index 3df4a4a645..50a6b6b086 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/aggregate/DrillDownBuilder.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/aggregate/DrillDownBuilder.java
@@ -23,13 +23,13 @@
import au.csiro.pathling.fhirpath.FhirPath;
import au.csiro.pathling.fhirpath.literal.LiteralPath;
import au.csiro.pathling.utilities.Strings;
+import jakarta.annotation.Nonnull;
import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
-import javax.annotation.Nonnull;
import org.hl7.fhir.r4.model.Type;
/**
diff --git a/fhir-server/src/main/java/au/csiro/pathling/async/AsyncAspect.java b/fhir-server/src/main/java/au/csiro/pathling/async/AsyncAspect.java
index db60bfc1c7..26ce948d46 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/async/AsyncAspect.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/async/AsyncAspect.java
@@ -24,6 +24,9 @@
import au.csiro.pathling.errors.ErrorReportingInterceptor;
import ca.uhn.fhir.rest.server.exceptions.BaseServerResponseException;
import ca.uhn.fhir.rest.server.servlet.ServletRequestDetails;
+import jakarta.annotation.Nonnull;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
import java.lang.reflect.UndeclaredThrowableException;
import java.util.Arrays;
import java.util.List;
@@ -33,9 +36,6 @@
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.Future;
import java.util.stream.Collectors;
-import javax.annotation.Nonnull;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.apache.spark.sql.SparkSession;
import org.aspectj.lang.ProceedingJoinPoint;
diff --git a/fhir-server/src/main/java/au/csiro/pathling/async/Job.java b/fhir-server/src/main/java/au/csiro/pathling/async/Job.java
index 1bf1487d19..e68d7e76b9 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/async/Job.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/async/Job.java
@@ -17,10 +17,9 @@
package au.csiro.pathling.async;
+import jakarta.annotation.Nonnull;
import java.util.Optional;
-import java.util.UUID;
import java.util.concurrent.Future;
-import javax.annotation.Nonnull;
import lombok.Getter;
import lombok.ToString;
import org.hl7.fhir.instance.model.api.IBaseResource;
@@ -41,7 +40,7 @@ public class Job {
public interface JobTag {
}
-
+
@Nonnull
final String id;
diff --git a/fhir-server/src/main/java/au/csiro/pathling/async/JobProvider.java b/fhir-server/src/main/java/au/csiro/pathling/async/JobProvider.java
index 8483ab97bc..4c498759b1 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/async/JobProvider.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/async/JobProvider.java
@@ -31,14 +31,13 @@
import ca.uhn.fhir.rest.annotation.Operation;
import ca.uhn.fhir.rest.annotation.OperationParam;
import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
-import java.util.Objects;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
import java.util.Optional;
import java.util.concurrent.ExecutionException;
import java.util.regex.Pattern;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.hl7.fhir.instance.model.api.IBaseResource;
import org.hl7.fhir.r4.model.OperationOutcome;
diff --git a/fhir-server/src/main/java/au/csiro/pathling/async/JobRegistry.java b/fhir-server/src/main/java/au/csiro/pathling/async/JobRegistry.java
index 3fbd201b17..3532b6b3bc 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/async/JobRegistry.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/async/JobRegistry.java
@@ -18,12 +18,12 @@
package au.csiro.pathling.async;
import au.csiro.pathling.async.Job.JobTag;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import java.util.function.Function;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Profile;
diff --git a/fhir-server/src/main/java/au/csiro/pathling/async/ProcessingNotCompletedException.java b/fhir-server/src/main/java/au/csiro/pathling/async/ProcessingNotCompletedException.java
index 152c4fd889..89c487ef26 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/async/ProcessingNotCompletedException.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/async/ProcessingNotCompletedException.java
@@ -19,7 +19,7 @@
import ca.uhn.fhir.rest.api.Constants;
import ca.uhn.fhir.rest.server.exceptions.BaseServerResponseException;
-import javax.annotation.Nonnull;
+import jakarta.annotation.Nonnull;
import org.hl7.fhir.instance.model.api.IBaseOperationOutcome;
/**
diff --git a/fhir-server/src/main/java/au/csiro/pathling/async/RequestTag.java b/fhir-server/src/main/java/au/csiro/pathling/async/RequestTag.java
index 3f3eb3445d..b55cced77f 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/async/RequestTag.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/async/RequestTag.java
@@ -19,10 +19,10 @@
import au.csiro.pathling.async.Job.JobTag;
+import jakarta.annotation.Nonnull;
import java.util.List;
import java.util.Map;
import java.util.Optional;
-import javax.annotation.Nonnull;
import lombok.Value;
/**
diff --git a/fhir-server/src/main/java/au/csiro/pathling/async/RequestTagFactory.java b/fhir-server/src/main/java/au/csiro/pathling/async/RequestTagFactory.java
index e89c03dd51..45a1db7122 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/async/RequestTagFactory.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/async/RequestTagFactory.java
@@ -23,6 +23,8 @@
import au.csiro.pathling.config.ServerConfiguration;
import au.csiro.pathling.io.CacheableDatabase;
import ca.uhn.fhir.rest.server.servlet.ServletRequestDetails;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
@@ -30,8 +32,6 @@
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import lombok.Getter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
diff --git a/fhir-server/src/main/java/au/csiro/pathling/async/SparkListener.java b/fhir-server/src/main/java/au/csiro/pathling/async/SparkListener.java
index 7b6acb4c94..871d4b561a 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/async/SparkListener.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/async/SparkListener.java
@@ -19,9 +19,8 @@
import static java.util.Objects.requireNonNull;
-import java.util.Objects;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import lombok.extern.slf4j.Slf4j;
import org.apache.spark.scheduler.SparkListenerStageCompleted;
import org.apache.spark.scheduler.SparkListenerStageSubmitted;
diff --git a/fhir-server/src/main/java/au/csiro/pathling/caching/EntityTagInterceptor.java b/fhir-server/src/main/java/au/csiro/pathling/caching/EntityTagInterceptor.java
index 78bce986f4..cb3f7fc6ad 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/caching/EntityTagInterceptor.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/caching/EntityTagInterceptor.java
@@ -28,12 +28,12 @@
import ca.uhn.fhir.interceptor.api.Pointcut;
import ca.uhn.fhir.rest.api.server.RequestDetails;
import ca.uhn.fhir.rest.server.exceptions.NotModifiedException;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Component;
diff --git a/fhir-server/src/main/java/au/csiro/pathling/config/AsyncConfiguration.java b/fhir-server/src/main/java/au/csiro/pathling/config/AsyncConfiguration.java
index 88be9077ea..b8f50fa208 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/config/AsyncConfiguration.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/config/AsyncConfiguration.java
@@ -17,9 +17,9 @@
package au.csiro.pathling.config;
+import java.util.List;
import javax.validation.constraints.NotNull;
import lombok.Data;
-import java.util.List;
/**
* Represents configuration relating to asynchronous processing.
diff --git a/fhir-server/src/main/java/au/csiro/pathling/config/AuthorizationConfiguration.java b/fhir-server/src/main/java/au/csiro/pathling/config/AuthorizationConfiguration.java
index 421010c3b4..df47604062 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/config/AuthorizationConfiguration.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/config/AuthorizationConfiguration.java
@@ -17,10 +17,10 @@
package au.csiro.pathling.config;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.util.List;
import java.util.Optional;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import javax.validation.constraints.NotNull;
import lombok.Data;
import lombok.ToString;
diff --git a/fhir-server/src/main/java/au/csiro/pathling/config/ServerConfiguration.java b/fhir-server/src/main/java/au/csiro/pathling/config/ServerConfiguration.java
index 6f51b169f7..5cfdfb5cde 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/config/ServerConfiguration.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/config/ServerConfiguration.java
@@ -17,9 +17,9 @@
package au.csiro.pathling.config;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.util.Optional;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import javax.validation.constraints.NotNull;
import lombok.AccessLevel;
import lombok.Data;
diff --git a/fhir-server/src/main/java/au/csiro/pathling/config/SparkConfiguration.java b/fhir-server/src/main/java/au/csiro/pathling/config/SparkConfiguration.java
index 5511ec2caa..36e6559e2c 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/config/SparkConfiguration.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/config/SparkConfiguration.java
@@ -18,7 +18,6 @@
package au.csiro.pathling.config;
import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
import lombok.Builder;
import lombok.Data;
diff --git a/fhir-server/src/main/java/au/csiro/pathling/errors/AccessDeniedError.java b/fhir-server/src/main/java/au/csiro/pathling/errors/AccessDeniedError.java
index 2ea8f9ef8a..7dcf4cc2dd 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/errors/AccessDeniedError.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/errors/AccessDeniedError.java
@@ -17,8 +17,8 @@
package au.csiro.pathling.errors;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import lombok.Getter;
/**
diff --git a/fhir-server/src/main/java/au/csiro/pathling/errors/DiagnosticContext.java b/fhir-server/src/main/java/au/csiro/pathling/errors/DiagnosticContext.java
index fb2211865a..15c95cc944 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/errors/DiagnosticContext.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/errors/DiagnosticContext.java
@@ -23,12 +23,11 @@
import ca.uhn.fhir.rest.server.servlet.ServletRequestDetails;
import io.sentry.Sentry;
import io.sentry.protocol.Request;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
+import jakarta.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;
-import java.util.Objects;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
-import javax.servlet.http.HttpServletRequest;
import org.slf4j.MDC;
/**
diff --git a/fhir-server/src/main/java/au/csiro/pathling/errors/DiagnosticContextInterceptor.java b/fhir-server/src/main/java/au/csiro/pathling/errors/DiagnosticContextInterceptor.java
index 0662764c28..6d6a4b4da1 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/errors/DiagnosticContextInterceptor.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/errors/DiagnosticContextInterceptor.java
@@ -23,8 +23,8 @@
import ca.uhn.fhir.interceptor.api.Pointcut;
import ca.uhn.fhir.parser.IParser;
import ca.uhn.fhir.rest.server.servlet.ServletRequestDetails;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Component;
diff --git a/fhir-server/src/main/java/au/csiro/pathling/errors/ErrorHandlingInterceptor.java b/fhir-server/src/main/java/au/csiro/pathling/errors/ErrorHandlingInterceptor.java
index 0e71dac7f5..0d1556db0c 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/errors/ErrorHandlingInterceptor.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/errors/ErrorHandlingInterceptor.java
@@ -32,12 +32,12 @@
import ca.uhn.fhir.rest.server.servlet.ServletRequestDetails;
import com.fasterxml.jackson.core.JsonParseException;
import com.google.common.util.concurrent.UncheckedExecutionException;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.UndeclaredThrowableException;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
import org.apache.spark.SparkException;
import org.hl7.fhir.r4.model.OperationOutcome;
import org.hl7.fhir.r4.model.OperationOutcome.IssueSeverity;
diff --git a/fhir-server/src/main/java/au/csiro/pathling/errors/ErrorReportingInitialization.java b/fhir-server/src/main/java/au/csiro/pathling/errors/ErrorReportingInitialization.java
index 9192e097f7..42a4044dff 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/errors/ErrorReportingInitialization.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/errors/ErrorReportingInitialization.java
@@ -20,7 +20,7 @@
import au.csiro.pathling.PathlingVersion;
import au.csiro.pathling.config.ServerConfiguration;
import io.sentry.Sentry;
-import javax.annotation.Nonnull;
+import jakarta.annotation.Nonnull;
import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.EventListener;
diff --git a/fhir-server/src/main/java/au/csiro/pathling/errors/ErrorReportingInterceptor.java b/fhir-server/src/main/java/au/csiro/pathling/errors/ErrorReportingInterceptor.java
index 2348b57f01..30e85ebcba 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/errors/ErrorReportingInterceptor.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/errors/ErrorReportingInterceptor.java
@@ -24,10 +24,10 @@
import ca.uhn.fhir.rest.server.exceptions.BaseServerResponseException;
import ca.uhn.fhir.rest.server.servlet.ServletRequestDetails;
import io.sentry.Sentry;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Component;
diff --git a/fhir-server/src/main/java/au/csiro/pathling/extract/ExtractExecutor.java b/fhir-server/src/main/java/au/csiro/pathling/extract/ExtractExecutor.java
index c87ac39e5b..46d3b0ebbb 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/extract/ExtractExecutor.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/extract/ExtractExecutor.java
@@ -24,8 +24,8 @@
import au.csiro.pathling.io.ResultWriter;
import au.csiro.pathling.terminology.TerminologyServiceFactory;
import ca.uhn.fhir.context.FhirContext;
+import jakarta.annotation.Nonnull;
import java.util.Optional;
-import javax.annotation.Nonnull;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import org.apache.spark.sql.Dataset;
diff --git a/fhir-server/src/main/java/au/csiro/pathling/extract/ExtractProvider.java b/fhir-server/src/main/java/au/csiro/pathling/extract/ExtractProvider.java
index 4956c76385..e6cb624508 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/extract/ExtractProvider.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/extract/ExtractProvider.java
@@ -27,11 +27,11 @@
import ca.uhn.fhir.rest.api.server.RequestDetails;
import ca.uhn.fhir.rest.server.IResourceProvider;
import ca.uhn.fhir.rest.server.servlet.ServletRequestDetails;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.util.List;
import java.util.Optional;
import java.util.UUID;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import org.hl7.fhir.instance.model.api.IBaseResource;
import org.hl7.fhir.r4.model.Enumerations.ResourceType;
import org.hl7.fhir.r4.model.IntegerType;
diff --git a/fhir-server/src/main/java/au/csiro/pathling/extract/ExtractResponse.java b/fhir-server/src/main/java/au/csiro/pathling/extract/ExtractResponse.java
index b8074c2b58..8be118c26d 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/extract/ExtractResponse.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/extract/ExtractResponse.java
@@ -17,7 +17,7 @@
package au.csiro.pathling.extract;
-import javax.annotation.Nonnull;
+import jakarta.annotation.Nonnull;
import lombok.Getter;
import org.hl7.fhir.r4.model.Parameters;
import org.hl7.fhir.r4.model.Parameters.ParametersParameterComponent;
diff --git a/fhir-server/src/main/java/au/csiro/pathling/extract/ResultProvider.java b/fhir-server/src/main/java/au/csiro/pathling/extract/ResultProvider.java
index 71f1d19815..4ab9d2cfcf 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/extract/ResultProvider.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/extract/ResultProvider.java
@@ -27,14 +27,13 @@
import ca.uhn.fhir.rest.annotation.Operation;
import ca.uhn.fhir.rest.annotation.OperationParam;
import ca.uhn.fhir.rest.api.server.RequestDetails;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
+import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
-import java.util.Objects;
import java.util.Optional;
import java.util.regex.Pattern;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
-import javax.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils;
import org.springframework.context.annotation.Profile;
diff --git a/fhir-server/src/main/java/au/csiro/pathling/fhir/ConformanceProvider.java b/fhir-server/src/main/java/au/csiro/pathling/fhir/ConformanceProvider.java
index 60f4de5d99..d333972c50 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/fhir/ConformanceProvider.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/fhir/ConformanceProvider.java
@@ -39,19 +39,18 @@
import ca.uhn.fhir.rest.server.IServerConformanceProvider;
import ca.uhn.fhir.rest.server.RestfulServer;
import com.google.common.collect.ImmutableMap;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
+import jakarta.servlet.ServletContext;
+import jakarta.servlet.http.HttpServletRequest;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.EnumSet;
import java.util.List;
import java.util.Map;
-import java.util.Objects;
import java.util.Optional;
import java.util.Set;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j;
import org.hl7.fhir.instance.model.api.IBaseResource;
import org.hl7.fhir.instance.model.api.IIdType;
diff --git a/fhir-server/src/main/java/au/csiro/pathling/fhir/Dependencies.java b/fhir-server/src/main/java/au/csiro/pathling/fhir/Dependencies.java
index 7ab859ce8a..9f78c16738 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/fhir/Dependencies.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/fhir/Dependencies.java
@@ -27,7 +27,7 @@
import au.csiro.pathling.terminology.TerminologyServiceFactory;
import ca.uhn.fhir.context.FhirContext;
import ca.uhn.fhir.parser.IParser;
-import javax.annotation.Nonnull;
+import jakarta.annotation.Nonnull;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
@@ -59,7 +59,7 @@ static QueryConfiguration queryConfigurationConfiguration(
@Nonnull final ServerConfiguration configuration) {
return configuration.getQuery();
}
-
+
@Bean
@ConditionalOnMissingBean
@Nonnull
diff --git a/fhir-server/src/main/java/au/csiro/pathling/fhir/FhirContextFactory.java b/fhir-server/src/main/java/au/csiro/pathling/fhir/FhirContextFactory.java
index d2c928f2e1..b4c0d463ef 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/fhir/FhirContextFactory.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/fhir/FhirContextFactory.java
@@ -20,8 +20,8 @@
import au.csiro.pathling.encoders.FhirEncoders;
import ca.uhn.fhir.context.FhirContext;
import ca.uhn.fhir.context.FhirVersionEnum;
+import jakarta.annotation.Nonnull;
import java.io.Serializable;
-import javax.annotation.Nonnull;
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Component;
diff --git a/fhir-server/src/main/java/au/csiro/pathling/fhir/FhirServer.java b/fhir-server/src/main/java/au/csiro/pathling/fhir/FhirServer.java
index ccd39f9002..f0c5c4a5b8 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/fhir/FhirServer.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/fhir/FhirServer.java
@@ -22,7 +22,6 @@
import au.csiro.pathling.async.JobProvider;
import au.csiro.pathling.caching.EntityTagInterceptor;
import au.csiro.pathling.config.ServerConfiguration;
-import au.csiro.pathling.encoders.EncoderBuilder;
import au.csiro.pathling.errors.DiagnosticContextInterceptor;
import au.csiro.pathling.errors.ErrorHandlingInterceptor;
import au.csiro.pathling.errors.ErrorReportingInterceptor;
@@ -39,19 +38,17 @@
import ca.uhn.fhir.rest.server.RestfulServer;
import ca.uhn.fhir.rest.server.interceptor.LoggingInterceptor;
import ca.uhn.fhir.rest.server.interceptor.ResponseHighlighterInterceptor;
+import jakarta.annotation.Nonnull;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.annotation.WebServlet;
+import jakarta.servlet.http.HttpServletResponse;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Collection;
-import java.util.EnumSet;
import java.util.List;
import java.util.Optional;
import java.util.Set;
-import java.util.stream.Collectors;
-import javax.annotation.Nonnull;
-import javax.servlet.ServletException;
-import javax.servlet.annotation.WebServlet;
-import javax.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.hl7.fhir.instance.model.api.IBaseResource;
import org.hl7.fhir.r4.model.Enumerations;
@@ -59,7 +56,6 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Profile;
-import scala.collection.JavaConverters;
/**
* A HAPI RestfulServer that provides the FHIR interface to the functionality within Pathling.
@@ -319,7 +315,7 @@ public static Enumerations.ResourceType resourceTypeFromClass(
final IBaseResource instance = constructor.newInstance();
return Enumerations.ResourceType.fromCode(instance.fhirType());
} catch (final NoSuchMethodException | IllegalAccessException | InstantiationException
- | InvocationTargetException e) {
+ | InvocationTargetException e) {
throw new RuntimeException("Problem determining FHIR type from resource class", e);
}
}
diff --git a/fhir-server/src/main/java/au/csiro/pathling/fhir/ResourceProviderFactory.java b/fhir-server/src/main/java/au/csiro/pathling/fhir/ResourceProviderFactory.java
index 4806c0dae1..bd167da508 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/fhir/ResourceProviderFactory.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/fhir/ResourceProviderFactory.java
@@ -29,8 +29,8 @@
import au.csiro.pathling.update.UpdateProvider;
import ca.uhn.fhir.context.FhirContext;
import ca.uhn.fhir.rest.server.IResourceProvider;
+import jakarta.annotation.Nonnull;
import java.util.Optional;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.SparkSession;
import org.hl7.fhir.instance.model.api.IBaseResource;
import org.hl7.fhir.r4.model.ResourceType;
diff --git a/fhir-server/src/main/java/au/csiro/pathling/fhir/SmartConfigurationInterceptor.java b/fhir-server/src/main/java/au/csiro/pathling/fhir/SmartConfigurationInterceptor.java
index 96d31be816..a134497f4e 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/fhir/SmartConfigurationInterceptor.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/fhir/SmartConfigurationInterceptor.java
@@ -28,14 +28,14 @@
import com.google.gson.FieldNamingPolicy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
diff --git a/fhir-server/src/main/java/au/csiro/pathling/io/AccessRules.java b/fhir-server/src/main/java/au/csiro/pathling/io/AccessRules.java
index 30ee49479e..1cc308e7fb 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/io/AccessRules.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/io/AccessRules.java
@@ -19,9 +19,9 @@
import au.csiro.pathling.config.ServerConfiguration;
import au.csiro.pathling.errors.SecurityError;
+import jakarta.annotation.Nonnull;
import java.util.List;
import java.util.stream.Collectors;
-import javax.annotation.Nonnull;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.context.annotation.Profile;
diff --git a/fhir-server/src/main/java/au/csiro/pathling/io/CacheableDatabase.java b/fhir-server/src/main/java/au/csiro/pathling/io/CacheableDatabase.java
index 11048fa516..843c5e8b87 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/io/CacheableDatabase.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/io/CacheableDatabase.java
@@ -22,8 +22,8 @@
import au.csiro.pathling.caching.Cacheable;
import au.csiro.pathling.config.StorageConfiguration;
import au.csiro.pathling.encoders.FhirEncoders;
+import jakarta.annotation.Nonnull;
import java.util.Optional;
-import javax.annotation.Nonnull;
import lombok.extern.slf4j.Slf4j;
import org.apache.spark.sql.SparkSession;
import org.springframework.context.annotation.Profile;
diff --git a/fhir-server/src/main/java/au/csiro/pathling/io/CacheableFileSystemPersistence.java b/fhir-server/src/main/java/au/csiro/pathling/io/CacheableFileSystemPersistence.java
index f9540e5367..ec8b25cfae 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/io/CacheableFileSystemPersistence.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/io/CacheableFileSystemPersistence.java
@@ -22,6 +22,8 @@
import au.csiro.pathling.caching.Cacheable;
import io.delta.tables.DeltaTable;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
@@ -30,8 +32,6 @@
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import org.apache.hadoop.fs.FileStatus;
diff --git a/fhir-server/src/main/java/au/csiro/pathling/io/ResultReader.java b/fhir-server/src/main/java/au/csiro/pathling/io/ResultReader.java
index 94925316ca..13ee815e13 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/io/ResultReader.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/io/ResultReader.java
@@ -20,13 +20,12 @@
import static java.util.Objects.requireNonNull;
import au.csiro.pathling.extract.Result;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
import java.net.URISyntaxException;
-import java.util.Objects;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import lombok.extern.slf4j.Slf4j;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
diff --git a/fhir-server/src/main/java/au/csiro/pathling/io/ResultWriter.java b/fhir-server/src/main/java/au/csiro/pathling/io/ResultWriter.java
index e0b268c1dd..502932fd8a 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/io/ResultWriter.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/io/ResultWriter.java
@@ -22,7 +22,7 @@
import static au.csiro.pathling.io.FileSystemPersistence.getFileSystem;
import au.csiro.pathling.config.ServerConfiguration;
-import javax.annotation.Nonnull;
+import jakarta.annotation.Nonnull;
import lombok.extern.slf4j.Slf4j;
import org.apache.hadoop.fs.FileSystem;
import org.apache.spark.sql.Dataset;
diff --git a/fhir-server/src/main/java/au/csiro/pathling/search/SearchExecutor.java b/fhir-server/src/main/java/au/csiro/pathling/search/SearchExecutor.java
index 27ab4a110a..e72851e0dc 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/search/SearchExecutor.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/search/SearchExecutor.java
@@ -40,6 +40,8 @@
import ca.uhn.fhir.rest.param.StringAndListParam;
import ca.uhn.fhir.rest.param.StringOrListParam;
import ca.uhn.fhir.rest.param.StringParam;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
@@ -47,8 +49,6 @@
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import lombok.extern.slf4j.Slf4j;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Dataset;
diff --git a/fhir-server/src/main/java/au/csiro/pathling/search/SearchProvider.java b/fhir-server/src/main/java/au/csiro/pathling/search/SearchProvider.java
index 44b93884c8..69265bfa20 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/search/SearchProvider.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/search/SearchProvider.java
@@ -31,9 +31,9 @@
import ca.uhn.fhir.rest.api.server.IBundleProvider;
import ca.uhn.fhir.rest.param.StringAndListParam;
import ca.uhn.fhir.rest.server.IResourceProvider;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.util.Optional;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import lombok.extern.slf4j.Slf4j;
import org.apache.spark.sql.SparkSession;
import org.hl7.fhir.instance.model.api.IBaseResource;
diff --git a/fhir-server/src/main/java/au/csiro/pathling/security/OidcConfiguration.java b/fhir-server/src/main/java/au/csiro/pathling/security/OidcConfiguration.java
index f458892772..7e8349637f 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/security/OidcConfiguration.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/security/OidcConfiguration.java
@@ -22,10 +22,10 @@
import au.csiro.pathling.config.AuthorizationConfiguration;
import au.csiro.pathling.config.ServerConfiguration;
+import jakarta.annotation.Nonnull;
import java.util.Map;
import java.util.Optional;
import java.util.function.Supplier;
-import javax.annotation.Nonnull;
import lombok.Getter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
diff --git a/fhir-server/src/main/java/au/csiro/pathling/security/PathlingAuthenticationConverter.java b/fhir-server/src/main/java/au/csiro/pathling/security/PathlingAuthenticationConverter.java
index 3f28dc962a..c26f26776e 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/security/PathlingAuthenticationConverter.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/security/PathlingAuthenticationConverter.java
@@ -17,8 +17,8 @@
package au.csiro.pathling.security;
+import jakarta.annotation.Nonnull;
import java.util.Collection;
-import javax.annotation.Nonnull;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Profile;
diff --git a/fhir-server/src/main/java/au/csiro/pathling/security/PathlingAuthority.java b/fhir-server/src/main/java/au/csiro/pathling/security/PathlingAuthority.java
index ae2ff6f871..004868e8c1 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/security/PathlingAuthority.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/security/PathlingAuthority.java
@@ -17,6 +17,8 @@
package au.csiro.pathling.security;
+import au.csiro.pathling.security.ResourceAccess.AccessType;
+import jakarta.annotation.Nonnull;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
@@ -24,8 +26,6 @@
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
-import javax.annotation.Nonnull;
-import au.csiro.pathling.security.ResourceAccess.AccessType;
import lombok.Getter;
import lombok.Value;
import org.hl7.fhir.r4.model.Enumerations.ResourceType;
diff --git a/fhir-server/src/main/java/au/csiro/pathling/security/PathlingJwtDecoderBuilder.java b/fhir-server/src/main/java/au/csiro/pathling/security/PathlingJwtDecoderBuilder.java
index c70e9f78ac..911ba83a0d 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/security/PathlingJwtDecoderBuilder.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/security/PathlingJwtDecoderBuilder.java
@@ -40,14 +40,14 @@
import com.nimbusds.jwt.proc.DefaultJWTProcessor;
import com.nimbusds.jwt.proc.JWTClaimsSetAwareJWSKeySelector;
import com.nimbusds.jwt.proc.JWTProcessor;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.io.IOException;
import java.net.URL;
import java.security.Key;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Primary;
import org.springframework.context.annotation.Profile;
diff --git a/fhir-server/src/main/java/au/csiro/pathling/security/PathlingJwtDecoderFactory.java b/fhir-server/src/main/java/au/csiro/pathling/security/PathlingJwtDecoderFactory.java
index 9681442fc0..58edbfe6d9 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/security/PathlingJwtDecoderFactory.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/security/PathlingJwtDecoderFactory.java
@@ -20,8 +20,8 @@
import static au.csiro.pathling.utilities.Preconditions.checkArgument;
import au.csiro.pathling.config.ServerConfiguration;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Profile;
diff --git a/fhir-server/src/main/java/au/csiro/pathling/security/SecurityAspect.java b/fhir-server/src/main/java/au/csiro/pathling/security/SecurityAspect.java
index 5dea5644ab..a91fafe991 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/security/SecurityAspect.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/security/SecurityAspect.java
@@ -18,10 +18,10 @@
package au.csiro.pathling.security;
import au.csiro.pathling.errors.AccessDeniedError;
+import jakarta.annotation.Nonnull;
import java.util.Collection;
import java.util.Optional;
import java.util.stream.Collectors;
-import javax.annotation.Nonnull;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
diff --git a/fhir-server/src/main/java/au/csiro/pathling/security/SecurityConfiguration.java b/fhir-server/src/main/java/au/csiro/pathling/security/SecurityConfiguration.java
index 9bfc50528f..92fa8573f1 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/security/SecurityConfiguration.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/security/SecurityConfiguration.java
@@ -18,7 +18,7 @@
package au.csiro.pathling.security;
import au.csiro.pathling.config.ServerConfiguration;
-import javax.annotation.Nonnull;
+import jakarta.annotation.Nonnull;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
diff --git a/fhir-server/src/main/java/au/csiro/pathling/security/ga4gh/JwtAnyIssuerValidator.java b/fhir-server/src/main/java/au/csiro/pathling/security/ga4gh/JwtAnyIssuerValidator.java
index 3249b41c56..d00b709754 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/security/ga4gh/JwtAnyIssuerValidator.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/security/ga4gh/JwtAnyIssuerValidator.java
@@ -19,10 +19,10 @@
import static au.csiro.pathling.utilities.Preconditions.checkArgument;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.util.Collection;
import java.util.function.Predicate;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import org.springframework.security.oauth2.core.OAuth2TokenValidator;
import org.springframework.security.oauth2.core.OAuth2TokenValidatorResult;
import org.springframework.security.oauth2.jwt.Jwt;
diff --git a/fhir-server/src/main/java/au/csiro/pathling/security/ga4gh/ManifestConverter.java b/fhir-server/src/main/java/au/csiro/pathling/security/ga4gh/ManifestConverter.java
index 9f73e3e315..7c96cdba2d 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/security/ga4gh/ManifestConverter.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/security/ga4gh/ManifestConverter.java
@@ -23,11 +23,11 @@
import ca.uhn.fhir.context.FhirContext;
import ca.uhn.fhir.context.RuntimeResourceDefinition;
import ca.uhn.fhir.context.RuntimeSearchParam;
+import jakarta.annotation.Nonnull;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
-import javax.annotation.Nonnull;
import org.hl7.fhir.r4.model.Enumerations.ResourceType;
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Component;
diff --git a/fhir-server/src/main/java/au/csiro/pathling/security/ga4gh/PassportAuthenticationConverter.java b/fhir-server/src/main/java/au/csiro/pathling/security/ga4gh/PassportAuthenticationConverter.java
index 28fc84ae00..bd81283507 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/security/ga4gh/PassportAuthenticationConverter.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/security/ga4gh/PassportAuthenticationConverter.java
@@ -23,14 +23,14 @@
import ca.uhn.fhir.rest.server.exceptions.UnclassifiedServerFailureException;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import lombok.extern.slf4j.Slf4j;
import org.apache.hadoop.shaded.com.nimbusds.jose.shaded.json.JSONObject;
import org.apache.http.HttpEntity;
diff --git a/fhir-server/src/main/java/au/csiro/pathling/security/ga4gh/PassportDecoderBuilder.java b/fhir-server/src/main/java/au/csiro/pathling/security/ga4gh/PassportDecoderBuilder.java
index 5d588fabc6..04bc43cc94 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/security/ga4gh/PassportDecoderBuilder.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/security/ga4gh/PassportDecoderBuilder.java
@@ -21,9 +21,9 @@
import au.csiro.pathling.config.ServerConfiguration;
import au.csiro.pathling.security.OidcConfiguration;
import au.csiro.pathling.security.PathlingJwtDecoderBuilder;
+import jakarta.annotation.Nonnull;
import java.util.ArrayList;
import java.util.List;
-import javax.annotation.Nonnull;
import org.springframework.context.annotation.Profile;
import org.springframework.security.oauth2.core.OAuth2TokenValidator;
import org.springframework.security.oauth2.jwt.Jwt;
diff --git a/fhir-server/src/main/java/au/csiro/pathling/security/ga4gh/PassportDecoderFactory.java b/fhir-server/src/main/java/au/csiro/pathling/security/ga4gh/PassportDecoderFactory.java
index c48020e059..175abfa66d 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/security/ga4gh/PassportDecoderFactory.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/security/ga4gh/PassportDecoderFactory.java
@@ -20,8 +20,8 @@
import static au.csiro.pathling.utilities.Preconditions.checkArgument;
import au.csiro.pathling.config.ServerConfiguration;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Profile;
import org.springframework.security.oauth2.jwt.JwtDecoder;
diff --git a/fhir-server/src/main/java/au/csiro/pathling/security/ga4gh/PassportScopeEnforcer.java b/fhir-server/src/main/java/au/csiro/pathling/security/ga4gh/PassportScopeEnforcer.java
index ae8f98b96d..811e9aadf5 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/security/ga4gh/PassportScopeEnforcer.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/security/ga4gh/PassportScopeEnforcer.java
@@ -24,9 +24,9 @@
import au.csiro.pathling.io.source.DataSource;
import au.csiro.pathling.terminology.TerminologyServiceFactory;
import ca.uhn.fhir.context.FhirContext;
+import jakarta.annotation.Nonnull;
import java.util.Collection;
import java.util.Optional;
-import javax.annotation.Nonnull;
import lombok.extern.slf4j.Slf4j;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Dataset;
diff --git a/fhir-server/src/main/java/au/csiro/pathling/security/ga4gh/ScopeAwareDatabase.java b/fhir-server/src/main/java/au/csiro/pathling/security/ga4gh/ScopeAwareDatabase.java
index 44813408c2..48fa005c3f 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/security/ga4gh/ScopeAwareDatabase.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/security/ga4gh/ScopeAwareDatabase.java
@@ -24,9 +24,9 @@
import au.csiro.pathling.io.source.DataSource;
import au.csiro.pathling.terminology.TerminologyServiceFactory;
import ca.uhn.fhir.context.FhirContext;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.util.Optional;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import lombok.extern.slf4j.Slf4j;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
diff --git a/fhir-server/src/main/java/au/csiro/pathling/security/ga4gh/VisaDecoderBuilder.java b/fhir-server/src/main/java/au/csiro/pathling/security/ga4gh/VisaDecoderBuilder.java
index 8b684266d8..454698ef00 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/security/ga4gh/VisaDecoderBuilder.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/security/ga4gh/VisaDecoderBuilder.java
@@ -26,9 +26,9 @@
import au.csiro.pathling.security.OidcConfiguration;
import au.csiro.pathling.security.PathlingJwtDecoderBuilder;
import com.nimbusds.jwt.JWTClaimsSet;
+import jakarta.annotation.Nonnull;
import java.util.ArrayList;
import java.util.List;
-import javax.annotation.Nonnull;
import org.springframework.context.annotation.Profile;
import org.springframework.security.oauth2.core.OAuth2TokenValidator;
import org.springframework.security.oauth2.jwt.Jwt;
diff --git a/fhir-server/src/main/java/au/csiro/pathling/security/ga4gh/VisaDecoderFactory.java b/fhir-server/src/main/java/au/csiro/pathling/security/ga4gh/VisaDecoderFactory.java
index 8961081e0c..93858ecc4e 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/security/ga4gh/VisaDecoderFactory.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/security/ga4gh/VisaDecoderFactory.java
@@ -20,8 +20,8 @@
import static au.csiro.pathling.utilities.Preconditions.checkArgument;
import au.csiro.pathling.config.ServerConfiguration;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import org.springframework.context.annotation.Profile;
import org.springframework.security.oauth2.jwt.JwtDecoder;
import org.springframework.security.oauth2.jwt.JwtDecoderFactory;
diff --git a/fhir-server/src/main/java/au/csiro/pathling/spark/Spark.java b/fhir-server/src/main/java/au/csiro/pathling/spark/Spark.java
index 90f052ed44..9274466499 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/spark/Spark.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/spark/Spark.java
@@ -21,12 +21,11 @@
import au.csiro.pathling.async.SparkListener;
import au.csiro.pathling.config.ServerConfiguration;
+import jakarta.annotation.Nonnull;
import java.util.Arrays;
import java.util.List;
-import java.util.Objects;
import java.util.Optional;
import java.util.function.Consumer;
-import javax.annotation.Nonnull;
import lombok.extern.slf4j.Slf4j;
import org.apache.spark.sql.SparkSession;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
diff --git a/fhir-server/src/main/java/au/csiro/pathling/spark/Udfs.java b/fhir-server/src/main/java/au/csiro/pathling/spark/Udfs.java
index 5cbea0bea4..238b1df54f 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/spark/Udfs.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/spark/Udfs.java
@@ -18,14 +18,13 @@
package au.csiro.pathling.spark;
import au.csiro.pathling.sql.FhirpathUDFRegistrar;
+import au.csiro.pathling.sql.udf.TerminologyUdfRegistrar;
import au.csiro.pathling.terminology.TerminologyServiceFactory;
-import au.csiro.pathling.sql.udf.*;
+import jakarta.annotation.Nonnull;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Component;
-import javax.annotation.Nonnull;
-import java.util.List;
/**
* Provides an Apache Spark session for use by the Pathling server.
diff --git a/fhir-server/src/main/java/au/csiro/pathling/update/BatchProvider.java b/fhir-server/src/main/java/au/csiro/pathling/update/BatchProvider.java
index 338e00575b..424778e72d 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/update/BatchProvider.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/update/BatchProvider.java
@@ -30,13 +30,13 @@
import au.csiro.pathling.security.PathlingAuthority;
import ca.uhn.fhir.rest.annotation.Transaction;
import ca.uhn.fhir.rest.annotation.TransactionParam;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.util.ArrayList;
import java.util.EnumMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import org.hl7.fhir.exceptions.FHIRException;
import org.hl7.fhir.instance.model.api.IBaseResource;
import org.hl7.fhir.r4.model.Bundle;
diff --git a/fhir-server/src/main/java/au/csiro/pathling/update/ImportExecutor.java b/fhir-server/src/main/java/au/csiro/pathling/update/ImportExecutor.java
index c9d37cb852..7b9ffbbc44 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/update/ImportExecutor.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/update/ImportExecutor.java
@@ -29,12 +29,12 @@
import au.csiro.pathling.io.FileSystemPersistence;
import au.csiro.pathling.io.ImportMode;
import ca.uhn.fhir.rest.annotation.ResourceParam;
+import jakarta.annotation.Nonnull;
import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
-import javax.annotation.Nonnull;
import lombok.extern.slf4j.Slf4j;
import org.apache.spark.api.java.function.FilterFunction;
import org.apache.spark.api.java.function.MapFunction;
diff --git a/fhir-server/src/main/java/au/csiro/pathling/update/ImportLock.java b/fhir-server/src/main/java/au/csiro/pathling/update/ImportLock.java
index 370a8d57b8..a7f74f1e8a 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/update/ImportLock.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/update/ImportLock.java
@@ -18,7 +18,7 @@
package au.csiro.pathling.update;
import ca.uhn.fhir.rest.server.exceptions.UnclassifiedServerFailureException;
-import javax.annotation.Nonnull;
+import jakarta.annotation.Nonnull;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
diff --git a/fhir-server/src/main/java/au/csiro/pathling/update/ImportProvider.java b/fhir-server/src/main/java/au/csiro/pathling/update/ImportProvider.java
index fd87b47cdf..35bd530f7a 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/update/ImportProvider.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/update/ImportProvider.java
@@ -21,12 +21,9 @@
import au.csiro.pathling.security.OperationAccess;
import ca.uhn.fhir.rest.annotation.Operation;
import ca.uhn.fhir.rest.annotation.ResourceParam;
-import ca.uhn.fhir.rest.api.server.RequestDetails;
import ca.uhn.fhir.rest.server.servlet.ServletRequestDetails;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import lombok.extern.slf4j.Slf4j;
import org.hl7.fhir.r4.model.OperationOutcome;
import org.hl7.fhir.r4.model.Parameters;
diff --git a/fhir-server/src/main/java/au/csiro/pathling/update/UpdateProvider.java b/fhir-server/src/main/java/au/csiro/pathling/update/UpdateProvider.java
index 33a686cd79..1045b4d1f7 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/update/UpdateProvider.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/update/UpdateProvider.java
@@ -28,8 +28,8 @@
import ca.uhn.fhir.rest.annotation.Update;
import ca.uhn.fhir.rest.api.MethodOutcome;
import ca.uhn.fhir.rest.server.IResourceProvider;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import org.hl7.fhir.instance.model.api.IBaseResource;
import org.hl7.fhir.r4.model.Enumerations.ResourceType;
import org.hl7.fhir.r4.model.IdType;
diff --git a/fhir-server/src/main/java/org/springframework/security/oauth2/jwt/JwtDecoderProviderConfigurationUtilsProxy.java b/fhir-server/src/main/java/org/springframework/security/oauth2/jwt/JwtDecoderProviderConfigurationUtilsProxy.java
index 64baaed372..ce83e2f052 100644
--- a/fhir-server/src/main/java/org/springframework/security/oauth2/jwt/JwtDecoderProviderConfigurationUtilsProxy.java
+++ b/fhir-server/src/main/java/org/springframework/security/oauth2/jwt/JwtDecoderProviderConfigurationUtilsProxy.java
@@ -17,8 +17,8 @@
package org.springframework.security.oauth2.jwt;
+import jakarta.annotation.Nonnull;
import java.util.Map;
-import javax.annotation.Nonnull;
/**
* Provides access to functionality within the package-private
diff --git a/fhir-server/src/test/java/au/csiro/pathling/aggregate/AggregateExecutorTest.java b/fhir-server/src/test/java/au/csiro/pathling/aggregate/AggregateExecutorTest.java
index 0fafd10d6d..6023e91fba 100644
--- a/fhir-server/src/test/java/au/csiro/pathling/aggregate/AggregateExecutorTest.java
+++ b/fhir-server/src/test/java/au/csiro/pathling/aggregate/AggregateExecutorTest.java
@@ -35,9 +35,9 @@
import ca.uhn.fhir.rest.api.server.IBundleProvider;
import ca.uhn.fhir.rest.param.StringAndListParam;
import ca.uhn.fhir.rest.param.StringParam;
+import jakarta.annotation.Nonnull;
import java.util.List;
import java.util.Optional;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.SparkSession;
import org.hl7.fhir.instance.model.api.IBaseResource;
import org.hl7.fhir.r4.model.Enumerations.ResourceType;
diff --git a/fhir-server/src/test/java/au/csiro/pathling/aggregate/AggregateRequestBuilder.java b/fhir-server/src/test/java/au/csiro/pathling/aggregate/AggregateRequestBuilder.java
index ee22cd0933..a51a39839b 100644
--- a/fhir-server/src/test/java/au/csiro/pathling/aggregate/AggregateRequestBuilder.java
+++ b/fhir-server/src/test/java/au/csiro/pathling/aggregate/AggregateRequestBuilder.java
@@ -17,10 +17,10 @@
package au.csiro.pathling.aggregate;
+import jakarta.annotation.Nonnull;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
-import javax.annotation.Nonnull;
import org.hl7.fhir.r4.model.Enumerations.ResourceType;
/**
diff --git a/fhir-server/src/test/java/au/csiro/pathling/aggregate/DrillDownBuilderTest.java b/fhir-server/src/test/java/au/csiro/pathling/aggregate/DrillDownBuilderTest.java
index ab45957013..54e22f3643 100644
--- a/fhir-server/src/test/java/au/csiro/pathling/aggregate/DrillDownBuilderTest.java
+++ b/fhir-server/src/test/java/au/csiro/pathling/aggregate/DrillDownBuilderTest.java
@@ -25,11 +25,11 @@
import au.csiro.pathling.test.SpringBootUnitTest;
import au.csiro.pathling.test.builders.ElementPathBuilder;
import au.csiro.pathling.test.helpers.TestHelpers;
+import jakarta.annotation.Nonnull;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
import java.util.stream.Stream;
-import javax.annotation.Nonnull;
import lombok.Value;
import org.apache.spark.sql.SparkSession;
import org.hl7.fhir.r4.model.Base64BinaryType;
diff --git a/fhir-server/src/test/java/au/csiro/pathling/aggregate/GroupingLiteralTest.java b/fhir-server/src/test/java/au/csiro/pathling/aggregate/GroupingLiteralTest.java
index 09c8f856c3..cd4b5cd881 100644
--- a/fhir-server/src/test/java/au/csiro/pathling/aggregate/GroupingLiteralTest.java
+++ b/fhir-server/src/test/java/au/csiro/pathling/aggregate/GroupingLiteralTest.java
@@ -17,8 +17,8 @@
package au.csiro.pathling.aggregate;
+import jakarta.annotation.Nonnull;
import java.util.stream.Stream;
-import javax.annotation.Nonnull;
import lombok.Value;
import lombok.extern.slf4j.Slf4j;
import org.hl7.fhir.r4.model.Enumerations.ResourceType;
diff --git a/fhir-server/src/test/java/au/csiro/pathling/async/AsyncAspectTest.java b/fhir-server/src/test/java/au/csiro/pathling/async/AsyncAspectTest.java
index 52f9859325..88bcf00f3c 100644
--- a/fhir-server/src/test/java/au/csiro/pathling/async/AsyncAspectTest.java
+++ b/fhir-server/src/test/java/au/csiro/pathling/async/AsyncAspectTest.java
@@ -30,13 +30,13 @@
import au.csiro.pathling.io.CacheableDatabase;
import au.csiro.pathling.test.SpringBootUnitTest;
import ca.uhn.fhir.rest.server.servlet.ServletRequestDetails;
+import jakarta.annotation.Nonnull;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.Callable;
import java.util.concurrent.Future;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.SparkSession;
import org.aspectj.lang.ProceedingJoinPoint;
import org.hl7.fhir.instance.model.api.IBaseResource;
@@ -92,7 +92,8 @@ public void setUp() throws Throwable {
final ServerConfiguration serverConfiguration = createServerConfiguration(
List.of("Accept", "Authorization"),
List.of("Accept"));
- final RequestTagFactory requestTagFactory = new RequestTagFactory(database, serverConfiguration);
+ final RequestTagFactory requestTagFactory = new RequestTagFactory(database,
+ serverConfiguration);
jobRegistry = new JobRegistry();
asyncAspect = new AsyncAspect(threadPoolTaskExecutor, requestTagFactory, jobRegistry, stageMap,
spark);
diff --git a/fhir-server/src/test/java/au/csiro/pathling/async/JobRegistryTest.java b/fhir-server/src/test/java/au/csiro/pathling/async/JobRegistryTest.java
index 23782a327f..381eef77a8 100644
--- a/fhir-server/src/test/java/au/csiro/pathling/async/JobRegistryTest.java
+++ b/fhir-server/src/test/java/au/csiro/pathling/async/JobRegistryTest.java
@@ -17,17 +17,16 @@
package au.csiro.pathling.async;
-import au.csiro.pathling.async.Job.JobTag;
-import org.hl7.fhir.instance.model.api.IBaseResource;
-import org.junit.jupiter.api.Test;
-import org.mockito.Mockito;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
+import static org.mockito.Mockito.mock;
-import javax.annotation.Nonnull;
+import au.csiro.pathling.async.Job.JobTag;
+import jakarta.annotation.Nonnull;
import java.util.Optional;
import java.util.concurrent.Future;
-
-import static org.junit.jupiter.api.Assertions.*;
-import static org.mockito.Mockito.mock;
+import org.hl7.fhir.instance.model.api.IBaseResource;
+import org.junit.jupiter.api.Test;
class JobRegistryTest {
diff --git a/fhir-server/src/test/java/au/csiro/pathling/extract/ExtractRequestBuilder.java b/fhir-server/src/test/java/au/csiro/pathling/extract/ExtractRequestBuilder.java
index 2d86c88d30..c44b302b42 100644
--- a/fhir-server/src/test/java/au/csiro/pathling/extract/ExtractRequestBuilder.java
+++ b/fhir-server/src/test/java/au/csiro/pathling/extract/ExtractRequestBuilder.java
@@ -17,11 +17,11 @@
package au.csiro.pathling.extract;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import org.hl7.fhir.r4.model.Enumerations.ResourceType;
/**
diff --git a/fhir-server/src/test/java/au/csiro/pathling/fhir/EntityTagInterceptorTest.java b/fhir-server/src/test/java/au/csiro/pathling/fhir/EntityTagInterceptorTest.java
index 54ebffa068..88a41527a5 100644
--- a/fhir-server/src/test/java/au/csiro/pathling/fhir/EntityTagInterceptorTest.java
+++ b/fhir-server/src/test/java/au/csiro/pathling/fhir/EntityTagInterceptorTest.java
@@ -31,12 +31,12 @@
import au.csiro.pathling.io.CacheableDatabase;
import ca.uhn.fhir.rest.api.server.RequestDetails;
import ca.uhn.fhir.rest.server.exceptions.NotModifiedException;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Optional;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
diff --git a/fhir-server/src/test/java/au/csiro/pathling/fhirpath/parser/AbstractParserTest.java b/fhir-server/src/test/java/au/csiro/pathling/fhirpath/parser/AbstractParserTest.java
index 32b5680661..feea40bc2a 100644
--- a/fhir-server/src/test/java/au/csiro/pathling/fhirpath/parser/AbstractParserTest.java
+++ b/fhir-server/src/test/java/au/csiro/pathling/fhirpath/parser/AbstractParserTest.java
@@ -32,8 +32,8 @@
import au.csiro.pathling.test.builders.ParserContextBuilder;
import au.csiro.pathling.test.helpers.TestHelpers;
import ca.uhn.fhir.context.FhirContext;
+import jakarta.annotation.Nonnull;
import java.util.Collections;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SparkSession;
diff --git a/fhir-server/src/test/java/au/csiro/pathling/fhirpath/parser/ParserTest.java b/fhir-server/src/test/java/au/csiro/pathling/fhirpath/parser/ParserTest.java
index d27ec73230..e0caa86d2f 100644
--- a/fhir-server/src/test/java/au/csiro/pathling/fhirpath/parser/ParserTest.java
+++ b/fhir-server/src/test/java/au/csiro/pathling/fhirpath/parser/ParserTest.java
@@ -51,8 +51,8 @@
import au.csiro.pathling.test.builders.ParserContextBuilder;
import au.csiro.pathling.test.helpers.TerminologyServiceHelpers;
import au.csiro.pathling.test.helpers.TerminologyServiceHelpers.TranslateExpectations;
+import jakarta.annotation.Nonnull;
import java.util.Collections;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.types.DataTypes;
import org.hl7.fhir.r4.model.Coding;
import org.hl7.fhir.r4.model.Enumerations.ResourceType;
@@ -91,8 +91,9 @@ private void setupMockDisplayFor_195662009_444814009() {
private void setupMockPropertiesFor_195662009_444814009() {
TerminologyServiceHelpers.setupLookup(terminologyService)
- .withProperty(CD_SNOMED_195662009, "child", (String)null, CD_SNOMED_40055000, CD_SNOMED_403190006)
- .withProperty(CD_SNOMED_444814009, "child", (String)null, CD_SNOMED_284551006)
+ .withProperty(CD_SNOMED_195662009, "child", (String) null, CD_SNOMED_40055000,
+ CD_SNOMED_403190006)
+ .withProperty(CD_SNOMED_444814009, "child", (String) null, CD_SNOMED_284551006)
.withDesignation(CD_SNOMED_195662009, CD_SNOMED_900000000000003001, "en",
"Acute viral pharyngitis : disorder")
.withDesignation(CD_SNOMED_444814009, CD_SNOMED_900000000000003001, "en",
@@ -836,7 +837,7 @@ void testQuantityAdditionWithOverflow() {
.selectResult()
.hasRows(spark, "responses/ParserTest/testQuantityAdditionWithOverflow_code.csv");
}
-
+
@Test
void testResolutionOfExtensionReference() {
mockResource(ResourceType.PATIENT, ResourceType.ENCOUNTER, ResourceType.GOAL);
diff --git a/fhir-server/src/test/java/au/csiro/pathling/jmh/AbstractJmhSpringBootState.java b/fhir-server/src/test/java/au/csiro/pathling/jmh/AbstractJmhSpringBootState.java
index 7c96b4ef25..f6eff3d49a 100644
--- a/fhir-server/src/test/java/au/csiro/pathling/jmh/AbstractJmhSpringBootState.java
+++ b/fhir-server/src/test/java/au/csiro/pathling/jmh/AbstractJmhSpringBootState.java
@@ -19,9 +19,9 @@
import org.openjdk.jmh.annotations.Level;
import org.openjdk.jmh.annotations.Setup;
+import org.openjdk.jmh.annotations.State;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ActiveProfiles;
-import org.openjdk.jmh.annotations.State;
/**
diff --git a/fhir-server/src/test/java/au/csiro/pathling/jmh/JmhUtils.java b/fhir-server/src/test/java/au/csiro/pathling/jmh/JmhUtils.java
index 547b85671d..f6a43e22b1 100644
--- a/fhir-server/src/test/java/au/csiro/pathling/jmh/JmhUtils.java
+++ b/fhir-server/src/test/java/au/csiro/pathling/jmh/JmhUtils.java
@@ -17,11 +17,11 @@
package au.csiro.pathling.jmh;
-import org.openjdk.jmh.results.format.ResultFormatType;
-import javax.annotation.Nonnull;
+import jakarta.annotation.Nonnull;
import java.io.File;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
+import org.openjdk.jmh.results.format.ResultFormatType;
public class JmhUtils {
diff --git a/fhir-server/src/test/java/au/csiro/pathling/jmh/SpringBootJmhContext.java b/fhir-server/src/test/java/au/csiro/pathling/jmh/SpringBootJmhContext.java
index 465592b999..9fc0836359 100644
--- a/fhir-server/src/test/java/au/csiro/pathling/jmh/SpringBootJmhContext.java
+++ b/fhir-server/src/test/java/au/csiro/pathling/jmh/SpringBootJmhContext.java
@@ -17,10 +17,10 @@
package au.csiro.pathling.jmh;
-import org.springframework.test.context.TestContextManager;
-import javax.annotation.Nonnull;
+import jakarta.annotation.Nonnull;
import java.util.HashMap;
import java.util.Map;
+import org.springframework.test.context.TestContextManager;
/**
* This class hijacks the mechanism that SpringBoot uses for auto wiring of SpringBootTests.
diff --git a/fhir-server/src/test/java/au/csiro/pathling/search/SearchExecutorBuilder.java b/fhir-server/src/test/java/au/csiro/pathling/search/SearchExecutorBuilder.java
index 750aafa613..f1cfc3ff9b 100644
--- a/fhir-server/src/test/java/au/csiro/pathling/search/SearchExecutorBuilder.java
+++ b/fhir-server/src/test/java/au/csiro/pathling/search/SearchExecutorBuilder.java
@@ -27,9 +27,9 @@
import au.csiro.pathling.test.helpers.TestHelpers;
import ca.uhn.fhir.context.FhirContext;
import ca.uhn.fhir.rest.param.StringAndListParam;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.util.Optional;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import lombok.Getter;
import org.apache.spark.sql.SparkSession;
import org.hl7.fhir.r4.model.Enumerations.ResourceType;
diff --git a/fhir-server/src/test/java/au/csiro/pathling/search/SearchExecutorTest.java b/fhir-server/src/test/java/au/csiro/pathling/search/SearchExecutorTest.java
index 54cdbd2daf..0c70133aa5 100644
--- a/fhir-server/src/test/java/au/csiro/pathling/search/SearchExecutorTest.java
+++ b/fhir-server/src/test/java/au/csiro/pathling/search/SearchExecutorTest.java
@@ -37,9 +37,9 @@
import ca.uhn.fhir.rest.api.server.IBundleProvider;
import ca.uhn.fhir.rest.param.StringAndListParam;
import ca.uhn.fhir.rest.param.StringParam;
+import jakarta.annotation.Nonnull;
import java.util.List;
import java.util.stream.Collectors;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.SparkSession;
import org.hl7.fhir.instance.model.api.IBaseResource;
import org.hl7.fhir.r4.model.Bundle;
diff --git a/fhir-server/src/test/java/au/csiro/pathling/security/PathlingAuthorityTest.java b/fhir-server/src/test/java/au/csiro/pathling/security/PathlingAuthorityTest.java
index 26f8611649..5f43363af7 100644
--- a/fhir-server/src/test/java/au/csiro/pathling/security/PathlingAuthorityTest.java
+++ b/fhir-server/src/test/java/au/csiro/pathling/security/PathlingAuthorityTest.java
@@ -23,9 +23,9 @@
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
+import jakarta.annotation.Nonnull;
import java.util.Arrays;
import java.util.Collections;
-import javax.annotation.Nonnull;
import org.hl7.fhir.r4.model.Enumerations.ResourceType;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
diff --git a/fhir-server/src/test/java/au/csiro/pathling/security/SecurityAspectTest.java b/fhir-server/src/test/java/au/csiro/pathling/security/SecurityAspectTest.java
index 38d45aa4fd..e51a4e7b59 100644
--- a/fhir-server/src/test/java/au/csiro/pathling/security/SecurityAspectTest.java
+++ b/fhir-server/src/test/java/au/csiro/pathling/security/SecurityAspectTest.java
@@ -20,8 +20,8 @@
import static java.util.Objects.requireNonNull;
+import jakarta.annotation.Nonnull;
import java.lang.reflect.Method;
-import javax.annotation.Nonnull;
import org.hl7.fhir.r4.model.Enumerations.ResourceType;
import org.junit.jupiter.api.Test;
import org.springframework.core.annotation.AnnotationUtils;
diff --git a/fhir-server/src/test/java/au/csiro/pathling/security/SecurityTest.java b/fhir-server/src/test/java/au/csiro/pathling/security/SecurityTest.java
index 82e8f87317..10b39af6dc 100644
--- a/fhir-server/src/test/java/au/csiro/pathling/security/SecurityTest.java
+++ b/fhir-server/src/test/java/au/csiro/pathling/security/SecurityTest.java
@@ -21,7 +21,7 @@
import static org.junit.jupiter.api.Assertions.assertThrows;
import au.csiro.pathling.errors.AccessDeniedError;
-import javax.annotation.Nonnull;
+import jakarta.annotation.Nonnull;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.function.Executable;
import org.springframework.boot.test.context.SpringBootTest;
diff --git a/fhir-server/src/test/java/au/csiro/pathling/security/ga4gh/ManifestConverterTest.java b/fhir-server/src/test/java/au/csiro/pathling/security/ga4gh/ManifestConverterTest.java
index 7d4a532b22..da6b677c53 100644
--- a/fhir-server/src/test/java/au/csiro/pathling/security/ga4gh/ManifestConverterTest.java
+++ b/fhir-server/src/test/java/au/csiro/pathling/security/ga4gh/ManifestConverterTest.java
@@ -28,10 +28,10 @@
import ca.uhn.fhir.context.FhirContext;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
+import jakarta.annotation.Nonnull;
import java.io.File;
import java.util.Arrays;
import java.util.List;
-import javax.annotation.Nonnull;
import lombok.extern.slf4j.Slf4j;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
diff --git a/fhir-server/src/test/java/au/csiro/pathling/test/IntegrationTestDependencies.java b/fhir-server/src/test/java/au/csiro/pathling/test/IntegrationTestDependencies.java
index a7c85c73c4..7366af1463 100644
--- a/fhir-server/src/test/java/au/csiro/pathling/test/IntegrationTestDependencies.java
+++ b/fhir-server/src/test/java/au/csiro/pathling/test/IntegrationTestDependencies.java
@@ -23,7 +23,7 @@
import com.github.tomakehurst.wiremock.WireMockServer;
import com.github.tomakehurst.wiremock.client.WireMock;
import com.github.tomakehurst.wiremock.core.WireMockConfiguration;
-import javax.annotation.Nonnull;
+import jakarta.annotation.Nonnull;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Profile;
diff --git a/fhir-server/src/test/java/au/csiro/pathling/test/TestDataImporter.java b/fhir-server/src/test/java/au/csiro/pathling/test/TestDataImporter.java
index 1c04125dcd..356bbc8fc8 100644
--- a/fhir-server/src/test/java/au/csiro/pathling/test/TestDataImporter.java
+++ b/fhir-server/src/test/java/au/csiro/pathling/test/TestDataImporter.java
@@ -20,13 +20,12 @@
import static java.util.Objects.requireNonNull;
import au.csiro.pathling.update.ImportExecutor;
+import jakarta.annotation.Nonnull;
import java.io.File;
import java.io.FileFilter;
import java.util.List;
-import java.util.Objects;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import javax.annotation.Nonnull;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.io.filefilter.WildcardFileFilter;
diff --git a/fhir-server/src/test/java/au/csiro/pathling/test/benchmark/AggregateBenchmark.java b/fhir-server/src/test/java/au/csiro/pathling/test/benchmark/AggregateBenchmark.java
index 0ce44e2684..8d1228e577 100644
--- a/fhir-server/src/test/java/au/csiro/pathling/test/benchmark/AggregateBenchmark.java
+++ b/fhir-server/src/test/java/au/csiro/pathling/test/benchmark/AggregateBenchmark.java
@@ -32,9 +32,9 @@
import au.csiro.pathling.test.helpers.TestHelpers;
import ca.uhn.fhir.context.FhirContext;
import ca.uhn.fhir.parser.IParser;
+import jakarta.annotation.Nonnull;
import java.util.Optional;
import java.util.concurrent.TimeUnit;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.SparkSession;
import org.hl7.fhir.r4.model.Enumerations.ResourceType;
import org.junit.jupiter.api.Tag;
diff --git a/fhir-server/src/test/java/au/csiro/pathling/test/benchmark/DecimalDevBenchmark.java b/fhir-server/src/test/java/au/csiro/pathling/test/benchmark/DecimalDevBenchmark.java
index b5042f7080..cdef6d04ec 100644
--- a/fhir-server/src/test/java/au/csiro/pathling/test/benchmark/DecimalDevBenchmark.java
+++ b/fhir-server/src/test/java/au/csiro/pathling/test/benchmark/DecimalDevBenchmark.java
@@ -21,10 +21,10 @@
import au.csiro.pathling.jmh.AbstractJmhSpringBootState;
import au.csiro.pathling.sql.types.FlexiDecimal;
import au.csiro.pathling.test.builders.DatasetBuilder;
+import jakarta.annotation.Nonnull;
import java.math.BigDecimal;
import java.util.List;
import java.util.concurrent.TimeUnit;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
diff --git a/fhir-server/src/test/java/au/csiro/pathling/test/benchmark/SearchDevBenchmark.java b/fhir-server/src/test/java/au/csiro/pathling/test/benchmark/SearchDevBenchmark.java
index 3f4b4cf882..4d87c9cd66 100644
--- a/fhir-server/src/test/java/au/csiro/pathling/test/benchmark/SearchDevBenchmark.java
+++ b/fhir-server/src/test/java/au/csiro/pathling/test/benchmark/SearchDevBenchmark.java
@@ -30,10 +30,10 @@
import ca.uhn.fhir.rest.api.server.IBundleProvider;
import ca.uhn.fhir.rest.param.StringAndListParam;
import ca.uhn.fhir.rest.param.StringParam;
+import jakarta.annotation.Nonnull;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.TimeUnit;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.SparkSession;
import org.hl7.fhir.instance.model.api.IBaseResource;
import org.hl7.fhir.r4.model.Enumerations.ResourceType;
diff --git a/fhir-server/src/test/java/au/csiro/pathling/test/benchmark/TerminologyBenchmarkTest.java b/fhir-server/src/test/java/au/csiro/pathling/test/benchmark/TerminologyBenchmarkTest.java
index dafef78995..a99f3e0a0e 100644
--- a/fhir-server/src/test/java/au/csiro/pathling/test/benchmark/TerminologyBenchmarkTest.java
+++ b/fhir-server/src/test/java/au/csiro/pathling/test/benchmark/TerminologyBenchmarkTest.java
@@ -29,8 +29,8 @@
import au.csiro.pathling.test.helpers.TestHelpers;
import ca.uhn.fhir.context.FhirContext;
import ca.uhn.fhir.parser.IParser;
+import jakarta.annotation.Nonnull;
import java.util.Optional;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.SparkSession;
import org.hl7.fhir.r4.model.Enumerations.ResourceType;
import org.junit.jupiter.api.BeforeEach;
diff --git a/fhir-server/src/test/java/au/csiro/pathling/test/benchmark/TerminologyDevBenchmark.java b/fhir-server/src/test/java/au/csiro/pathling/test/benchmark/TerminologyDevBenchmark.java
index d35c01ff47..481b100ef2 100644
--- a/fhir-server/src/test/java/au/csiro/pathling/test/benchmark/TerminologyDevBenchmark.java
+++ b/fhir-server/src/test/java/au/csiro/pathling/test/benchmark/TerminologyDevBenchmark.java
@@ -30,9 +30,9 @@
import au.csiro.pathling.test.helpers.TestHelpers;
import ca.uhn.fhir.context.FhirContext;
import ca.uhn.fhir.parser.IParser;
+import jakarta.annotation.Nonnull;
import java.util.Optional;
import java.util.concurrent.TimeUnit;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.SparkSession;
import org.hl7.fhir.r4.model.Enumerations.ResourceType;
import org.openjdk.jmh.annotations.Benchmark;
diff --git a/fhir-server/src/test/java/au/csiro/pathling/test/fhir/ErrorHandlingInterceptorTest.java b/fhir-server/src/test/java/au/csiro/pathling/test/fhir/ErrorHandlingInterceptorTest.java
index c392e44b72..13e77c613a 100644
--- a/fhir-server/src/test/java/au/csiro/pathling/test/fhir/ErrorHandlingInterceptorTest.java
+++ b/fhir-server/src/test/java/au/csiro/pathling/test/fhir/ErrorHandlingInterceptorTest.java
@@ -32,9 +32,9 @@
import ca.uhn.fhir.rest.server.exceptions.UnclassifiedServerFailureException;
import com.fasterxml.jackson.core.JsonParseException;
import com.google.common.util.concurrent.UncheckedExecutionException;
+import jakarta.annotation.Nonnull;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.UndeclaredThrowableException;
-import javax.annotation.Nonnull;
import org.apache.spark.SparkException;
import org.hl7.fhir.r4.model.OperationOutcome;
import org.hl7.fhir.r4.model.OperationOutcome.IssueSeverity;
diff --git a/fhir-server/src/test/java/au/csiro/pathling/test/integration/AsyncTest.java b/fhir-server/src/test/java/au/csiro/pathling/test/integration/AsyncTest.java
index 88ff49b59f..a8fe7c9efa 100644
--- a/fhir-server/src/test/java/au/csiro/pathling/test/integration/AsyncTest.java
+++ b/fhir-server/src/test/java/au/csiro/pathling/test/integration/AsyncTest.java
@@ -23,13 +23,13 @@
import au.csiro.pathling.io.CacheableDatabase;
import au.csiro.pathling.test.helpers.TestHelpers;
+import jakarta.annotation.Nonnull;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.Date;
import java.util.List;
-import javax.annotation.Nonnull;
import lombok.extern.slf4j.Slf4j;
import org.apache.spark.sql.SparkSession;
import org.hl7.fhir.r4.model.Enumerations.ResourceType;
@@ -186,7 +186,5 @@ void identicalAsyncRequestsReturnTheSameJobId()
assertEquals(getContentLocation(response1), getContentLocation(response2));
}
-
-
-
+
}
diff --git a/fhir-server/src/test/java/au/csiro/pathling/test/integration/MultipleAggregationsAndResolveTest.java b/fhir-server/src/test/java/au/csiro/pathling/test/integration/MultipleAggregationsAndResolveTest.java
index 29a0642813..dfe3364ce9 100644
--- a/fhir-server/src/test/java/au/csiro/pathling/test/integration/MultipleAggregationsAndResolveTest.java
+++ b/fhir-server/src/test/java/au/csiro/pathling/test/integration/MultipleAggregationsAndResolveTest.java
@@ -24,9 +24,9 @@
import au.csiro.pathling.io.CacheableDatabase;
import au.csiro.pathling.test.helpers.TestHelpers;
+import jakarta.annotation.Nonnull;
import java.net.URI;
import java.net.URISyntaxException;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.SparkSession;
import org.hl7.fhir.r4.model.Enumerations.ResourceType;
import org.junit.jupiter.api.Tag;
diff --git a/fhir-server/src/test/java/au/csiro/pathling/test/integration/SentryTest.java b/fhir-server/src/test/java/au/csiro/pathling/test/integration/SentryTest.java
index a9953962de..446e8508c8 100644
--- a/fhir-server/src/test/java/au/csiro/pathling/test/integration/SentryTest.java
+++ b/fhir-server/src/test/java/au/csiro/pathling/test/integration/SentryTest.java
@@ -38,7 +38,7 @@
import org.springframework.boot.test.web.client.TestRestTemplate;
import org.springframework.boot.test.web.server.LocalServerPort;
import org.springframework.http.HttpMethod;
-import org.springframework.http.HttpStatus;
+import org.springframework.http.HttpStatusCode;
import org.springframework.http.RequestEntity;
import org.springframework.http.ResponseEntity;
@@ -72,7 +72,7 @@ void reportsToSentry() throws URISyntaxException, InterruptedException {
null);
final ResponseEntity response = restTemplate
.exchange(uri, HttpMethod.GET, RequestEntity.get(uri).build(), String.class);
- final HttpStatus statusCode = response.getStatusCode();
+ final HttpStatusCode statusCode = response.getStatusCode();
assertTrue(statusCode.is5xxServerError());
// Give the asynchronous request sender within Sentry time to actually send the error report.
diff --git a/fhir-server/src/test/java/au/csiro/pathling/test/integration/TerminologyServiceWithLanguageIntegrationTest.java b/fhir-server/src/test/java/au/csiro/pathling/test/integration/TerminologyServiceWithLanguageIntegrationTest.java
index 1d637f7679..6169cbf145 100644
--- a/fhir-server/src/test/java/au/csiro/pathling/test/integration/TerminologyServiceWithLanguageIntegrationTest.java
+++ b/fhir-server/src/test/java/au/csiro/pathling/test/integration/TerminologyServiceWithLanguageIntegrationTest.java
@@ -19,13 +19,11 @@
import static au.csiro.pathling.test.helpers.TerminologyHelpers.LC_29463_7;
import static au.csiro.pathling.test.helpers.TerminologyHelpers.LC_55915_3;
-import static com.github.tomakehurst.wiremock.client.WireMock.containing;
import static com.github.tomakehurst.wiremock.client.WireMock.proxyAllTo;
import static com.github.tomakehurst.wiremock.client.WireMock.stubFor;
import static org.junit.jupiter.api.Assertions.assertEquals;
import au.csiro.pathling.io.CacheableDatabase;
-import au.csiro.pathling.terminology.DefaultTerminologyService;
import au.csiro.pathling.terminology.DefaultTerminologyServiceFactory;
import au.csiro.pathling.terminology.TerminologyService;
import au.csiro.pathling.terminology.TerminologyService.Property;
@@ -42,7 +40,6 @@
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
-import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.TestPropertySource;
diff --git a/fhir-server/src/test/java/au/csiro/pathling/test/integration/modification/ImportTest.java b/fhir-server/src/test/java/au/csiro/pathling/test/integration/modification/ImportTest.java
index 911f2f6c5c..975749dc68 100644
--- a/fhir-server/src/test/java/au/csiro/pathling/test/integration/modification/ImportTest.java
+++ b/fhir-server/src/test/java/au/csiro/pathling/test/integration/modification/ImportTest.java
@@ -31,10 +31,10 @@
import au.csiro.pathling.update.ImportExecutor;
import ca.uhn.fhir.rest.server.exceptions.BaseServerResponseException;
import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
+import jakarta.annotation.Nonnull;
import java.net.URL;
import java.util.Arrays;
import java.util.List;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.RowFactory;
diff --git a/fhir-server/src/test/java/au/csiro/pathling/test/integration/modification/ModificationTest.java b/fhir-server/src/test/java/au/csiro/pathling/test/integration/modification/ModificationTest.java
index 07e36a62fe..267183a6e6 100644
--- a/fhir-server/src/test/java/au/csiro/pathling/test/integration/modification/ModificationTest.java
+++ b/fhir-server/src/test/java/au/csiro/pathling/test/integration/modification/ModificationTest.java
@@ -26,12 +26,12 @@
import au.csiro.pathling.test.helpers.TestHelpers;
import au.csiro.pathling.test.integration.IntegrationTest;
import ca.uhn.fhir.parser.IParser;
+import jakarta.annotation.Nonnull;
import java.io.File;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.nio.file.Path;
-import javax.annotation.Nonnull;
import lombok.extern.slf4j.Slf4j;
import org.apache.spark.sql.SparkSession;
import org.hl7.fhir.r4.model.Bundle;
diff --git a/fhir-server/src/test/java/au/csiro/pathling/test/system/DockerImageTest.java b/fhir-server/src/test/java/au/csiro/pathling/test/system/DockerImageTest.java
index 7274310c3f..f5a6430440 100644
--- a/fhir-server/src/test/java/au/csiro/pathling/test/system/DockerImageTest.java
+++ b/fhir-server/src/test/java/au/csiro/pathling/test/system/DockerImageTest.java
@@ -42,6 +42,8 @@
import com.google.gson.FieldNamingPolicy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.io.Closeable;
import java.io.File;
import java.io.FileFilter;
@@ -54,8 +56,6 @@
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.TimeUnit;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import lombok.Data;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
diff --git a/fhir-server/src/test/java/au/csiro/pathling/update/BatchProviderTest.java b/fhir-server/src/test/java/au/csiro/pathling/update/BatchProviderTest.java
index 7b88528404..7b567c9fd0 100644
--- a/fhir-server/src/test/java/au/csiro/pathling/update/BatchProviderTest.java
+++ b/fhir-server/src/test/java/au/csiro/pathling/update/BatchProviderTest.java
@@ -29,8 +29,8 @@
import au.csiro.pathling.errors.InvalidUserInputError;
import au.csiro.pathling.io.CacheableDatabase;
import ca.uhn.fhir.parser.IParser;
+import jakarta.annotation.Nonnull;
import java.util.List;
-import javax.annotation.Nonnull;
import org.hl7.fhir.instance.model.api.IBaseResource;
import org.hl7.fhir.r4.model.Bundle;
import org.hl7.fhir.r4.model.Enumerations.ResourceType;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/QueryExecutor.java b/fhirpath/src/main/java/au/csiro/pathling/QueryExecutor.java
index 5ba0d3a9f6..ad42807cc6 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/QueryExecutor.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/QueryExecutor.java
@@ -46,8 +46,8 @@
import java.util.function.BinaryOperator;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import lombok.Getter;
import lombok.Value;
import org.apache.spark.sql.Column;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/QueryHelpers.java b/fhirpath/src/main/java/au/csiro/pathling/QueryHelpers.java
index 84f4a13478..3c51b9fce9 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/QueryHelpers.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/QueryHelpers.java
@@ -41,7 +41,7 @@
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import javax.annotation.Nonnull;
+import jakarta.annotation.Nonnull;
import lombok.Getter;
import lombok.Value;
import org.apache.spark.sql.Column;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/aggregate/AggregateQueryExecutor.java b/fhirpath/src/main/java/au/csiro/pathling/aggregate/AggregateQueryExecutor.java
index 87a242148b..45da995468 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/aggregate/AggregateQueryExecutor.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/aggregate/AggregateQueryExecutor.java
@@ -41,7 +41,7 @@
import java.util.Optional;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import javax.annotation.Nonnull;
+import jakarta.annotation.Nonnull;
import lombok.Value;
import lombok.extern.slf4j.Slf4j;
import org.apache.spark.sql.Column;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/aggregate/AggregateRequest.java b/fhirpath/src/main/java/au/csiro/pathling/aggregate/AggregateRequest.java
index 07ab5d9c59..417e9d1417 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/aggregate/AggregateRequest.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/aggregate/AggregateRequest.java
@@ -24,7 +24,7 @@
import au.csiro.pathling.utilities.Lists;
import java.util.List;
import java.util.Optional;
-import javax.annotation.Nonnull;
+import jakarta.annotation.Nonnull;
import lombok.Value;
import org.hl7.fhir.r4.model.Enumerations.ResourceType;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/config/QueryConfiguration.java b/fhirpath/src/main/java/au/csiro/pathling/config/QueryConfiguration.java
index b4b8a47be5..31c08918b4 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/config/QueryConfiguration.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/config/QueryConfiguration.java
@@ -17,11 +17,10 @@
package au.csiro.pathling.config;
+import javax.validation.constraints.NotNull;
import lombok.Builder;
import lombok.Data;
-import javax.validation.constraints.NotNull;
-
/**
* Represents configuration that controls the behaviour of query executors.
* @author Piotr Szul
diff --git a/fhirpath/src/main/java/au/csiro/pathling/config/StorageConfiguration.java b/fhirpath/src/main/java/au/csiro/pathling/config/StorageConfiguration.java
index 210c905873..bd3fa3f968 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/config/StorageConfiguration.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/config/StorageConfiguration.java
@@ -17,7 +17,7 @@
package au.csiro.pathling.config;
-import javax.annotation.Nonnull;
+import jakarta.annotation.Nonnull;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/extract/ExtractQueryExecutor.java b/fhirpath/src/main/java/au/csiro/pathling/extract/ExtractQueryExecutor.java
index 9105f096f3..eecdfcf0fc 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/extract/ExtractQueryExecutor.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/extract/ExtractQueryExecutor.java
@@ -15,6 +15,7 @@
import au.csiro.pathling.io.source.DataSource;
import au.csiro.pathling.terminology.TerminologyServiceFactory;
import ca.uhn.fhir.context.FhirContext;
+import jakarta.annotation.Nonnull;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
@@ -26,7 +27,6 @@
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
-import javax.annotation.Nonnull;
import lombok.Value;
import lombok.extern.slf4j.Slf4j;
import org.apache.spark.sql.Column;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/extract/ExtractRequest.java b/fhirpath/src/main/java/au/csiro/pathling/extract/ExtractRequest.java
index e2f27b80a1..303d50b6bc 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/extract/ExtractRequest.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/extract/ExtractRequest.java
@@ -22,9 +22,9 @@
import static au.csiro.pathling.utilities.Preconditions.checkUserInput;
import au.csiro.pathling.query.ExpressionWithLabel;
+import jakarta.annotation.Nonnull;
import java.util.List;
import java.util.Optional;
-import javax.annotation.Nonnull;
import lombok.Value;
import org.hl7.fhir.r4.model.Enumerations.ResourceType;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/CalendarDurationUtils.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/CalendarDurationUtils.java
index 683e9a92c1..a767fe9bcf 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/CalendarDurationUtils.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/CalendarDurationUtils.java
@@ -20,12 +20,12 @@
import static au.csiro.pathling.utilities.Preconditions.checkUserInput;
import com.google.common.collect.ImmutableMap;
+import jakarta.annotation.Nonnull;
import java.math.BigDecimal;
import java.util.Calendar;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import javax.annotation.Nonnull;
import org.hl7.fhir.r4.model.Quantity;
/**
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/Comparable.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/Comparable.java
index ab6bf57b1e..5ad56a28a7 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/Comparable.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/Comparable.java
@@ -17,8 +17,8 @@
package au.csiro.pathling.fhirpath;
+import jakarta.annotation.Nonnull;
import java.util.function.Function;
-import javax.annotation.Nonnull;
import org.apache.commons.lang3.function.TriFunction;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.functions;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/FhirPath.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/FhirPath.java
index f92f119d11..85fb5330af 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/FhirPath.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/FhirPath.java
@@ -17,8 +17,8 @@
package au.csiro.pathling.fhirpath;
+import jakarta.annotation.Nonnull;
import java.util.Optional;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/FunctionInput.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/FunctionInput.java
index d5c75f31e2..cb619c384c 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/FunctionInput.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/FunctionInput.java
@@ -18,7 +18,7 @@
package au.csiro.pathling.fhirpath;
import au.csiro.pathling.fhirpath.parser.ParserContext;
-import javax.annotation.Nonnull;
+import jakarta.annotation.Nonnull;
import lombok.Getter;
/**
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/Materializable.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/Materializable.java
index 66fea8712b..3cea15ad61 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/Materializable.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/Materializable.java
@@ -17,8 +17,8 @@
package au.csiro.pathling.fhirpath;
+import jakarta.annotation.Nonnull;
import java.util.Optional;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Row;
import org.hl7.fhir.r4.model.Type;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/NonLiteralPath.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/NonLiteralPath.java
index f0925d664c..5db3e3aad6 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/NonLiteralPath.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/NonLiteralPath.java
@@ -32,11 +32,11 @@
import au.csiro.pathling.fhirpath.element.ElementDefinition;
import au.csiro.pathling.fhirpath.function.NamedFunction;
import au.csiro.pathling.fhirpath.literal.NullLiteralPath;
+import jakarta.annotation.Nonnull;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.stream.Stream;
-import javax.annotation.Nonnull;
import lombok.Getter;
import org.apache.commons.lang3.tuple.MutablePair;
import org.apache.spark.sql.Column;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/Numeric.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/Numeric.java
index c454369302..bbe815b67c 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/Numeric.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/Numeric.java
@@ -17,9 +17,9 @@
package au.csiro.pathling.fhirpath;
+import jakarta.annotation.Nonnull;
import java.util.function.BiFunction;
import java.util.function.Function;
-import javax.annotation.Nonnull;
import lombok.Getter;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Dataset;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/Orderable.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/Orderable.java
index 6ecdf85ba7..b412d6729e 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/Orderable.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/Orderable.java
@@ -19,8 +19,7 @@
import static au.csiro.pathling.utilities.Preconditions.checkState;
-import au.csiro.pathling.utilities.Preconditions;
-import javax.annotation.Nonnull;
+import jakarta.annotation.Nonnull;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/Referrer.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/Referrer.java
index 5f6af789a3..bcc905e417 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/Referrer.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/Referrer.java
@@ -20,7 +20,7 @@
import static org.apache.spark.sql.functions.concat;
import static org.apache.spark.sql.functions.lit;
-import javax.annotation.Nonnull;
+import jakarta.annotation.Nonnull;
import org.apache.spark.sql.Column;
/**
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/ResourceDefinition.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/ResourceDefinition.java
index b3ee66de33..959488a021 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/ResourceDefinition.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/ResourceDefinition.java
@@ -20,9 +20,9 @@
import au.csiro.pathling.fhirpath.element.ElementDefinition;
import ca.uhn.fhir.context.BaseRuntimeChildDefinition;
import ca.uhn.fhir.context.RuntimeResourceDefinition;
+import jakarta.annotation.Nonnull;
import java.util.Objects;
import java.util.Optional;
-import javax.annotation.Nonnull;
import lombok.Getter;
import org.hl7.fhir.instance.model.api.IBaseResource;
import org.hl7.fhir.r4.model.Enumerations.ResourceType;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/ResourcePath.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/ResourcePath.java
index aa0c1d15b4..ea54a42735 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/ResourcePath.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/ResourcePath.java
@@ -31,6 +31,7 @@
import au.csiro.pathling.io.source.DataSource;
import ca.uhn.fhir.context.FhirContext;
import ca.uhn.fhir.context.RuntimeResourceDefinition;
+import jakarta.annotation.Nonnull;
import java.util.EnumSet;
import java.util.Map;
import java.util.Optional;
@@ -38,7 +39,6 @@
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import javax.annotation.Nonnull;
import lombok.Getter;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Dataset;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/Temporal.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/Temporal.java
index faec3e1bd6..ca02a4f5ce 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/Temporal.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/Temporal.java
@@ -20,9 +20,9 @@
import au.csiro.pathling.fhirpath.Numeric.MathOperation;
import au.csiro.pathling.fhirpath.element.ElementPath;
import au.csiro.pathling.fhirpath.literal.QuantityLiteralPath;
+import jakarta.annotation.Nonnull;
import java.util.Optional;
import java.util.function.Function;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
@@ -40,8 +40,8 @@ public interface Temporal {
/**
* Gets a function that can take the {@link QuantityLiteralPath} representing a time duration and
* return a {@link FhirPath} that contains the result of date arithmetic operation for this path
- * and the provided duration. The type of operation is controlled by supplying a {@link
- * MathOperation}.
+ * and the provided duration. The type of operation is controlled by supplying a
+ * {@link MathOperation}.
*
* @param operation The {@link MathOperation} type to retrieve a result for
* @param dataset The {@link Dataset} to use within the result
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/TerminologyUtils.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/TerminologyUtils.java
index efcd4f86ce..4bc8893faa 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/TerminologyUtils.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/TerminologyUtils.java
@@ -21,8 +21,7 @@
import au.csiro.pathling.fhirpath.element.ElementPath;
import au.csiro.pathling.fhirpath.literal.CodingLiteralPath;
-import javax.annotation.Nonnull;
-import au.csiro.pathling.utilities.Preconditions;
+import jakarta.annotation.Nonnull;
import org.apache.spark.sql.Column;
import org.hl7.fhir.r4.model.Enumerations.FHIRDefinedType;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/UntypedResourcePath.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/UntypedResourcePath.java
index 437041ca58..7c4a717ea3 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/UntypedResourcePath.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/UntypedResourcePath.java
@@ -23,8 +23,8 @@
import au.csiro.pathling.errors.InvalidUserInputError;
import au.csiro.pathling.fhirpath.element.ElementDefinition;
import au.csiro.pathling.fhirpath.element.ReferencePath;
+import jakarta.annotation.Nonnull;
import java.util.Optional;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/comparison/CodingSqlComparator.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/comparison/CodingSqlComparator.java
index 45c65a9634..00f9ef7e5e 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/comparison/CodingSqlComparator.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/comparison/CodingSqlComparator.java
@@ -23,10 +23,10 @@
import au.csiro.pathling.fhirpath.Comparable;
import au.csiro.pathling.fhirpath.Comparable.ComparisonOperation;
import au.csiro.pathling.fhirpath.Comparable.SqlComparator;
+import jakarta.annotation.Nonnull;
import java.util.Arrays;
import java.util.List;
import java.util.function.Function;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.functions;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/comparison/DateTimeSqlComparator.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/comparison/DateTimeSqlComparator.java
index da374584a9..3d64b0577b 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/comparison/DateTimeSqlComparator.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/comparison/DateTimeSqlComparator.java
@@ -27,8 +27,8 @@
import au.csiro.pathling.sql.dates.datetime.DateTimeGreaterThanOrEqualToFunction;
import au.csiro.pathling.sql.dates.datetime.DateTimeLessThanFunction;
import au.csiro.pathling.sql.dates.datetime.DateTimeLessThanOrEqualToFunction;
+import jakarta.annotation.Nonnull;
import java.util.function.Function;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.Column;
/**
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/comparison/QuantitySqlComparator.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/comparison/QuantitySqlComparator.java
index 50eb1b4a97..59195f6249 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/comparison/QuantitySqlComparator.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/comparison/QuantitySqlComparator.java
@@ -24,9 +24,9 @@
import au.csiro.pathling.fhirpath.Comparable.SqlComparator;
import au.csiro.pathling.fhirpath.encoding.QuantityEncoding;
import au.csiro.pathling.sql.types.FlexiDecimal;
+import jakarta.annotation.Nonnull;
import java.util.function.BiFunction;
import java.util.function.Function;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.Column;
/**
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/BooleanPath.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/BooleanPath.java
index cffd7cb610..330e81fc3f 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/BooleanPath.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/BooleanPath.java
@@ -24,9 +24,9 @@
import au.csiro.pathling.fhirpath.literal.BooleanLiteralPath;
import au.csiro.pathling.fhirpath.literal.NullLiteralPath;
import com.google.common.collect.ImmutableSet;
+import jakarta.annotation.Nonnull;
import java.util.Optional;
import java.util.function.Function;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/CodingPath.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/CodingPath.java
index c55cc130df..cef8b606ac 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/CodingPath.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/CodingPath.java
@@ -28,9 +28,9 @@
import au.csiro.pathling.fhirpath.literal.NullLiteralPath;
import au.csiro.pathling.sql.misc.CodingToLiteral;
import com.google.common.collect.ImmutableSet;
+import jakarta.annotation.Nonnull;
import java.util.Optional;
import java.util.function.Function;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
@@ -98,7 +98,7 @@ public static Optional valueFromRow(@Nonnull final Row row, final int co
public static ImmutableSet> getComparableTypes() {
return COMPARABLE_TYPES;
}
-
+
@Override
@Nonnull
public Function getComparison(@Nonnull final ComparisonOperation operation) {
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/DatePath.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/DatePath.java
index a026a885a6..092be265b8 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/DatePath.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/DatePath.java
@@ -31,10 +31,10 @@
import au.csiro.pathling.fhirpath.literal.QuantityLiteralPath;
import au.csiro.pathling.sql.dates.date.DateAddDurationFunction;
import au.csiro.pathling.sql.dates.date.DateSubtractDurationFunction;
+import jakarta.annotation.Nonnull;
import java.util.Optional;
import java.util.function.BiFunction;
import java.util.function.Function;
-import javax.annotation.Nonnull;
import lombok.extern.slf4j.Slf4j;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Dataset;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/DateTimePath.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/DateTimePath.java
index 8b42db521a..c274f709a3 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/DateTimePath.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/DateTimePath.java
@@ -33,9 +33,9 @@
import au.csiro.pathling.sql.dates.datetime.DateTimeAddDurationFunction;
import au.csiro.pathling.sql.dates.datetime.DateTimeSubtractDurationFunction;
import com.google.common.collect.ImmutableSet;
+import jakarta.annotation.Nonnull;
import java.util.Optional;
import java.util.function.Function;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/DecimalPath.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/DecimalPath.java
index 00fa11d3a3..189389bc2d 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/DecimalPath.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/DecimalPath.java
@@ -26,11 +26,11 @@
import au.csiro.pathling.fhirpath.Numeric;
import au.csiro.pathling.fhirpath.ResourcePath;
import au.csiro.pathling.fhirpath.literal.DecimalLiteralPath;
+import jakarta.annotation.Nonnull;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Optional;
import java.util.function.Function;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/ElementDefinition.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/ElementDefinition.java
index 805b1419b1..49040e5571 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/ElementDefinition.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/ElementDefinition.java
@@ -23,12 +23,12 @@
import ca.uhn.fhir.context.RuntimeChildAny;
import ca.uhn.fhir.context.RuntimeChildResourceDefinition;
import com.google.common.collect.ImmutableMap;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.util.Collections;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import org.hl7.fhir.instance.model.api.IBase;
import org.hl7.fhir.r4.model.BackboneElement;
import org.hl7.fhir.r4.model.Enumerations.FHIRDefinedType;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/ElementPath.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/ElementPath.java
index 2306370024..8d709a0967 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/ElementPath.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/ElementPath.java
@@ -24,10 +24,10 @@
import au.csiro.pathling.fhirpath.FhirPath;
import au.csiro.pathling.fhirpath.NonLiteralPath;
import au.csiro.pathling.fhirpath.ResourcePath;
+import jakarta.annotation.Nonnull;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.Optional;
-import javax.annotation.Nonnull;
import lombok.AccessLevel;
import lombok.Getter;
import org.apache.spark.sql.Column;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/ExtensionPath.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/ExtensionPath.java
index cac4a82f31..5bc086c58c 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/ExtensionPath.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/ExtensionPath.java
@@ -19,11 +19,11 @@
import au.csiro.pathling.encoders.ExtensionSupport;
import au.csiro.pathling.fhirpath.ResourcePath;
+import jakarta.annotation.Nonnull;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/IntegerPath.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/IntegerPath.java
index e6bdd83df2..b9fd7d610a 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/IntegerPath.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/IntegerPath.java
@@ -28,9 +28,9 @@
import au.csiro.pathling.fhirpath.literal.IntegerLiteralPath;
import au.csiro.pathling.fhirpath.literal.NullLiteralPath;
import com.google.common.collect.ImmutableSet;
+import jakarta.annotation.Nonnull;
import java.util.Optional;
import java.util.function.Function;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
@@ -151,8 +151,8 @@ public Column getNumericContextColumn() {
* @param operation The type of {@link au.csiro.pathling.fhirpath.Numeric.MathOperation}
* @param expression The FHIRPath expression to use in the result
* @param dataset The {@link Dataset} to use in the result
- * @return A {@link Function} that takes a {@link Numeric} as a parameter, and returns a {@link
- * NonLiteralPath}
+ * @return A {@link Function} that takes a {@link Numeric} as a parameter, and returns a
+ * {@link NonLiteralPath}
*/
@Nonnull
public static Function buildMathOperation(@Nonnull final Numeric source,
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/QuantityPath.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/QuantityPath.java
index 8069d982fb..644213e7b7 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/QuantityPath.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/QuantityPath.java
@@ -31,10 +31,10 @@
import au.csiro.pathling.fhirpath.literal.QuantityLiteralPath;
import au.csiro.pathling.sql.types.FlexiDecimal;
import com.google.common.collect.ImmutableSet;
+import jakarta.annotation.Nonnull;
import java.util.Optional;
import java.util.function.BiFunction;
import java.util.function.Function;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/ReferenceDefinition.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/ReferenceDefinition.java
index 264ad24f33..ed54b0df0b 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/ReferenceDefinition.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/ReferenceDefinition.java
@@ -20,12 +20,11 @@
import static java.util.Objects.requireNonNull;
import ca.uhn.fhir.context.RuntimeChildResourceDefinition;
+import jakarta.annotation.Nonnull;
import java.lang.reflect.InvocationTargetException;
import java.util.List;
-import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
-import javax.annotation.Nonnull;
import org.hl7.fhir.instance.model.api.IBaseResource;
import org.hl7.fhir.r4.model.Enumerations;
import org.hl7.fhir.r4.model.Enumerations.ResourceType;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/ReferenceExtensionDefinition.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/ReferenceExtensionDefinition.java
index bd42e55eed..b5a3098a86 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/ReferenceExtensionDefinition.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/ReferenceExtensionDefinition.java
@@ -18,8 +18,8 @@
package au.csiro.pathling.fhirpath.element;
import ca.uhn.fhir.context.BaseRuntimeChildDefinition;
+import jakarta.annotation.Nonnull;
import java.util.Set;
-import javax.annotation.Nonnull;
import org.hl7.fhir.r4.model.Enumerations.ResourceType;
/**
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/ReferencePath.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/ReferencePath.java
index b5219bdd7d..b3a03e6078 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/ReferencePath.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/ReferencePath.java
@@ -19,10 +19,10 @@
import au.csiro.pathling.fhirpath.Referrer;
import au.csiro.pathling.fhirpath.ResourcePath;
+import jakarta.annotation.Nonnull;
import java.util.Collections;
import java.util.Optional;
import java.util.Set;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/StringPath.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/StringPath.java
index 0f936d7bc7..8bae112fc3 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/StringPath.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/StringPath.java
@@ -24,9 +24,9 @@
import au.csiro.pathling.fhirpath.literal.NullLiteralPath;
import au.csiro.pathling.fhirpath.literal.StringLiteralPath;
import com.google.common.collect.ImmutableSet;
+import jakarta.annotation.Nonnull;
import java.util.Optional;
import java.util.function.Function;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/TimePath.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/TimePath.java
index 78c82e7a8a..2683650587 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/TimePath.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/TimePath.java
@@ -24,9 +24,9 @@
import au.csiro.pathling.fhirpath.literal.NullLiteralPath;
import au.csiro.pathling.fhirpath.literal.TimeLiteralPath;
import com.google.common.collect.ImmutableSet;
+import jakarta.annotation.Nonnull;
import java.util.Optional;
import java.util.function.Function;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/encoding/QuantityEncoding.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/encoding/QuantityEncoding.java
index feba7b239e..d4e5e615c6 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/encoding/QuantityEncoding.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/encoding/QuantityEncoding.java
@@ -27,12 +27,12 @@
import au.csiro.pathling.sql.types.FlexiDecimal;
import au.csiro.pathling.sql.types.FlexiDecimalSupport;
import com.google.common.collect.ImmutableMap;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Map;
import java.util.Optional;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.RowFactory;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/AggregateFunction.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/AggregateFunction.java
index 6716c06953..400192d1e8 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/AggregateFunction.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/AggregateFunction.java
@@ -26,6 +26,7 @@
import au.csiro.pathling.fhirpath.NonLiteralPath;
import au.csiro.pathling.fhirpath.element.ElementPath;
import au.csiro.pathling.fhirpath.parser.ParserContext;
+import jakarta.annotation.Nonnull;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
@@ -34,7 +35,6 @@
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/Arguments.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/Arguments.java
index 28d624e4b9..231d36f5b1 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/Arguments.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/Arguments.java
@@ -21,10 +21,10 @@
import au.csiro.pathling.fhirpath.FhirPath;
import au.csiro.pathling.fhirpath.literal.LiteralPath;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.util.List;
import java.util.Optional;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import org.hl7.fhir.r4.model.Type;
/**
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/BooleansTestFunction.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/BooleansTestFunction.java
index 8b2c16b63d..41d9aad77a 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/BooleansTestFunction.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/BooleansTestFunction.java
@@ -28,8 +28,8 @@
import au.csiro.pathling.fhirpath.FhirPath;
import au.csiro.pathling.fhirpath.NonLiteralPath;
import au.csiro.pathling.fhirpath.element.BooleanPath;
+import jakarta.annotation.Nonnull;
import java.util.function.UnaryOperator;
-import javax.annotation.Nonnull;
import lombok.AllArgsConstructor;
import lombok.Getter;
import org.apache.spark.sql.Column;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/CountFunction.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/CountFunction.java
index d1b236d66e..10f3842af7 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/CountFunction.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/CountFunction.java
@@ -23,8 +23,8 @@
import au.csiro.pathling.fhirpath.FhirPath;
import au.csiro.pathling.fhirpath.NonLiteralPath;
+import jakarta.annotation.Nonnull;
import java.util.function.Function;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.functions;
import org.hl7.fhir.r4.model.Enumerations.FHIRDefinedType;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/EmptyFunction.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/EmptyFunction.java
index 2d278aa457..4b485b5283 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/EmptyFunction.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/EmptyFunction.java
@@ -23,8 +23,8 @@
import au.csiro.pathling.fhirpath.FhirPath;
import au.csiro.pathling.fhirpath.NonLiteralPath;
import au.csiro.pathling.fhirpath.element.ElementPath;
+import jakarta.annotation.Nonnull;
import java.util.Optional;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/ExistsFunction.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/ExistsFunction.java
index cdd333a039..bfb1a409cb 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/ExistsFunction.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/ExistsFunction.java
@@ -24,8 +24,8 @@
import au.csiro.pathling.fhirpath.FhirPath;
import au.csiro.pathling.fhirpath.NonLiteralPath;
import au.csiro.pathling.fhirpath.element.BooleanPath;
+import jakarta.annotation.Nonnull;
import java.util.Collections;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.Column;
/**
@@ -58,7 +58,7 @@ public FhirPath invoke(@Nonnull final NamedFunctionInput input) {
final FhirPath argument = input.getArguments().get(0);
checkUserInput(argument.isSingular() && argument instanceof BooleanPath,
"Argument to exists function must be a singular Boolean: " + argument.getExpression());
-
+
// If there is an argument, first invoke the `where` function.
final NonLiteralPath whereResult = (NonLiteralPath) new WhereFunction().invoke(input);
// Then invoke the `exists` function on the result, with no arguments.
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/ExtensionFunction.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/ExtensionFunction.java
index b8f10010b1..a2fd3127cf 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/ExtensionFunction.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/ExtensionFunction.java
@@ -30,8 +30,8 @@
import au.csiro.pathling.fhirpath.operator.PathTraversalInput;
import au.csiro.pathling.fhirpath.operator.PathTraversalOperator;
import au.csiro.pathling.fhirpath.parser.ParserContext;
+import jakarta.annotation.Nonnull;
import java.util.Collections;
-import javax.annotation.Nonnull;
/**
* A function that returns the extensions of the current element that match a given url.
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/FirstFunction.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/FirstFunction.java
index f868a0ef87..9244d0cf78 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/FirstFunction.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/FirstFunction.java
@@ -23,7 +23,7 @@
import au.csiro.pathling.fhirpath.FhirPath;
import au.csiro.pathling.fhirpath.NonLiteralPath;
-import javax.annotation.Nonnull;
+import jakarta.annotation.Nonnull;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/IifFunction.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/IifFunction.java
index d383b7ca06..3418fafcb6 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/IifFunction.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/IifFunction.java
@@ -26,8 +26,8 @@
import au.csiro.pathling.fhirpath.FhirPath;
import au.csiro.pathling.fhirpath.NonLiteralPath;
import au.csiro.pathling.fhirpath.element.BooleanPath;
+import jakarta.annotation.Nonnull;
import java.util.Arrays;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/NamedFunction.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/NamedFunction.java
index ab65211224..bc10e2e3a8 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/NamedFunction.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/NamedFunction.java
@@ -24,11 +24,16 @@
import static au.csiro.pathling.utilities.Preconditions.checkUserInput;
import au.csiro.pathling.fhirpath.FhirPath;
-import au.csiro.pathling.fhirpath.function.terminology.*;
+import au.csiro.pathling.fhirpath.function.terminology.DesignationFunction;
+import au.csiro.pathling.fhirpath.function.terminology.DisplayFunction;
+import au.csiro.pathling.fhirpath.function.terminology.MemberOfFunction;
+import au.csiro.pathling.fhirpath.function.terminology.PropertyFunction;
+import au.csiro.pathling.fhirpath.function.terminology.SubsumesFunction;
+import au.csiro.pathling.fhirpath.function.terminology.TranslateFunction;
import com.google.common.collect.ImmutableMap;
+import jakarta.annotation.Nonnull;
import java.util.Map;
import java.util.stream.Collectors;
-import javax.annotation.Nonnull;
/**
* Represents a named function in FHIRPath.
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/NamedFunctionInput.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/NamedFunctionInput.java
index b75bc986e8..3fce288827 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/NamedFunctionInput.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/NamedFunctionInput.java
@@ -21,9 +21,9 @@
import au.csiro.pathling.fhirpath.FunctionInput;
import au.csiro.pathling.fhirpath.NonLiteralPath;
import au.csiro.pathling.fhirpath.parser.ParserContext;
+import jakarta.annotation.Nonnull;
import java.util.List;
import java.util.Optional;
-import javax.annotation.Nonnull;
import lombok.Getter;
/**
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/NotFunction.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/NotFunction.java
index dc9b1fa257..f5f4d68141 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/NotFunction.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/NotFunction.java
@@ -26,8 +26,8 @@
import au.csiro.pathling.fhirpath.NonLiteralPath;
import au.csiro.pathling.fhirpath.element.BooleanPath;
import au.csiro.pathling.fhirpath.element.ElementPath;
+import jakarta.annotation.Nonnull;
import java.util.Optional;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.Column;
import org.hl7.fhir.r4.model.Enumerations.FHIRDefinedType;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/OfTypeFunction.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/OfTypeFunction.java
index 4eeb690cff..757fbf6142 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/OfTypeFunction.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/OfTypeFunction.java
@@ -22,7 +22,7 @@
import au.csiro.pathling.fhirpath.FhirPath;
import au.csiro.pathling.fhirpath.ResourcePath;
import au.csiro.pathling.fhirpath.UntypedResourcePath;
-import javax.annotation.Nonnull;
+import jakarta.annotation.Nonnull;
/**
* A function filters items in the input collection to only those that are of the given type.
@@ -52,7 +52,8 @@ public FhirPath invoke(@Nonnull final NamedFunctionInput input) {
"Argument to ofType function must be a resource type: " + argumentPath.getExpression());
final ResourcePath resourcePath = (ResourcePath) argumentPath;
- return ResolveFunction.resolveMonomorphicReference(inputPath, input.getContext().getDataSource(),
+ return ResolveFunction.resolveMonomorphicReference(inputPath,
+ input.getContext().getDataSource(),
input.getContext().getFhirContext(), resourcePath.getResourceType(), expression,
input.getContext());
}
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/ResolveFunction.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/ResolveFunction.java
index 8f7a23d530..1539ccdf13 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/ResolveFunction.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/ResolveFunction.java
@@ -31,9 +31,9 @@
import au.csiro.pathling.fhirpath.parser.ParserContext;
import au.csiro.pathling.io.source.DataSource;
import ca.uhn.fhir.context.FhirContext;
+import jakarta.annotation.Nonnull;
import java.util.Optional;
import java.util.Set;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/ReverseResolveFunction.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/ReverseResolveFunction.java
index 4c88cfb086..baca5383c0 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/ReverseResolveFunction.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/ReverseResolveFunction.java
@@ -30,9 +30,9 @@
import au.csiro.pathling.fhirpath.NonLiteralPath;
import au.csiro.pathling.fhirpath.ResourcePath;
import au.csiro.pathling.fhirpath.element.ReferencePath;
+import jakarta.annotation.Nonnull;
import java.util.Optional;
import java.util.Set;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/SumFunction.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/SumFunction.java
index fe3477b315..b01677eab8 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/SumFunction.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/SumFunction.java
@@ -25,7 +25,7 @@
import au.csiro.pathling.fhirpath.FhirPath;
import au.csiro.pathling.fhirpath.NonLiteralPath;
import au.csiro.pathling.fhirpath.Numeric;
-import javax.annotation.Nonnull;
+import jakarta.annotation.Nonnull;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/UntilFunction.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/UntilFunction.java
index 3c7aa694d1..9de803c3de 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/UntilFunction.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/UntilFunction.java
@@ -33,12 +33,12 @@
import au.csiro.pathling.fhirpath.literal.DateTimeLiteralPath;
import au.csiro.pathling.fhirpath.literal.StringLiteralPath;
import au.csiro.pathling.sql.misc.TemporalDifferenceFunction;
-import javax.annotation.Nonnull;
+import jakarta.annotation.Nonnull;
+import java.util.Optional;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.hl7.fhir.r4.model.Enumerations.FHIRDefinedType;
-import java.util.Optional;
/**
* This function computes the time interval (duration) between two paths representing dates or dates
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/WhereFunction.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/WhereFunction.java
index 4dd79cfc62..f6056dadd9 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/WhereFunction.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/WhereFunction.java
@@ -26,7 +26,7 @@
import au.csiro.pathling.fhirpath.FhirPath;
import au.csiro.pathling.fhirpath.NonLiteralPath;
import au.csiro.pathling.fhirpath.element.BooleanPath;
-import javax.annotation.Nonnull;
+import jakarta.annotation.Nonnull;
import org.apache.spark.sql.Column;
/**
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/terminology/DesignationFunction.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/terminology/DesignationFunction.java
index 5a69319f5c..bfcf2ab7dd 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/terminology/DesignationFunction.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/terminology/DesignationFunction.java
@@ -29,10 +29,10 @@
import au.csiro.pathling.fhirpath.literal.CodingLiteralPath;
import au.csiro.pathling.fhirpath.literal.StringLiteralPath;
import au.csiro.pathling.fhirpath.parser.ParserContext;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.util.List;
import java.util.Optional;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import org.apache.commons.lang3.tuple.MutablePair;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Dataset;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/terminology/DisplayFunction.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/terminology/DisplayFunction.java
index 33bda0d881..77c0bdeede 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/terminology/DisplayFunction.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/terminology/DisplayFunction.java
@@ -28,8 +28,8 @@
import au.csiro.pathling.fhirpath.function.NamedFunctionInput;
import au.csiro.pathling.fhirpath.literal.StringLiteralPath;
import au.csiro.pathling.fhirpath.parser.ParserContext;
+import jakarta.annotation.Nonnull;
import java.util.Optional;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/terminology/MemberOfFunction.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/terminology/MemberOfFunction.java
index e6194e6880..f9d996eba4 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/terminology/MemberOfFunction.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/terminology/MemberOfFunction.java
@@ -28,11 +28,9 @@
import au.csiro.pathling.fhirpath.function.NamedFunctionInput;
import au.csiro.pathling.fhirpath.literal.StringLiteralPath;
import au.csiro.pathling.fhirpath.parser.ParserContext;
-import javax.annotation.Nonnull;
+import jakarta.annotation.Nonnull;
import lombok.extern.slf4j.Slf4j;
import org.apache.spark.sql.Column;
-import org.apache.spark.sql.Dataset;
-import org.apache.spark.sql.Row;
import org.hl7.fhir.r4.model.Enumerations.FHIRDefinedType;
/**
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/terminology/PropertyFunction.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/terminology/PropertyFunction.java
index dc77677d12..9f715e59ff 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/terminology/PropertyFunction.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/terminology/PropertyFunction.java
@@ -30,9 +30,9 @@
import au.csiro.pathling.fhirpath.literal.StringLiteralPath;
import au.csiro.pathling.fhirpath.parser.ParserContext;
import au.csiro.pathling.sql.udf.PropertyUdf;
+import jakarta.annotation.Nonnull;
import java.util.List;
import java.util.Optional;
-import javax.annotation.Nonnull;
import org.apache.commons.lang3.tuple.MutablePair;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Dataset;
@@ -70,7 +70,7 @@ public FhirPath invoke(@Nonnull final NamedFunctionInput input) {
final Dataset dataset = inputPath.getDataset();
final Column propertyValues = property_of(inputPath.getValueColumn(), propertyCode,
propertyType, preferredLanguage.map(StringType::getValue).orElse(null));
-
+
// // The result is an array of property values per each input element, which we now
// // need to explode in the same way as for path traversal, creating unique element ids.
final MutablePair valueAndEidColumns = new MutablePair<>();
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/terminology/SubsumesFunction.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/terminology/SubsumesFunction.java
index 53cacfd8a7..dad6ce6c95 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/terminology/SubsumesFunction.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/terminology/SubsumesFunction.java
@@ -22,7 +22,6 @@
import static au.csiro.pathling.fhirpath.function.NamedFunction.expressionFromInput;
import static au.csiro.pathling.sql.Terminology.subsumed_by;
import static au.csiro.pathling.sql.Terminology.subsumes;
-import static au.csiro.pathling.utilities.Preconditions.checkPresent;
import static au.csiro.pathling.utilities.Preconditions.checkUserInput;
import static org.apache.spark.sql.functions.array;
import static org.apache.spark.sql.functions.col;
@@ -30,15 +29,13 @@
import static org.apache.spark.sql.functions.explode_outer;
import static org.apache.spark.sql.functions.when;
-import au.csiro.pathling.terminology.TerminologyServiceFactory;
import au.csiro.pathling.fhirpath.FhirPath;
import au.csiro.pathling.fhirpath.NonLiteralPath;
import au.csiro.pathling.fhirpath.element.ElementPath;
import au.csiro.pathling.fhirpath.function.NamedFunction;
import au.csiro.pathling.fhirpath.function.NamedFunctionInput;
import au.csiro.pathling.fhirpath.parser.ParserContext;
-import au.csiro.pathling.terminology.TerminologyFunctions;
-import javax.annotation.Nonnull;
+import jakarta.annotation.Nonnull;
import lombok.extern.slf4j.Slf4j;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Dataset;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/terminology/TranslateFunction.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/terminology/TranslateFunction.java
index ca971c8eb6..469716b8fa 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/terminology/TranslateFunction.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/terminology/TranslateFunction.java
@@ -34,10 +34,10 @@
import au.csiro.pathling.fhirpath.literal.BooleanLiteralPath;
import au.csiro.pathling.fhirpath.literal.StringLiteralPath;
import au.csiro.pathling.fhirpath.parser.ParserContext;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.util.List;
import java.util.Optional;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import org.apache.commons.lang3.tuple.MutablePair;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Dataset;
@@ -132,5 +132,5 @@ private void validateInput(@Nonnull final NamedFunctionInput input) {
checkUserInput(arguments.size() <= 2 || arguments.get(2) instanceof StringLiteralPath,
String.format("Function `%s` expects `%s` as argument %s", NAME, "String literal", 3));
}
-
+
}
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/literal/BooleanLiteralPath.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/literal/BooleanLiteralPath.java
index 7d93a01e24..07b9723654 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/literal/BooleanLiteralPath.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/literal/BooleanLiteralPath.java
@@ -23,9 +23,9 @@
import au.csiro.pathling.fhirpath.FhirPath;
import au.csiro.pathling.fhirpath.Materializable;
import au.csiro.pathling.fhirpath.element.BooleanPath;
+import jakarta.annotation.Nonnull;
import java.util.Optional;
import java.util.function.Function;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/literal/CodingLiteralPath.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/literal/CodingLiteralPath.java
index 166d8d4859..94c805b125 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/literal/CodingLiteralPath.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/literal/CodingLiteralPath.java
@@ -25,9 +25,9 @@
import au.csiro.pathling.fhirpath.Materializable;
import au.csiro.pathling.fhirpath.comparison.CodingSqlComparator;
import au.csiro.pathling.fhirpath.element.CodingPath;
+import jakarta.annotation.Nonnull;
import java.util.Optional;
import java.util.function.Function;
-import javax.annotation.Nonnull;
import lombok.Getter;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Dataset;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/literal/DateLiteralPath.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/literal/DateLiteralPath.java
index 2b6f4e75eb..ff1b1ca1d4 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/literal/DateLiteralPath.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/literal/DateLiteralPath.java
@@ -30,10 +30,10 @@
import au.csiro.pathling.fhirpath.element.DateTimePath;
import au.csiro.pathling.sql.dates.date.DateAddDurationFunction;
import au.csiro.pathling.sql.dates.date.DateSubtractDurationFunction;
+import jakarta.annotation.Nonnull;
import java.text.ParseException;
import java.util.Optional;
import java.util.function.Function;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/literal/DateTimeLiteralPath.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/literal/DateTimeLiteralPath.java
index 9849d0f63b..45777b3741 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/literal/DateTimeLiteralPath.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/literal/DateTimeLiteralPath.java
@@ -29,10 +29,10 @@
import au.csiro.pathling.fhirpath.element.DateTimePath;
import au.csiro.pathling.sql.dates.datetime.DateTimeAddDurationFunction;
import au.csiro.pathling.sql.dates.datetime.DateTimeSubtractDurationFunction;
+import jakarta.annotation.Nonnull;
import java.text.ParseException;
import java.util.Optional;
import java.util.function.Function;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/literal/DecimalLiteralPath.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/literal/DecimalLiteralPath.java
index 1973c8e240..2d14a3243b 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/literal/DecimalLiteralPath.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/literal/DecimalLiteralPath.java
@@ -27,10 +27,10 @@
import au.csiro.pathling.fhirpath.Numeric;
import au.csiro.pathling.fhirpath.element.DecimalPath;
import au.csiro.pathling.fhirpath.element.IntegerPath;
+import jakarta.annotation.Nonnull;
import java.math.BigDecimal;
import java.util.Optional;
import java.util.function.Function;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/literal/IntegerLiteralPath.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/literal/IntegerLiteralPath.java
index 5a0965b303..27287514d4 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/literal/IntegerLiteralPath.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/literal/IntegerLiteralPath.java
@@ -25,9 +25,9 @@
import au.csiro.pathling.fhirpath.NonLiteralPath;
import au.csiro.pathling.fhirpath.Numeric;
import au.csiro.pathling.fhirpath.element.IntegerPath;
+import jakarta.annotation.Nonnull;
import java.util.Optional;
import java.util.function.Function;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/literal/LiteralPath.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/literal/LiteralPath.java
index 9f04844348..7ea7e6a919 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/literal/LiteralPath.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/literal/LiteralPath.java
@@ -25,12 +25,12 @@
import au.csiro.pathling.fhirpath.NonLiteralPath;
import au.csiro.pathling.fhirpath.element.ElementPath;
import com.google.common.collect.ImmutableMap;
+import jakarta.annotation.Nonnull;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.Arrays;
import java.util.Map;
import java.util.Optional;
-import javax.annotation.Nonnull;
import lombok.Getter;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Dataset;
@@ -104,7 +104,7 @@ public abstract class LiteralPath implements FhirPath {
@Nonnull
protected final Optional expression;
-
+
private LiteralPath(@Nonnull final Dataset dataset, @Nonnull final Column idColumn,
@Nonnull final ValueType value, @Nonnull final Optional expression) {
this.idColumn = idColumn;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/literal/NullLiteralPath.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/literal/NullLiteralPath.java
index d61c0ac881..4c6aa9465b 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/literal/NullLiteralPath.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/literal/NullLiteralPath.java
@@ -21,8 +21,8 @@
import au.csiro.pathling.fhirpath.Comparable;
import au.csiro.pathling.fhirpath.FhirPath;
+import jakarta.annotation.Nonnull;
import java.util.function.Function;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/literal/QuantityLiteralPath.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/literal/QuantityLiteralPath.java
index ff24462e7d..a14c43fb80 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/literal/QuantityLiteralPath.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/literal/QuantityLiteralPath.java
@@ -27,13 +27,13 @@
import au.csiro.pathling.fhirpath.comparison.QuantitySqlComparator;
import au.csiro.pathling.fhirpath.element.QuantityPath;
import au.csiro.pathling.fhirpath.encoding.QuantityEncoding;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.math.BigDecimal;
import java.util.Optional;
import java.util.function.Function;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import lombok.Getter;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Dataset;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/literal/StringLiteralPath.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/literal/StringLiteralPath.java
index 56df64ff9d..cf7a3d8a91 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/literal/StringLiteralPath.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/literal/StringLiteralPath.java
@@ -17,7 +17,6 @@
package au.csiro.pathling.fhirpath.literal;
-import static au.csiro.pathling.fhirpath.literal.StringLiteral.escapeFhirPathString;
import static au.csiro.pathling.fhirpath.literal.StringLiteral.toLiteral;
import static au.csiro.pathling.utilities.Strings.unSingleQuote;
import static org.apache.spark.sql.functions.lit;
@@ -26,9 +25,9 @@
import au.csiro.pathling.fhirpath.FhirPath;
import au.csiro.pathling.fhirpath.Materializable;
import au.csiro.pathling.fhirpath.element.StringPath;
+import jakarta.annotation.Nonnull;
import java.util.Optional;
import java.util.function.Function;
-import javax.annotation.Nonnull;
import lombok.Getter;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Dataset;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/literal/TimeLiteralPath.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/literal/TimeLiteralPath.java
index de436e2d09..19ddb3f2e4 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/literal/TimeLiteralPath.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/literal/TimeLiteralPath.java
@@ -23,9 +23,9 @@
import au.csiro.pathling.fhirpath.FhirPath;
import au.csiro.pathling.fhirpath.Materializable;
import au.csiro.pathling.fhirpath.element.TimePath;
+import jakarta.annotation.Nonnull;
import java.util.Optional;
import java.util.function.Function;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/operator/BooleanOperator.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/operator/BooleanOperator.java
index d6f7cc95d7..805288fd2f 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/operator/BooleanOperator.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/operator/BooleanOperator.java
@@ -28,8 +28,8 @@
import au.csiro.pathling.fhirpath.element.BooleanPath;
import au.csiro.pathling.fhirpath.element.ElementPath;
import au.csiro.pathling.fhirpath.literal.BooleanLiteralPath;
+import jakarta.annotation.Nonnull;
import java.util.Optional;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/operator/CombineOperator.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/operator/CombineOperator.java
index 9eb878d1cf..9a642843fd 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/operator/CombineOperator.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/operator/CombineOperator.java
@@ -24,9 +24,8 @@
import au.csiro.pathling.QueryHelpers.DatasetWithColumn;
import au.csiro.pathling.fhirpath.FhirPath;
import au.csiro.pathling.fhirpath.NonLiteralPath;
-import java.util.Arrays;
+import jakarta.annotation.Nonnull;
import java.util.Optional;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/operator/ComparisonOperator.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/operator/ComparisonOperator.java
index f91a257eb0..3101941434 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/operator/ComparisonOperator.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/operator/ComparisonOperator.java
@@ -31,8 +31,8 @@
import au.csiro.pathling.fhirpath.Comparable.ComparisonOperation;
import au.csiro.pathling.fhirpath.FhirPath;
import au.csiro.pathling.fhirpath.element.ElementPath;
+import jakarta.annotation.Nonnull;
import java.util.Optional;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/operator/DateArithmeticOperator.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/operator/DateArithmeticOperator.java
index 43540c7ef4..d2fdda5d00 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/operator/DateArithmeticOperator.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/operator/DateArithmeticOperator.java
@@ -27,7 +27,7 @@
import au.csiro.pathling.fhirpath.Numeric.MathOperation;
import au.csiro.pathling.fhirpath.Temporal;
import au.csiro.pathling.fhirpath.literal.QuantityLiteralPath;
-import javax.annotation.Nonnull;
+import jakarta.annotation.Nonnull;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/operator/MathOperator.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/operator/MathOperator.java
index c3e37b0977..327a61495b 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/operator/MathOperator.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/operator/MathOperator.java
@@ -28,7 +28,7 @@
import au.csiro.pathling.fhirpath.Numeric.MathOperation;
import au.csiro.pathling.fhirpath.Temporal;
import au.csiro.pathling.fhirpath.literal.QuantityLiteralPath;
-import javax.annotation.Nonnull;
+import jakarta.annotation.Nonnull;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/operator/MembershipOperator.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/operator/MembershipOperator.java
index 4e0e9c00e2..4499905f7f 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/operator/MembershipOperator.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/operator/MembershipOperator.java
@@ -29,8 +29,8 @@
import au.csiro.pathling.fhirpath.Comparable.ComparisonOperation;
import au.csiro.pathling.fhirpath.FhirPath;
import au.csiro.pathling.fhirpath.function.AggregateFunction;
+import jakarta.annotation.Nonnull;
import java.util.Arrays;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/operator/Operator.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/operator/Operator.java
index 72e90b010e..bade3eca48 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/operator/Operator.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/operator/Operator.java
@@ -26,8 +26,8 @@
import au.csiro.pathling.fhirpath.operator.BooleanOperator.BooleanOperatorType;
import au.csiro.pathling.fhirpath.operator.MembershipOperator.MembershipOperatorType;
import com.google.common.collect.ImmutableMap;
+import jakarta.annotation.Nonnull;
import java.util.Map;
-import javax.annotation.Nonnull;
/**
* Represents a binary operator in FHIRPath.
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/operator/OperatorInput.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/operator/OperatorInput.java
index 26bf0ed2ad..ccbc9b2bd9 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/operator/OperatorInput.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/operator/OperatorInput.java
@@ -20,7 +20,7 @@
import au.csiro.pathling.fhirpath.FhirPath;
import au.csiro.pathling.fhirpath.FunctionInput;
import au.csiro.pathling.fhirpath.parser.ParserContext;
-import javax.annotation.Nonnull;
+import jakarta.annotation.Nonnull;
import lombok.Getter;
/**
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/operator/PathTraversalInput.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/operator/PathTraversalInput.java
index 08fae4a311..22ebddd229 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/operator/PathTraversalInput.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/operator/PathTraversalInput.java
@@ -20,7 +20,7 @@
import au.csiro.pathling.fhirpath.FhirPath;
import au.csiro.pathling.fhirpath.FunctionInput;
import au.csiro.pathling.fhirpath.parser.ParserContext;
-import javax.annotation.Nonnull;
+import jakarta.annotation.Nonnull;
import lombok.Getter;
/**
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/operator/PathTraversalOperator.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/operator/PathTraversalOperator.java
index 4b69468523..206695ab34 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/operator/PathTraversalOperator.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/operator/PathTraversalOperator.java
@@ -29,8 +29,8 @@
import au.csiro.pathling.fhirpath.ResourcePath;
import au.csiro.pathling.fhirpath.element.ElementDefinition;
import au.csiro.pathling.fhirpath.element.ElementPath;
+import jakarta.annotation.Nonnull;
import java.util.Optional;
-import javax.annotation.Nonnull;
import org.apache.commons.lang3.tuple.MutablePair;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Dataset;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/parser/InvocationVisitor.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/parser/InvocationVisitor.java
index 046042b86d..736ab8d7d3 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/parser/InvocationVisitor.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/parser/InvocationVisitor.java
@@ -35,11 +35,11 @@
import au.csiro.pathling.fhirpath.parser.generated.FhirPathParser.ParamListContext;
import au.csiro.pathling.fhirpath.parser.generated.FhirPathParser.ThisInvocationContext;
import au.csiro.pathling.fhirpath.parser.generated.FhirPathParser.TotalInvocationContext;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import org.apache.spark.sql.Column;
import org.hl7.fhir.exceptions.FHIRException;
import org.hl7.fhir.r4.model.Enumerations.ResourceType;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/parser/LiteralTermVisitor.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/parser/LiteralTermVisitor.java
index c6b445a72d..0e5d071ef8 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/parser/LiteralTermVisitor.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/parser/LiteralTermVisitor.java
@@ -42,10 +42,9 @@
import au.csiro.pathling.fhirpath.parser.generated.FhirPathParser.QuantityLiteralContext;
import au.csiro.pathling.fhirpath.parser.generated.FhirPathParser.StringLiteralContext;
import au.csiro.pathling.fhirpath.parser.generated.FhirPathParser.TimeLiteralContext;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.text.ParseException;
-import java.util.Objects;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import org.antlr.v4.runtime.tree.TerminalNode;
import org.fhir.ucum.UcumException;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/parser/Parser.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/parser/Parser.java
index 26f8a7ffa8..c47152beec 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/parser/Parser.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/parser/Parser.java
@@ -20,7 +20,7 @@
import au.csiro.pathling.fhirpath.FhirPath;
import au.csiro.pathling.fhirpath.parser.generated.FhirPathLexer;
import au.csiro.pathling.fhirpath.parser.generated.FhirPathParser;
-import javax.annotation.Nonnull;
+import jakarta.annotation.Nonnull;
import lombok.Getter;
import org.antlr.v4.runtime.CharStreams;
import org.antlr.v4.runtime.CommonTokenStream;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/parser/ParserContext.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/parser/ParserContext.java
index 8becab00aa..eced27daad 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/parser/ParserContext.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/parser/ParserContext.java
@@ -22,10 +22,10 @@
import au.csiro.pathling.terminology.TerminologyService;
import au.csiro.pathling.terminology.TerminologyServiceFactory;
import ca.uhn.fhir.context.FhirContext;
+import jakarta.annotation.Nonnull;
import java.util.List;
import java.util.Map;
import java.util.Optional;
-import javax.annotation.Nonnull;
import lombok.Getter;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.SparkSession;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/parser/ParserErrorListener.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/parser/ParserErrorListener.java
index e5302c3526..4d40089970 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/parser/ParserErrorListener.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/parser/ParserErrorListener.java
@@ -18,7 +18,7 @@
package au.csiro.pathling.fhirpath.parser;
import au.csiro.pathling.errors.InvalidUserInputError;
-import javax.annotation.Nullable;
+import jakarta.annotation.Nullable;
import org.antlr.v4.runtime.BaseErrorListener;
import org.antlr.v4.runtime.RecognitionException;
import org.antlr.v4.runtime.Recognizer;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/parser/TermVisitor.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/parser/TermVisitor.java
index 1d4c1c3701..e9b0d79108 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/parser/TermVisitor.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/parser/TermVisitor.java
@@ -28,9 +28,8 @@
import au.csiro.pathling.fhirpath.parser.generated.FhirPathParser.InvocationTermContext;
import au.csiro.pathling.fhirpath.parser.generated.FhirPathParser.LiteralTermContext;
import au.csiro.pathling.fhirpath.parser.generated.FhirPathParser.ParenthesizedTermContext;
-import java.util.Objects;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
/**
* A term is typically a standalone literal or function invocation.
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/parser/Visitor.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/parser/Visitor.java
index b6f2ae103c..3d15add620 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/parser/Visitor.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/parser/Visitor.java
@@ -39,9 +39,8 @@
import au.csiro.pathling.fhirpath.parser.generated.FhirPathParser.TermExpressionContext;
import au.csiro.pathling.fhirpath.parser.generated.FhirPathParser.TypeExpressionContext;
import au.csiro.pathling.fhirpath.parser.generated.FhirPathParser.UnionExpressionContext;
-import java.util.Objects;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import org.antlr.v4.runtime.tree.ParseTree;
/**
diff --git a/fhirpath/src/main/java/au/csiro/pathling/io/CatalogPersistence.java b/fhirpath/src/main/java/au/csiro/pathling/io/CatalogPersistence.java
index e54eec8d31..0f12c8ae76 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/io/CatalogPersistence.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/io/CatalogPersistence.java
@@ -3,6 +3,7 @@
import au.csiro.pathling.encoders.EncoderBuilder;
import io.delta.tables.DeltaMergeBuilder;
import io.delta.tables.DeltaTable;
+import jakarta.annotation.Nonnull;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
@@ -10,7 +11,6 @@
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.AnalysisException;
import org.apache.spark.sql.DataFrameWriter;
import org.apache.spark.sql.Dataset;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/io/Database.java b/fhirpath/src/main/java/au/csiro/pathling/io/Database.java
index 8206fd007f..8b21a5d605 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/io/Database.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/io/Database.java
@@ -30,11 +30,11 @@
import au.csiro.pathling.security.ResourceAccess;
import io.delta.tables.DeltaMergeBuilder;
import io.delta.tables.DeltaTable;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.util.List;
import java.util.Optional;
import java.util.Set;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import lombok.extern.slf4j.Slf4j;
import org.apache.spark.sql.DataFrameWriter;
import org.apache.spark.sql.Dataset;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/io/FileSystemPersistence.java b/fhirpath/src/main/java/au/csiro/pathling/io/FileSystemPersistence.java
index d240ed396c..898acc6646 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/io/FileSystemPersistence.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/io/FileSystemPersistence.java
@@ -4,6 +4,8 @@
import io.delta.tables.DeltaMergeBuilder;
import io.delta.tables.DeltaTable;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
@@ -12,8 +14,6 @@
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/io/ImportMode.java b/fhirpath/src/main/java/au/csiro/pathling/io/ImportMode.java
index c62b90a0bc..70c2d6d05c 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/io/ImportMode.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/io/ImportMode.java
@@ -1,7 +1,7 @@
package au.csiro.pathling.io;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import lombok.Getter;
/**
diff --git a/fhirpath/src/main/java/au/csiro/pathling/io/PersistenceScheme.java b/fhirpath/src/main/java/au/csiro/pathling/io/PersistenceScheme.java
index 774197b20a..2703f86e88 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/io/PersistenceScheme.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/io/PersistenceScheme.java
@@ -19,8 +19,8 @@
import io.delta.tables.DeltaMergeBuilder;
import io.delta.tables.DeltaTable;
+import jakarta.annotation.Nonnull;
import java.util.Set;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.DataFrameWriter;
import org.apache.spark.sql.Row;
import org.hl7.fhir.r4.model.Enumerations.ResourceType;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/io/source/DataSource.java b/fhirpath/src/main/java/au/csiro/pathling/io/source/DataSource.java
index 6fd3db63d0..5551854cfb 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/io/source/DataSource.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/io/source/DataSource.java
@@ -16,9 +16,9 @@
*/
package au.csiro.pathling.io.source;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.util.Set;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.hl7.fhir.r4.model.Enumerations.ResourceType;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/query/ExpressionWithLabel.java b/fhirpath/src/main/java/au/csiro/pathling/query/ExpressionWithLabel.java
index 558b7527ea..fdd1354cfc 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/query/ExpressionWithLabel.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/query/ExpressionWithLabel.java
@@ -20,12 +20,12 @@
import static au.csiro.pathling.utilities.Preconditions.requireNonBlank;
import static java.util.Objects.nonNull;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import lombok.Value;
@Value
@@ -84,7 +84,7 @@ public static Stream> labelsAsStream(
return expressionWithLabels.stream().map(ExpressionWithLabel::getLabel)
.map(Optional::ofNullable);
}
-
+
/**
* Returns a list of {@link ExpressionWithLabel} objects, where each expression has no label.
*
@@ -92,7 +92,8 @@ public static Stream> labelsAsStream(
* @return a list of {@link ExpressionWithLabel} objects
*/
@Nonnull
- public static List fromUnlabelledExpressions(@Nonnull final List expressions) {
+ public static List fromUnlabelledExpressions(
+ @Nonnull final List expressions) {
return expressions.stream().map(ExpressionWithLabel::withNoLabel)
.collect(Collectors.toUnmodifiableList());
}
diff --git a/fhirpath/src/main/java/au/csiro/pathling/security/ResourceAccess.java b/fhirpath/src/main/java/au/csiro/pathling/security/ResourceAccess.java
index 2a8b832dea..462d65e8b1 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/security/ResourceAccess.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/security/ResourceAccess.java
@@ -18,14 +18,14 @@
package au.csiro.pathling.security;
-import lombok.Getter;
-import javax.annotation.Nonnull;
+import jakarta.annotation.Nonnull;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
+import lombok.Getter;
/**
* Identifies methods that implement access to underlying Resources.
diff --git a/fhirpath/src/main/java/au/csiro/pathling/sql/FhirpathUDFRegistrar.java b/fhirpath/src/main/java/au/csiro/pathling/sql/FhirpathUDFRegistrar.java
index c6365014df..a25d33c7c4 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/sql/FhirpathUDFRegistrar.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/sql/FhirpathUDFRegistrar.java
@@ -22,8 +22,8 @@
import au.csiro.pathling.sql.dates.datetime.DateTimeUDFRegistrar;
import au.csiro.pathling.sql.dates.time.TimeUdfRegistrar;
import au.csiro.pathling.sql.misc.MiscUDFRegistrar;
+import jakarta.annotation.Nonnull;
import java.util.List;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.SparkSession;
/**
diff --git a/fhirpath/src/main/java/au/csiro/pathling/sql/SqlExpressions.java b/fhirpath/src/main/java/au/csiro/pathling/sql/SqlExpressions.java
index d7463c029c..58bac68735 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/sql/SqlExpressions.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/sql/SqlExpressions.java
@@ -17,7 +17,7 @@
package au.csiro.pathling.sql;
-import javax.annotation.Nonnull;
+import jakarta.annotation.Nonnull;
import org.apache.spark.sql.Column;
/**
diff --git a/fhirpath/src/main/java/au/csiro/pathling/sql/dates/TemporalArithmeticFunction.java b/fhirpath/src/main/java/au/csiro/pathling/sql/dates/TemporalArithmeticFunction.java
index aafb44d285..c62460f5f3 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/sql/dates/TemporalArithmeticFunction.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/sql/dates/TemporalArithmeticFunction.java
@@ -20,11 +20,11 @@
import au.csiro.pathling.fhirpath.CalendarDurationUtils;
import au.csiro.pathling.fhirpath.encoding.QuantityEncoding;
import au.csiro.pathling.sql.udf.SqlFunction2;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.math.RoundingMode;
import java.util.function.BiFunction;
import java.util.function.Function;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.types.DataType;
import org.apache.spark.sql.types.DataTypes;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/sql/dates/TemporalComparisonFunction.java b/fhirpath/src/main/java/au/csiro/pathling/sql/dates/TemporalComparisonFunction.java
index 266b134f1f..1c5927ad6a 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/sql/dates/TemporalComparisonFunction.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/sql/dates/TemporalComparisonFunction.java
@@ -18,8 +18,8 @@
package au.csiro.pathling.sql.dates;
import au.csiro.pathling.sql.udf.SqlFunction2;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import org.apache.spark.sql.types.DataType;
import org.apache.spark.sql.types.DataTypes;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/sql/dates/datetime/DateTimeComparisonFunction.java b/fhirpath/src/main/java/au/csiro/pathling/sql/dates/datetime/DateTimeComparisonFunction.java
index 8495f56dfe..74fe17e98f 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/sql/dates/datetime/DateTimeComparisonFunction.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/sql/dates/datetime/DateTimeComparisonFunction.java
@@ -20,10 +20,10 @@
import au.csiro.pathling.sql.dates.TemporalComparisonFunction;
import ca.uhn.fhir.model.api.TemporalPrecisionEnum;
import ca.uhn.fhir.parser.DataFormatException;
+import jakarta.annotation.Nullable;
import java.sql.Timestamp;
import java.time.Instant;
import java.util.Date;
-import javax.annotation.Nullable;
import org.hl7.fhir.r4.model.DateTimeType;
/**
diff --git a/fhirpath/src/main/java/au/csiro/pathling/sql/dates/datetime/DateTimeEqualsFunction.java b/fhirpath/src/main/java/au/csiro/pathling/sql/dates/datetime/DateTimeEqualsFunction.java
index d7e6a90a0c..00b6e37777 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/sql/dates/datetime/DateTimeEqualsFunction.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/sql/dates/datetime/DateTimeEqualsFunction.java
@@ -17,8 +17,8 @@
package au.csiro.pathling.sql.dates.datetime;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import org.hl7.fhir.r4.model.DateTimeType;
/**
diff --git a/fhirpath/src/main/java/au/csiro/pathling/sql/dates/datetime/DateTimeGreaterThanFunction.java b/fhirpath/src/main/java/au/csiro/pathling/sql/dates/datetime/DateTimeGreaterThanFunction.java
index b761ae4e3a..ee19f4b726 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/sql/dates/datetime/DateTimeGreaterThanFunction.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/sql/dates/datetime/DateTimeGreaterThanFunction.java
@@ -17,8 +17,8 @@
package au.csiro.pathling.sql.dates.datetime;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import org.hl7.fhir.r4.model.DateTimeType;
/**
diff --git a/fhirpath/src/main/java/au/csiro/pathling/sql/dates/datetime/DateTimeGreaterThanOrEqualToFunction.java b/fhirpath/src/main/java/au/csiro/pathling/sql/dates/datetime/DateTimeGreaterThanOrEqualToFunction.java
index f51498961f..127dbc4596 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/sql/dates/datetime/DateTimeGreaterThanOrEqualToFunction.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/sql/dates/datetime/DateTimeGreaterThanOrEqualToFunction.java
@@ -17,8 +17,8 @@
package au.csiro.pathling.sql.dates.datetime;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import org.hl7.fhir.r4.model.DateTimeType;
/**
diff --git a/fhirpath/src/main/java/au/csiro/pathling/sql/dates/datetime/DateTimeLessThanFunction.java b/fhirpath/src/main/java/au/csiro/pathling/sql/dates/datetime/DateTimeLessThanFunction.java
index 2372f16850..ecb931ef30 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/sql/dates/datetime/DateTimeLessThanFunction.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/sql/dates/datetime/DateTimeLessThanFunction.java
@@ -17,8 +17,8 @@
package au.csiro.pathling.sql.dates.datetime;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import org.hl7.fhir.r4.model.DateTimeType;
/**
diff --git a/fhirpath/src/main/java/au/csiro/pathling/sql/dates/datetime/DateTimeLessThanOrEqualToFunction.java b/fhirpath/src/main/java/au/csiro/pathling/sql/dates/datetime/DateTimeLessThanOrEqualToFunction.java
index 44479f9215..6ecec03b62 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/sql/dates/datetime/DateTimeLessThanOrEqualToFunction.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/sql/dates/datetime/DateTimeLessThanOrEqualToFunction.java
@@ -17,8 +17,8 @@
package au.csiro.pathling.sql.dates.datetime;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import org.hl7.fhir.r4.model.DateTimeType;
/**
diff --git a/fhirpath/src/main/java/au/csiro/pathling/sql/dates/time/TimeComparisonFunction.java b/fhirpath/src/main/java/au/csiro/pathling/sql/dates/time/TimeComparisonFunction.java
index 07f7964ff6..0c9b46044e 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/sql/dates/time/TimeComparisonFunction.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/sql/dates/time/TimeComparisonFunction.java
@@ -18,8 +18,8 @@
package au.csiro.pathling.sql.dates.time;
import au.csiro.pathling.sql.dates.TemporalComparisonFunction;
+import jakarta.annotation.Nullable;
import java.time.LocalTime;
-import javax.annotation.Nullable;
/**
* Base class for functions that compare times.
diff --git a/fhirpath/src/main/java/au/csiro/pathling/sql/dates/time/TimeEqualsFunction.java b/fhirpath/src/main/java/au/csiro/pathling/sql/dates/time/TimeEqualsFunction.java
index 3b578a3d77..44571716fc 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/sql/dates/time/TimeEqualsFunction.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/sql/dates/time/TimeEqualsFunction.java
@@ -17,9 +17,9 @@
package au.csiro.pathling.sql.dates.time;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.time.LocalTime;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
/**
* Determines the equality of two times.
diff --git a/fhirpath/src/main/java/au/csiro/pathling/sql/dates/time/TimeFunction.java b/fhirpath/src/main/java/au/csiro/pathling/sql/dates/time/TimeFunction.java
index eb963161c3..4e7a123097 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/sql/dates/time/TimeFunction.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/sql/dates/time/TimeFunction.java
@@ -17,11 +17,11 @@
package au.csiro.pathling.sql.dates.time;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.time.LocalTime;
import java.time.format.DateTimeParseException;
import java.util.regex.Pattern;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
/**
* Common functionality relating to time operations.
diff --git a/fhirpath/src/main/java/au/csiro/pathling/sql/dates/time/TimeGreaterThanFunction.java b/fhirpath/src/main/java/au/csiro/pathling/sql/dates/time/TimeGreaterThanFunction.java
index a2bb775182..5880d43f39 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/sql/dates/time/TimeGreaterThanFunction.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/sql/dates/time/TimeGreaterThanFunction.java
@@ -17,9 +17,9 @@
package au.csiro.pathling.sql.dates.time;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.time.LocalTime;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
/**
* Determines whether one time is after another.
diff --git a/fhirpath/src/main/java/au/csiro/pathling/sql/dates/time/TimeGreaterThanOrEqualToFunction.java b/fhirpath/src/main/java/au/csiro/pathling/sql/dates/time/TimeGreaterThanOrEqualToFunction.java
index 996f5442b0..ce84d81aad 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/sql/dates/time/TimeGreaterThanOrEqualToFunction.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/sql/dates/time/TimeGreaterThanOrEqualToFunction.java
@@ -17,9 +17,9 @@
package au.csiro.pathling.sql.dates.time;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.time.LocalTime;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
/**
* Determines whether one time is after or at the same time as another.
diff --git a/fhirpath/src/main/java/au/csiro/pathling/sql/dates/time/TimeLessThanFunction.java b/fhirpath/src/main/java/au/csiro/pathling/sql/dates/time/TimeLessThanFunction.java
index e355f3e3a2..4dbc568072 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/sql/dates/time/TimeLessThanFunction.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/sql/dates/time/TimeLessThanFunction.java
@@ -17,9 +17,9 @@
package au.csiro.pathling.sql.dates.time;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.time.LocalTime;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
/**
* Determines whether one time is before another.
diff --git a/fhirpath/src/main/java/au/csiro/pathling/sql/dates/time/TimeLessThanOrEqualToFunction.java b/fhirpath/src/main/java/au/csiro/pathling/sql/dates/time/TimeLessThanOrEqualToFunction.java
index 017948ba56..9520169bc7 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/sql/dates/time/TimeLessThanOrEqualToFunction.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/sql/dates/time/TimeLessThanOrEqualToFunction.java
@@ -17,9 +17,9 @@
package au.csiro.pathling.sql.dates.time;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.time.LocalTime;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
/**
* Determines whether one time is before or at the same time as another.
diff --git a/fhirpath/src/main/java/au/csiro/pathling/sql/misc/CodingToLiteral.java b/fhirpath/src/main/java/au/csiro/pathling/sql/misc/CodingToLiteral.java
index c0dfcc8de4..2d12b383a3 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/sql/misc/CodingToLiteral.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/sql/misc/CodingToLiteral.java
@@ -20,7 +20,7 @@
import au.csiro.pathling.fhirpath.encoding.CodingEncoding;
import au.csiro.pathling.fhirpath.literal.CodingLiteral;
import au.csiro.pathling.sql.udf.SqlFunction1;
-import javax.annotation.Nullable;
+import jakarta.annotation.Nullable;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.types.DataType;
import org.apache.spark.sql.types.DataTypes;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/sql/misc/TemporalDifferenceFunction.java b/fhirpath/src/main/java/au/csiro/pathling/sql/misc/TemporalDifferenceFunction.java
index f4322974b0..9430758768 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/sql/misc/TemporalDifferenceFunction.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/sql/misc/TemporalDifferenceFunction.java
@@ -20,6 +20,8 @@
import au.csiro.pathling.errors.InvalidUserInputError;
import au.csiro.pathling.sql.udf.SqlFunction3;
import com.google.common.collect.ImmutableMap;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.ZonedDateTime;
@@ -27,8 +29,6 @@
import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalUnit;
import java.util.Map;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import org.apache.spark.sql.types.DataType;
import org.apache.spark.sql.types.DataTypes;
diff --git a/fhirpath/src/test/java/au/csiro/pathling/UnitTestDependencies.java b/fhirpath/src/test/java/au/csiro/pathling/UnitTestDependencies.java
index 253232625f..e53829f0de 100644
--- a/fhirpath/src/test/java/au/csiro/pathling/UnitTestDependencies.java
+++ b/fhirpath/src/test/java/au/csiro/pathling/UnitTestDependencies.java
@@ -28,7 +28,7 @@
import au.csiro.pathling.test.stubs.TestTerminologyServiceFactory;
import ca.uhn.fhir.context.FhirContext;
import ca.uhn.fhir.parser.IParser;
-import javax.annotation.Nonnull;
+import jakarta.annotation.Nonnull;
import org.apache.spark.sql.SparkSession;
import org.fhir.ucum.UcumException;
import org.fhir.ucum.UcumService;
@@ -72,12 +72,12 @@ static SparkSession sparkSession(
.master("local[1]")
.appName("pathling-unittest")
.config("spark.default.parallelism", 1)
- .config("spark.driver.bindAddress","localhost")
- .config("spark.driver.host","localhost")
+ .config("spark.driver.bindAddress", "localhost")
+ .config("spark.driver.host", "localhost")
.config("spark.sql.shuffle.partitions", 1)
.config("spark.sql.debug.maxToStringFields", 100)
.config("spark.network.timeout", "600s")
- .config("spark.ui.enabled",false)
+ .config("spark.ui.enabled", false)
.config("spark.sql.extensions", "io.delta.sql.DeltaSparkSessionExtension")
.config("spark.sql.catalog.spark_catalog",
"org.apache.spark.sql.delta.catalog.DeltaCatalog")
diff --git a/fhirpath/src/test/java/au/csiro/pathling/fhirpath/CanBeCombinedWithTest.java b/fhirpath/src/test/java/au/csiro/pathling/fhirpath/CanBeCombinedWithTest.java
index d06f78120b..852b1f6165 100644
--- a/fhirpath/src/test/java/au/csiro/pathling/fhirpath/CanBeCombinedWithTest.java
+++ b/fhirpath/src/test/java/au/csiro/pathling/fhirpath/CanBeCombinedWithTest.java
@@ -33,6 +33,7 @@
import au.csiro.pathling.test.SpringBootUnitTest;
import au.csiro.pathling.test.builders.ElementPathBuilder;
import au.csiro.pathling.test.builders.ResourcePathBuilder;
+import jakarta.annotation.Nonnull;
import java.text.ParseException;
import java.util.Arrays;
import java.util.Collection;
@@ -40,7 +41,6 @@
import java.util.HashSet;
import java.util.Set;
import java.util.stream.Stream;
-import javax.annotation.Nonnull;
import lombok.EqualsAndHashCode;
import lombok.Value;
import org.apache.spark.sql.SparkSession;
diff --git a/fhirpath/src/test/java/au/csiro/pathling/fhirpath/function/BooleansTestFunctionTest.java b/fhirpath/src/test/java/au/csiro/pathling/fhirpath/function/BooleansTestFunctionTest.java
index 39a2d5df28..2f2a6f7c59 100644
--- a/fhirpath/src/test/java/au/csiro/pathling/fhirpath/function/BooleansTestFunctionTest.java
+++ b/fhirpath/src/test/java/au/csiro/pathling/fhirpath/function/BooleansTestFunctionTest.java
@@ -32,9 +32,9 @@
import au.csiro.pathling.test.builders.ElementPathBuilder;
import au.csiro.pathling.test.builders.ParserContextBuilder;
import ca.uhn.fhir.context.FhirContext;
+import jakarta.annotation.Nonnull;
import java.util.Collections;
import java.util.stream.Stream;
-import javax.annotation.Nonnull;
import lombok.Value;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
diff --git a/fhirpath/src/test/java/au/csiro/pathling/fhirpath/function/ResolveFunctionTest.java b/fhirpath/src/test/java/au/csiro/pathling/fhirpath/function/ResolveFunctionTest.java
index a17b843b7e..cd9d4f0112 100644
--- a/fhirpath/src/test/java/au/csiro/pathling/fhirpath/function/ResolveFunctionTest.java
+++ b/fhirpath/src/test/java/au/csiro/pathling/fhirpath/function/ResolveFunctionTest.java
@@ -43,9 +43,9 @@
import au.csiro.pathling.test.helpers.FhirHelpers;
import au.csiro.pathling.test.helpers.TestHelpers;
import ca.uhn.fhir.context.FhirContext;
+import jakarta.annotation.Nonnull;
import java.util.Collections;
import java.util.Optional;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.RowFactory;
diff --git a/fhirpath/src/test/java/au/csiro/pathling/fhirpath/function/UntilFunctionTest.java b/fhirpath/src/test/java/au/csiro/pathling/fhirpath/function/UntilFunctionTest.java
index 39275b4eac..6408944c6a 100644
--- a/fhirpath/src/test/java/au/csiro/pathling/fhirpath/function/UntilFunctionTest.java
+++ b/fhirpath/src/test/java/au/csiro/pathling/fhirpath/function/UntilFunctionTest.java
@@ -44,6 +44,7 @@
import ca.uhn.fhir.context.FhirContext;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableMap.Builder;
+import jakarta.annotation.Nonnull;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Arrays;
@@ -51,7 +52,6 @@
import java.util.Collections;
import java.util.List;
import java.util.stream.Stream;
-import javax.annotation.Nonnull;
import lombok.Value;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
diff --git a/fhirpath/src/test/java/au/csiro/pathling/fhirpath/function/terminology/DesignationFunctionTest.java b/fhirpath/src/test/java/au/csiro/pathling/fhirpath/function/terminology/DesignationFunctionTest.java
index 1ec468babf..0eba922821 100644
--- a/fhirpath/src/test/java/au/csiro/pathling/fhirpath/function/terminology/DesignationFunctionTest.java
+++ b/fhirpath/src/test/java/au/csiro/pathling/fhirpath/function/terminology/DesignationFunctionTest.java
@@ -49,6 +49,7 @@
import au.csiro.pathling.test.helpers.FhirHelpers;
import au.csiro.pathling.test.helpers.TerminologyServiceHelpers;
import ca.uhn.fhir.context.FhirContext;
+import jakarta.annotation.Nonnull;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
@@ -56,7 +57,6 @@
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SparkSession;
diff --git a/fhirpath/src/test/java/au/csiro/pathling/fhirpath/function/terminology/PropertyFunctionTest.java b/fhirpath/src/test/java/au/csiro/pathling/fhirpath/function/terminology/PropertyFunctionTest.java
index 9b23dac797..43b73efdbd 100644
--- a/fhirpath/src/test/java/au/csiro/pathling/fhirpath/function/terminology/PropertyFunctionTest.java
+++ b/fhirpath/src/test/java/au/csiro/pathling/fhirpath/function/terminology/PropertyFunctionTest.java
@@ -48,6 +48,7 @@
import au.csiro.pathling.test.helpers.FhirHelpers;
import au.csiro.pathling.test.helpers.TerminologyServiceHelpers;
import ca.uhn.fhir.context.FhirContext;
+import jakarta.annotation.Nonnull;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
@@ -55,7 +56,6 @@
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SparkSession;
diff --git a/fhirpath/src/test/java/au/csiro/pathling/fhirpath/function/terminology/SubsumesFunctionTest.java b/fhirpath/src/test/java/au/csiro/pathling/fhirpath/function/terminology/SubsumesFunctionTest.java
index 85445c77dd..dbf1bfea74 100644
--- a/fhirpath/src/test/java/au/csiro/pathling/fhirpath/function/terminology/SubsumesFunctionTest.java
+++ b/fhirpath/src/test/java/au/csiro/pathling/fhirpath/function/terminology/SubsumesFunctionTest.java
@@ -49,10 +49,10 @@
import au.csiro.pathling.test.builders.ParserContextBuilder;
import au.csiro.pathling.test.helpers.TerminologyServiceHelpers;
import ca.uhn.fhir.context.FhirContext;
+import jakarta.annotation.Nonnull;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SparkSession;
diff --git a/fhirpath/src/test/java/au/csiro/pathling/fhirpath/function/terminology/TranslateFunctionTest.java b/fhirpath/src/test/java/au/csiro/pathling/fhirpath/function/terminology/TranslateFunctionTest.java
index abfca246f5..2560817d82 100644
--- a/fhirpath/src/test/java/au/csiro/pathling/fhirpath/function/terminology/TranslateFunctionTest.java
+++ b/fhirpath/src/test/java/au/csiro/pathling/fhirpath/function/terminology/TranslateFunctionTest.java
@@ -57,13 +57,13 @@
import au.csiro.pathling.test.helpers.FhirHelpers;
import au.csiro.pathling.test.helpers.TerminologyServiceHelpers;
import ca.uhn.fhir.context.FhirContext;
+import jakarta.annotation.Nonnull;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
import java.util.function.Function;
import java.util.stream.Stream;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SparkSession;
diff --git a/fhirpath/src/test/java/au/csiro/pathling/fhirpath/operator/ComparisonOperatorTest.java b/fhirpath/src/test/java/au/csiro/pathling/fhirpath/operator/ComparisonOperatorTest.java
index 5dc6a5591a..669269b3c3 100644
--- a/fhirpath/src/test/java/au/csiro/pathling/fhirpath/operator/ComparisonOperatorTest.java
+++ b/fhirpath/src/test/java/au/csiro/pathling/fhirpath/operator/ComparisonOperatorTest.java
@@ -33,11 +33,11 @@
import au.csiro.pathling.test.builders.ElementPathBuilder;
import au.csiro.pathling.test.builders.ParserContextBuilder;
import ca.uhn.fhir.context.FhirContext;
+import jakarta.annotation.Nonnull;
import java.math.BigDecimal;
import java.text.ParseException;
import java.util.Collections;
import java.util.stream.Stream;
-import javax.annotation.Nonnull;
import lombok.Value;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
diff --git a/fhirpath/src/test/java/au/csiro/pathling/fhirpath/operator/DateArithmeticTest.java b/fhirpath/src/test/java/au/csiro/pathling/fhirpath/operator/DateArithmeticTest.java
index d2b83b5ff5..8db4899237 100644
--- a/fhirpath/src/test/java/au/csiro/pathling/fhirpath/operator/DateArithmeticTest.java
+++ b/fhirpath/src/test/java/au/csiro/pathling/fhirpath/operator/DateArithmeticTest.java
@@ -31,6 +31,7 @@
import au.csiro.pathling.test.builders.ElementPathBuilder;
import au.csiro.pathling.test.builders.ParserContextBuilder;
import ca.uhn.fhir.context.FhirContext;
+import jakarta.annotation.Nonnull;
import java.text.ParseException;
import java.time.Instant;
import java.util.ArrayList;
@@ -38,7 +39,6 @@
import java.util.Collections;
import java.util.List;
import java.util.stream.Stream;
-import javax.annotation.Nonnull;
import lombok.Value;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
diff --git a/fhirpath/src/test/java/au/csiro/pathling/fhirpath/operator/MathOperatorQuantityTest.java b/fhirpath/src/test/java/au/csiro/pathling/fhirpath/operator/MathOperatorQuantityTest.java
index 9a73636dfc..bc72a7e97b 100644
--- a/fhirpath/src/test/java/au/csiro/pathling/fhirpath/operator/MathOperatorQuantityTest.java
+++ b/fhirpath/src/test/java/au/csiro/pathling/fhirpath/operator/MathOperatorQuantityTest.java
@@ -31,13 +31,13 @@
import au.csiro.pathling.test.builders.ParserContextBuilder;
import au.csiro.pathling.test.helpers.TestHelpers;
import ca.uhn.fhir.context.FhirContext;
+import jakarta.annotation.Nonnull;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.stream.Stream;
-import javax.annotation.Nonnull;
import lombok.Value;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
diff --git a/fhirpath/src/test/java/au/csiro/pathling/fhirpath/operator/MathOperatorTest.java b/fhirpath/src/test/java/au/csiro/pathling/fhirpath/operator/MathOperatorTest.java
index 9da4251fb7..0e5dbd54c2 100644
--- a/fhirpath/src/test/java/au/csiro/pathling/fhirpath/operator/MathOperatorTest.java
+++ b/fhirpath/src/test/java/au/csiro/pathling/fhirpath/operator/MathOperatorTest.java
@@ -29,6 +29,7 @@
import au.csiro.pathling.test.builders.ElementPathBuilder;
import au.csiro.pathling.test.builders.ParserContextBuilder;
import ca.uhn.fhir.context.FhirContext;
+import jakarta.annotation.Nonnull;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
@@ -36,7 +37,6 @@
import java.util.Collections;
import java.util.List;
import java.util.stream.Stream;
-import javax.annotation.Nonnull;
import lombok.Value;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
@@ -44,13 +44,11 @@
import org.apache.spark.sql.SparkSession;
import org.apache.spark.sql.types.DataTypes;
import org.hl7.fhir.r4.model.Enumerations.FHIRDefinedType;
-import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.TestInstance;
import org.junit.jupiter.api.TestInstance.Lifecycle;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.MethodSource;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.context.SpringBootTest;
/**
* @author John Grimes
diff --git a/fhirpath/src/test/java/au/csiro/pathling/fhirpath/operator/QuantityOperatorsPrecisionTest.java b/fhirpath/src/test/java/au/csiro/pathling/fhirpath/operator/QuantityOperatorsPrecisionTest.java
index 7e905a956d..97f180058e 100644
--- a/fhirpath/src/test/java/au/csiro/pathling/fhirpath/operator/QuantityOperatorsPrecisionTest.java
+++ b/fhirpath/src/test/java/au/csiro/pathling/fhirpath/operator/QuantityOperatorsPrecisionTest.java
@@ -30,12 +30,12 @@
import au.csiro.pathling.test.builders.ParserContextBuilder;
import ca.uhn.fhir.context.FhirContext;
import com.google.common.collect.ImmutableSet;
+import jakarta.annotation.Nonnull;
import java.math.BigDecimal;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.RowFactory;
diff --git a/fhirpath/src/test/java/au/csiro/pathling/fhirpath/parser/FhirPathTest.java b/fhirpath/src/test/java/au/csiro/pathling/fhirpath/parser/FhirPathTest.java
index d69bc21170..f1e19d91f0 100644
--- a/fhirpath/src/test/java/au/csiro/pathling/fhirpath/parser/FhirPathTest.java
+++ b/fhirpath/src/test/java/au/csiro/pathling/fhirpath/parser/FhirPathTest.java
@@ -29,9 +29,9 @@
import au.csiro.pathling.test.assertions.FhirPathAssertion;
import au.csiro.pathling.test.builders.ParserContextBuilder;
import ca.uhn.fhir.context.FhirContext;
+import jakarta.annotation.Nonnull;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.RowFactory;
diff --git a/fhirpath/src/test/java/au/csiro/pathling/sql/udf/TerminologyUdfTest.java b/fhirpath/src/test/java/au/csiro/pathling/sql/udf/TerminologyUdfTest.java
index 3c647cde35..383cac8b82 100644
--- a/fhirpath/src/test/java/au/csiro/pathling/sql/udf/TerminologyUdfTest.java
+++ b/fhirpath/src/test/java/au/csiro/pathling/sql/udf/TerminologyUdfTest.java
@@ -44,14 +44,14 @@
import au.csiro.pathling.test.helpers.TerminologyServiceHelpers;
import au.csiro.pathling.test.helpers.TerminologyServiceHelpers.LookupExpectations;
import ca.uhn.fhir.parser.IParser;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
diff --git a/fhirpath/src/test/java/au/csiro/pathling/test/DefaultAnswer.java b/fhirpath/src/test/java/au/csiro/pathling/test/DefaultAnswer.java
index 7e24ddd43d..2821f94d29 100644
--- a/fhirpath/src/test/java/au/csiro/pathling/test/DefaultAnswer.java
+++ b/fhirpath/src/test/java/au/csiro/pathling/test/DefaultAnswer.java
@@ -19,9 +19,8 @@
import static java.util.Objects.requireNonNull;
+import jakarta.annotation.Nullable;
import java.util.Arrays;
-import java.util.Objects;
-import javax.annotation.Nullable;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
diff --git a/fhirpath/src/test/java/au/csiro/pathling/test/SharedMocks.java b/fhirpath/src/test/java/au/csiro/pathling/test/SharedMocks.java
index 59378baf6c..2e1b7939a7 100644
--- a/fhirpath/src/test/java/au/csiro/pathling/test/SharedMocks.java
+++ b/fhirpath/src/test/java/au/csiro/pathling/test/SharedMocks.java
@@ -17,9 +17,9 @@
package au.csiro.pathling.test;
+import jakarta.annotation.Nonnull;
import java.util.HashMap;
import java.util.Map;
-import javax.annotation.Nonnull;
import org.mockito.Mockito;
public class SharedMocks {
diff --git a/fhirpath/src/test/java/au/csiro/pathling/test/SpringBootUnitTest.java b/fhirpath/src/test/java/au/csiro/pathling/test/SpringBootUnitTest.java
index 954aa491b8..9aaae4b1bf 100644
--- a/fhirpath/src/test/java/au/csiro/pathling/test/SpringBootUnitTest.java
+++ b/fhirpath/src/test/java/au/csiro/pathling/test/SpringBootUnitTest.java
@@ -2,14 +2,13 @@
import au.csiro.pathling.UnitTestDependencies;
-import org.junit.jupiter.api.Tag;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.context.ActiveProfiles;
-
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
+import org.junit.jupiter.api.Tag;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.ActiveProfiles;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
diff --git a/fhirpath/src/test/java/au/csiro/pathling/test/TimingExtension.java b/fhirpath/src/test/java/au/csiro/pathling/test/TimingExtension.java
index 06124df4c0..b09ddd4079 100644
--- a/fhirpath/src/test/java/au/csiro/pathling/test/TimingExtension.java
+++ b/fhirpath/src/test/java/au/csiro/pathling/test/TimingExtension.java
@@ -19,10 +19,9 @@
import static java.util.Objects.requireNonNull;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.lang.reflect.Method;
-import java.util.Objects;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.extension.AfterTestExecutionCallback;
import org.junit.jupiter.api.extension.BeforeTestExecutionCallback;
diff --git a/fhirpath/src/test/java/au/csiro/pathling/test/assertions/Assertions.java b/fhirpath/src/test/java/au/csiro/pathling/test/assertions/Assertions.java
index d230882bbe..098b7d112e 100644
--- a/fhirpath/src/test/java/au/csiro/pathling/test/assertions/Assertions.java
+++ b/fhirpath/src/test/java/au/csiro/pathling/test/assertions/Assertions.java
@@ -22,11 +22,11 @@
import au.csiro.pathling.fhirpath.FhirPath;
import au.csiro.pathling.fhirpath.ResourcePath;
import au.csiro.pathling.fhirpath.element.ElementPath;
+import jakarta.annotation.Nonnull;
import java.net.URL;
import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;
import java.util.regex.Pattern;
-import javax.annotation.Nonnull;
import lombok.extern.slf4j.Slf4j;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
diff --git a/fhirpath/src/test/java/au/csiro/pathling/test/assertions/BaseFhirPathAssertion.java b/fhirpath/src/test/java/au/csiro/pathling/test/assertions/BaseFhirPathAssertion.java
index f95d39af9b..f264a8f98d 100644
--- a/fhirpath/src/test/java/au/csiro/pathling/test/assertions/BaseFhirPathAssertion.java
+++ b/fhirpath/src/test/java/au/csiro/pathling/test/assertions/BaseFhirPathAssertion.java
@@ -26,9 +26,9 @@
import au.csiro.pathling.fhirpath.ResourcePath;
import au.csiro.pathling.fhirpath.element.ElementPath;
import au.csiro.pathling.fhirpath.literal.LiteralPath;
+import jakarta.annotation.Nonnull;
import java.util.ArrayList;
import java.util.List;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.Column;
/**
diff --git a/fhirpath/src/test/java/au/csiro/pathling/test/assertions/DatasetAssert.java b/fhirpath/src/test/java/au/csiro/pathling/test/assertions/DatasetAssert.java
index 4dcf76cf76..270b0458e5 100644
--- a/fhirpath/src/test/java/au/csiro/pathling/test/assertions/DatasetAssert.java
+++ b/fhirpath/src/test/java/au/csiro/pathling/test/assertions/DatasetAssert.java
@@ -23,6 +23,7 @@
import au.csiro.pathling.test.builders.DatasetBuilder;
import au.csiro.pathling.utilities.Datasets;
+import jakarta.annotation.Nonnull;
import java.io.IOException;
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
@@ -32,7 +33,6 @@
import java.util.Collection;
import java.util.List;
import java.util.function.UnaryOperator;
-import javax.annotation.Nonnull;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.file.SimplePathVisitor;
diff --git a/fhirpath/src/test/java/au/csiro/pathling/test/assertions/ElementPathAssertion.java b/fhirpath/src/test/java/au/csiro/pathling/test/assertions/ElementPathAssertion.java
index c7c097ceaf..7eba98eb2e 100644
--- a/fhirpath/src/test/java/au/csiro/pathling/test/assertions/ElementPathAssertion.java
+++ b/fhirpath/src/test/java/au/csiro/pathling/test/assertions/ElementPathAssertion.java
@@ -22,7 +22,7 @@
import au.csiro.pathling.fhirpath.element.ElementDefinition;
import au.csiro.pathling.fhirpath.element.ElementPath;
-import javax.annotation.Nonnull;
+import jakarta.annotation.Nonnull;
import org.hl7.fhir.r4.model.Enumerations.FHIRDefinedType;
/**
diff --git a/fhirpath/src/test/java/au/csiro/pathling/test/assertions/FhirPathAssertion.java b/fhirpath/src/test/java/au/csiro/pathling/test/assertions/FhirPathAssertion.java
index 790d95fa82..9cb2d90fe4 100644
--- a/fhirpath/src/test/java/au/csiro/pathling/test/assertions/FhirPathAssertion.java
+++ b/fhirpath/src/test/java/au/csiro/pathling/test/assertions/FhirPathAssertion.java
@@ -18,7 +18,7 @@
package au.csiro.pathling.test.assertions;
import au.csiro.pathling.fhirpath.FhirPath;
-import javax.annotation.Nonnull;
+import jakarta.annotation.Nonnull;
/**
* @author John Grimes
diff --git a/fhirpath/src/test/java/au/csiro/pathling/test/assertions/LiteralPathAssertion.java b/fhirpath/src/test/java/au/csiro/pathling/test/assertions/LiteralPathAssertion.java
index cc9efddfe6..0aac52f28d 100644
--- a/fhirpath/src/test/java/au/csiro/pathling/test/assertions/LiteralPathAssertion.java
+++ b/fhirpath/src/test/java/au/csiro/pathling/test/assertions/LiteralPathAssertion.java
@@ -22,9 +22,9 @@
import au.csiro.pathling.fhirpath.literal.CodingLiteralPath;
import au.csiro.pathling.fhirpath.literal.LiteralPath;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.util.function.Function;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import org.hl7.fhir.r4.model.Coding;
/**
diff --git a/fhirpath/src/test/java/au/csiro/pathling/test/assertions/ResourcePathAssertion.java b/fhirpath/src/test/java/au/csiro/pathling/test/assertions/ResourcePathAssertion.java
index 50989cb586..eec2d119f3 100644
--- a/fhirpath/src/test/java/au/csiro/pathling/test/assertions/ResourcePathAssertion.java
+++ b/fhirpath/src/test/java/au/csiro/pathling/test/assertions/ResourcePathAssertion.java
@@ -20,7 +20,7 @@
import static org.junit.jupiter.api.Assertions.assertEquals;
import au.csiro.pathling.fhirpath.ResourcePath;
-import javax.annotation.Nonnull;
+import jakarta.annotation.Nonnull;
import org.hl7.fhir.r4.model.Enumerations.ResourceType;
/**
diff --git a/fhirpath/src/test/java/au/csiro/pathling/test/builders/DatasetBuilder.java b/fhirpath/src/test/java/au/csiro/pathling/test/builders/DatasetBuilder.java
index 6d3743ef7d..0617a9ba52 100644
--- a/fhirpath/src/test/java/au/csiro/pathling/test/builders/DatasetBuilder.java
+++ b/fhirpath/src/test/java/au/csiro/pathling/test/builders/DatasetBuilder.java
@@ -22,12 +22,12 @@
import static java.util.Objects.requireNonNull;
import au.csiro.pathling.fhirpath.Orderable;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.Function;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import lombok.extern.slf4j.Slf4j;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
diff --git a/fhirpath/src/test/java/au/csiro/pathling/test/builders/ElementPathBuilder.java b/fhirpath/src/test/java/au/csiro/pathling/test/builders/ElementPathBuilder.java
index fe8da482b0..9a68fd3b48 100644
--- a/fhirpath/src/test/java/au/csiro/pathling/test/builders/ElementPathBuilder.java
+++ b/fhirpath/src/test/java/au/csiro/pathling/test/builders/ElementPathBuilder.java
@@ -25,9 +25,9 @@
import au.csiro.pathling.fhirpath.element.ElementDefinition;
import au.csiro.pathling.fhirpath.element.ElementPath;
import au.csiro.pathling.test.helpers.SparkHelpers.IdAndValueColumns;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.util.Optional;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
diff --git a/fhirpath/src/test/java/au/csiro/pathling/test/builders/ParserContextBuilder.java b/fhirpath/src/test/java/au/csiro/pathling/test/builders/ParserContextBuilder.java
index 06955007a8..87306c2147 100644
--- a/fhirpath/src/test/java/au/csiro/pathling/test/builders/ParserContextBuilder.java
+++ b/fhirpath/src/test/java/au/csiro/pathling/test/builders/ParserContextBuilder.java
@@ -27,13 +27,13 @@
import au.csiro.pathling.terminology.TerminologyServiceFactory;
import au.csiro.pathling.test.DefaultAnswer;
import ca.uhn.fhir.context.FhirContext;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.SparkSession;
import org.mockito.Mockito;
diff --git a/fhirpath/src/test/java/au/csiro/pathling/test/builders/ResourceDatasetBuilder.java b/fhirpath/src/test/java/au/csiro/pathling/test/builders/ResourceDatasetBuilder.java
index e2f14c3854..204737959a 100644
--- a/fhirpath/src/test/java/au/csiro/pathling/test/builders/ResourceDatasetBuilder.java
+++ b/fhirpath/src/test/java/au/csiro/pathling/test/builders/ResourceDatasetBuilder.java
@@ -17,7 +17,7 @@
package au.csiro.pathling.test.builders;
-import javax.annotation.Nonnull;
+import jakarta.annotation.Nonnull;
import org.apache.spark.sql.SparkSession;
import org.apache.spark.sql.types.DataTypes;
diff --git a/fhirpath/src/test/java/au/csiro/pathling/test/builders/ResourcePathBuilder.java b/fhirpath/src/test/java/au/csiro/pathling/test/builders/ResourcePathBuilder.java
index 20c2f03fbc..fbd1d3a94a 100644
--- a/fhirpath/src/test/java/au/csiro/pathling/test/builders/ResourcePathBuilder.java
+++ b/fhirpath/src/test/java/au/csiro/pathling/test/builders/ResourcePathBuilder.java
@@ -29,13 +29,13 @@
import au.csiro.pathling.test.fixtures.PatientResourceRowFixture;
import ca.uhn.fhir.context.FhirContext;
import ca.uhn.fhir.context.RuntimeResourceDefinition;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
diff --git a/fhirpath/src/test/java/au/csiro/pathling/test/builders/UntypedResourcePathBuilder.java b/fhirpath/src/test/java/au/csiro/pathling/test/builders/UntypedResourcePathBuilder.java
index e72d59327a..7acae1a52a 100644
--- a/fhirpath/src/test/java/au/csiro/pathling/test/builders/UntypedResourcePathBuilder.java
+++ b/fhirpath/src/test/java/au/csiro/pathling/test/builders/UntypedResourcePathBuilder.java
@@ -23,9 +23,9 @@
import au.csiro.pathling.fhirpath.UntypedResourcePath;
import au.csiro.pathling.fhirpath.element.ReferencePath;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.util.Optional;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
diff --git a/fhirpath/src/test/java/au/csiro/pathling/test/fixtures/PatientListBuilder.java b/fhirpath/src/test/java/au/csiro/pathling/test/fixtures/PatientListBuilder.java
index f04a7d44fe..bdf7dd73b1 100644
--- a/fhirpath/src/test/java/au/csiro/pathling/test/fixtures/PatientListBuilder.java
+++ b/fhirpath/src/test/java/au/csiro/pathling/test/fixtures/PatientListBuilder.java
@@ -18,10 +18,10 @@
package au.csiro.pathling.test.fixtures;
import au.csiro.pathling.test.builders.DatasetBuilder;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.util.Arrays;
import java.util.List;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import org.apache.spark.sql.SparkSession;
import org.apache.spark.sql.types.DataType;
import org.apache.spark.sql.types.DataTypes;
diff --git a/fhirpath/src/test/java/au/csiro/pathling/test/fixtures/PatientResourceRowFixture.java b/fhirpath/src/test/java/au/csiro/pathling/test/fixtures/PatientResourceRowFixture.java
index e79bf8ab4d..44644ae3d0 100644
--- a/fhirpath/src/test/java/au/csiro/pathling/test/fixtures/PatientResourceRowFixture.java
+++ b/fhirpath/src/test/java/au/csiro/pathling/test/fixtures/PatientResourceRowFixture.java
@@ -18,11 +18,11 @@
package au.csiro.pathling.test.fixtures;
import au.csiro.pathling.test.builders.DatasetBuilder;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.RowFactory;
diff --git a/fhirpath/src/test/java/au/csiro/pathling/test/helpers/FhirHelpers.java b/fhirpath/src/test/java/au/csiro/pathling/test/helpers/FhirHelpers.java
index e2ce3fde71..a5560f5ef5 100644
--- a/fhirpath/src/test/java/au/csiro/pathling/test/helpers/FhirHelpers.java
+++ b/fhirpath/src/test/java/au/csiro/pathling/test/helpers/FhirHelpers.java
@@ -23,9 +23,8 @@
import au.csiro.pathling.fhirpath.element.ElementDefinition;
import ca.uhn.fhir.context.FhirContext;
import ca.uhn.fhir.context.RuntimeResourceDefinition;
-import java.util.Objects;
+import jakarta.annotation.Nonnull;
import java.util.Optional;
-import javax.annotation.Nonnull;
import org.hl7.fhir.r4.model.Enumerations.ResourceType;
import org.springframework.stereotype.Component;
diff --git a/fhirpath/src/test/java/au/csiro/pathling/test/helpers/SparkHelpers.java b/fhirpath/src/test/java/au/csiro/pathling/test/helpers/SparkHelpers.java
index af7fd3ac51..42b86584a6 100644
--- a/fhirpath/src/test/java/au/csiro/pathling/test/helpers/SparkHelpers.java
+++ b/fhirpath/src/test/java/au/csiro/pathling/test/helpers/SparkHelpers.java
@@ -22,13 +22,13 @@
import au.csiro.pathling.encoders.datatypes.DecimalCustomCoder;
import au.csiro.pathling.fhirpath.encoding.QuantityEncoding;
+import jakarta.annotation.Nonnull;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
-import javax.annotation.Nonnull;
import lombok.Value;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Dataset;
diff --git a/fhirpath/src/test/java/au/csiro/pathling/test/helpers/TestHelpers.java b/fhirpath/src/test/java/au/csiro/pathling/test/helpers/TestHelpers.java
index 10b27c626f..60a40c0a6b 100644
--- a/fhirpath/src/test/java/au/csiro/pathling/test/helpers/TestHelpers.java
+++ b/fhirpath/src/test/java/au/csiro/pathling/test/helpers/TestHelpers.java
@@ -25,11 +25,11 @@
import au.csiro.pathling.fhirpath.ResourcePath;
import au.csiro.pathling.io.source.DataSource;
import io.delta.tables.DeltaTable;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;
import java.util.Set;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SparkSession;
diff --git a/fhirpath/src/test/java/au/csiro/pathling/test/stubs/TestTerminologyServiceFactory.java b/fhirpath/src/test/java/au/csiro/pathling/test/stubs/TestTerminologyServiceFactory.java
index 8a048feaae..687abce81b 100644
--- a/fhirpath/src/test/java/au/csiro/pathling/test/stubs/TestTerminologyServiceFactory.java
+++ b/fhirpath/src/test/java/au/csiro/pathling/test/stubs/TestTerminologyServiceFactory.java
@@ -20,7 +20,7 @@
import au.csiro.pathling.terminology.TerminologyService;
import au.csiro.pathling.terminology.TerminologyServiceFactory;
import au.csiro.pathling.test.SharedMocks;
-import javax.annotation.Nonnull;
+import jakarta.annotation.Nonnull;
public class TestTerminologyServiceFactory implements TerminologyServiceFactory {
diff --git a/library-api/src/main/java/au/csiro/pathling/library/DecodeResourceMapPartitions.java b/library-api/src/main/java/au/csiro/pathling/library/DecodeResourceMapPartitions.java
index c007c02e6b..a1353647b8 100644
--- a/library-api/src/main/java/au/csiro/pathling/library/DecodeResourceMapPartitions.java
+++ b/library-api/src/main/java/au/csiro/pathling/library/DecodeResourceMapPartitions.java
@@ -18,10 +18,9 @@
package au.csiro.pathling.library;
import ca.uhn.fhir.context.FhirVersionEnum;
-import ca.uhn.fhir.parser.IParser;
+import jakarta.annotation.Nonnull;
import java.util.Iterator;
import java.util.stream.StreamSupport;
-import javax.annotation.Nonnull;
import org.apache.spark.api.java.function.MapPartitionsFunction;
import org.hl7.fhir.instance.model.api.IBaseResource;
diff --git a/library-api/src/main/java/au/csiro/pathling/library/EncodeBundleMapPartitions.java b/library-api/src/main/java/au/csiro/pathling/library/EncodeBundleMapPartitions.java
index 61499c4ed0..c95a66ed71 100644
--- a/library-api/src/main/java/au/csiro/pathling/library/EncodeBundleMapPartitions.java
+++ b/library-api/src/main/java/au/csiro/pathling/library/EncodeBundleMapPartitions.java
@@ -19,8 +19,8 @@
import au.csiro.pathling.support.FhirConversionSupport;
import ca.uhn.fhir.context.FhirVersionEnum;
+import jakarta.annotation.Nonnull;
import java.util.stream.Stream;
-import javax.annotation.Nonnull;
import org.hl7.fhir.instance.model.api.IBaseBundle;
import org.hl7.fhir.instance.model.api.IBaseResource;
diff --git a/library-api/src/main/java/au/csiro/pathling/library/EncodeMapPartitions.java b/library-api/src/main/java/au/csiro/pathling/library/EncodeMapPartitions.java
index 5ca20ac2b9..c6ca4c389c 100644
--- a/library-api/src/main/java/au/csiro/pathling/library/EncodeMapPartitions.java
+++ b/library-api/src/main/java/au/csiro/pathling/library/EncodeMapPartitions.java
@@ -18,11 +18,10 @@
package au.csiro.pathling.library;
import ca.uhn.fhir.context.FhirVersionEnum;
-import ca.uhn.fhir.parser.IParser;
+import jakarta.annotation.Nonnull;
import java.util.Iterator;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
-import javax.annotation.Nonnull;
import org.apache.spark.api.java.function.MapPartitionsFunction;
import org.hl7.fhir.instance.model.api.IBaseResource;
diff --git a/library-api/src/main/java/au/csiro/pathling/library/EncodeResourceMapPartitions.java b/library-api/src/main/java/au/csiro/pathling/library/EncodeResourceMapPartitions.java
index addeef473e..a3d068fa44 100644
--- a/library-api/src/main/java/au/csiro/pathling/library/EncodeResourceMapPartitions.java
+++ b/library-api/src/main/java/au/csiro/pathling/library/EncodeResourceMapPartitions.java
@@ -18,8 +18,8 @@
package au.csiro.pathling.library;
import ca.uhn.fhir.context.FhirVersionEnum;
+import jakarta.annotation.Nonnull;
import java.util.stream.Stream;
-import javax.annotation.Nonnull;
import org.hl7.fhir.instance.model.api.IBaseResource;
class EncodeResourceMapPartitions extends
diff --git a/library-api/src/main/java/au/csiro/pathling/library/PathlingContext.java b/library-api/src/main/java/au/csiro/pathling/library/PathlingContext.java
index 8b8b3f5b80..8d5f1b6175 100644
--- a/library-api/src/main/java/au/csiro/pathling/library/PathlingContext.java
+++ b/library-api/src/main/java/au/csiro/pathling/library/PathlingContext.java
@@ -38,8 +38,8 @@
import ca.uhn.fhir.context.FhirContext;
import ca.uhn.fhir.context.FhirVersionEnum;
import ca.uhn.fhir.context.RuntimeResourceDefinition;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import org.apache.spark.sql.Column;
diff --git a/library-api/src/main/java/au/csiro/pathling/library/ResourceParser.java b/library-api/src/main/java/au/csiro/pathling/library/ResourceParser.java
index 2fc6298e1e..04e4a37238 100644
--- a/library-api/src/main/java/au/csiro/pathling/library/ResourceParser.java
+++ b/library-api/src/main/java/au/csiro/pathling/library/ResourceParser.java
@@ -25,7 +25,7 @@
import ca.uhn.fhir.context.FhirContext;
import ca.uhn.fhir.context.FhirVersionEnum;
import ca.uhn.fhir.parser.IParser;
-import javax.annotation.Nonnull;
+import jakarta.annotation.Nonnull;
import org.hl7.fhir.instance.model.api.IBaseBundle;
import org.hl7.fhir.instance.model.api.IBaseResource;
import org.hl7.fhir.r4.model.Bundle;
diff --git a/library-api/src/main/java/au/csiro/pathling/library/TerminologyHelpers.java b/library-api/src/main/java/au/csiro/pathling/library/TerminologyHelpers.java
index 1fb4570df4..984cf78fab 100644
--- a/library-api/src/main/java/au/csiro/pathling/library/TerminologyHelpers.java
+++ b/library-api/src/main/java/au/csiro/pathling/library/TerminologyHelpers.java
@@ -20,10 +20,10 @@
import static org.apache.spark.sql.functions.lit;
import au.csiro.pathling.fhirpath.encoding.CodingEncoding;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import org.apache.spark.sql.Column;
public class TerminologyHelpers {
diff --git a/library-api/src/main/java/au/csiro/pathling/library/io/sink/CatalogSink.java b/library-api/src/main/java/au/csiro/pathling/library/io/sink/CatalogSink.java
index 5d5c9f8b07..5a7bba85f0 100644
--- a/library-api/src/main/java/au/csiro/pathling/library/io/sink/CatalogSink.java
+++ b/library-api/src/main/java/au/csiro/pathling/library/io/sink/CatalogSink.java
@@ -20,8 +20,8 @@
import au.csiro.pathling.io.Database;
import au.csiro.pathling.io.ImportMode;
import au.csiro.pathling.library.PathlingContext;
+import jakarta.annotation.Nonnull;
import java.util.Optional;
-import javax.annotation.Nonnull;
public class CatalogSink extends DatabaseSink {
diff --git a/library-api/src/main/java/au/csiro/pathling/library/io/sink/DataSink.java b/library-api/src/main/java/au/csiro/pathling/library/io/sink/DataSink.java
index b41c84efb8..ea2bd753e1 100644
--- a/library-api/src/main/java/au/csiro/pathling/library/io/sink/DataSink.java
+++ b/library-api/src/main/java/au/csiro/pathling/library/io/sink/DataSink.java
@@ -18,7 +18,7 @@
package au.csiro.pathling.library.io.sink;
import au.csiro.pathling.io.source.DataSource;
-import javax.annotation.Nonnull;
+import jakarta.annotation.Nonnull;
/**
* Represents a data sink that knows how to read data from a {@link DataSource} and write it to some
diff --git a/library-api/src/main/java/au/csiro/pathling/library/io/sink/DataSinkBuilder.java b/library-api/src/main/java/au/csiro/pathling/library/io/sink/DataSinkBuilder.java
index 857b1154da..b96ed1b5b6 100644
--- a/library-api/src/main/java/au/csiro/pathling/library/io/sink/DataSinkBuilder.java
+++ b/library-api/src/main/java/au/csiro/pathling/library/io/sink/DataSinkBuilder.java
@@ -22,9 +22,9 @@
import au.csiro.pathling.io.ImportMode;
import au.csiro.pathling.io.source.DataSource;
import au.csiro.pathling.library.PathlingContext;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.util.function.UnaryOperator;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
/**
* This class knows how to take an @link{EnumerableDataSource} and write it to a variety of
diff --git a/library-api/src/main/java/au/csiro/pathling/library/io/sink/DatabaseSink.java b/library-api/src/main/java/au/csiro/pathling/library/io/sink/DatabaseSink.java
index 398e3843d5..f16eaef901 100644
--- a/library-api/src/main/java/au/csiro/pathling/library/io/sink/DatabaseSink.java
+++ b/library-api/src/main/java/au/csiro/pathling/library/io/sink/DatabaseSink.java
@@ -20,7 +20,7 @@
import au.csiro.pathling.io.Database;
import au.csiro.pathling.io.ImportMode;
import au.csiro.pathling.io.source.DataSource;
-import javax.annotation.Nonnull;
+import jakarta.annotation.Nonnull;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.hl7.fhir.r4.model.Enumerations.ResourceType;
diff --git a/library-api/src/main/java/au/csiro/pathling/library/io/sink/DeltaSink.java b/library-api/src/main/java/au/csiro/pathling/library/io/sink/DeltaSink.java
index 1ea47fa797..6b1a409c57 100644
--- a/library-api/src/main/java/au/csiro/pathling/library/io/sink/DeltaSink.java
+++ b/library-api/src/main/java/au/csiro/pathling/library/io/sink/DeltaSink.java
@@ -21,7 +21,7 @@
import au.csiro.pathling.io.ImportMode;
import au.csiro.pathling.io.source.DataSource;
import au.csiro.pathling.library.PathlingContext;
-import javax.annotation.Nonnull;
+import jakarta.annotation.Nonnull;
/**
* Represents a data sink that knows how to read data from a {@link DataSource} and write it to a
diff --git a/library-api/src/main/java/au/csiro/pathling/library/io/sink/NdjsonSink.java b/library-api/src/main/java/au/csiro/pathling/library/io/sink/NdjsonSink.java
index 40f3065f22..fe0e55de0c 100644
--- a/library-api/src/main/java/au/csiro/pathling/library/io/sink/NdjsonSink.java
+++ b/library-api/src/main/java/au/csiro/pathling/library/io/sink/NdjsonSink.java
@@ -23,8 +23,8 @@
import au.csiro.pathling.io.source.DataSource;
import au.csiro.pathling.library.FhirMimeTypes;
import au.csiro.pathling.library.PathlingContext;
+import jakarta.annotation.Nonnull;
import java.util.function.UnaryOperator;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.Dataset;
import org.hl7.fhir.r4.model.Enumerations.ResourceType;
diff --git a/library-api/src/main/java/au/csiro/pathling/library/io/sink/ParquetSink.java b/library-api/src/main/java/au/csiro/pathling/library/io/sink/ParquetSink.java
index d2c83b4db9..3b89c7c1c6 100644
--- a/library-api/src/main/java/au/csiro/pathling/library/io/sink/ParquetSink.java
+++ b/library-api/src/main/java/au/csiro/pathling/library/io/sink/ParquetSink.java
@@ -20,7 +20,7 @@
import static au.csiro.pathling.io.FileSystemPersistence.safelyJoinPaths;
import au.csiro.pathling.io.source.DataSource;
-import javax.annotation.Nonnull;
+import jakarta.annotation.Nonnull;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.hl7.fhir.r4.model.Enumerations.ResourceType;
diff --git a/library-api/src/main/java/au/csiro/pathling/library/io/source/AbstractSource.java b/library-api/src/main/java/au/csiro/pathling/library/io/source/AbstractSource.java
index a14f4f4e19..37ed90f59f 100644
--- a/library-api/src/main/java/au/csiro/pathling/library/io/source/AbstractSource.java
+++ b/library-api/src/main/java/au/csiro/pathling/library/io/source/AbstractSource.java
@@ -29,9 +29,9 @@
import au.csiro.pathling.library.query.AggregateQuery;
import au.csiro.pathling.library.query.ExtractQuery;
import au.csiro.pathling.library.query.QueryDispatcher;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.util.Optional;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import org.hl7.fhir.r4.model.Enumerations.ResourceType;
/**
diff --git a/library-api/src/main/java/au/csiro/pathling/library/io/source/BundlesSource.java b/library-api/src/main/java/au/csiro/pathling/library/io/source/BundlesSource.java
index 1ee9c2659a..406aa94b85 100644
--- a/library-api/src/main/java/au/csiro/pathling/library/io/source/BundlesSource.java
+++ b/library-api/src/main/java/au/csiro/pathling/library/io/source/BundlesSource.java
@@ -21,11 +21,11 @@
import au.csiro.pathling.library.FhirMimeTypes;
import au.csiro.pathling.library.PathlingContext;
+import jakarta.annotation.Nonnull;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.function.Function;
-import javax.annotation.Nonnull;
import org.hl7.fhir.r4.model.Enumerations.ResourceType;
/**
diff --git a/library-api/src/main/java/au/csiro/pathling/library/io/source/CatalogSource.java b/library-api/src/main/java/au/csiro/pathling/library/io/source/CatalogSource.java
index a332e76861..cdb6197bb3 100644
--- a/library-api/src/main/java/au/csiro/pathling/library/io/source/CatalogSource.java
+++ b/library-api/src/main/java/au/csiro/pathling/library/io/source/CatalogSource.java
@@ -19,8 +19,8 @@
import au.csiro.pathling.io.Database;
import au.csiro.pathling.library.PathlingContext;
+import jakarta.annotation.Nonnull;
import java.util.Optional;
-import javax.annotation.Nonnull;
/**
* A class for making FHIR data in the Spark catalog available for query.
diff --git a/library-api/src/main/java/au/csiro/pathling/library/io/source/DataSourceBuilder.java b/library-api/src/main/java/au/csiro/pathling/library/io/source/DataSourceBuilder.java
index 29f53ce861..80d1466197 100644
--- a/library-api/src/main/java/au/csiro/pathling/library/io/source/DataSourceBuilder.java
+++ b/library-api/src/main/java/au/csiro/pathling/library/io/source/DataSourceBuilder.java
@@ -21,10 +21,10 @@
import static java.util.stream.Collectors.toSet;
import au.csiro.pathling.library.PathlingContext;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.util.Set;
import java.util.function.Function;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import org.hl7.fhir.r4.model.Enumerations.ResourceType;
/**
diff --git a/library-api/src/main/java/au/csiro/pathling/library/io/source/DatabaseSource.java b/library-api/src/main/java/au/csiro/pathling/library/io/source/DatabaseSource.java
index 3fe008196b..d9966f2c53 100644
--- a/library-api/src/main/java/au/csiro/pathling/library/io/source/DatabaseSource.java
+++ b/library-api/src/main/java/au/csiro/pathling/library/io/source/DatabaseSource.java
@@ -19,9 +19,9 @@
import au.csiro.pathling.io.Database;
import au.csiro.pathling.library.PathlingContext;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.util.Set;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.hl7.fhir.r4.model.Enumerations.ResourceType;
diff --git a/library-api/src/main/java/au/csiro/pathling/library/io/source/DatasetSource.java b/library-api/src/main/java/au/csiro/pathling/library/io/source/DatasetSource.java
index 0b7753d0d8..81506d039f 100644
--- a/library-api/src/main/java/au/csiro/pathling/library/io/source/DatasetSource.java
+++ b/library-api/src/main/java/au/csiro/pathling/library/io/source/DatasetSource.java
@@ -21,12 +21,12 @@
import static java.util.Objects.requireNonNull;
import au.csiro.pathling.library.PathlingContext;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.hl7.fhir.r4.model.Enumerations.ResourceType;
diff --git a/library-api/src/main/java/au/csiro/pathling/library/io/source/DeltaSource.java b/library-api/src/main/java/au/csiro/pathling/library/io/source/DeltaSource.java
index 26e7d8782e..7ffb558315 100644
--- a/library-api/src/main/java/au/csiro/pathling/library/io/source/DeltaSource.java
+++ b/library-api/src/main/java/au/csiro/pathling/library/io/source/DeltaSource.java
@@ -19,7 +19,7 @@
import au.csiro.pathling.io.Database;
import au.csiro.pathling.library.PathlingContext;
-import javax.annotation.Nonnull;
+import jakarta.annotation.Nonnull;
/**
* A class for making FHIR data in a Delta database available for query.
diff --git a/library-api/src/main/java/au/csiro/pathling/library/io/source/FileSource.java b/library-api/src/main/java/au/csiro/pathling/library/io/source/FileSource.java
index e4521a5a13..2f05ca2c0d 100644
--- a/library-api/src/main/java/au/csiro/pathling/library/io/source/FileSource.java
+++ b/library-api/src/main/java/au/csiro/pathling/library/io/source/FileSource.java
@@ -22,9 +22,9 @@
import au.csiro.pathling.encoders.EncoderBuilder;
import au.csiro.pathling.io.FileSystemPersistence;
import au.csiro.pathling.library.PathlingContext;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.io.IOException;
-import java.net.URI;
-import java.net.URISyntaxException;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -32,8 +32,6 @@
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang3.tuple.Pair;
diff --git a/library-api/src/main/java/au/csiro/pathling/library/io/source/NdjsonSource.java b/library-api/src/main/java/au/csiro/pathling/library/io/source/NdjsonSource.java
index 31c88def5f..240e6eb4f9 100644
--- a/library-api/src/main/java/au/csiro/pathling/library/io/source/NdjsonSource.java
+++ b/library-api/src/main/java/au/csiro/pathling/library/io/source/NdjsonSource.java
@@ -19,12 +19,12 @@
import au.csiro.pathling.library.FhirMimeTypes;
import au.csiro.pathling.library.PathlingContext;
+import jakarta.annotation.Nonnull;
import java.util.Collections;
import java.util.Set;
import java.util.function.Function;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import javax.annotation.Nonnull;
import lombok.extern.slf4j.Slf4j;
/**
diff --git a/library-api/src/main/java/au/csiro/pathling/library/io/source/ParquetSource.java b/library-api/src/main/java/au/csiro/pathling/library/io/source/ParquetSource.java
index 6cd273e28c..1729003987 100644
--- a/library-api/src/main/java/au/csiro/pathling/library/io/source/ParquetSource.java
+++ b/library-api/src/main/java/au/csiro/pathling/library/io/source/ParquetSource.java
@@ -18,8 +18,8 @@
package au.csiro.pathling.library.io.source;
import au.csiro.pathling.library.PathlingContext;
+import jakarta.annotation.Nonnull;
import java.util.Collections;
-import javax.annotation.Nonnull;
/**
* A class for making FHIR data in Parquet format available for query. It is assumed that the schema
diff --git a/library-api/src/main/java/au/csiro/pathling/library/io/source/QueryableDataSource.java b/library-api/src/main/java/au/csiro/pathling/library/io/source/QueryableDataSource.java
index 8c16107178..d1ffe21ab5 100644
--- a/library-api/src/main/java/au/csiro/pathling/library/io/source/QueryableDataSource.java
+++ b/library-api/src/main/java/au/csiro/pathling/library/io/source/QueryableDataSource.java
@@ -20,8 +20,8 @@
import au.csiro.pathling.library.io.sink.DataSinkBuilder;
import au.csiro.pathling.library.query.AggregateQuery;
import au.csiro.pathling.library.query.ExtractQuery;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import org.hl7.fhir.r4.model.Enumerations.ResourceType;
/**
diff --git a/library-api/src/main/java/au/csiro/pathling/library/query/AggregateQuery.java b/library-api/src/main/java/au/csiro/pathling/library/query/AggregateQuery.java
index 6e6bcb832e..d41da8057a 100644
--- a/library-api/src/main/java/au/csiro/pathling/library/query/AggregateQuery.java
+++ b/library-api/src/main/java/au/csiro/pathling/library/query/AggregateQuery.java
@@ -22,10 +22,10 @@
import au.csiro.pathling.aggregate.AggregateRequest;
import au.csiro.pathling.query.ExpressionWithLabel;
import au.csiro.pathling.utilities.Lists;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.util.ArrayList;
import java.util.List;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.hl7.fhir.r4.model.Enumerations.ResourceType;
diff --git a/library-api/src/main/java/au/csiro/pathling/library/query/ExtractQuery.java b/library-api/src/main/java/au/csiro/pathling/library/query/ExtractQuery.java
index b8440ca12a..2af752a147 100644
--- a/library-api/src/main/java/au/csiro/pathling/library/query/ExtractQuery.java
+++ b/library-api/src/main/java/au/csiro/pathling/library/query/ExtractQuery.java
@@ -23,11 +23,11 @@
import au.csiro.pathling.extract.ExtractRequest;
import au.csiro.pathling.query.ExpressionWithLabel;
import au.csiro.pathling.utilities.Lists;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.hl7.fhir.r4.model.Enumerations.ResourceType;
diff --git a/library-api/src/main/java/au/csiro/pathling/library/query/QueryBuilder.java b/library-api/src/main/java/au/csiro/pathling/library/query/QueryBuilder.java
index ff208f1ebb..5506e756be 100644
--- a/library-api/src/main/java/au/csiro/pathling/library/query/QueryBuilder.java
+++ b/library-api/src/main/java/au/csiro/pathling/library/query/QueryBuilder.java
@@ -19,10 +19,10 @@
import static au.csiro.pathling.utilities.Preconditions.requireNonBlank;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.util.ArrayList;
import java.util.List;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.hl7.fhir.r4.model.Enumerations.ResourceType;
diff --git a/library-api/src/main/java/au/csiro/pathling/library/query/QueryDispatcher.java b/library-api/src/main/java/au/csiro/pathling/library/query/QueryDispatcher.java
index 7e8b1c9374..69968d9ea6 100644
--- a/library-api/src/main/java/au/csiro/pathling/library/query/QueryDispatcher.java
+++ b/library-api/src/main/java/au/csiro/pathling/library/query/QueryDispatcher.java
@@ -21,7 +21,7 @@
import au.csiro.pathling.aggregate.AggregateRequest;
import au.csiro.pathling.extract.ExtractQueryExecutor;
import au.csiro.pathling.extract.ExtractRequest;
-import javax.annotation.Nonnull;
+import jakarta.annotation.Nonnull;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
diff --git a/library-api/src/test/java/au/csiro/pathling/library/PathlingContextTest.java b/library-api/src/test/java/au/csiro/pathling/library/PathlingContextTest.java
index fc90d73a7e..58d3fc26d4 100644
--- a/library-api/src/test/java/au/csiro/pathling/library/PathlingContextTest.java
+++ b/library-api/src/test/java/au/csiro/pathling/library/PathlingContextTest.java
@@ -46,6 +46,7 @@
import au.csiro.pathling.terminology.TerminologyService.Translation;
import au.csiro.pathling.terminology.TerminologyServiceFactory;
import ca.uhn.fhir.context.FhirVersionEnum;
+import jakarta.annotation.Nonnull;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
@@ -57,7 +58,6 @@
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import javax.annotation.Nonnull;
import javax.validation.ConstraintViolationException;
import lombok.extern.slf4j.Slf4j;
import org.apache.spark.sql.Column;
diff --git a/library-api/src/test/java/au/csiro/pathling/library/ResourceParserTest.java b/library-api/src/test/java/au/csiro/pathling/library/ResourceParserTest.java
index 23fa61aad9..285703c3fc 100644
--- a/library-api/src/test/java/au/csiro/pathling/library/ResourceParserTest.java
+++ b/library-api/src/test/java/au/csiro/pathling/library/ResourceParserTest.java
@@ -17,9 +17,12 @@
package au.csiro.pathling.library;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
import ca.uhn.fhir.context.FhirVersionEnum;
import com.google.common.base.Charsets;
import com.google.common.io.Resources;
+import java.io.IOException;
import org.hl7.fhir.r4.model.Bundle;
import org.hl7.fhir.r4.model.Claim;
import org.hl7.fhir.r4.model.Condition;
@@ -27,9 +30,6 @@
import org.hl7.fhir.r4.model.Reference;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-import java.io.IOException;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
public class ResourceParserTest {
diff --git a/library-api/src/test/java/au/csiro/pathling/library/TestHelpers.java b/library-api/src/test/java/au/csiro/pathling/library/TestHelpers.java
index 778e7e4284..d346ffcc81 100644
--- a/library-api/src/test/java/au/csiro/pathling/library/TestHelpers.java
+++ b/library-api/src/test/java/au/csiro/pathling/library/TestHelpers.java
@@ -17,7 +17,7 @@
package au.csiro.pathling.library;
-import javax.annotation.Nonnull;
+import jakarta.annotation.Nonnull;
import org.apache.spark.sql.SparkSession;
import org.apache.spark.sql.SparkSession.Builder;
diff --git a/library-api/src/test/java/au/csiro/pathling/library/io/DataSourcesTest.java b/library-api/src/test/java/au/csiro/pathling/library/io/DataSourcesTest.java
index 51dc0abad7..2f8c71b131 100644
--- a/library-api/src/test/java/au/csiro/pathling/library/io/DataSourcesTest.java
+++ b/library-api/src/test/java/au/csiro/pathling/library/io/DataSourcesTest.java
@@ -31,6 +31,7 @@
import au.csiro.pathling.library.io.source.QueryableDataSource;
import au.csiro.pathling.terminology.TerminologyServiceFactory;
import au.csiro.pathling.test.assertions.DatasetAssert;
+import jakarta.annotation.Nonnull;
import java.io.IOException;
import java.net.URISyntaxException;
import java.nio.file.Files;
@@ -38,7 +39,6 @@
import java.util.Collections;
import java.util.Set;
import java.util.function.Function;
-import javax.annotation.Nonnull;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FileUtils;
import org.apache.spark.sql.Dataset;
diff --git a/terminology/src/main/java/au/csiro/pathling/config/HttpClientCachingConfiguration.java b/terminology/src/main/java/au/csiro/pathling/config/HttpClientCachingConfiguration.java
index b652767b55..3d82f2c10a 100644
--- a/terminology/src/main/java/au/csiro/pathling/config/HttpClientCachingConfiguration.java
+++ b/terminology/src/main/java/au/csiro/pathling/config/HttpClientCachingConfiguration.java
@@ -17,14 +17,16 @@
package au.csiro.pathling.config;
+import static java.util.Objects.nonNull;
+
import au.csiro.pathling.config.HttpClientCachingConfiguration.ValidHttpCacheConfiguration;
+import jakarta.annotation.Nullable;
import java.io.Serializable;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
-import javax.annotation.Nullable;
import javax.validation.Constraint;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
@@ -34,8 +36,6 @@
import lombok.Builder;
import lombok.Data;
-import static java.util.Objects.nonNull;
-
/**
* Configuration relating to the caching of terminology requests.
*
diff --git a/terminology/src/main/java/au/csiro/pathling/config/HttpClientCachingStorageType.java b/terminology/src/main/java/au/csiro/pathling/config/HttpClientCachingStorageType.java
index 998d2a5692..0bbbb6804c 100644
--- a/terminology/src/main/java/au/csiro/pathling/config/HttpClientCachingStorageType.java
+++ b/terminology/src/main/java/au/csiro/pathling/config/HttpClientCachingStorageType.java
@@ -19,8 +19,7 @@
import static java.util.Objects.requireNonNull;
-import java.util.Objects;
-import javax.annotation.Nonnull;
+import jakarta.annotation.Nonnull;
/**
* Represents the type of storage used by the cache.
diff --git a/terminology/src/main/java/au/csiro/pathling/config/HttpClientConfiguration.java b/terminology/src/main/java/au/csiro/pathling/config/HttpClientConfiguration.java
index acdd901676..1fe7a8f656 100644
--- a/terminology/src/main/java/au/csiro/pathling/config/HttpClientConfiguration.java
+++ b/terminology/src/main/java/au/csiro/pathling/config/HttpClientConfiguration.java
@@ -20,7 +20,6 @@
import java.io.Serializable;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
-import javax.annotation.Nullable;
import lombok.Builder;
import lombok.Data;
diff --git a/terminology/src/main/java/au/csiro/pathling/config/TerminologyAuthConfiguration.java b/terminology/src/main/java/au/csiro/pathling/config/TerminologyAuthConfiguration.java
index 8ed9050344..178ff1b8c2 100644
--- a/terminology/src/main/java/au/csiro/pathling/config/TerminologyAuthConfiguration.java
+++ b/terminology/src/main/java/au/csiro/pathling/config/TerminologyAuthConfiguration.java
@@ -18,13 +18,13 @@
package au.csiro.pathling.config;
import au.csiro.pathling.config.TerminologyAuthConfiguration.ValidTerminologyAuthConfiguration;
+import jakarta.annotation.Nullable;
import java.io.Serializable;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
-import javax.annotation.Nullable;
import javax.validation.Constraint;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
@@ -123,5 +123,5 @@ public boolean isValid(final TerminologyAuthConfiguration value,
}
}
-
+
}
diff --git a/terminology/src/main/java/au/csiro/pathling/config/TerminologyConfiguration.java b/terminology/src/main/java/au/csiro/pathling/config/TerminologyConfiguration.java
index 76cb5f420f..7510352251 100644
--- a/terminology/src/main/java/au/csiro/pathling/config/TerminologyConfiguration.java
+++ b/terminology/src/main/java/au/csiro/pathling/config/TerminologyConfiguration.java
@@ -17,8 +17,8 @@
package au.csiro.pathling.config;
+import jakarta.annotation.Nullable;
import java.io.Serializable;
-import javax.annotation.Nullable;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
diff --git a/terminology/src/main/java/au/csiro/pathling/fhir/AcceptLanguageInterceptor.java b/terminology/src/main/java/au/csiro/pathling/fhir/AcceptLanguageInterceptor.java
index 3955033daa..cde841f023 100644
--- a/terminology/src/main/java/au/csiro/pathling/fhir/AcceptLanguageInterceptor.java
+++ b/terminology/src/main/java/au/csiro/pathling/fhir/AcceptLanguageInterceptor.java
@@ -21,8 +21,8 @@
import ca.uhn.fhir.interceptor.api.Interceptor;
import ca.uhn.fhir.interceptor.api.Pointcut;
import ca.uhn.fhir.rest.client.api.IHttpRequest;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import org.apache.http.HttpHeaders;
@Interceptor
diff --git a/terminology/src/main/java/au/csiro/pathling/fhir/AccessContext.java b/terminology/src/main/java/au/csiro/pathling/fhir/AccessContext.java
index f18531add4..8274723432 100644
--- a/terminology/src/main/java/au/csiro/pathling/fhir/AccessContext.java
+++ b/terminology/src/main/java/au/csiro/pathling/fhir/AccessContext.java
@@ -17,8 +17,8 @@
package au.csiro.pathling.fhir;
+import jakarta.annotation.Nonnull;
import java.time.Instant;
-import javax.annotation.Nonnull;
import lombok.Value;
@Value
diff --git a/terminology/src/main/java/au/csiro/pathling/fhir/AccessScope.java b/terminology/src/main/java/au/csiro/pathling/fhir/AccessScope.java
index f4799a6bc4..51e806d5e2 100644
--- a/terminology/src/main/java/au/csiro/pathling/fhir/AccessScope.java
+++ b/terminology/src/main/java/au/csiro/pathling/fhir/AccessScope.java
@@ -17,8 +17,8 @@
package au.csiro.pathling.fhir;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import lombok.Value;
@Value
diff --git a/terminology/src/main/java/au/csiro/pathling/fhir/ClientAuthInterceptor.java b/terminology/src/main/java/au/csiro/pathling/fhir/ClientAuthInterceptor.java
index 114c8d15fd..f1fbb4359d 100644
--- a/terminology/src/main/java/au/csiro/pathling/fhir/ClientAuthInterceptor.java
+++ b/terminology/src/main/java/au/csiro/pathling/fhir/ClientAuthInterceptor.java
@@ -27,6 +27,8 @@
import com.google.gson.FieldNamingPolicy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.io.Closeable;
import java.io.IOException;
import java.time.Instant;
@@ -34,8 +36,6 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.Header;
import org.apache.http.NameValuePair;
diff --git a/terminology/src/main/java/au/csiro/pathling/fhir/ClientCredentialsResponse.java b/terminology/src/main/java/au/csiro/pathling/fhir/ClientCredentialsResponse.java
index 4df40c794f..289cf721c6 100644
--- a/terminology/src/main/java/au/csiro/pathling/fhir/ClientCredentialsResponse.java
+++ b/terminology/src/main/java/au/csiro/pathling/fhir/ClientCredentialsResponse.java
@@ -17,7 +17,7 @@
package au.csiro.pathling.fhir;
-import javax.annotation.Nullable;
+import jakarta.annotation.Nullable;
import lombok.Value;
@Value
diff --git a/terminology/src/main/java/au/csiro/pathling/fhir/DefaultTerminologyClient.java b/terminology/src/main/java/au/csiro/pathling/fhir/DefaultTerminologyClient.java
index c8b4e712e3..efd8861f46 100644
--- a/terminology/src/main/java/au/csiro/pathling/fhir/DefaultTerminologyClient.java
+++ b/terminology/src/main/java/au/csiro/pathling/fhir/DefaultTerminologyClient.java
@@ -22,8 +22,9 @@
import au.csiro.pathling.utilities.ResourceCloser;
import ca.uhn.fhir.rest.client.api.IGenericClient;
import ca.uhn.fhir.rest.gclient.IOperationUntypedWithInput;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
+import java.io.Closeable;
import org.apache.http.HttpHeaders;
import org.hl7.fhir.r4.model.BooleanType;
import org.hl7.fhir.r4.model.CodeSystem;
@@ -33,7 +34,6 @@
import org.hl7.fhir.r4.model.StringType;
import org.hl7.fhir.r4.model.UriType;
import org.hl7.fhir.r4.model.ValueSet;
-import java.io.Closeable;
/**
* An implementation of {@link TerminologyClient} that uses cacheable GET requests.
diff --git a/terminology/src/main/java/au/csiro/pathling/fhir/ParametersUtils.java b/terminology/src/main/java/au/csiro/pathling/fhir/ParametersUtils.java
index 53ac231b17..65024ad563 100644
--- a/terminology/src/main/java/au/csiro/pathling/fhir/ParametersUtils.java
+++ b/terminology/src/main/java/au/csiro/pathling/fhir/ParametersUtils.java
@@ -17,6 +17,8 @@
package au.csiro.pathling.fhir;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
@@ -24,8 +26,6 @@
import java.util.Objects;
import java.util.function.Supplier;
import java.util.stream.Stream;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
diff --git a/terminology/src/main/java/au/csiro/pathling/fhir/TerminologyClient.java b/terminology/src/main/java/au/csiro/pathling/fhir/TerminologyClient.java
index c63d4c7709..36f77f6cb5 100644
--- a/terminology/src/main/java/au/csiro/pathling/fhir/TerminologyClient.java
+++ b/terminology/src/main/java/au/csiro/pathling/fhir/TerminologyClient.java
@@ -17,6 +17,9 @@
package au.csiro.pathling.fhir;
+import static java.util.Objects.nonNull;
+import static java.util.Objects.requireNonNull;
+
import au.csiro.pathling.config.TerminologyAuthConfiguration;
import au.csiro.pathling.config.TerminologyConfiguration;
import ca.uhn.fhir.context.FhirContext;
@@ -27,8 +30,9 @@
import ca.uhn.fhir.rest.client.api.ServerValidationModeEnum;
import ca.uhn.fhir.rest.client.interceptor.LoggingInterceptor;
import ca.uhn.fhir.rest.gclient.IOperationUntypedWithInput;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
+import java.io.Closeable;
import org.apache.http.client.HttpClient;
import org.hl7.fhir.r4.model.BooleanType;
import org.hl7.fhir.r4.model.CodeSystem;
@@ -39,10 +43,6 @@
import org.hl7.fhir.r4.model.ValueSet;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.io.Closeable;
-
-import static java.util.Objects.nonNull;
-import static java.util.Objects.requireNonNull;
/**
* The client interface to FHIR terminology operations.
@@ -60,7 +60,8 @@ public interface TerminologyClient extends Closeable {
* @param version the version of the code system to validate against
* @param code the code to validate
* @return a {@link Parameters} resource
- * @see ValueSet/$validate-code
+ * @see ValueSet/$validate-code
*/
@Operation(name = "$validate-code", type = ValueSet.class, idempotent = true)
@Nonnull
@@ -79,7 +80,8 @@ Parameters validateCode(
* @param version the version of the code system to validate against
* @param code the code to validate
* @return an {@link IOperationUntypedWithInput} that can be customized and executed later
- * @see ValueSet/$validate-code
+ * @see ValueSet/$validate-code
*/
IOperationUntypedWithInput buildValidateCode(@Nonnull UriType url,
@Nonnull UriType system,
@@ -93,7 +95,8 @@ IOperationUntypedWithInput buildValidateCode(@Nonnull UriType url,
* @param reverse if true, the translation will be reversed
* @param target the URL of the value set within which the translation is sought
* @return a {@link Parameters} resource
- * @see ConceptMap/$translate
+ * @see ConceptMap/$translate
*/
@Operation(name = "$translate", type = CodeSystem.class, idempotent = true)
@Nonnull
@@ -116,7 +119,8 @@ Parameters translate(
* @param reverse if true, the translation will be reversed
* @param target the URL of the value set within which the translation is sought
* @return an {@link IOperationUntypedWithInput} that can be customized and executed later
- * @see ConceptMap/$translate
+ * @see ConceptMap/$translate
*/
@Nonnull
IOperationUntypedWithInput buildTranslate(@Nonnull UriType url,
@@ -130,7 +134,8 @@ IOperationUntypedWithInput buildTranslate(@Nonnull UriType url,
* @param system the system of the codes being tested
* @param version the version of the code system that the codes are from
* @return a {@link Parameters} resource
- * @see CodeSystem/$subsumes
+ * @see CodeSystem/$subsumes
*/
@Operation(name = "$subsumes", type = CodeSystem.class, idempotent = true)
@Nonnull
@@ -149,7 +154,8 @@ Parameters subsumes(
* @param system the system of the codes being tested
* @param version the version of the code system that the codes are from
* @return an {@link IOperationUntypedWithInput} that can be customized and executed later
- * @see CodeSystem/$subsumes
+ * @see CodeSystem/$subsumes
*/
@Nonnull
IOperationUntypedWithInput buildSubsumes(@Nonnull CodeType codeA,
@@ -162,7 +168,8 @@ IOperationUntypedWithInput buildSubsumes(@Nonnull CodeType codeA,
* @param property the property or properties to be returned to the response
* @param acceptLanguage the preferred language for the localizable return values
* @return a {@link Parameters} resource
- * @see CodeSystem/$lookup
+ * @see CodeSystem/$lookup
*/
@Operation(name = "$lookup", type = CodeSystem.class, idempotent = true)
@Nonnull
@@ -183,7 +190,8 @@ Parameters lookup(
* @param property the property or properties to be returned in the response
* @param acceptLanguage the preferred language for the localizable return values
* @return an {@link IOperationUntypedWithInput} that can be customized and executed later
- * @see CodeSystem/$lookup
+ * @see CodeSystem/$lookup
*/
@Nonnull
IOperationUntypedWithInput buildLookup(@Nonnull UriType system,
diff --git a/terminology/src/main/java/au/csiro/pathling/fhir/UserAgentInterceptor.java b/terminology/src/main/java/au/csiro/pathling/fhir/UserAgentInterceptor.java
index fd5c6ce545..559b521316 100644
--- a/terminology/src/main/java/au/csiro/pathling/fhir/UserAgentInterceptor.java
+++ b/terminology/src/main/java/au/csiro/pathling/fhir/UserAgentInterceptor.java
@@ -22,8 +22,8 @@
import ca.uhn.fhir.interceptor.api.Interceptor;
import ca.uhn.fhir.interceptor.api.Pointcut;
import ca.uhn.fhir.rest.client.api.IHttpRequest;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
@Interceptor
public class UserAgentInterceptor {
diff --git a/terminology/src/main/java/au/csiro/pathling/fhirpath/CodingHelpers.java b/terminology/src/main/java/au/csiro/pathling/fhirpath/CodingHelpers.java
index f7ab5e309e..601f102d43 100644
--- a/terminology/src/main/java/au/csiro/pathling/fhirpath/CodingHelpers.java
+++ b/terminology/src/main/java/au/csiro/pathling/fhirpath/CodingHelpers.java
@@ -17,7 +17,7 @@
package au.csiro.pathling.fhirpath;
-import javax.annotation.Nullable;
+import jakarta.annotation.Nullable;
import org.hl7.fhir.r4.model.Coding;
/**
diff --git a/terminology/src/main/java/au/csiro/pathling/fhirpath/encoding/CodingEncoding.java b/terminology/src/main/java/au/csiro/pathling/fhirpath/encoding/CodingEncoding.java
index 079a41a942..af424250da 100644
--- a/terminology/src/main/java/au/csiro/pathling/fhirpath/encoding/CodingEncoding.java
+++ b/terminology/src/main/java/au/csiro/pathling/fhirpath/encoding/CodingEncoding.java
@@ -21,9 +21,9 @@
import static java.util.Objects.nonNull;
import static org.apache.spark.sql.functions.lit;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.util.List;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.RowFactory;
diff --git a/terminology/src/main/java/au/csiro/pathling/fhirpath/encoding/ImmutableCoding.java b/terminology/src/main/java/au/csiro/pathling/fhirpath/encoding/ImmutableCoding.java
index ab4cb54a0e..6950a79eb9 100644
--- a/terminology/src/main/java/au/csiro/pathling/fhirpath/encoding/ImmutableCoding.java
+++ b/terminology/src/main/java/au/csiro/pathling/fhirpath/encoding/ImmutableCoding.java
@@ -17,10 +17,10 @@
package au.csiro.pathling.fhirpath.encoding;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.io.Serializable;
import java.util.Objects;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.ToString;
diff --git a/terminology/src/main/java/au/csiro/pathling/fhirpath/literal/CodingLiteral.java b/terminology/src/main/java/au/csiro/pathling/fhirpath/literal/CodingLiteral.java
index e1c560e080..fc2328dcbb 100644
--- a/terminology/src/main/java/au/csiro/pathling/fhirpath/literal/CodingLiteral.java
+++ b/terminology/src/main/java/au/csiro/pathling/fhirpath/literal/CodingLiteral.java
@@ -21,13 +21,13 @@
import static au.csiro.pathling.fhirpath.literal.StringLiteral.unescapeFhirPathString;
import static au.csiro.pathling.utilities.Strings.unSingleQuote;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.util.Arrays;
import java.util.Objects;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import org.hl7.fhir.r4.model.Coding;
/**
diff --git a/terminology/src/main/java/au/csiro/pathling/sql/Terminology.java b/terminology/src/main/java/au/csiro/pathling/sql/Terminology.java
index 1c998fbbde..57314e70e0 100644
--- a/terminology/src/main/java/au/csiro/pathling/sql/Terminology.java
+++ b/terminology/src/main/java/au/csiro/pathling/sql/Terminology.java
@@ -31,9 +31,9 @@
import au.csiro.pathling.sql.udf.PropertyUdf;
import au.csiro.pathling.sql.udf.SubsumesUdf;
import au.csiro.pathling.sql.udf.TranslateUdf;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.util.Collection;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.functions;
import org.hl7.fhir.r4.model.Coding;
diff --git a/terminology/src/main/java/au/csiro/pathling/sql/TerminologySupport.java b/terminology/src/main/java/au/csiro/pathling/sql/TerminologySupport.java
index 8cf3f25adc..2611a215c4 100644
--- a/terminology/src/main/java/au/csiro/pathling/sql/TerminologySupport.java
+++ b/terminology/src/main/java/au/csiro/pathling/sql/TerminologySupport.java
@@ -22,10 +22,10 @@
import au.csiro.pathling.sql.udf.TranslateUdf;
import au.csiro.pathling.utilities.Strings;
+import jakarta.annotation.Nullable;
import java.util.Collection;
import java.util.Set;
import java.util.stream.Collectors;
-import javax.annotation.Nullable;
import org.hl7.fhir.r4.model.codesystems.ConceptMapEquivalence;
/**
diff --git a/terminology/src/main/java/au/csiro/pathling/sql/udf/DesignationUdf.java b/terminology/src/main/java/au/csiro/pathling/sql/udf/DesignationUdf.java
index e5f8f3b30b..88d6941337 100644
--- a/terminology/src/main/java/au/csiro/pathling/sql/udf/DesignationUdf.java
+++ b/terminology/src/main/java/au/csiro/pathling/sql/udf/DesignationUdf.java
@@ -26,8 +26,8 @@
import au.csiro.pathling.terminology.TerminologyService;
import au.csiro.pathling.terminology.TerminologyService.Designation;
import au.csiro.pathling.terminology.TerminologyServiceFactory;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import lombok.extern.slf4j.Slf4j;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.types.DataType;
diff --git a/terminology/src/main/java/au/csiro/pathling/sql/udf/DisplayUdf.java b/terminology/src/main/java/au/csiro/pathling/sql/udf/DisplayUdf.java
index 3ed0531d70..25dc7a23e7 100644
--- a/terminology/src/main/java/au/csiro/pathling/sql/udf/DisplayUdf.java
+++ b/terminology/src/main/java/au/csiro/pathling/sql/udf/DisplayUdf.java
@@ -24,10 +24,10 @@
import au.csiro.pathling.terminology.TerminologyService.Property;
import au.csiro.pathling.terminology.TerminologyService.PropertyOrDesignation;
import au.csiro.pathling.terminology.TerminologyServiceFactory;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.util.List;
import java.util.Optional;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import lombok.extern.slf4j.Slf4j;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.types.DataType;
diff --git a/terminology/src/main/java/au/csiro/pathling/sql/udf/MemberOfUdf.java b/terminology/src/main/java/au/csiro/pathling/sql/udf/MemberOfUdf.java
index 793e9ec207..e7cb23aeb1 100644
--- a/terminology/src/main/java/au/csiro/pathling/sql/udf/MemberOfUdf.java
+++ b/terminology/src/main/java/au/csiro/pathling/sql/udf/MemberOfUdf.java
@@ -22,9 +22,9 @@
import au.csiro.pathling.terminology.TerminologyService;
import au.csiro.pathling.terminology.TerminologyServiceFactory;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.util.stream.Stream;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import lombok.extern.slf4j.Slf4j;
import org.apache.spark.sql.types.DataType;
import org.apache.spark.sql.types.DataTypes;
diff --git a/terminology/src/main/java/au/csiro/pathling/sql/udf/PropertyUdf.java b/terminology/src/main/java/au/csiro/pathling/sql/udf/PropertyUdf.java
index ad95adefa1..be6cb83b26 100644
--- a/terminology/src/main/java/au/csiro/pathling/sql/udf/PropertyUdf.java
+++ b/terminology/src/main/java/au/csiro/pathling/sql/udf/PropertyUdf.java
@@ -38,12 +38,12 @@
import au.csiro.pathling.terminology.TerminologyServiceFactory;
import ca.uhn.fhir.model.api.annotation.DatatypeDef;
import com.google.common.collect.ImmutableSet;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import lombok.extern.slf4j.Slf4j;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.types.DataType;
diff --git a/terminology/src/main/java/au/csiro/pathling/sql/udf/SubsumesUdf.java b/terminology/src/main/java/au/csiro/pathling/sql/udf/SubsumesUdf.java
index 9790cbeb9f..f7bb8e0bae 100644
--- a/terminology/src/main/java/au/csiro/pathling/sql/udf/SubsumesUdf.java
+++ b/terminology/src/main/java/au/csiro/pathling/sql/udf/SubsumesUdf.java
@@ -25,11 +25,11 @@
import au.csiro.pathling.terminology.TerminologyService;
import au.csiro.pathling.terminology.TerminologyServiceFactory;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import lombok.extern.slf4j.Slf4j;
import org.apache.spark.sql.types.DataType;
import org.apache.spark.sql.types.DataTypes;
diff --git a/terminology/src/main/java/au/csiro/pathling/sql/udf/TerminologyUdfHelpers.java b/terminology/src/main/java/au/csiro/pathling/sql/udf/TerminologyUdfHelpers.java
index ac47ad5977..5134380070 100644
--- a/terminology/src/main/java/au/csiro/pathling/sql/udf/TerminologyUdfHelpers.java
+++ b/terminology/src/main/java/au/csiro/pathling/sql/udf/TerminologyUdfHelpers.java
@@ -20,10 +20,10 @@
import static java.util.Objects.nonNull;
import au.csiro.pathling.fhirpath.encoding.CodingEncoding;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.util.Objects;
import java.util.stream.Stream;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import org.apache.spark.sql.Row;
import org.hl7.fhir.r4.model.Coding;
import scala.collection.JavaConverters;
diff --git a/terminology/src/main/java/au/csiro/pathling/sql/udf/TerminologyUdfRegistrar.java b/terminology/src/main/java/au/csiro/pathling/sql/udf/TerminologyUdfRegistrar.java
index 7ed7979d34..c0dab585b6 100644
--- a/terminology/src/main/java/au/csiro/pathling/sql/udf/TerminologyUdfRegistrar.java
+++ b/terminology/src/main/java/au/csiro/pathling/sql/udf/TerminologyUdfRegistrar.java
@@ -19,9 +19,9 @@
import au.csiro.pathling.terminology.TerminologyServiceFactory;
import com.google.common.collect.ImmutableList;
+import jakarta.annotation.Nonnull;
import java.util.Collections;
import java.util.List;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.SparkSession;
/**
@@ -32,14 +32,14 @@ public class TerminologyUdfRegistrar extends SqlFunctionRegistrar {
public TerminologyUdfRegistrar(@Nonnull final TerminologyServiceFactory tsf) {
super(List.of(),
ImmutableList.>builder()
- .add(new DisplayUdf(tsf))
+ .add(new DisplayUdf(tsf))
.add(new MemberOfUdf(tsf))
.build(),
ImmutableList.>builder()
- .add(new SubsumesUdf(tsf))
- .add(new DesignationUdf(tsf))
- .addAll(PropertyUdf.createAll(tsf))
- .build(),
+ .add(new SubsumesUdf(tsf))
+ .add(new DesignationUdf(tsf))
+ .addAll(PropertyUdf.createAll(tsf))
+ .build(),
Collections.emptyList(),
List.of(new TranslateUdf(tsf)));
}
diff --git a/terminology/src/main/java/au/csiro/pathling/sql/udf/TranslateUdf.java b/terminology/src/main/java/au/csiro/pathling/sql/udf/TranslateUdf.java
index b142ffa444..b0d2898350 100644
--- a/terminology/src/main/java/au/csiro/pathling/sql/udf/TranslateUdf.java
+++ b/terminology/src/main/java/au/csiro/pathling/sql/udf/TranslateUdf.java
@@ -30,12 +30,12 @@
import au.csiro.pathling.terminology.TerminologyService.Translation;
import au.csiro.pathling.terminology.TerminologyServiceFactory;
import com.google.common.collect.ImmutableSet;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import lombok.extern.slf4j.Slf4j;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.types.DataType;
diff --git a/terminology/src/main/java/au/csiro/pathling/terminology/BaseTerminologyService.java b/terminology/src/main/java/au/csiro/pathling/terminology/BaseTerminologyService.java
index 4ae8d17773..9aafd66224 100644
--- a/terminology/src/main/java/au/csiro/pathling/terminology/BaseTerminologyService.java
+++ b/terminology/src/main/java/au/csiro/pathling/terminology/BaseTerminologyService.java
@@ -20,9 +20,9 @@
import au.csiro.pathling.fhir.TerminologyClient;
import au.csiro.pathling.utilities.ResourceCloser;
import ca.uhn.fhir.rest.server.exceptions.BaseServerResponseException;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.io.Closeable;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
/**
* Common functionality for all implementations of {@link TerminologyService}.
diff --git a/terminology/src/main/java/au/csiro/pathling/terminology/DefaultTerminologyService.java b/terminology/src/main/java/au/csiro/pathling/terminology/DefaultTerminologyService.java
index eedc2b484c..a58a2f58c2 100644
--- a/terminology/src/main/java/au/csiro/pathling/terminology/DefaultTerminologyService.java
+++ b/terminology/src/main/java/au/csiro/pathling/terminology/DefaultTerminologyService.java
@@ -34,8 +34,8 @@
import java.io.Closeable;
import java.util.List;
import java.util.Optional;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import org.hl7.fhir.r4.model.Coding;
import org.hl7.fhir.r4.model.codesystems.ConceptSubsumptionOutcome;
@@ -52,7 +52,7 @@ public DefaultTerminologyService(@Nonnull final TerminologyClient terminologyCli
@Nonnull final Closeable... resourcesToClose) {
super(terminologyClient, resourcesToClose);
}
-
+
@Override
public boolean validateCode(@Nonnull final String valueSetUrl, @Nonnull final Coding coding) {
final ValidateCodeParameters parameters = new ValidateCodeParameters(valueSetUrl,
diff --git a/terminology/src/main/java/au/csiro/pathling/terminology/DefaultTerminologyServiceFactory.java b/terminology/src/main/java/au/csiro/pathling/terminology/DefaultTerminologyServiceFactory.java
index 58e3eeea4c..799bfd17f6 100644
--- a/terminology/src/main/java/au/csiro/pathling/terminology/DefaultTerminologyServiceFactory.java
+++ b/terminology/src/main/java/au/csiro/pathling/terminology/DefaultTerminologyServiceFactory.java
@@ -28,7 +28,7 @@
import au.csiro.pathling.utilities.ObjectHolder;
import ca.uhn.fhir.context.FhirContext;
import ca.uhn.fhir.context.FhirVersionEnum;
-import javax.annotation.Nonnull;
+import jakarta.annotation.Nonnull;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.ToString;
diff --git a/terminology/src/main/java/au/csiro/pathling/terminology/RequestRetryHandler.java b/terminology/src/main/java/au/csiro/pathling/terminology/RequestRetryHandler.java
index 4abfcd0f81..f2c83a23c0 100644
--- a/terminology/src/main/java/au/csiro/pathling/terminology/RequestRetryHandler.java
+++ b/terminology/src/main/java/au/csiro/pathling/terminology/RequestRetryHandler.java
@@ -17,8 +17,8 @@
package au.csiro.pathling.terminology;
+import jakarta.annotation.Nonnull;
import java.io.IOException;
-import javax.annotation.Nonnull;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.impl.client.DefaultHttpRequestRetryHandler;
import org.apache.http.protocol.HttpContext;
diff --git a/terminology/src/main/java/au/csiro/pathling/terminology/TerminologyFunctions.java b/terminology/src/main/java/au/csiro/pathling/terminology/TerminologyFunctions.java
index 0ff3a83d55..cb07b0d521 100644
--- a/terminology/src/main/java/au/csiro/pathling/terminology/TerminologyFunctions.java
+++ b/terminology/src/main/java/au/csiro/pathling/terminology/TerminologyFunctions.java
@@ -20,8 +20,8 @@
import static au.csiro.pathling.sql.TerminologySupport.parseCsvEquivalences;
import au.csiro.pathling.sql.Terminology;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
diff --git a/terminology/src/main/java/au/csiro/pathling/terminology/TerminologyOperation.java b/terminology/src/main/java/au/csiro/pathling/terminology/TerminologyOperation.java
index 5217cab109..e37c8e5533 100644
--- a/terminology/src/main/java/au/csiro/pathling/terminology/TerminologyOperation.java
+++ b/terminology/src/main/java/au/csiro/pathling/terminology/TerminologyOperation.java
@@ -18,8 +18,8 @@
package au.csiro.pathling.terminology;
import ca.uhn.fhir.rest.gclient.IOperationUntypedWithInput;
+import jakarta.annotation.Nonnull;
import java.util.Optional;
-import javax.annotation.Nonnull;
/**
diff --git a/terminology/src/main/java/au/csiro/pathling/terminology/TerminologyParameters.java b/terminology/src/main/java/au/csiro/pathling/terminology/TerminologyParameters.java
index 8bd7578576..a9585bd564 100644
--- a/terminology/src/main/java/au/csiro/pathling/terminology/TerminologyParameters.java
+++ b/terminology/src/main/java/au/csiro/pathling/terminology/TerminologyParameters.java
@@ -19,11 +19,10 @@
import static java.util.Objects.requireNonNull;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.io.Serializable;
-import java.util.Objects;
import java.util.function.Function;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
/**
* Represents parameters that are passed to a terminology operation.
diff --git a/terminology/src/main/java/au/csiro/pathling/terminology/TerminologyResult.java b/terminology/src/main/java/au/csiro/pathling/terminology/TerminologyResult.java
index 8a781e41a4..32db6e4dab 100644
--- a/terminology/src/main/java/au/csiro/pathling/terminology/TerminologyResult.java
+++ b/terminology/src/main/java/au/csiro/pathling/terminology/TerminologyResult.java
@@ -17,9 +17,9 @@
package au.csiro.pathling.terminology;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.io.Serializable;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import lombok.Value;
/**
diff --git a/terminology/src/main/java/au/csiro/pathling/terminology/TerminologyService.java b/terminology/src/main/java/au/csiro/pathling/terminology/TerminologyService.java
index e27e8c8e37..412e4df0bc 100644
--- a/terminology/src/main/java/au/csiro/pathling/terminology/TerminologyService.java
+++ b/terminology/src/main/java/au/csiro/pathling/terminology/TerminologyService.java
@@ -19,12 +19,12 @@
import au.csiro.pathling.fhir.ParametersUtils.DesignationPart;
import au.csiro.pathling.fhirpath.encoding.ImmutableCoding;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.io.Serializable;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import lombok.Value;
import org.hl7.fhir.r4.model.Coding;
import org.hl7.fhir.r4.model.StringType;
@@ -88,7 +88,8 @@ public int hashCode() {
/**
* Translates a code from one value set to another, based on the existing concept map. Abstracts
- * the FHIR ConceptMap/$translate
+ * the FHIR ConceptMap/$translate
* operation.
*
* @param coding the code to translate.
@@ -107,7 +108,8 @@ List translate(@Nonnull Coding coding,
/**
* Tests the subsumption relationship between two codings given the semantics of subsumption in
- * the underlying code system. Abstracts the CodeSystem/$subsumes
+ * the underlying code system. Abstracts the CodeSystem/$subsumes
* operation.
*
* @param codingA the left code to be tested.
diff --git a/terminology/src/main/java/au/csiro/pathling/terminology/TerminologyServiceFactory.java b/terminology/src/main/java/au/csiro/pathling/terminology/TerminologyServiceFactory.java
index 6c67d5c500..5e1a93c9cc 100644
--- a/terminology/src/main/java/au/csiro/pathling/terminology/TerminologyServiceFactory.java
+++ b/terminology/src/main/java/au/csiro/pathling/terminology/TerminologyServiceFactory.java
@@ -18,7 +18,7 @@
package au.csiro.pathling.terminology;
import java.io.Serializable;
-import javax.annotation.Nonnull;
+import jakarta.annotation.Nonnull;
/**
* Represents something that creates a {@link TerminologyService}.
diff --git a/terminology/src/main/java/au/csiro/pathling/terminology/caching/CachingTerminologyService.java b/terminology/src/main/java/au/csiro/pathling/terminology/caching/CachingTerminologyService.java
index 1b73447dfb..01e8b0e945 100644
--- a/terminology/src/main/java/au/csiro/pathling/terminology/caching/CachingTerminologyService.java
+++ b/terminology/src/main/java/au/csiro/pathling/terminology/caching/CachingTerminologyService.java
@@ -39,6 +39,8 @@
import ca.uhn.fhir.rest.gclient.IOperationUntypedWithInput;
import ca.uhn.fhir.rest.server.exceptions.BaseServerResponseException;
import ca.uhn.fhir.rest.server.exceptions.NotModifiedException;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import jakarta.ws.rs.core.CacheControl;
import java.io.Closeable;
import java.io.Serializable;
@@ -48,8 +50,6 @@
import java.util.List;
import java.util.Map;
import java.util.Optional;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import org.hl7.fhir.r4.model.Coding;
import org.hl7.fhir.r4.model.codesystems.ConceptSubsumptionOutcome;
import org.infinispan.Cache;
diff --git a/terminology/src/main/java/au/csiro/pathling/terminology/caching/InMemoryCachingTerminologyService.java b/terminology/src/main/java/au/csiro/pathling/terminology/caching/InMemoryCachingTerminologyService.java
index 80abf4de30..5bbf9dc7bc 100644
--- a/terminology/src/main/java/au/csiro/pathling/terminology/caching/InMemoryCachingTerminologyService.java
+++ b/terminology/src/main/java/au/csiro/pathling/terminology/caching/InMemoryCachingTerminologyService.java
@@ -19,8 +19,8 @@
import au.csiro.pathling.config.HttpClientCachingConfiguration;
import au.csiro.pathling.fhir.TerminologyClient;
+import jakarta.annotation.Nonnull;
import java.io.Closeable;
-import javax.annotation.Nonnull;
import org.infinispan.Cache;
import org.infinispan.configuration.cache.Configuration;
import org.infinispan.configuration.cache.ConfigurationBuilder;
diff --git a/terminology/src/main/java/au/csiro/pathling/terminology/caching/PersistentCachingTerminologyService.java b/terminology/src/main/java/au/csiro/pathling/terminology/caching/PersistentCachingTerminologyService.java
index 6958dd872b..93cdee396b 100644
--- a/terminology/src/main/java/au/csiro/pathling/terminology/caching/PersistentCachingTerminologyService.java
+++ b/terminology/src/main/java/au/csiro/pathling/terminology/caching/PersistentCachingTerminologyService.java
@@ -21,9 +21,9 @@
import au.csiro.pathling.config.HttpClientCachingConfiguration;
import au.csiro.pathling.fhir.TerminologyClient;
+import jakarta.annotation.Nonnull;
import java.io.Closeable;
import java.nio.file.Path;
-import javax.annotation.Nonnull;
import lombok.extern.slf4j.Slf4j;
import org.infinispan.Cache;
import org.infinispan.commons.marshall.JavaSerializationMarshaller;
diff --git a/terminology/src/main/java/au/csiro/pathling/terminology/lookup/LookupExecutor.java b/terminology/src/main/java/au/csiro/pathling/terminology/lookup/LookupExecutor.java
index 23d1c42509..3fe03fa74c 100644
--- a/terminology/src/main/java/au/csiro/pathling/terminology/lookup/LookupExecutor.java
+++ b/terminology/src/main/java/au/csiro/pathling/terminology/lookup/LookupExecutor.java
@@ -31,11 +31,11 @@
import au.csiro.pathling.terminology.TerminologyService.PropertyOrDesignation;
import au.csiro.pathling.terminology.caching.CacheableListCollector;
import ca.uhn.fhir.rest.gclient.IOperationUntypedWithInput;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.util.ArrayList;
import java.util.Optional;
import java.util.stream.Stream;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import org.hl7.fhir.r4.model.CodeType;
import org.hl7.fhir.r4.model.Parameters;
import org.hl7.fhir.r4.model.StringType;
@@ -45,7 +45,8 @@
* An implementation of {@link TerminologyOperation} for the lookup operation.
*
* @author John Grimes
- * @see CodeSystem/$lookup
+ * @see CodeSystem/$lookup
*/
public class LookupExecutor implements
TerminologyOperation> {
diff --git a/terminology/src/main/java/au/csiro/pathling/terminology/lookup/LookupParameters.java b/terminology/src/main/java/au/csiro/pathling/terminology/lookup/LookupParameters.java
index baa7d95eca..9319c46e1e 100644
--- a/terminology/src/main/java/au/csiro/pathling/terminology/lookup/LookupParameters.java
+++ b/terminology/src/main/java/au/csiro/pathling/terminology/lookup/LookupParameters.java
@@ -19,14 +19,15 @@
import au.csiro.pathling.fhirpath.encoding.ImmutableCoding;
import au.csiro.pathling.terminology.TerminologyParameters;
-import javax.annotation.Nullable;
+import jakarta.annotation.Nullable;
import lombok.Value;
/**
* Represents the input parameters to the lookup operation.
*
* @author John Grimes
- * @see CodeSystem/$lookup
+ * @see CodeSystem/$lookup
*/
@Value
public class LookupParameters implements TerminologyParameters {
diff --git a/terminology/src/main/java/au/csiro/pathling/terminology/mock/MockTerminologyService.java b/terminology/src/main/java/au/csiro/pathling/terminology/mock/MockTerminologyService.java
index af307d1d33..d62916b602 100644
--- a/terminology/src/main/java/au/csiro/pathling/terminology/mock/MockTerminologyService.java
+++ b/terminology/src/main/java/au/csiro/pathling/terminology/mock/MockTerminologyService.java
@@ -23,6 +23,8 @@
import au.csiro.pathling.terminology.TerminologyService;
import com.google.common.collect.ImmutableMap;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
@@ -31,8 +33,6 @@
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import lombok.AllArgsConstructor;
import lombok.Value;
import org.apache.commons.lang3.tuple.Pair;
diff --git a/terminology/src/main/java/au/csiro/pathling/terminology/mock/MockTerminologyServiceFactory.java b/terminology/src/main/java/au/csiro/pathling/terminology/mock/MockTerminologyServiceFactory.java
index 706af559be..6685ac2a97 100644
--- a/terminology/src/main/java/au/csiro/pathling/terminology/mock/MockTerminologyServiceFactory.java
+++ b/terminology/src/main/java/au/csiro/pathling/terminology/mock/MockTerminologyServiceFactory.java
@@ -20,7 +20,7 @@
import au.csiro.pathling.terminology.TerminologyService;
import au.csiro.pathling.terminology.TerminologyServiceFactory;
import au.csiro.pathling.utilities.ObjectHolder;
-import javax.annotation.Nonnull;
+import jakarta.annotation.Nonnull;
public class MockTerminologyServiceFactory implements TerminologyServiceFactory {
diff --git a/terminology/src/main/java/au/csiro/pathling/terminology/subsumes/SubsumesExecutor.java b/terminology/src/main/java/au/csiro/pathling/terminology/subsumes/SubsumesExecutor.java
index 15dcc64936..e12320c208 100644
--- a/terminology/src/main/java/au/csiro/pathling/terminology/subsumes/SubsumesExecutor.java
+++ b/terminology/src/main/java/au/csiro/pathling/terminology/subsumes/SubsumesExecutor.java
@@ -27,8 +27,8 @@
import au.csiro.pathling.terminology.TerminologyOperation;
import au.csiro.pathling.terminology.TerminologyParameters;
import ca.uhn.fhir.rest.gclient.IOperationUntypedWithInput;
+import jakarta.annotation.Nonnull;
import java.util.Optional;
-import javax.annotation.Nonnull;
import org.hl7.fhir.r4.model.CodeType;
import org.hl7.fhir.r4.model.Parameters;
import org.hl7.fhir.r4.model.StringType;
diff --git a/terminology/src/main/java/au/csiro/pathling/terminology/translate/TranslateExecutor.java b/terminology/src/main/java/au/csiro/pathling/terminology/translate/TranslateExecutor.java
index 63e8acc5f6..ee21f6fa3b 100644
--- a/terminology/src/main/java/au/csiro/pathling/terminology/translate/TranslateExecutor.java
+++ b/terminology/src/main/java/au/csiro/pathling/terminology/translate/TranslateExecutor.java
@@ -28,9 +28,9 @@
import au.csiro.pathling.terminology.TerminologyService.Translation;
import au.csiro.pathling.terminology.caching.CacheableListCollector;
import ca.uhn.fhir.rest.gclient.IOperationUntypedWithInput;
+import jakarta.annotation.Nonnull;
import java.util.ArrayList;
import java.util.Optional;
-import javax.annotation.Nonnull;
import org.hl7.fhir.r4.model.BooleanType;
import org.hl7.fhir.r4.model.CodeType;
import org.hl7.fhir.r4.model.Parameters;
@@ -80,7 +80,7 @@ public IOperationUntypedWithInput buildRequest() {
final ImmutableCoding coding = parameters.getCoding();
final boolean reverse = parameters.isReverse();
final String target = parameters.getTarget();
-
+
return terminologyClient.buildTranslate(
required(UriType::new, conceptMapUrl),
required(UriType::new, coding.getSystem()),
diff --git a/terminology/src/main/java/au/csiro/pathling/terminology/validatecode/ValidateCodeExecutor.java b/terminology/src/main/java/au/csiro/pathling/terminology/validatecode/ValidateCodeExecutor.java
index a9c857f8c8..e47f77f2ed 100644
--- a/terminology/src/main/java/au/csiro/pathling/terminology/validatecode/ValidateCodeExecutor.java
+++ b/terminology/src/main/java/au/csiro/pathling/terminology/validatecode/ValidateCodeExecutor.java
@@ -26,8 +26,8 @@
import au.csiro.pathling.fhirpath.encoding.ImmutableCoding;
import au.csiro.pathling.terminology.TerminologyOperation;
import ca.uhn.fhir.rest.gclient.IOperationUntypedWithInput;
+import jakarta.annotation.Nonnull;
import java.util.Optional;
-import javax.annotation.Nonnull;
import org.hl7.fhir.r4.model.CodeType;
import org.hl7.fhir.r4.model.Parameters;
import org.hl7.fhir.r4.model.StringType;
diff --git a/terminology/src/test/java/au/csiro/pathling/fhirpath/CodingHelpersTest.java b/terminology/src/test/java/au/csiro/pathling/fhirpath/CodingHelpersTest.java
index 4da1fb5c10..6e8567afa7 100644
--- a/terminology/src/test/java/au/csiro/pathling/fhirpath/CodingHelpersTest.java
+++ b/terminology/src/test/java/au/csiro/pathling/fhirpath/CodingHelpersTest.java
@@ -20,8 +20,8 @@
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import org.hl7.fhir.r4.model.Coding;
import org.junit.jupiter.api.Test;
diff --git a/terminology/src/test/java/au/csiro/pathling/terminology/DefaultTerminologyServiceTest.java b/terminology/src/test/java/au/csiro/pathling/terminology/DefaultTerminologyServiceTest.java
index 3c254ceca0..ba94939bc3 100644
--- a/terminology/src/test/java/au/csiro/pathling/terminology/DefaultTerminologyServiceTest.java
+++ b/terminology/src/test/java/au/csiro/pathling/terminology/DefaultTerminologyServiceTest.java
@@ -45,10 +45,10 @@
import au.csiro.pathling.test.AbstractTerminologyTestBase;
import ca.uhn.fhir.rest.gclient.IOperationUntypedWithInput;
import ca.uhn.fhir.rest.server.exceptions.BaseServerResponseException;
+import jakarta.annotation.Nonnull;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
-import javax.annotation.Nonnull;
import org.hl7.fhir.r4.model.BooleanType;
import org.hl7.fhir.r4.model.CodeType;
import org.hl7.fhir.r4.model.Coding;
diff --git a/terminology/src/test/java/au/csiro/pathling/terminology/MappingTest.java b/terminology/src/test/java/au/csiro/pathling/terminology/MappingTest.java
index 58e798f5da..09470b6555 100644
--- a/terminology/src/test/java/au/csiro/pathling/terminology/MappingTest.java
+++ b/terminology/src/test/java/au/csiro/pathling/terminology/MappingTest.java
@@ -21,10 +21,10 @@
import ca.uhn.fhir.context.FhirContext;
import ca.uhn.fhir.parser.IParser;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.nio.file.Path;
import java.nio.file.Paths;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import org.hl7.fhir.instance.model.api.IBaseResource;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.TestInfo;
diff --git a/terminology/src/test/java/au/csiro/pathling/terminology/PropertiesParametersBuilder.java b/terminology/src/test/java/au/csiro/pathling/terminology/PropertiesParametersBuilder.java
index f1158bc504..fe479aec1a 100644
--- a/terminology/src/test/java/au/csiro/pathling/terminology/PropertiesParametersBuilder.java
+++ b/terminology/src/test/java/au/csiro/pathling/terminology/PropertiesParametersBuilder.java
@@ -17,8 +17,8 @@
package au.csiro.pathling.terminology;
+import jakarta.annotation.Nonnull;
import java.util.Optional;
-import javax.annotation.Nonnull;
import org.hl7.fhir.r4.model.CodeType;
import org.hl7.fhir.r4.model.Coding;
import org.hl7.fhir.r4.model.Parameters;
diff --git a/terminology/src/test/java/au/csiro/pathling/terminology/caching/CachingTerminologyServiceTest.java b/terminology/src/test/java/au/csiro/pathling/terminology/caching/CachingTerminologyServiceTest.java
index f004ac8cc6..47713de236 100644
--- a/terminology/src/test/java/au/csiro/pathling/terminology/caching/CachingTerminologyServiceTest.java
+++ b/terminology/src/test/java/au/csiro/pathling/terminology/caching/CachingTerminologyServiceTest.java
@@ -44,10 +44,10 @@
import com.github.tomakehurst.wiremock.client.WireMock;
import com.github.tomakehurst.wiremock.core.WireMockConfiguration;
import com.github.tomakehurst.wiremock.recording.RecordSpecBuilder;
+import jakarta.annotation.Nonnull;
import java.util.List;
import java.util.function.Supplier;
import java.util.stream.Stream;
-import javax.annotation.Nonnull;
import lombok.Value;
import lombok.extern.slf4j.Slf4j;
import org.hl7.fhir.r4.model.BooleanType;
diff --git a/terminology/src/test/java/au/csiro/pathling/test/AbstractTerminologyTestBase.java b/terminology/src/test/java/au/csiro/pathling/test/AbstractTerminologyTestBase.java
index 8affa4f264..eb6c9ba6e4 100644
--- a/terminology/src/test/java/au/csiro/pathling/test/AbstractTerminologyTestBase.java
+++ b/terminology/src/test/java/au/csiro/pathling/test/AbstractTerminologyTestBase.java
@@ -21,11 +21,11 @@
import au.csiro.pathling.encoders.datatypes.DecimalCustomCoder;
import au.csiro.pathling.fhirpath.encoding.CodingEncoding;
+import jakarta.annotation.Nonnull;
import java.math.BigDecimal;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Stream;
-import javax.annotation.Nonnull;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.types.DataType;
import org.apache.spark.sql.types.DataTypes;
@@ -96,7 +96,7 @@ public static Row[] asArray(@Nonnull final Coding... codings) {
}
@Nonnull
- public static WrappedArray encodeMany(Coding... codings) {
+ public static WrappedArray
@@ -751,7 +751,7 @@
${pathling.surefireVersion}
- -Xmx4g -ea -Duser.timezone=UTC --add-exports=java.base/sun.nio.ch=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED
+ -Xmx4g -ea -Duser.timezone=UTC --add-exports=java.base/sun.nio.ch=ALL-UNNAMED --add-exports=java.base/java.net=ALL-UNNAMED
From db6dc85992631e6e9950ff1221998946498a192a Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Sun, 21 Apr 2024 08:36:09 +1000
Subject: [PATCH 052/175] DataSourcesTest needs opens, as reflection is done
somewhere
---
.github/workflows/python-pre-release.yml | 2 +-
.github/workflows/release-js-client.yml | 2 +-
.github/workflows/release-js-import.yml | 2 +-
.github/workflows/release.yml | 2 +-
.github/workflows/site.yml | 2 +-
.github/workflows/test.yml | 2 +-
fhir-server/pom.xml | 2 +-
pom.xml | 4 ++--
8 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/.github/workflows/python-pre-release.yml b/.github/workflows/python-pre-release.yml
index a34892066e..00bd3bc997 100644
--- a/.github/workflows/python-pre-release.yml
+++ b/.github/workflows/python-pre-release.yml
@@ -12,7 +12,7 @@ on:
env:
# The add-exports and add-opens flags are required for Java 17
- MAVEN_OPTS: --add-exports=java.base/sun.nio.ch=ALL-UNNAMED --add-exports=java.base/java.net=ALL-UNNAMED
+ MAVEN_OPTS: --add-exports=java.base/sun.nio.ch=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED
jobs:
deploy-python-pre-release:
diff --git a/.github/workflows/release-js-client.yml b/.github/workflows/release-js-client.yml
index 1cf99e9dda..b9e36cd1fa 100644
--- a/.github/workflows/release-js-client.yml
+++ b/.github/workflows/release-js-client.yml
@@ -11,7 +11,7 @@ on:
env:
# The add-exports and add-opens flags are required for Java 17
- MAVEN_OPTS: --add-exports=java.base/sun.nio.ch=ALL-UNNAMED --add-exports=java.base/java.net=ALL-UNNAMED
+ MAVEN_OPTS: --add-exports=java.base/sun.nio.ch=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED
jobs:
deploy:
diff --git a/.github/workflows/release-js-import.yml b/.github/workflows/release-js-import.yml
index 40ea366a8a..0e4d19c759 100644
--- a/.github/workflows/release-js-import.yml
+++ b/.github/workflows/release-js-import.yml
@@ -11,7 +11,7 @@ on:
env:
# The add-exports and add-opens flags are required for Java 17
- MAVEN_OPTS: --add-exports=java.base/sun.nio.ch=ALL-UNNAMED --add-exports=java.base/java.net=ALL-UNNAMED
+ MAVEN_OPTS: --add-exports=java.base/sun.nio.ch=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED
jobs:
deploy:
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 7cb3806e4d..20d7ff1cde 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -15,7 +15,7 @@ on:
env:
# The add-exports and add-opens flags are required for Java 17
- MAVEN_OPTS: --add-exports=java.base/sun.nio.ch=ALL-UNNAMED --add-exports=java.base/java.net=ALL-UNNAMED
+ MAVEN_OPTS: --add-exports=java.base/sun.nio.ch=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED
jobs:
deploy-maven:
diff --git a/.github/workflows/site.yml b/.github/workflows/site.yml
index 2558673d1b..62e8b01def 100644
--- a/.github/workflows/site.yml
+++ b/.github/workflows/site.yml
@@ -11,7 +11,7 @@ on:
env:
# The add-exports and add-opens flags are required for Java 17
- MAVEN_OPTS: --add-exports=java.base/sun.nio.ch=ALL-UNNAMED --add-exports=java.base/java.net=ALL-UNNAMED
+ MAVEN_OPTS: --add-exports=java.base/sun.nio.ch=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED
jobs:
deploy:
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 5fc74707f4..36c4cd6620 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -21,7 +21,7 @@ on:
env:
# The add-exports and add-opens flags are required for Java 17
- MAVEN_OPTS: --add-exports=java.base/sun.nio.ch=ALL-UNNAMED --add-exports=java.base/java.net=ALL-UNNAMED
+ MAVEN_OPTS: --add-exports=java.base/sun.nio.ch=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED
jobs:
encoders:
diff --git a/fhir-server/pom.xml b/fhir-server/pom.xml
index 9b0e2dbfb7..6e71d50746 100644
--- a/fhir-server/pom.xml
+++ b/fhir-server/pom.xml
@@ -383,7 +383,7 @@
${project.version}
- -Xmx2g -XX:MaxMetaspaceSize=400m -XX:ReservedCodeCacheSize=240m -Xss1m -Duser.timezone=UTC --add-exports=java.base/sun.nio.ch=ALL-UNNAMED --add-exports=java.base/java.net=ALL-UNNAMED
+ -Xmx2g -XX:MaxMetaspaceSize=400m -XX:ReservedCodeCacheSize=240m -Xss1m -Duser.timezone=UTC --add-exports=java.base/sun.nio.ch=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED
Copyright © 2018-2023, Commonwealth Scientific and Industrial Research Organisation (CSIRO) ABN 41 687 119 230. Licensed under the CSIRO Open Source Software Licence Agreement.
diff --git a/pom.xml b/pom.xml
index d973ea9808..a34ee2e739 100644
--- a/pom.xml
+++ b/pom.xml
@@ -740,7 +740,7 @@
true
false
- @{argLine} -Xmx4g -ea -Duser.timezone=UTC --add-exports=java.base/sun.nio.ch=ALL-UNNAMED --add-exports=java.base/java.net=ALL-UNNAMED
+ @{argLine} -Xmx4g -ea -Duser.timezone=UTC --add-exports=java.base/sun.nio.ch=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED
1C
false
@@ -751,7 +751,7 @@
${pathling.surefireVersion}
- -Xmx4g -ea -Duser.timezone=UTC --add-exports=java.base/sun.nio.ch=ALL-UNNAMED --add-exports=java.base/java.net=ALL-UNNAMED
+ -Xmx4g -ea -Duser.timezone=UTC --add-exports=java.base/sun.nio.ch=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED
From f8c36954f5efd620ef6d9af46fdc37f1b6253049 Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Sun, 21 Apr 2024 08:52:13 +1000
Subject: [PATCH 053/175] Update Lombok to 1.18.32
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index a34ee2e739..39316b0728 100644
--- a/pom.xml
+++ b/pom.xml
@@ -84,7 +84,7 @@
4.9.3
3.3.4
1.12.603
- 1.18.28
+ 1.18.32
32.1.3-jre
15.0.2.Final
2.16.1
From 6afa90ce260c775a0cd583eb1882d6ffc5f7fec9 Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Sun, 21 Apr 2024 14:34:46 +1000
Subject: [PATCH 054/175] Handle case where authentication is not enabled and
bean dependencies are not satisfied
---
.../pathling/security/SecurityConfiguration.java | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/fhir-server/src/main/java/au/csiro/pathling/security/SecurityConfiguration.java b/fhir-server/src/main/java/au/csiro/pathling/security/SecurityConfiguration.java
index 9a9f6730dc..fc84a72f5a 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/security/SecurityConfiguration.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/security/SecurityConfiguration.java
@@ -17,12 +17,15 @@
package au.csiro.pathling.security;
+import static au.csiro.pathling.utilities.Preconditions.check;
+
import au.csiro.pathling.config.ServerConfiguration;
import jakarta.annotation.Nonnull;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.http.HttpMethod;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
@@ -44,6 +47,7 @@
* href="https://stackoverflow.com/questions/51079564/spring-security-antmatchers-not-being-applied-on-post-requests-and-only-works-wi/51088555">Spring
* security antMatchers not being applied on POST requests and only works with GET
*/
+@Configuration
@EnableWebSecurity
@Profile("server")
@Slf4j
@@ -51,10 +55,10 @@ public class SecurityConfiguration {
private final ServerConfiguration configuration;
- @Autowired
+ @Autowired(required = false)
private PathlingAuthenticationConverter authenticationConverter;
- @Autowired
+ @Autowired(required = false)
private JwtDecoder jwtDecoder;
@Value("${pathling.auth.enabled}")
@@ -80,6 +84,9 @@ public SecurityConfiguration(@Nonnull final ServerConfiguration configuration) {
public SecurityFilterChain securityFilterChain(@Nonnull final HttpSecurity http)
throws Exception {
if (authEnabled) {
+ check(authenticationConverter != null,
+ "Authentication converter must be provided when authentication is enabled");
+ check(jwtDecoder != null, "JWT decoder must be provided when authentication is enabled");
http.authorizeHttpRequests(authz -> authz
// The following requests do not require authentication.
.requestMatchers(HttpMethod.GET, "/metadata").permitAll()
From b7b1f07ef172a52017f7d16604a96815a3ca7a74 Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Sun, 21 Apr 2024 14:35:26 +1000
Subject: [PATCH 055/175] Add increased read timeout for RestTemplate requests
in integration tests
---
.../csiro/pathling/test/IntegrationTestDependencies.java | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/fhir-server/src/test/java/au/csiro/pathling/test/IntegrationTestDependencies.java b/fhir-server/src/test/java/au/csiro/pathling/test/IntegrationTestDependencies.java
index 7366af1463..7dd03b6655 100644
--- a/fhir-server/src/test/java/au/csiro/pathling/test/IntegrationTestDependencies.java
+++ b/fhir-server/src/test/java/au/csiro/pathling/test/IntegrationTestDependencies.java
@@ -24,7 +24,9 @@
import com.github.tomakehurst.wiremock.client.WireMock;
import com.github.tomakehurst.wiremock.core.WireMockConfiguration;
import jakarta.annotation.Nonnull;
+import java.time.Duration;
import lombok.extern.slf4j.Slf4j;
+import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Component;
@@ -56,4 +58,10 @@ public DefaultTerminologyServiceFactory terminologyServiceFactory(
return new DefaultTerminologyServiceFactory(fhirContext.getVersion().getVersion(),
configuration.getTerminology());
}
+
+ @Bean
+ public RestTemplateBuilder restTemplateBuilder() {
+ return new RestTemplateBuilder().setReadTimeout(Duration.ofSeconds(60));
+ }
+
}
From 2b9313e69dd8407a68c6804a66567ae86e1e43ee Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Sun, 21 Apr 2024 14:44:55 +1000
Subject: [PATCH 056/175] Remove usage of deprecated constructor on
WildcardFileFilter
---
.../src/test/java/au/csiro/pathling/test/TestDataImporter.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/fhir-server/src/test/java/au/csiro/pathling/test/TestDataImporter.java b/fhir-server/src/test/java/au/csiro/pathling/test/TestDataImporter.java
index 356bbc8fc8..22389af2e5 100644
--- a/fhir-server/src/test/java/au/csiro/pathling/test/TestDataImporter.java
+++ b/fhir-server/src/test/java/au/csiro/pathling/test/TestDataImporter.java
@@ -76,7 +76,7 @@ public void run(final String... args) {
final String sourcePath = args[0];
final File srcNdJsonDir = new File(sourcePath);
- final FileFilter fileFilter = new WildcardFileFilter("*.ndjson");
+ final FileFilter fileFilter = WildcardFileFilter.builder().setWildcards("*.ndjson").get();
final File[] srcNdJsonFiles = srcNdJsonDir.listFiles(fileFilter);
final List sources = Stream.of(requireNonNull(srcNdJsonFiles))
From 10666c32e185e1f223fefdf03fd8d1b708f75f00 Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Sun, 21 Apr 2024 19:43:19 +1000
Subject: [PATCH 057/175] Switch Tomcat dependencies for javax Servlet API
interfaces only
---
encoders/pom.xml | 5 ++---
fhir-server/pom.xml | 11 +++++++++--
fhir-server/src/main/resources/application.yml | 2 +-
.../src/test/resources/application-unit-test.yml | 3 +++
fhirpath/pom.xml | 5 ++---
library-api/pom.xml | 5 ++---
pom.xml | 6 +++---
utilities/pom.xml | 7 +++----
8 files changed, 25 insertions(+), 19 deletions(-)
create mode 100644 fhir-server/src/test/resources/application-unit-test.yml
diff --git a/encoders/pom.xml b/encoders/pom.xml
index 4ecd60baad..4a832dbae4 100644
--- a/encoders/pom.xml
+++ b/encoders/pom.xml
@@ -85,9 +85,8 @@
provided
- org.apache.tomcat
- tomcat-servlet-api
- test
+ javax.servlet
+ javax.servlet-api
diff --git a/fhir-server/pom.xml b/fhir-server/pom.xml
index 6e71d50746..b5d7743414 100644
--- a/fhir-server/pom.xml
+++ b/fhir-server/pom.xml
@@ -76,8 +76,8 @@
jackson-core
- org.apache.tomcat
- tomcat-servlet-api
+ javax.servlet
+ javax.servlet-api
@@ -413,6 +413,13 @@
+
+
+ maven_central
+ Maven Central
+ https://repo.maven.apache.org/maven2/
+
+
diff --git a/fhir-server/src/main/resources/application.yml b/fhir-server/src/main/resources/application.yml
index 566e63490d..73de2f6982 100644
--- a/fhir-server/src/main/resources/application.yml
+++ b/fhir-server/src/main/resources/application.yml
@@ -133,7 +133,7 @@ pathling:
# This section configures the server's support asynchronous processing of HTTP requests.
async:
# Enables asynchronous processing for those operations that support it,
- # when explicitly requested by a HTTP client.
+ # when explicitly requested by an HTTP client.
enabled: true
# A subset of `pathling.httpCaching.vary` HTTP headers, which should
diff --git a/fhir-server/src/test/resources/application-unit-test.yml b/fhir-server/src/test/resources/application-unit-test.yml
new file mode 100644
index 0000000000..91830f7f10
--- /dev/null
+++ b/fhir-server/src/test/resources/application-unit-test.yml
@@ -0,0 +1,3 @@
+spark:
+ ui:
+ enabled: false
diff --git a/fhirpath/pom.xml b/fhirpath/pom.xml
index c02a35fac9..2f5bafb77a 100644
--- a/fhirpath/pom.xml
+++ b/fhirpath/pom.xml
@@ -60,9 +60,8 @@
provided
- org.apache.tomcat
- tomcat-servlet-api
- test
+ javax.servlet
+ javax.servlet-api
diff --git a/library-api/pom.xml b/library-api/pom.xml
index 5e4fb36a74..56a4ca0324 100644
--- a/library-api/pom.xml
+++ b/library-api/pom.xml
@@ -74,9 +74,8 @@
provided
- org.apache.tomcat
- tomcat-servlet-api
- test
+ javax.servlet
+ javax.servlet-api
org.apache.hadoop
diff --git a/pom.xml b/pom.xml
index 39316b0728..06e1d674d2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -356,9 +356,9 @@
- org.apache.tomcat
- tomcat-servlet-api
- 8.5.76
+ javax.servlet
+ javax.servlet-api
+ 4.0.1
runtime
diff --git a/utilities/pom.xml b/utilities/pom.xml
index ccf8abca12..15e1a4e0fb 100644
--- a/utilities/pom.xml
+++ b/utilities/pom.xml
@@ -30,9 +30,8 @@
spark-catalyst_${pathling.scalaVersion}
- org.apache.tomcat
- tomcat-servlet-api
- test
+ javax.servlet
+ javax.servlet-api
ca.uhn.hapi.fhir
@@ -76,7 +75,7 @@
commons-io
commons-io
-
+
org.junit.jupiter
junit-jupiter-api
From e8a204a3a1db31c783366db1f11aee245ca1c8d7 Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Mon, 22 Apr 2024 07:23:20 +1000
Subject: [PATCH 058/175] Switch embedded Tomcat for Jetty within server
---
fhir-server/pom.xml | 4 ++++
pom.xml | 11 +++++++++++
2 files changed, 15 insertions(+)
diff --git a/fhir-server/pom.xml b/fhir-server/pom.xml
index b5d7743414..4dbd683c63 100644
--- a/fhir-server/pom.xml
+++ b/fhir-server/pom.xml
@@ -129,6 +129,10 @@
org.springframework.boot
spring-boot-starter-web
+
+ org.springframework.boot
+ spring-boot-starter-jetty
+
org.springframework.boot
spring-boot-starter-actuator
diff --git a/pom.xml b/pom.xml
index 06e1d674d2..a9746e87ed 100644
--- a/pom.xml
+++ b/pom.xml
@@ -387,6 +387,17 @@
org.springframework.boot
spring-boot-starter-web
${pathling.springBootVersion}
+
+
+ org.springframework.boot
+ spring-boot-starter-tomcat
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-jetty
+ ${pathling.springBootVersion}
org.springframework.boot
From 87e30c0045ff5215609fdb0fa2cd5112b806e90c Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Mon, 22 Apr 2024 10:05:50 +1000
Subject: [PATCH 059/175] Suppress logging of CacheManager "already cached"
within tests
---
fhir-server/src/test/resources/logback-test.xml | 1 +
1 file changed, 1 insertion(+)
diff --git a/fhir-server/src/test/resources/logback-test.xml b/fhir-server/src/test/resources/logback-test.xml
index d6be326da5..56f864fb3b 100644
--- a/fhir-server/src/test/resources/logback-test.xml
+++ b/fhir-server/src/test/resources/logback-test.xml
@@ -24,6 +24,7 @@
+
From 7362c99b7f6f614c99f197ba780b33a99e2e5f19 Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Mon, 22 Apr 2024 10:06:15 +1000
Subject: [PATCH 060/175] Fix paths within request matchers in refactored
SecurityConfiguration
---
.../security/SecurityConfiguration.java | 24 ++++++++++++-------
1 file changed, 15 insertions(+), 9 deletions(-)
diff --git a/fhir-server/src/main/java/au/csiro/pathling/security/SecurityConfiguration.java b/fhir-server/src/main/java/au/csiro/pathling/security/SecurityConfiguration.java
index fc84a72f5a..7c36edde31 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/security/SecurityConfiguration.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/security/SecurityConfiguration.java
@@ -21,8 +21,8 @@
import au.csiro.pathling.config.ServerConfiguration;
import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -32,6 +32,7 @@
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
import org.springframework.security.oauth2.jwt.JwtDecoder;
+import org.springframework.security.oauth2.server.resource.authentication.JwtAuthenticationConverter;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.CorsConfigurationSource;
@@ -53,13 +54,14 @@
@Slf4j
public class SecurityConfiguration {
+ @Nonnull
private final ServerConfiguration configuration;
- @Autowired(required = false)
- private PathlingAuthenticationConverter authenticationConverter;
+ @Nullable
+ private final JwtAuthenticationConverter authenticationConverter;
- @Autowired(required = false)
- private JwtDecoder jwtDecoder;
+ @Nullable
+ private final JwtDecoder jwtDecoder;
@Value("${pathling.auth.enabled}")
private boolean authEnabled;
@@ -69,8 +71,12 @@ public class SecurityConfiguration {
*
* @param configuration a {@link ServerConfiguration} object
*/
- public SecurityConfiguration(@Nonnull final ServerConfiguration configuration) {
+ public SecurityConfiguration(@Nonnull final ServerConfiguration configuration,
+ @Nullable final JwtAuthenticationConverter authenticationConverter,
+ @Nullable final JwtDecoder jwtDecoder) {
this.configuration = configuration;
+ this.authenticationConverter = authenticationConverter;
+ this.jwtDecoder = jwtDecoder;
}
/**
@@ -89,9 +95,9 @@ public SecurityFilterChain securityFilterChain(@Nonnull final HttpSecurity http)
check(jwtDecoder != null, "JWT decoder must be provided when authentication is enabled");
http.authorizeHttpRequests(authz -> authz
// The following requests do not require authentication.
- .requestMatchers(HttpMethod.GET, "/metadata").permitAll()
- .requestMatchers(HttpMethod.GET, "/OperationDefinition/**").permitAll()
- .requestMatchers(HttpMethod.GET, "/.well-known/**").permitAll()
+ .requestMatchers(HttpMethod.GET, "/fhir/metadata").permitAll()
+ .requestMatchers(HttpMethod.GET, "/fhir/OperationDefinition/**").permitAll()
+ .requestMatchers(HttpMethod.GET, "/fhir/.well-known/**").permitAll()
// Anything else needs to be authenticated.
.anyRequest().authenticated())
.cors((cors) -> cors.configurationSource(corsConfigurationSource()))
From c71565b0060adb6d725c0ad2c6383b5d8da57f07 Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Mon, 22 Apr 2024 10:31:47 +1000
Subject: [PATCH 061/175] Exclude Logback configuration from test JARs
---
encoders/pom.xml | 5 +++++
fhirpath/pom.xml | 5 +++++
library-api/pom.xml | 5 +++++
pom.xml | 2 +-
utilities/pom.xml | 5 +++++
5 files changed, 21 insertions(+), 1 deletion(-)
diff --git a/encoders/pom.xml b/encoders/pom.xml
index 4a832dbae4..a97ffeceb9 100644
--- a/encoders/pom.xml
+++ b/encoders/pom.xml
@@ -208,6 +208,11 @@
+
+
+ **/logback.xml
+
+
diff --git a/fhirpath/pom.xml b/fhirpath/pom.xml
index 2f5bafb77a..9b923d44bb 100644
--- a/fhirpath/pom.xml
+++ b/fhirpath/pom.xml
@@ -253,6 +253,11 @@
+
+
+ **/logback.xml
+
+
diff --git a/library-api/pom.xml b/library-api/pom.xml
index 56a4ca0324..2b6c7a6132 100644
--- a/library-api/pom.xml
+++ b/library-api/pom.xml
@@ -241,6 +241,11 @@
+
+
+ **/logback.xml
+
+
diff --git a/pom.xml b/pom.xml
index a9746e87ed..6d8176fb3f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -709,7 +709,7 @@
17
- -Xlint:all
+ -Xlint:all,-processing
diff --git a/utilities/pom.xml b/utilities/pom.xml
index 15e1a4e0fb..635eb69bb7 100644
--- a/utilities/pom.xml
+++ b/utilities/pom.xml
@@ -131,6 +131,11 @@
+
+
+ **/logback.xml
+
+
From cca908713445eb6d3f977d7dcfedb7d455454e1d Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Mon, 22 Apr 2024 10:41:12 +1000
Subject: [PATCH 062/175] Filter out logging relating to plan strings that are
too long
---
encoders/src/test/resources/logback.xml | 1 +
fhir-server/src/main/resources/logback.xml | 1 +
.../src/test/resources/logback-spring.xml | 40 -------------------
fhirpath/src/test/resources/logback.xml | 1 +
library-api/src/test/resources/logback.xml | 1 +
.../src/test/{ => resources}/logback.xml | 3 +-
utilities/src/test/resources/logback.xml | 1 +
7 files changed, 7 insertions(+), 41 deletions(-)
delete mode 100644 fhirpath/src/test/resources/logback-spring.xml
rename terminology/src/test/{ => resources}/logback.xml (87%)
diff --git a/encoders/src/test/resources/logback.xml b/encoders/src/test/resources/logback.xml
index eb099a45b8..0c4559694d 100644
--- a/encoders/src/test/resources/logback.xml
+++ b/encoders/src/test/resources/logback.xml
@@ -42,6 +42,7 @@
additivity="false">
+
diff --git a/fhir-server/src/main/resources/logback.xml b/fhir-server/src/main/resources/logback.xml
index cfd4dbdf57..273f9c4afc 100644
--- a/fhir-server/src/main/resources/logback.xml
+++ b/fhir-server/src/main/resources/logback.xml
@@ -24,6 +24,7 @@
+
diff --git a/fhirpath/src/test/resources/logback-spring.xml b/fhirpath/src/test/resources/logback-spring.xml
deleted file mode 100644
index 38bfcfb1d3..0000000000
--- a/fhirpath/src/test/resources/logback-spring.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-
-
-
-
-
-
-
- [%level] %logger{36} - %msg%n
-
-
-
- target/timing.log
-
- [%d] %msg%n
-
-
-
-
-
-
-
-
-
-
-
diff --git a/fhirpath/src/test/resources/logback.xml b/fhirpath/src/test/resources/logback.xml
index 71e0ba327c..68eb0464f3 100644
--- a/fhirpath/src/test/resources/logback.xml
+++ b/fhirpath/src/test/resources/logback.xml
@@ -32,6 +32,7 @@
+
diff --git a/library-api/src/test/resources/logback.xml b/library-api/src/test/resources/logback.xml
index 293d24f3ab..0059f8cd8e 100644
--- a/library-api/src/test/resources/logback.xml
+++ b/library-api/src/test/resources/logback.xml
@@ -23,6 +23,7 @@
+
diff --git a/terminology/src/test/logback.xml b/terminology/src/test/resources/logback.xml
similarity index 87%
rename from terminology/src/test/logback.xml
rename to terminology/src/test/resources/logback.xml
index 293d24f3ab..8bf9ef2087 100644
--- a/terminology/src/test/logback.xml
+++ b/terminology/src/test/resources/logback.xml
@@ -1,6 +1,6 @@
diff --git a/fhir-server/src/test/resources/logback-test.xml b/fhir-server/src/test/resources/logback-test.xml
index 211bd1e6b6..5f52b95949 100644
--- a/fhir-server/src/test/resources/logback-test.xml
+++ b/fhir-server/src/test/resources/logback-test.xml
@@ -22,7 +22,7 @@
[%level] %logger{36} - %msg%n
-
+
diff --git a/fhirpath/src/test/resources/logback.xml b/fhirpath/src/test/resources/logback.xml
index 68eb0464f3..8af77fd78a 100644
--- a/fhirpath/src/test/resources/logback.xml
+++ b/fhirpath/src/test/resources/logback.xml
@@ -31,7 +31,7 @@
-
+
diff --git a/library-api/src/test/resources/logback.xml b/library-api/src/test/resources/logback.xml
index 0059f8cd8e..b0e2001e73 100644
--- a/library-api/src/test/resources/logback.xml
+++ b/library-api/src/test/resources/logback.xml
@@ -22,7 +22,7 @@
[%level] %logger{36} - %msg%n
-
+
diff --git a/terminology/src/test/resources/logback.xml b/terminology/src/test/resources/logback.xml
index 8bf9ef2087..93052e2016 100644
--- a/terminology/src/test/resources/logback.xml
+++ b/terminology/src/test/resources/logback.xml
@@ -22,7 +22,7 @@
[%level] %logger{36} - %msg%n
-
+
diff --git a/utilities/src/test/resources/logback.xml b/utilities/src/test/resources/logback.xml
index 0059f8cd8e..b0e2001e73 100644
--- a/utilities/src/test/resources/logback.xml
+++ b/utilities/src/test/resources/logback.xml
@@ -22,7 +22,7 @@
[%level] %logger{36} - %msg%n
-
+
From de0a718c719949429cbdade6bb55a9ccc0c9ef07 Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Mon, 22 Apr 2024 16:40:24 +1000
Subject: [PATCH 077/175] Simplify assertion within ImportTest
---
.../pathling/test/integration/modification/ImportTest.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/fhir-server/src/test/java/au/csiro/pathling/test/integration/modification/ImportTest.java b/fhir-server/src/test/java/au/csiro/pathling/test/integration/modification/ImportTest.java
index 975749dc68..90d39f3918 100644
--- a/fhir-server/src/test/java/au/csiro/pathling/test/integration/modification/ImportTest.java
+++ b/fhir-server/src/test/java/au/csiro/pathling/test/integration/modification/ImportTest.java
@@ -19,8 +19,8 @@
import static au.csiro.pathling.test.TestResources.getResourceAsUrl;
import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertInstanceOf;
import static org.junit.jupiter.api.Assertions.assertThrows;
-import static org.junit.jupiter.api.Assertions.assertTrue;
import au.csiro.pathling.errors.ErrorHandlingInterceptor;
import au.csiro.pathling.errors.InvalidUserInputError;
@@ -203,7 +203,7 @@ void throwsOnMissingId() {
() -> importExecutor.execute(buildImportParameters(jsonURL, ResourceType.PATIENT)));
final BaseServerResponseException convertedError =
ErrorHandlingInterceptor.convertError(error);
- assertTrue(convertedError instanceof InvalidRequestException);
+ assertInstanceOf(InvalidRequestException.class, convertedError);
assertEquals("Encountered a resource with no ID", convertedError.getMessage());
}
From 4698d051717aa908c50e8d291a80e7aa6217dbe7 Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Tue, 23 Apr 2024 08:58:59 +1000
Subject: [PATCH 078/175] Fix generic type warnings
---
.../fhirpath/element/ElementDefinition.java | 8 +--
.../fhirpath/element/IntegerPath.java | 27 ++++-----
.../pathling/fhirpath/element/StringPath.java | 40 ++++++--------
.../fhirpath/literal/IntegerLiteralPath.java | 9 +--
.../fhirpath/literal/LiteralPath.java | 20 ++++---
.../fhirpath/literal/StringLiteralPath.java | 9 +--
.../operator/ComparisonOperatorTest.java | 55 ++++++++-----------
.../pathling/sql/udf/TerminologyUdfTest.java | 30 +++++-----
.../assertions/BaseFhirPathAssertion.java | 7 ++-
.../test/assertions/LiteralPathAssertion.java | 10 ++--
10 files changed, 106 insertions(+), 109 deletions(-)
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/ElementDefinition.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/ElementDefinition.java
index 49040e5571..2c69ad35cb 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/ElementDefinition.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/ElementDefinition.java
@@ -76,7 +76,7 @@ public class ElementDefinition {
private final BaseRuntimeChildDefinition childDefinition;
@Nonnull
- private final Optional elementDefinition;
+ private final Optional> elementDefinition;
protected ElementDefinition(@Nonnull final BaseRuntimeChildDefinition childDefinition,
@Nonnull final String elementName) {
@@ -110,9 +110,7 @@ public static ElementDefinition build(@Nonnull final BaseRuntimeChildDefinition
@Nonnull
public Optional getChildElement(@Nonnull final String name) {
if (elementDefinition.isPresent()
- && elementDefinition.get() instanceof BaseRuntimeElementCompositeDefinition) {
- final BaseRuntimeElementCompositeDefinition compositeDefinition =
- (BaseRuntimeElementCompositeDefinition) elementDefinition.get();
+ && elementDefinition.get() instanceof final BaseRuntimeElementCompositeDefinition extends IBase> compositeDefinition) {
final BaseRuntimeChildDefinition newChild = compositeDefinition.getChildByName(name);
if (newChild == null) {
return Optional.empty();
@@ -151,7 +149,7 @@ public Optional getFhirType() {
}
@Nullable final IBase exampleObject = elementDefinition.get().newInstance();
- if (exampleObject == null || exampleObject.getClass() == null) {
+ if (exampleObject == null) {
return Optional.empty();
}
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/IntegerPath.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/IntegerPath.java
index b9fd7d610a..d82522a143 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/IntegerPath.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/IntegerPath.java
@@ -47,8 +47,8 @@
*
* @author John Grimes
*/
-public class IntegerPath extends ElementPath implements Materializable, Comparable,
- Numeric {
+public class IntegerPath extends ElementPath implements Materializable>,
+ Comparable, Numeric {
private static final ImmutableSet> COMPARABLE_TYPES = ImmutableSet
.of(IntegerPath.class, IntegerLiteralPath.class, DecimalPath.class, DecimalLiteralPath.class,
@@ -65,7 +65,8 @@ protected IntegerPath(@Nonnull final String expression, @Nonnull final Dataset getValueFromRow(@Nonnull final Row row, final int columnNumber) {
+ public Optional> getValueFromRow(@Nonnull final Row row,
+ final int columnNumber) {
return valueFromRow(row, columnNumber, getFhirType());
}
@@ -78,8 +79,8 @@ public Optional getValueFromRow(@Nonnull final Row row, final int
* @return A {@link PrimitiveType}, or the absence of a value
*/
@Nonnull
- public static Optional valueFromRow(@Nonnull final Row row, final int columnNumber,
- @Nonnull final FHIRDefinedType fhirType) {
+ public static Optional> valueFromRow(@Nonnull final Row row,
+ final int columnNumber, @Nonnull final FHIRDefinedType fhirType) {
if (row.isNullAt(columnNumber)) {
return Optional.empty();
}
@@ -99,16 +100,16 @@ public static Optional valueFromRow(@Nonnull final Row row, final
} else {
value = row.getInt(columnNumber);
}
- switch (fhirType) {
- case UNSIGNEDINT:
- return Optional.of(new UnsignedIntType(value));
- case POSITIVEINT:
- return Optional.of(new PositiveIntType(value));
- default:
- return Optional.of(new IntegerType(value));
- }
+ return switch (fhirType) {
+ case UNSIGNEDINT -> Optional.of(new UnsignedIntType(value));
+ case POSITIVEINT -> Optional.of(new PositiveIntType(value));
+ default -> Optional.of(new IntegerType(value));
+ };
}
+ /**
+ * @return A set of types that can be compared to this type
+ */
@Nonnull
public static ImmutableSet> getComparableTypes() {
return COMPARABLE_TYPES;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/StringPath.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/StringPath.java
index 8bae112fc3..69085730b2 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/StringPath.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/StringPath.java
@@ -46,7 +46,8 @@
*
* @author John Grimes
*/
-public class StringPath extends ElementPath implements Materializable, Comparable {
+public class StringPath extends ElementPath implements Materializable>,
+ Comparable {
private static final ImmutableSet> COMPARABLE_TYPES = ImmutableSet
.of(StringPath.class, StringLiteralPath.class, NullLiteralPath.class);
@@ -62,7 +63,7 @@ protected StringPath(@Nonnull final String expression, @Nonnull final Dataset getValueFromRow(@Nonnull final Row row,
+ public Optional> getValueFromRow(@Nonnull final Row row,
final int columnNumber) {
return valueFromRow(row, columnNumber, getFhirType());
}
@@ -76,31 +77,26 @@ public Optional getValueFromRow(@Nonnull final Row row,
* @return A {@link PrimitiveType}, or the absence of a value
*/
@Nonnull
- public static Optional valueFromRow(@Nonnull final Row row, final int columnNumber,
- final FHIRDefinedType fhirType) {
+ public static Optional> valueFromRow(@Nonnull final Row row,
+ final int columnNumber, final FHIRDefinedType fhirType) {
if (row.isNullAt(columnNumber)) {
return Optional.empty();
}
- switch (fhirType) {
- case URI:
- return Optional.of(new UriType(row.getString(columnNumber)));
- case CODE:
- return Optional.of(new CodeType(row.getString(columnNumber)));
- case OID:
- return Optional.of(new OidType(row.getString(columnNumber)));
- case ID:
- return Optional.of(new IdType(row.getString(columnNumber)));
- case UUID:
- return Optional.of(new UuidType(row.getString(columnNumber)));
- case MARKDOWN:
- return Optional.of(new MarkdownType(row.getString(columnNumber)));
- case BASE64BINARY:
- return Optional.of(new Base64BinaryType(row.getString(columnNumber)));
- default:
- return Optional.of(new StringType(row.getString(columnNumber)));
- }
+ return switch (fhirType) {
+ case URI -> Optional.of(new UriType(row.getString(columnNumber)));
+ case CODE -> Optional.of(new CodeType(row.getString(columnNumber)));
+ case OID -> Optional.of(new OidType(row.getString(columnNumber)));
+ case ID -> Optional.of(new IdType(row.getString(columnNumber)));
+ case UUID -> Optional.of(new UuidType(row.getString(columnNumber)));
+ case MARKDOWN -> Optional.of(new MarkdownType(row.getString(columnNumber)));
+ case BASE64BINARY -> Optional.of(new Base64BinaryType(row.getString(columnNumber)));
+ default -> Optional.of(new StringType(row.getString(columnNumber)));
+ };
}
+ /**
+ * @return A set of types that can be compared to this type
+ */
@Nonnull
public static ImmutableSet> getComparableTypes() {
return COMPARABLE_TYPES;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/literal/IntegerLiteralPath.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/literal/IntegerLiteralPath.java
index 27287514d4..e264632c8d 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/literal/IntegerLiteralPath.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/literal/IntegerLiteralPath.java
@@ -41,12 +41,12 @@
*
* @author John Grimes
*/
-public class IntegerLiteralPath extends LiteralPath implements
- Materializable, Comparable, Numeric {
+public class IntegerLiteralPath extends LiteralPath> implements
+ Materializable>, Comparable, Numeric {
@SuppressWarnings("WeakerAccess")
protected IntegerLiteralPath(@Nonnull final Dataset dataset, @Nonnull final Column idColumn,
- @Nonnull final PrimitiveType literalValue) {
+ @Nonnull final PrimitiveType> literalValue) {
super(dataset, idColumn, literalValue);
}
@@ -117,7 +117,8 @@ public FHIRDefinedType getFhirType() {
@Nonnull
@Override
- public Optional getValueFromRow(@Nonnull final Row row, final int columnNumber) {
+ public Optional> getValueFromRow(@Nonnull final Row row,
+ final int columnNumber) {
return IntegerPath.valueFromRow(row, columnNumber, FHIRDefinedType.INTEGER);
}
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/literal/LiteralPath.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/literal/LiteralPath.java
index 7ea7e6a919..7abdd63e0d 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/literal/LiteralPath.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/literal/LiteralPath.java
@@ -46,8 +46,8 @@
public abstract class LiteralPath implements FhirPath {
// See https://hl7.org/fhir/fhirpath.html#types.
- private static final Map> FHIR_TYPE_TO_FHIRPATH_TYPE =
- new ImmutableMap.Builder>()
+ private static final Map>> FHIR_TYPE_TO_FHIRPATH_TYPE =
+ new ImmutableMap.Builder>>()
.put(FHIRDefinedType.BOOLEAN, BooleanLiteralPath.class)
.put(FHIRDefinedType.STRING, StringLiteralPath.class)
.put(FHIRDefinedType.URI, StringLiteralPath.class)
@@ -71,8 +71,8 @@ public abstract class LiteralPath implements FhirPath {
.put(FHIRDefinedType.QUANTITY, QuantityLiteralPath.class)
.build();
- private static final Map, FHIRDefinedType> FHIRPATH_TYPE_TO_FHIR_TYPE =
- new ImmutableMap.Builder, FHIRDefinedType>()
+ private static final Map>, FHIRDefinedType> FHIRPATH_TYPE_TO_FHIR_TYPE =
+ new ImmutableMap.Builder>, FHIRDefinedType>()
.put(BooleanLiteralPath.class, FHIRDefinedType.BOOLEAN)
.put(StringLiteralPath.class, FHIRDefinedType.STRING)
.put(IntegerLiteralPath.class, FHIRDefinedType.INTEGER)
@@ -135,11 +135,11 @@ protected LiteralPath(@Nonnull final Dataset dataset, @Nonnull final Column
@Nonnull
public static String expressionFor(@Nonnull final Dataset dataset,
@Nonnull final Column idColumn, @Nonnull final Type literalValue) {
- final Class extends LiteralPath> literalPathClass = FHIR_TYPE_TO_FHIRPATH_TYPE
+ final Class extends LiteralPath extends Type>> literalPathClass = FHIR_TYPE_TO_FHIRPATH_TYPE
.get(FHIRDefinedType.fromCode(literalValue.fhirType()));
try {
@SuppressWarnings("unchecked")
- final Constructor extends LiteralPath> constructor = (Constructor extends LiteralPath>) Arrays.stream(
+ final Constructor extends LiteralPath extends Type>> constructor = (Constructor extends LiteralPath extends Type>>) Arrays.stream(
literalPathClass.getDeclaredConstructors())
.filter(c -> c.getParameterCount() == 3)
.filter(c -> c.getParameterTypes()[0] == Dataset.class)
@@ -148,7 +148,8 @@ public static String expressionFor(@Nonnull final Dataset dataset,
.findFirst()
.orElseThrow(() -> new AssertionError(
"No suitable constructor found for " + literalPathClass));
- final LiteralPath literalPath = constructor.newInstance(dataset, idColumn, literalValue);
+ final LiteralPath extends Type> literalPath = constructor.newInstance(dataset, idColumn,
+ literalValue);
return literalPath.getExpression();
} catch (final InstantiationException | IllegalAccessException | InvocationTargetException e) {
throw new RuntimeException("Problem building a LiteralPath class", e);
@@ -198,7 +199,7 @@ public Column getExtractableColumn() {
*/
@Nonnull
private static FHIRDefinedType fhirPathToFhirType(
- @Nonnull final Class extends LiteralPath> fhirPathClass) {
+ @Nonnull final Class extends LiteralPath extends Type>> fhirPathClass) {
return FHIRPATH_TYPE_TO_FHIR_TYPE.get(fhirPathClass);
}
@@ -218,7 +219,8 @@ public NonLiteralPath combineWith(@Nonnull final FhirPath target,
if (target instanceof LiteralPath && getClass().equals(target.getClass())) {
// If the target is another LiteralPath, we can merge it if they have the same FHIR type, as
// decided by our mapping of literal FHIRPath types to FHIR types.
- final FHIRDefinedType fhirType = fhirPathToFhirType(getClass());
+ @SuppressWarnings("unchecked") final FHIRDefinedType fhirType = fhirPathToFhirType(
+ (Class extends LiteralPath extends Type>>) getClass());
return ElementPath
.build(expression, dataset, idColumn, eidColumn, valueColumn, singular, Optional.empty(),
thisColumn, fhirType);
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/literal/StringLiteralPath.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/literal/StringLiteralPath.java
index cf7a3d8a91..32a9f770ab 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/literal/StringLiteralPath.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/literal/StringLiteralPath.java
@@ -43,11 +43,11 @@
*/
@SuppressWarnings("rawtypes")
@Getter
-public class StringLiteralPath extends LiteralPath implements
- Materializable, Comparable {
+public class StringLiteralPath extends LiteralPath> implements
+ Materializable>, Comparable {
protected StringLiteralPath(@Nonnull final Dataset dataset, @Nonnull final Column idColumn,
- @Nonnull final PrimitiveType literalValue) {
+ @Nonnull final PrimitiveType> literalValue) {
super(dataset, idColumn, literalValue);
}
@@ -115,7 +115,8 @@ public boolean isComparableTo(@Nonnull final Class extends Comparable> type) {
@Nonnull
@Override
- public Optional getValueFromRow(@Nonnull final Row row, final int columnNumber) {
+ public Optional> getValueFromRow(@Nonnull final Row row,
+ final int columnNumber) {
return StringPath.valueFromRow(row, columnNumber, FHIRDefinedType.STRING);
}
diff --git a/fhirpath/src/test/java/au/csiro/pathling/fhirpath/operator/ComparisonOperatorTest.java b/fhirpath/src/test/java/au/csiro/pathling/fhirpath/operator/ComparisonOperatorTest.java
index 669269b3c3..79d7b85659 100644
--- a/fhirpath/src/test/java/au/csiro/pathling/fhirpath/operator/ComparisonOperatorTest.java
+++ b/fhirpath/src/test/java/au/csiro/pathling/fhirpath/operator/ComparisonOperatorTest.java
@@ -45,6 +45,7 @@
import org.apache.spark.sql.SparkSession;
import org.apache.spark.sql.types.DataTypes;
import org.hl7.fhir.r4.model.Enumerations.FHIRDefinedType;
+import org.hl7.fhir.r4.model.Type;
import org.junit.jupiter.api.TestInstance;
import org.junit.jupiter.api.TestInstance.Lifecycle;
import org.junit.jupiter.params.ParameterizedTest;
@@ -104,36 +105,28 @@ Stream parameters() {
}
TestParameters buildTestParameters(@Nonnull final String name) {
- switch (name) {
- case "String":
- return buildStringExpressions(name);
- case "Integer":
- return buildIntegerExpressions(name);
- case "Decimal":
- return buildDecimalExpressions(name);
- case "DateTime":
- return buildDateTimeExpressions(name,
- "2015-02-07T13:28:17-05:00",
- "2015-02-08T13:28:17-05:00",
- FHIRDefinedType.DATETIME);
- case "Date":
- return buildDateTimeExpressions(name,
- "2015-02-07",
- "2015-02-08",
- FHIRDefinedType.DATE);
- case "Date (YYYY-MM)":
- return buildDateTimeExpressions(name,
- "2015-02",
- "2015-03",
- FHIRDefinedType.DATE);
- case "Date (YYYY)":
- return buildDateTimeExpressions(name,
- "2015",
- "2016",
- FHIRDefinedType.DATE);
- default:
- throw new RuntimeException("Invalid data type");
- }
+ return switch (name) {
+ case "String" -> buildStringExpressions(name);
+ case "Integer" -> buildIntegerExpressions(name);
+ case "Decimal" -> buildDecimalExpressions(name);
+ case "DateTime" -> buildDateTimeExpressions(name,
+ "2015-02-07T13:28:17-05:00",
+ "2015-02-08T13:28:17-05:00",
+ FHIRDefinedType.DATETIME);
+ case "Date" -> buildDateTimeExpressions(name,
+ "2015-02-07",
+ "2015-02-08",
+ FHIRDefinedType.DATE);
+ case "Date (YYYY-MM)" -> buildDateTimeExpressions(name,
+ "2015-02",
+ "2015-03",
+ FHIRDefinedType.DATE);
+ case "Date (YYYY)" -> buildDateTimeExpressions(name,
+ "2015",
+ "2016",
+ FHIRDefinedType.DATE);
+ default -> throw new RuntimeException("Invalid data type");
+ };
}
TestParameters buildStringExpressions(final String name) {
@@ -290,7 +283,7 @@ TestParameters buildDateTimeExpressions(final String name,
.idAndValueColumns()
.singular(true)
.build();
- final LiteralPath literal;
+ final LiteralPath extends Type> literal;
try {
literal = (fhirType == FHIRDefinedType.DATETIME)
? DateTimeLiteralPath.fromString(lesserDate, left)
diff --git a/fhirpath/src/test/java/au/csiro/pathling/sql/udf/TerminologyUdfTest.java b/fhirpath/src/test/java/au/csiro/pathling/sql/udf/TerminologyUdfTest.java
index 21d7fea1bc..483816ac81 100644
--- a/fhirpath/src/test/java/au/csiro/pathling/sql/udf/TerminologyUdfTest.java
+++ b/fhirpath/src/test/java/au/csiro/pathling/sql/udf/TerminologyUdfTest.java
@@ -319,8 +319,8 @@ public void testTranslateCoding() {
final Dataset expectedResult = DatasetBuilder.of(spark).withIdColumn("id")
.withColumn("result", TranslateUdf.RETURN_TYPE)
.withRow("uc-null", null)
- .withRow("uc-coding_1", CodingEncoding.encodeList(Arrays.asList(CODING_5, CODING_4)))
- .withRow("uc-coding_2", Collections.emptyList())
+ .withRow("uc-coding_1", CodingEncoding.encodeListToArray(List.of(CODING_5, CODING_4)))
+ .withRow("uc-coding_2", new Row[]{})
.build();
DatasetAssert.of(result).hasRows(expectedResult);
}
@@ -334,11 +334,11 @@ public void testTranslateCodingArray() {
.withIdColumn("id")
.withColumn("codings", DataTypes.createArrayType(CodingEncoding.DATA_TYPE))
.withRow("uc-null", null)
- .withRow("uc-empty", Collections.emptyList())
- .withRow("uc-coding_1", Collections.singletonList(CodingEncoding.encode(CODING_1)))
- .withRow("uc-coding_2", Collections.singletonList(CodingEncoding.encode(CODING_2)))
- .withRow("uc-coding_1+coding_1", Arrays.asList(CodingEncoding.encode(CODING_1),
- CodingEncoding.encode(CODING_1)))
+ .withRow("uc-empty", new Row[]{})
+ .withRow("uc-coding_1", new Row[]{CodingEncoding.encode(CODING_1)})
+ .withRow("uc-coding_2", new Row[]{CodingEncoding.encode(CODING_2)})
+ .withRow("uc-coding_1+coding_1",
+ CodingEncoding.encodeListToArray(List.of(CODING_1, CODING_1)))
.build();
final Dataset result = ds.select(ds.col("id"),
@@ -350,11 +350,11 @@ public void testTranslateCodingArray() {
final Dataset expectedResult = DatasetBuilder.of(spark).withIdColumn("id")
.withColumn("result", TranslateUdf.RETURN_TYPE)
.withRow("uc-null", null)
- .withRow("uc-empty", Collections.emptyList())
- .withRow("uc-coding_1", CodingEncoding.encodeList(Arrays.asList(CODING_5, CODING_4)))
- .withRow("uc-coding_2", Collections.emptyList())
+ .withRow("uc-empty", new Row[]{})
+ .withRow("uc-coding_1", CodingEncoding.encodeListToArray(List.of(CODING_5, CODING_4)))
+ .withRow("uc-coding_2", new Row[]{})
.withRow("uc-coding_1+coding_1",
- CodingEncoding.encodeList(Arrays.asList(CODING_5, CODING_4)))
+ CodingEncoding.encodeListToArray(List.of(CODING_5, CODING_4)))
.build();
DatasetAssert.of(result).hasRows(expectedResult);
}
@@ -536,8 +536,8 @@ public void testProperty(final String propertyType, final DataType resultDataTyp
.withColumn("result", DataTypes.createArrayType(resultDataType))
.withRow("uc-null", null)
.withRow("uc-invalid", null)
- .withRow("uc-codingA", Collections.singletonList(propertyASqlValues))
- .withRow("uc-codingB", Collections.emptyList())
+ .withRow("uc-codingA", propertyASqlValues.toArray())
+ .withRow("uc-codingB", new Object[]{})
.build();
DatasetAssert.of(resultA)
@@ -552,8 +552,8 @@ public void testProperty(final String propertyType, final DataType resultDataTyp
.withColumn("result", DataTypes.createArrayType(resultDataType))
.withRow("uc-null", null)
.withRow("uc-invalid", null)
- .withRow("uc-codingA", Collections.emptyList())
- .withRow("uc-codingB", Collections.singletonList(propertyBSqlValues))
+ .withRow("uc-codingA", new Object[]{})
+ .withRow("uc-codingB", propertyBSqlValues.toArray())
.build();
DatasetAssert.of(resultB)
diff --git a/fhirpath/src/test/java/au/csiro/pathling/test/assertions/BaseFhirPathAssertion.java b/fhirpath/src/test/java/au/csiro/pathling/test/assertions/BaseFhirPathAssertion.java
index f264a8f98d..6c91e819d3 100644
--- a/fhirpath/src/test/java/au/csiro/pathling/test/assertions/BaseFhirPathAssertion.java
+++ b/fhirpath/src/test/java/au/csiro/pathling/test/assertions/BaseFhirPathAssertion.java
@@ -30,6 +30,7 @@
import java.util.ArrayList;
import java.util.List;
import org.apache.spark.sql.Column;
+import org.hl7.fhir.r4.model.Type;
/**
* @author Piotr Szul
@@ -67,6 +68,7 @@ public DatasetAssert selectGroupingResult(@Nonnull final List groupingCo
}
@Nonnull
+ @SuppressWarnings("SameParameterValue")
private DatasetAssert selectGroupingResult(@Nonnull final List groupingColumns,
final boolean preserveOrder) {
check(!groupingColumns.isEmpty());
@@ -121,9 +123,10 @@ public ResourcePathAssertion isResourcePath() {
return new ResourcePathAssertion((ResourcePath) fhirPath);
}
- public LiteralPathAssertion isLiteralPath(final Class extends LiteralPath> ofType) {
+ public LiteralPathAssertion isLiteralPath(
+ final Class extends LiteralPath extends Type>> ofType) {
assertTrue(ofType.isAssignableFrom(fhirPath.getClass()));
- return new LiteralPathAssertion((LiteralPath) fhirPath);
+ return new LiteralPathAssertion((LiteralPath extends Type>) fhirPath);
}
@SuppressWarnings("unchecked")
diff --git a/fhirpath/src/test/java/au/csiro/pathling/test/assertions/LiteralPathAssertion.java b/fhirpath/src/test/java/au/csiro/pathling/test/assertions/LiteralPathAssertion.java
index 0aac52f28d..fbba4814f8 100644
--- a/fhirpath/src/test/java/au/csiro/pathling/test/assertions/LiteralPathAssertion.java
+++ b/fhirpath/src/test/java/au/csiro/pathling/test/assertions/LiteralPathAssertion.java
@@ -18,6 +18,7 @@
package au.csiro.pathling.test.assertions;
import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertInstanceOf;
import static org.junit.jupiter.api.Assertions.assertTrue;
import au.csiro.pathling.fhirpath.literal.CodingLiteralPath;
@@ -26,6 +27,7 @@
import jakarta.annotation.Nullable;
import java.util.function.Function;
import org.hl7.fhir.r4.model.Coding;
+import org.hl7.fhir.r4.model.Type;
/**
* @author John Grimes
@@ -34,23 +36,23 @@
public class LiteralPathAssertion extends BaseFhirPathAssertion {
@Nonnull
- private final LiteralPath fhirPath;
+ private final LiteralPath extends Type> fhirPath;
- LiteralPathAssertion(@Nonnull final LiteralPath fhirPath) {
+ LiteralPathAssertion(@Nonnull final LiteralPath extends Type> fhirPath) {
super(fhirPath);
this.fhirPath = fhirPath;
}
@Nonnull
public LiteralPathAssertion has(@Nullable final Object expected,
- @Nonnull final Function function) {
+ @Nonnull final Function, Object> function) {
assertEquals(expected, function.apply(fhirPath));
return this;
}
@Nonnull
public LiteralPathAssertion hasCodingValue(@Nonnull final Coding expectedCoding) {
- assertTrue(fhirPath instanceof CodingLiteralPath);
+ assertInstanceOf(CodingLiteralPath.class, fhirPath);
final Coding actualCoding = ((CodingLiteralPath) fhirPath).getValue();
assertTrue(expectedCoding.equalsDeep(actualCoding));
return this;
From d2e61fbb8f4ac626d1b9976b004e3a7dc4033f26 Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Tue, 23 Apr 2024 08:59:28 +1000
Subject: [PATCH 079/175] Suppress logging of already registered functions
within FHIRPath tests
---
fhirpath/src/test/resources/logback.xml | 1 +
1 file changed, 1 insertion(+)
diff --git a/fhirpath/src/test/resources/logback.xml b/fhirpath/src/test/resources/logback.xml
index 8af77fd78a..99e03220c8 100644
--- a/fhirpath/src/test/resources/logback.xml
+++ b/fhirpath/src/test/resources/logback.xml
@@ -33,6 +33,7 @@
+
From 3e610570a9eec0e4f1dd1ec1d802d3194ff11eed Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Tue, 23 Apr 2024 08:59:55 +1000
Subject: [PATCH 080/175] Fix terminology tests to use new list-based method
signatures
---
.../fhirpath/encoding/CodingEncoding.java | 23 +++++++++++++++----
.../test/AbstractTerminologyTestBase.java | 4 ++--
2 files changed, 20 insertions(+), 7 deletions(-)
diff --git a/terminology/src/main/java/au/csiro/pathling/fhirpath/encoding/CodingEncoding.java b/terminology/src/main/java/au/csiro/pathling/fhirpath/encoding/CodingEncoding.java
index af424250da..d8530046c2 100644
--- a/terminology/src/main/java/au/csiro/pathling/fhirpath/encoding/CodingEncoding.java
+++ b/terminology/src/main/java/au/csiro/pathling/fhirpath/encoding/CodingEncoding.java
@@ -113,18 +113,31 @@ static Coding decode(@Nullable final Row row) {
}
/**
- * Encodes a list of Codings to a Row[] (spark SQL compatible type)
+ * Encodes a list of Codings to a list of {@link Row} objects
*
- * @param codings a list of codings to encode
- * @return the Row[] representation of the coding
+ * @param codings a list of codings to encode
+ * @return a list of the Row representations of the coding
*/
@Nullable
- static Row[] encodeList(@Nullable final List codings) {
+ static List encodeList(@Nullable final List codings) {
return codings == null
? null
- : codings.stream().map(CodingEncoding::encode).toArray(Row[]::new);
+ : codings.stream().map(CodingEncoding::encode).toList();
}
+ /**
+ * Encodes a list of Codings to an array of {@link Row} objects
+ *
+ * @param codings a list of codings to encode
+ * @return an array of the Row representations of the coding
+ */
+ @Nullable
+ static Row[] encodeListToArray(@Nullable final List codings) {
+ final List encoded = encodeList(codings);
+ return encoded == null
+ ? null
+ : encoded.toArray(new Row[0]);
+ }
@Nonnull
static Column toStruct(@Nonnull final Column id, @Nonnull final Column system,
diff --git a/terminology/src/test/java/au/csiro/pathling/test/AbstractTerminologyTestBase.java b/terminology/src/test/java/au/csiro/pathling/test/AbstractTerminologyTestBase.java
index 6290fd746f..832e52af8f 100644
--- a/terminology/src/test/java/au/csiro/pathling/test/AbstractTerminologyTestBase.java
+++ b/terminology/src/test/java/au/csiro/pathling/test/AbstractTerminologyTestBase.java
@@ -106,8 +106,8 @@ private static Arguments primitiveArguments(
final Function constructor,
final List propertyAValues, final List propertyBValues) {
return arguments(fhirType, sqlType,
- propertyAValues.toArray(),
- propertyBValues.toArray(),
+ propertyAValues.stream().map(constructor).toList(),
+ propertyBValues.stream().map(constructor).toList(),
propertyAValues,
propertyBValues);
}
From 5c16870a4798f99ed9e0a6277d5b95040306210f Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Tue, 23 Apr 2024 09:00:13 +1000
Subject: [PATCH 081/175] Update Python library to use Spark 3.5.1
---
lib/python/requirements/package.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/python/requirements/package.txt b/lib/python/requirements/package.txt
index 5d6a4130ad..15af9fa8a4 100644
--- a/lib/python/requirements/package.txt
+++ b/lib/python/requirements/package.txt
@@ -1,2 +1,2 @@
-pyspark==3.5.0
+pyspark==3.5.1
deprecated==1.2.14
From 176d5222ac04ff3bab2ce7cecca3771a1b30f4a6 Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Tue, 23 Apr 2024 09:00:22 +1000
Subject: [PATCH 082/175] Update R library to use Spark 3.5.1
---
lib/R/DESCRIPTION.src | 2 +-
lib/R/pom.xml | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/lib/R/DESCRIPTION.src b/lib/R/DESCRIPTION.src
index 19b3b1d786..00d506436b 100644
--- a/lib/R/DESCRIPTION.src
+++ b/lib/R/DESCRIPTION.src
@@ -26,7 +26,7 @@ Encoding: UTF-8
Depends:
R (>= 3.5.0)
Imports:
- rlang(>= 1.0.0), sparklyr(>= 1.8.4)
+ rlang(>= 1.0.0), sparklyr(>= 1.8.5)
Suggests:
testthat(>= 3.0.0)
Config/testthat/edition: 3
diff --git a/lib/R/pom.xml b/lib/R/pom.xml
index 5b26177e50..05dc8421b6 100644
--- a/lib/R/pom.xml
+++ b/lib/R/pom.xml
@@ -63,7 +63,7 @@
of the sparklyr version that we depend upon that is on the archive site. The reason we can't
use the latest from the CDN is that the files drop off the CDN when a new version is released.
-->
- 3.5.0
+ 3.5.1
${pathling.scalaVersion}
${pathling.hadoopMajorVersion}
${pathling.hadoopVersion}
From 75217cb8a45db3f74ae00f10723b5ceb71cf9cdd Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Tue, 23 Apr 2024 09:12:14 +1000
Subject: [PATCH 083/175] Fix type warning in PathlingContext.decode, and add
Javadoc
---
.../pathling/library/PathlingContext.java | 18 +++++++++++++-----
1 file changed, 13 insertions(+), 5 deletions(-)
diff --git a/library-api/src/main/java/au/csiro/pathling/library/PathlingContext.java b/library-api/src/main/java/au/csiro/pathling/library/PathlingContext.java
index 8d5f1b6175..3aa07ba35d 100644
--- a/library-api/src/main/java/au/csiro/pathling/library/PathlingContext.java
+++ b/library-api/src/main/java/au/csiro/pathling/library/PathlingContext.java
@@ -34,7 +34,6 @@
import au.csiro.pathling.terminology.TerminologyFunctions;
import au.csiro.pathling.terminology.TerminologyServiceFactory;
import au.csiro.pathling.validation.ValidationUtils;
-import ca.uhn.fhir.context.BaseRuntimeElementDefinition;
import ca.uhn.fhir.context.FhirContext;
import ca.uhn.fhir.context.FhirVersionEnum;
import ca.uhn.fhir.context.RuntimeResourceDefinition;
@@ -153,8 +152,7 @@ public static PathlingContext create(@Nonnull final SparkSession sparkSession,
@Nonnull
public static PathlingContext create(@Nonnull final SparkSession sparkSession) {
final EncodingConfiguration encodingConfig = EncodingConfiguration.builder().build();
- final TerminologyConfiguration terminologyConfig = TerminologyConfiguration.builder().build();
- return create(sparkSession, encodingConfig, terminologyConfig);
+ return create(sparkSession, encodingConfig);
}
/**
@@ -232,10 +230,20 @@ public Dataset encode(@Nonnull final Dataset stringResourcesDF,
return encode(stringResources, definition.getImplementingClass(), inputMimeType).toDF();
}
+ /**
+ * Takes a dataframe of encoded resources of the specified type and decodes them into a dataset of
+ * string representations, based on the requested output MIME type.
+ *
+ * @param resources the dataframe of encoded resources
+ * @param resourceName the name of the resources to decode
+ * @param outputMimeType the MIME type of the output strings
+ * @param the type of the resource
+ * @return a dataset of string representations of the resources
+ */
@Nonnull
public Dataset decode(@Nonnull final Dataset resources,
@Nonnull final String resourceName, @Nonnull final String outputMimeType) {
- final BaseRuntimeElementDefinition definition = FhirEncoders.contextFor(fhirVersion)
+ final RuntimeResourceDefinition definition = FhirEncoders.contextFor(fhirVersion)
.getResourceDefinition(resourceName);
@SuppressWarnings("unchecked")
@@ -243,7 +251,7 @@ public Dataset decode(@Nonnull final Dataset encoder = fhirEncoders.of(resourceClass);
final Dataset typedResources = resources.as(encoder);
- final DecodeResourceMapPartitions mapper = new DecodeResourceMapPartitions(fhirVersion,
+ final DecodeResourceMapPartitions mapper = new DecodeResourceMapPartitions<>(fhirVersion,
outputMimeType, resourceClass);
return typedResources.mapPartitions(mapper, Encoders.STRING());
From 70bcac68b884d68dfde6db464590584dfa3773e7 Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Tue, 23 Apr 2024 09:23:15 +1000
Subject: [PATCH 084/175] Convert NonLiteralPath.findThisColumn to list
argument
---
.../main/java/au/csiro/pathling/fhirpath/NonLiteralPath.java | 5 +++--
.../src/main/java/au/csiro/pathling/fhirpath/Temporal.java | 3 ++-
.../java/au/csiro/pathling/fhirpath/element/DecimalPath.java | 3 ++-
.../java/au/csiro/pathling/fhirpath/element/IntegerPath.java | 3 ++-
.../au/csiro/pathling/fhirpath/element/QuantityPath.java | 3 ++-
.../csiro/pathling/fhirpath/function/AggregateFunction.java | 3 +--
.../au/csiro/pathling/fhirpath/function/UntilFunction.java | 3 ++-
.../au/csiro/pathling/fhirpath/operator/BooleanOperator.java | 3 ++-
.../csiro/pathling/fhirpath/operator/ComparisonOperator.java | 3 ++-
9 files changed, 18 insertions(+), 11 deletions(-)
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/NonLiteralPath.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/NonLiteralPath.java
index 5db3e3aad6..83b84fdcfd 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/NonLiteralPath.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/NonLiteralPath.java
@@ -34,6 +34,7 @@
import au.csiro.pathling.fhirpath.literal.NullLiteralPath;
import jakarta.annotation.Nonnull;
import java.util.Arrays;
+import java.util.Collection;
import java.util.List;
import java.util.Optional;
import java.util.stream.Stream;
@@ -124,8 +125,8 @@ protected NonLiteralPath(@Nonnull final String expression, @Nonnull final Datase
* @return a {@link Column}, if one was found
*/
@Nonnull
- public static Optional findThisColumn(@Nonnull final Object... inputs) {
- return Stream.of(inputs)
+ public static Optional findThisColumn(@Nonnull final Collection> inputs) {
+ return inputs.stream()
.filter(input -> input instanceof NonLiteralPath)
.map(path -> (NonLiteralPath) path)
.filter(path -> path.getThisColumn().isPresent())
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/Temporal.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/Temporal.java
index ca02a4f5ce..0f26461d24 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/Temporal.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/Temporal.java
@@ -21,6 +21,7 @@
import au.csiro.pathling.fhirpath.element.ElementPath;
import au.csiro.pathling.fhirpath.literal.QuantityLiteralPath;
import jakarta.annotation.Nonnull;
+import java.util.List;
import java.util.Optional;
import java.util.function.Function;
import org.apache.spark.sql.Column;
@@ -78,7 +79,7 @@ static Function buildDateArithmeticOperation(
return target -> {
final String functionName;
final Optional eidColumn = NonLiteralPath.findEidColumn(source, target);
- final Optional thisColumn = NonLiteralPath.findThisColumn(source, target);
+ final Optional thisColumn = NonLiteralPath.findThisColumn(List.of(source, target));
switch (operation) {
case ADDITION:
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/DecimalPath.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/DecimalPath.java
index 189389bc2d..78a55ec156 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/DecimalPath.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/DecimalPath.java
@@ -29,6 +29,7 @@
import jakarta.annotation.Nonnull;
import java.math.BigDecimal;
import java.math.RoundingMode;
+import java.util.List;
import java.util.Optional;
import java.util.function.Function;
import org.apache.spark.sql.Column;
@@ -152,7 +153,7 @@ public static Function buildMathOperation(@Nonnull fina
.apply(source.getNumericValueColumn(), target.getNumericValueColumn());
final Column idColumn = source.getIdColumn();
final Optional eidColumn = findEidColumn(source, target);
- final Optional thisColumn = findThisColumn(source, target);
+ final Optional thisColumn = findThisColumn(List.of(source, target));
switch (operation) {
case ADDITION:
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/IntegerPath.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/IntegerPath.java
index d82522a143..39e2fad521 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/IntegerPath.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/IntegerPath.java
@@ -29,6 +29,7 @@
import au.csiro.pathling.fhirpath.literal.NullLiteralPath;
import com.google.common.collect.ImmutableSet;
import jakarta.annotation.Nonnull;
+import java.util.List;
import java.util.Optional;
import java.util.function.Function;
import org.apache.spark.sql.Column;
@@ -165,7 +166,7 @@ public static Function buildMathOperation(@Nonnull fina
.apply(source.getNumericValueColumn(), targetValueColumn);
final Column idColumn = source.getIdColumn();
final Optional eidColumn = findEidColumn(source, target);
- final Optional thisColumn = findThisColumn(source, target);
+ final Optional thisColumn = findThisColumn(List.of(source, target));
switch (operation) {
case ADDITION:
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/QuantityPath.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/QuantityPath.java
index 644213e7b7..930be1a1b2 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/QuantityPath.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/element/QuantityPath.java
@@ -32,6 +32,7 @@
import au.csiro.pathling.sql.types.FlexiDecimal;
import com.google.common.collect.ImmutableSet;
import jakarta.annotation.Nonnull;
+import java.util.List;
import java.util.Optional;
import java.util.function.BiFunction;
import java.util.function.Function;
@@ -193,7 +194,7 @@ public static Function buildMathOperation(@Nonnull fina
final Column idColumn = source.getIdColumn();
final Optional eidColumn = findEidColumn(source, target);
- final Optional thisColumn = findThisColumn(source, target);
+ final Optional thisColumn = findThisColumn(List.of(source, target));
return
elementDefinition.map(definition -> ElementPath
.build(expression, dataset, idColumn, eidColumn, resultQuantityColumn, true,
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/AggregateFunction.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/AggregateFunction.java
index 400192d1e8..6e19cb435b 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/AggregateFunction.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/AggregateFunction.java
@@ -155,8 +155,7 @@ private T buildAggregateResult(@Nonnull final Dataset
// TODO: This is very error prone as a collection can be passed here instead of an array.
// How can we make it more stringent?
@SuppressWarnings("ConfusingArgumentToVarargsMethod")
- final Optional thisColumn = NonLiteralPath
- .findThisColumn(inputs.toArray(new FhirPath[0]));
+ final Optional thisColumn = NonLiteralPath.findThisColumn(inputs);
final Dataset finalDataset = dataset
.groupBy(groupBy)
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/UntilFunction.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/UntilFunction.java
index 9de803c3de..06d2cd8bcd 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/UntilFunction.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/function/UntilFunction.java
@@ -34,6 +34,7 @@
import au.csiro.pathling.fhirpath.literal.StringLiteralPath;
import au.csiro.pathling.sql.misc.TemporalDifferenceFunction;
import jakarta.annotation.Nonnull;
+import java.util.List;
import java.util.Optional;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Dataset;
@@ -86,7 +87,7 @@ public FhirPath invoke(@Nonnull final NamedFunctionInput input) {
final String expression = NamedFunction.expressionFromInput(input, NAME);
final Optional eidColumn = findEidColumn(fromArgument, toArgument);
- final Optional thisColumn = findThisColumn(fromArgument, toArgument);
+ final Optional thisColumn = findThisColumn(List.of(fromArgument, toArgument));
return ElementPath.build(expression, dataset, fromArgument.getIdColumn(),
eidColumn, valueColumn, true,
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/operator/BooleanOperator.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/operator/BooleanOperator.java
index 805288fd2f..4d218b2361 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/operator/BooleanOperator.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/operator/BooleanOperator.java
@@ -29,6 +29,7 @@
import au.csiro.pathling.fhirpath.element.ElementPath;
import au.csiro.pathling.fhirpath.literal.BooleanLiteralPath;
import jakarta.annotation.Nonnull;
+import java.util.List;
import java.util.Optional;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Dataset;
@@ -108,7 +109,7 @@ public FhirPath invoke(@Nonnull final OperatorInput input) {
final Dataset dataset = join(input.getContext(), left, right, JoinType.LEFT_OUTER);
final Column idColumn = left.getIdColumn();
final Optional eidColumn = findEidColumn(left, right);
- final Optional thisColumn = findThisColumn(left, right);
+ final Optional thisColumn = findThisColumn(List.of(left, right));
return ElementPath
.build(expression, dataset, idColumn, eidColumn, valueColumn, true, Optional.empty(),
diff --git a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/operator/ComparisonOperator.java b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/operator/ComparisonOperator.java
index 3101941434..1ce127e256 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/fhirpath/operator/ComparisonOperator.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/fhirpath/operator/ComparisonOperator.java
@@ -32,6 +32,7 @@
import au.csiro.pathling.fhirpath.FhirPath;
import au.csiro.pathling.fhirpath.element.ElementPath;
import jakarta.annotation.Nonnull;
+import java.util.List;
import java.util.Optional;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Dataset;
@@ -76,7 +77,7 @@ public FhirPath invoke(@Nonnull final OperatorInput input) {
final Column valueColumn = leftComparable.getComparison(type).apply(rightComparable);
final Column idColumn = left.getIdColumn();
final Optional eidColumn = findEidColumn(left, right);
- final Optional thisColumn = findThisColumn(left, right);
+ final Optional thisColumn = findThisColumn(List.of(left, right));
final DatasetWithColumn datasetWithColumn = createColumn(dataset, valueColumn);
return ElementPath.build(expression, datasetWithColumn.getDataset(), idColumn, eidColumn,
From 8fe82840cd899e12ddb30c0b80dc365dee7882fb Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Tue, 23 Apr 2024 09:24:37 +1000
Subject: [PATCH 085/175] Suppress NativeCodeLoader logging within tests
---
encoders/src/test/resources/logback.xml | 1 +
fhir-server/src/test/resources/logback-test.xml | 1 +
fhirpath/src/test/resources/logback.xml | 1 +
library-api/src/test/resources/logback.xml | 1 +
terminology/src/test/resources/logback.xml | 1 +
utilities/src/test/resources/logback.xml | 1 +
6 files changed, 6 insertions(+)
diff --git a/encoders/src/test/resources/logback.xml b/encoders/src/test/resources/logback.xml
index c469c3c882..76d5575d86 100644
--- a/encoders/src/test/resources/logback.xml
+++ b/encoders/src/test/resources/logback.xml
@@ -43,6 +43,7 @@
+
diff --git a/fhir-server/src/test/resources/logback-test.xml b/fhir-server/src/test/resources/logback-test.xml
index 5f52b95949..58d982a435 100644
--- a/fhir-server/src/test/resources/logback-test.xml
+++ b/fhir-server/src/test/resources/logback-test.xml
@@ -27,6 +27,7 @@
+
diff --git a/fhirpath/src/test/resources/logback.xml b/fhirpath/src/test/resources/logback.xml
index 99e03220c8..0a2a613af8 100644
--- a/fhirpath/src/test/resources/logback.xml
+++ b/fhirpath/src/test/resources/logback.xml
@@ -34,6 +34,7 @@
+
diff --git a/library-api/src/test/resources/logback.xml b/library-api/src/test/resources/logback.xml
index b0e2001e73..4750417fbb 100644
--- a/library-api/src/test/resources/logback.xml
+++ b/library-api/src/test/resources/logback.xml
@@ -24,6 +24,7 @@
+
diff --git a/terminology/src/test/resources/logback.xml b/terminology/src/test/resources/logback.xml
index 93052e2016..5bd856f630 100644
--- a/terminology/src/test/resources/logback.xml
+++ b/terminology/src/test/resources/logback.xml
@@ -24,6 +24,7 @@
+
diff --git a/utilities/src/test/resources/logback.xml b/utilities/src/test/resources/logback.xml
index b0e2001e73..4750417fbb 100644
--- a/utilities/src/test/resources/logback.xml
+++ b/utilities/src/test/resources/logback.xml
@@ -24,6 +24,7 @@
+
From 12a4801bc8803b198175ff8d1677f95fa2cce7c9 Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Tue, 23 Apr 2024 09:34:25 +1000
Subject: [PATCH 086/175] Suppress logging of already registered functions
within library API tests
---
library-api/src/test/resources/logback.xml | 1 +
1 file changed, 1 insertion(+)
diff --git a/library-api/src/test/resources/logback.xml b/library-api/src/test/resources/logback.xml
index 4750417fbb..4e0d318b6e 100644
--- a/library-api/src/test/resources/logback.xml
+++ b/library-api/src/test/resources/logback.xml
@@ -24,6 +24,7 @@
+
From 5cadaf999b45abb3cd8c5af5c43a783656d965a9 Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Tue, 23 Apr 2024 09:53:03 +1000
Subject: [PATCH 087/175] Remove JARs argument to spark-submit test
---
lib/python/pom.xml | 2 --
1 file changed, 2 deletions(-)
diff --git a/lib/python/pom.xml b/lib/python/pom.xml
index 050a83cc81..9fd9d1e53a 100644
--- a/lib/python/pom.xml
+++ b/lib/python/pom.xml
@@ -222,8 +222,6 @@
spark-submit
- --jars
- ${project.build.directory}/dependency/*
--packages
au.csiro.pathling:library-runtime:${project.version},io.delta:delta-spark_${pathling.scalaVersion}:${pathling.deltaVersion}
--conf
From d0032614804d30d7d1c15ef49b940182abef2291 Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Tue, 23 Apr 2024 10:07:56 +1000
Subject: [PATCH 088/175] Increase timeout on benchmark job
---
.github/workflows/test.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 36c4cd6620..155ad782a1 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -443,7 +443,7 @@ jobs:
-pl fhir-server -am
-P${{ env.PATHLING_PROFILES }}
-DskipSurefireTests
- timeout-minutes: 20
+ timeout-minutes: 40
- name: Upload benchmark artifact
uses: actions/upload-artifact@v3
with:
From 73ca9f143ebbaee8f9648ec547577c9da4f1c348 Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Tue, 23 Apr 2024 10:12:05 +1000
Subject: [PATCH 089/175] Update Sparklyr URLs
---
lib/R/README.md | 2 +-
site/docs/libraries/index.md | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/lib/R/README.md b/lib/R/README.md
index 9c3f6bf8b9..3b5c7457b5 100644
--- a/lib/R/README.md
+++ b/lib/R/README.md
@@ -2,7 +2,7 @@ R API for Pathling
==================
``pathling`` package is the R API for [Pathling](https://pathling.csiro.au),
-based on [sparklyr](https://spark.rstudio.com/). It provides a set of functions
+based on [sparklyr](https://spark.posit.co/). It provides a set of functions
that aid the use of FHIR terminology services and FHIR data within R code.
## Local installation
diff --git a/site/docs/libraries/index.md b/site/docs/libraries/index.md
index 8cfe967fbc..fae40f7512 100644
--- a/site/docs/libraries/index.md
+++ b/site/docs/libraries/index.md
@@ -14,7 +14,7 @@ Apache Spark applications and data science workflows.
The libraries are available for:
- [Python](pathname:///docs/python/pathling.html) (based on [PySpark](https://spark.apache.org/docs/latest/api/python/reference/index.html))
-- [R](pathname:///docs/r/index.html) (based on [sparklyr](https://spark.rstudio.com/))
+- [R](pathname:///docs/r/index.html) (based on [sparklyr](https://spark.posit.co/))
- [Scala](pathname:///docs/scala/au/csiro/pathling/index.html)
- [Java](pathname:///docs/java/index.html)
From e7040460cda74332a42d3f400e4d54dd0b8f0b85 Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Tue, 23 Apr 2024 12:01:26 +1000
Subject: [PATCH 090/175] Further increase timeout on benchmark job
---
.github/workflows/test.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 155ad782a1..d0ed7cdaa5 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -443,7 +443,7 @@ jobs:
-pl fhir-server -am
-P${{ env.PATHLING_PROFILES }}
-DskipSurefireTests
- timeout-minutes: 40
+ timeout-minutes: 80
- name: Upload benchmark artifact
uses: actions/upload-artifact@v3
with:
From 62693d498d1f71e465a0ec7cf341232a8717af5b Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Tue, 23 Apr 2024 17:21:03 +1000
Subject: [PATCH 091/175] Upgrade JMH to 1.37
---
fhir-server/pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/fhir-server/pom.xml b/fhir-server/pom.xml
index 4dbd683c63..ea43908f91 100644
--- a/fhir-server/pom.xml
+++ b/fhir-server/pom.xml
@@ -36,7 +36,7 @@
aehrc/pathling
latest
arm64
- 1.36
+ 1.37
amazoncorretto:17
From 74c22d5b8333723b343890b1dbdcfb45cd9f606d Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Mon, 29 Apr 2024 11:58:54 +1000
Subject: [PATCH 092/175] Update validation imports to jakarta.validation
---
.../csiro/pathling/config/EncodingConfiguration.java | 4 ++--
.../au/csiro/pathling/config/AsyncConfiguration.java | 4 ++--
.../pathling/config/AuthorizationConfiguration.java | 2 +-
.../au/csiro/pathling/config/CorsConfiguration.java | 4 ++--
.../config/HttpServerCachingConfiguration.java | 2 +-
.../csiro/pathling/config/ImportConfiguration.java | 2 +-
.../csiro/pathling/config/ServerConfiguration.java | 2 +-
.../au/csiro/pathling/config/SparkConfiguration.java | 2 +-
.../au/csiro/pathling/config/QueryConfiguration.java | 10 +++++-----
.../csiro/pathling/config/StorageConfiguration.java | 10 +++++-----
.../csiro/pathling/library/PathlingContextTest.java | 2 +-
pom.xml | 11 +----------
.../config/HttpClientCachingConfiguration.java | 12 ++++++------
.../pathling/config/HttpClientConfiguration.java | 4 ++--
.../config/TerminologyAuthConfiguration.java | 12 ++++++------
.../pathling/config/TerminologyConfiguration.java | 6 +++---
.../csiro/pathling/validation/ValidationUtils.java | 10 +++++-----
17 files changed, 45 insertions(+), 54 deletions(-)
diff --git a/encoders/src/main/java/au/csiro/pathling/config/EncodingConfiguration.java b/encoders/src/main/java/au/csiro/pathling/config/EncodingConfiguration.java
index e5983acd78..458a11626e 100644
--- a/encoders/src/main/java/au/csiro/pathling/config/EncodingConfiguration.java
+++ b/encoders/src/main/java/au/csiro/pathling/config/EncodingConfiguration.java
@@ -23,9 +23,9 @@
package au.csiro.pathling.config;
+import jakarta.validation.constraints.Min;
+import jakarta.validation.constraints.NotNull;
import java.util.Set;
-import javax.validation.constraints.Min;
-import javax.validation.constraints.NotNull;
import lombok.Builder;
import lombok.Data;
diff --git a/fhir-server/src/main/java/au/csiro/pathling/config/AsyncConfiguration.java b/fhir-server/src/main/java/au/csiro/pathling/config/AsyncConfiguration.java
index b8f50fa208..1a610d3cd3 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/config/AsyncConfiguration.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/config/AsyncConfiguration.java
@@ -17,8 +17,8 @@
package au.csiro.pathling.config;
+import jakarta.validation.constraints.NotNull;
import java.util.List;
-import javax.validation.constraints.NotNull;
import lombok.Data;
/**
@@ -32,7 +32,7 @@ public class AsyncConfiguration {
*/
@NotNull
private boolean enabled;
-
+
/**
* List of headers from exclude from the {@link HttpServerCachingConfiguration#getVary()} list for
* the purpose of server side caching of asynchronous requests. These are likely to include
diff --git a/fhir-server/src/main/java/au/csiro/pathling/config/AuthorizationConfiguration.java b/fhir-server/src/main/java/au/csiro/pathling/config/AuthorizationConfiguration.java
index df47604062..1504e74065 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/config/AuthorizationConfiguration.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/config/AuthorizationConfiguration.java
@@ -19,9 +19,9 @@
import jakarta.annotation.Nonnull;
import jakarta.annotation.Nullable;
+import jakarta.validation.constraints.NotNull;
import java.util.List;
import java.util.Optional;
-import javax.validation.constraints.NotNull;
import lombok.Data;
import lombok.ToString;
diff --git a/fhir-server/src/main/java/au/csiro/pathling/config/CorsConfiguration.java b/fhir-server/src/main/java/au/csiro/pathling/config/CorsConfiguration.java
index e44f0ebf4f..a89c016852 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/config/CorsConfiguration.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/config/CorsConfiguration.java
@@ -17,9 +17,9 @@
package au.csiro.pathling.config;
+import jakarta.validation.constraints.Min;
+import jakarta.validation.constraints.NotNull;
import java.util.List;
-import javax.validation.constraints.Min;
-import javax.validation.constraints.NotNull;
import lombok.Data;
/**
diff --git a/fhir-server/src/main/java/au/csiro/pathling/config/HttpServerCachingConfiguration.java b/fhir-server/src/main/java/au/csiro/pathling/config/HttpServerCachingConfiguration.java
index 22bf908400..411406dcf5 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/config/HttpServerCachingConfiguration.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/config/HttpServerCachingConfiguration.java
@@ -17,8 +17,8 @@
package au.csiro.pathling.config;
+import jakarta.validation.constraints.NotNull;
import java.util.List;
-import javax.validation.constraints.NotNull;
import lombok.Data;
@Data
diff --git a/fhir-server/src/main/java/au/csiro/pathling/config/ImportConfiguration.java b/fhir-server/src/main/java/au/csiro/pathling/config/ImportConfiguration.java
index 259c69def4..e534d85fcc 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/config/ImportConfiguration.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/config/ImportConfiguration.java
@@ -17,8 +17,8 @@
package au.csiro.pathling.config;
+import jakarta.validation.constraints.NotNull;
import java.util.List;
-import javax.validation.constraints.NotNull;
import lombok.Data;
/**
diff --git a/fhir-server/src/main/java/au/csiro/pathling/config/ServerConfiguration.java b/fhir-server/src/main/java/au/csiro/pathling/config/ServerConfiguration.java
index 5cfdfb5cde..6c078b69fd 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/config/ServerConfiguration.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/config/ServerConfiguration.java
@@ -19,8 +19,8 @@
import jakarta.annotation.Nonnull;
import jakarta.annotation.Nullable;
+import jakarta.validation.constraints.NotNull;
import java.util.Optional;
-import javax.validation.constraints.NotNull;
import lombok.AccessLevel;
import lombok.Data;
import lombok.Getter;
diff --git a/fhir-server/src/main/java/au/csiro/pathling/config/SparkConfiguration.java b/fhir-server/src/main/java/au/csiro/pathling/config/SparkConfiguration.java
index 36e6559e2c..ae47090af9 100644
--- a/fhir-server/src/main/java/au/csiro/pathling/config/SparkConfiguration.java
+++ b/fhir-server/src/main/java/au/csiro/pathling/config/SparkConfiguration.java
@@ -17,7 +17,7 @@
package au.csiro.pathling.config;
-import javax.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotBlank;
import lombok.Builder;
import lombok.Data;
diff --git a/fhirpath/src/main/java/au/csiro/pathling/config/QueryConfiguration.java b/fhirpath/src/main/java/au/csiro/pathling/config/QueryConfiguration.java
index 31c08918b4..0556581535 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/config/QueryConfiguration.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/config/QueryConfiguration.java
@@ -17,12 +17,13 @@
package au.csiro.pathling.config;
-import javax.validation.constraints.NotNull;
+import jakarta.validation.constraints.NotNull;
import lombok.Builder;
import lombok.Data;
/**
* Represents configuration that controls the behaviour of query executors.
+ *
* @author Piotr Szul
*/
@Data
@@ -36,11 +37,10 @@ public class QueryConfiguration {
@NotNull
@Builder.Default
private Boolean explainQueries = false;
-
+
/**
- * This controls whether the built-in caching within Spark is used for search results.
- * It may be useful to turn this off for large datasets in memory-constrained
- * environments.
+ * This controls whether the built-in caching within Spark is used for search results. It may be
+ * useful to turn this off for large datasets in memory-constrained environments.
*/
@NotNull
@Builder.Default
diff --git a/fhirpath/src/main/java/au/csiro/pathling/config/StorageConfiguration.java b/fhirpath/src/main/java/au/csiro/pathling/config/StorageConfiguration.java
index bd3fa3f968..aec4c81ca7 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/config/StorageConfiguration.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/config/StorageConfiguration.java
@@ -18,11 +18,11 @@
package au.csiro.pathling.config;
import jakarta.annotation.Nonnull;
-import javax.validation.constraints.Min;
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
-import javax.validation.constraints.Pattern;
-import javax.validation.constraints.Size;
+import jakarta.validation.constraints.Min;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import jakarta.validation.constraints.Pattern;
+import jakarta.validation.constraints.Size;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
diff --git a/library-api/src/test/java/au/csiro/pathling/library/PathlingContextTest.java b/library-api/src/test/java/au/csiro/pathling/library/PathlingContextTest.java
index 58d3fc26d4..e382d816b4 100644
--- a/library-api/src/test/java/au/csiro/pathling/library/PathlingContextTest.java
+++ b/library-api/src/test/java/au/csiro/pathling/library/PathlingContextTest.java
@@ -47,6 +47,7 @@
import au.csiro.pathling.terminology.TerminologyServiceFactory;
import ca.uhn.fhir.context.FhirVersionEnum;
import jakarta.annotation.Nonnull;
+import jakarta.validation.ConstraintViolationException;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
@@ -58,7 +59,6 @@
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import javax.validation.ConstraintViolationException;
import lombok.extern.slf4j.Slf4j;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Dataset;
diff --git a/pom.xml b/pom.xml
index 6d8176fb3f..1d22223abb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -485,12 +485,8 @@
org.hibernate.validator
hibernate-validator
- 6.0.13.Final
+ 8.0.1.Final
-
- javax.validation
- validation-api
-
org.jboss.logging
jboss-logging
@@ -581,11 +577,6 @@
commons-io
2.13.0
-
- jakarta.validation
- jakarta.validation-api
- 2.0.2
-
com.google.guava
guava
diff --git a/terminology/src/main/java/au/csiro/pathling/config/HttpClientCachingConfiguration.java b/terminology/src/main/java/au/csiro/pathling/config/HttpClientCachingConfiguration.java
index 3d82f2c10a..27141f143d 100644
--- a/terminology/src/main/java/au/csiro/pathling/config/HttpClientCachingConfiguration.java
+++ b/terminology/src/main/java/au/csiro/pathling/config/HttpClientCachingConfiguration.java
@@ -21,18 +21,18 @@
import au.csiro.pathling.config.HttpClientCachingConfiguration.ValidHttpCacheConfiguration;
import jakarta.annotation.Nullable;
+import jakarta.validation.Constraint;
+import jakarta.validation.ConstraintValidator;
+import jakarta.validation.ConstraintValidatorContext;
+import jakarta.validation.Payload;
+import jakarta.validation.constraints.Min;
+import jakarta.validation.constraints.NotNull;
import java.io.Serializable;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
-import javax.validation.Constraint;
-import javax.validation.ConstraintValidator;
-import javax.validation.ConstraintValidatorContext;
-import javax.validation.Payload;
-import javax.validation.constraints.Min;
-import javax.validation.constraints.NotNull;
import lombok.Builder;
import lombok.Data;
diff --git a/terminology/src/main/java/au/csiro/pathling/config/HttpClientConfiguration.java b/terminology/src/main/java/au/csiro/pathling/config/HttpClientConfiguration.java
index 1fe7a8f656..c68b14b3a1 100644
--- a/terminology/src/main/java/au/csiro/pathling/config/HttpClientConfiguration.java
+++ b/terminology/src/main/java/au/csiro/pathling/config/HttpClientConfiguration.java
@@ -17,9 +17,9 @@
package au.csiro.pathling.config;
+import jakarta.validation.constraints.Min;
+import jakarta.validation.constraints.NotNull;
import java.io.Serializable;
-import javax.validation.constraints.Min;
-import javax.validation.constraints.NotNull;
import lombok.Builder;
import lombok.Data;
diff --git a/terminology/src/main/java/au/csiro/pathling/config/TerminologyAuthConfiguration.java b/terminology/src/main/java/au/csiro/pathling/config/TerminologyAuthConfiguration.java
index 178ff1b8c2..76c36e8eba 100644
--- a/terminology/src/main/java/au/csiro/pathling/config/TerminologyAuthConfiguration.java
+++ b/terminology/src/main/java/au/csiro/pathling/config/TerminologyAuthConfiguration.java
@@ -19,18 +19,18 @@
import au.csiro.pathling.config.TerminologyAuthConfiguration.ValidTerminologyAuthConfiguration;
import jakarta.annotation.Nullable;
+import jakarta.validation.Constraint;
+import jakarta.validation.ConstraintValidator;
+import jakarta.validation.ConstraintValidatorContext;
+import jakarta.validation.Payload;
+import jakarta.validation.constraints.Min;
+import jakarta.validation.constraints.NotNull;
import java.io.Serializable;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
-import javax.validation.Constraint;
-import javax.validation.ConstraintValidator;
-import javax.validation.ConstraintValidatorContext;
-import javax.validation.Payload;
-import javax.validation.constraints.Min;
-import javax.validation.constraints.NotNull;
import lombok.Builder;
import lombok.Data;
import lombok.ToString;
diff --git a/terminology/src/main/java/au/csiro/pathling/config/TerminologyConfiguration.java b/terminology/src/main/java/au/csiro/pathling/config/TerminologyConfiguration.java
index 7510352251..c39becb21a 100644
--- a/terminology/src/main/java/au/csiro/pathling/config/TerminologyConfiguration.java
+++ b/terminology/src/main/java/au/csiro/pathling/config/TerminologyConfiguration.java
@@ -18,10 +18,10 @@
package au.csiro.pathling.config;
import jakarta.annotation.Nullable;
+import jakarta.validation.Valid;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
import java.io.Serializable;
-import javax.validation.Valid;
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
import lombok.Builder;
import lombok.Data;
import org.hibernate.validator.constraints.URL;
diff --git a/utilities/src/main/java/au/csiro/pathling/validation/ValidationUtils.java b/utilities/src/main/java/au/csiro/pathling/validation/ValidationUtils.java
index 9aa69f9542..cc8575415f 100644
--- a/utilities/src/main/java/au/csiro/pathling/validation/ValidationUtils.java
+++ b/utilities/src/main/java/au/csiro/pathling/validation/ValidationUtils.java
@@ -4,13 +4,13 @@
import jakarta.annotation.Nonnull;
import jakarta.annotation.Nullable;
+import jakarta.validation.ConstraintViolation;
+import jakarta.validation.ConstraintViolationException;
+import jakarta.validation.Validation;
+import jakarta.validation.Validator;
+import jakarta.validation.ValidatorFactory;
import java.util.Set;
import java.util.stream.Collectors;
-import javax.validation.ConstraintViolation;
-import javax.validation.ConstraintViolationException;
-import javax.validation.Validation;
-import javax.validation.Validator;
-import javax.validation.ValidatorFactory;
import org.hibernate.validator.messageinterpolation.ParameterMessageInterpolator;
/**
From b1e58d6ad5967c5a8b8c8d1c5c3c2a8a8b256bf7 Mon Sep 17 00:00:00 2001
From: Piotr Szul
Date: Tue, 30 Apr 2024 09:00:16 +1000
Subject: [PATCH 093/175] Fixing the issue with benchmark runner not exiting
but removing web container form the benchmark test application context.
---
.../java/au/csiro/pathling/jmh/AbstractJmhSpringBootState.java | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/fhir-server/src/test/java/au/csiro/pathling/jmh/AbstractJmhSpringBootState.java b/fhir-server/src/test/java/au/csiro/pathling/jmh/AbstractJmhSpringBootState.java
index f6eff3d49a..7f937e8496 100644
--- a/fhir-server/src/test/java/au/csiro/pathling/jmh/AbstractJmhSpringBootState.java
+++ b/fhir-server/src/test/java/au/csiro/pathling/jmh/AbstractJmhSpringBootState.java
@@ -21,6 +21,7 @@
import org.openjdk.jmh.annotations.Setup;
import org.openjdk.jmh.annotations.State;
import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
import org.springframework.test.context.ActiveProfiles;
@@ -36,7 +37,7 @@
* #wireUp()} comes up first which is now achieved by placing this class in 'au.csiro.pathling.jmh'
* package and all the classes that use it in 'au.csiro.pathling.test.benchmark'.
*/
-@SpringBootTest
+@SpringBootTest(webEnvironment = WebEnvironment.NONE)
public abstract class AbstractJmhSpringBootState {
@Setup(Level.Trial)
From 230b9c35f72ca1701bce599616dfcbe02b8da9f6 Mon Sep 17 00:00:00 2001
From: Piotr Szul
Date: Tue, 30 Apr 2024 10:47:40 +1000
Subject: [PATCH 094/175] Moving benchmark execution to a forked VM (from the
maven one) and adding the explicit cleanup of the application context(s)
created for the spring autowired benchmarks.
---
fhir-server/pom.xml | 34 +++++++++----------
.../pathling/jmh/SpringBootJmhContext.java | 14 ++++++++
.../benchmark/PathlingBenchmarkRunner.java | 8 ++++-
3 files changed, 37 insertions(+), 19 deletions(-)
diff --git a/fhir-server/pom.xml b/fhir-server/pom.xml
index ea43908f91..35301ef2b5 100644
--- a/fhir-server/pom.xml
+++ b/fhir-server/pom.xml
@@ -438,29 +438,27 @@
run-benchmark
test
- java
+ exec
- au.csiro.pathling.test.benchmark.PathlingBenchmarkRunner
- test
- false
-
-
- spring.profiles.active
- unit-test
-
-
- pathling.storage.warehouseUrl
- file://${project.basedir}/src/test/resources/test-data
-
-
- pathling.storage.databaseName
- parquet
-
-
+ java
+ -classpath
+
+ -Xmx6g
+ -XX:MaxMetaspaceSize=400m
+ -XX:ReservedCodeCacheSize=240m
+ -Xss1m
+ -Duser.timezone=UTC
+ --add-exports=java.base/sun.nio.ch=ALL-UNNAMED
+ --add-opens=java.base/java.net=ALL-UNNAMED
+ -Dspring.profiles.active=unit-test
+ -Dpathling.storage.warehouseUrl=file://${project.basedir}/src/test/resources/test-data
+ -Dpathling.storage.databaseName=parquet
+ au.csiro.pathling.test.benchmark.PathlingBenchmarkRunner
${project.build.directory}/benchmark
+ test
diff --git a/fhir-server/src/test/java/au/csiro/pathling/jmh/SpringBootJmhContext.java b/fhir-server/src/test/java/au/csiro/pathling/jmh/SpringBootJmhContext.java
index 9fc0836359..054605c1db 100644
--- a/fhir-server/src/test/java/au/csiro/pathling/jmh/SpringBootJmhContext.java
+++ b/fhir-server/src/test/java/au/csiro/pathling/jmh/SpringBootJmhContext.java
@@ -20,6 +20,7 @@
import jakarta.annotation.Nonnull;
import java.util.HashMap;
import java.util.Map;
+import org.springframework.test.annotation.DirtiesContext.HierarchyMode;
import org.springframework.test.context.TestContextManager;
/**
@@ -52,4 +53,17 @@ public static void autowireWithTestContext(@Nonnull final Object testLikeObject)
throws Exception {
getOrCreate(testLikeObject.getClass()).prepareTestInstance(testLikeObject);
}
+
+
+ /**
+ * Cleans up the contexts of all the classes that have been autowired using this class.
+ * This also destroys and clean up all the test application contexts created thus far.
+ */
+ public static void cleanUpAll() {
+ synchronized (contextManagers) {
+ contextManagers.forEach((k, v) -> v.getTestContext().markApplicationContextDirty(
+ HierarchyMode.EXHAUSTIVE));
+ contextManagers.clear();
+ }
+ }
}
diff --git a/fhir-server/src/test/java/au/csiro/pathling/test/benchmark/PathlingBenchmarkRunner.java b/fhir-server/src/test/java/au/csiro/pathling/test/benchmark/PathlingBenchmarkRunner.java
index d83df4ef93..b245315fbd 100644
--- a/fhir-server/src/test/java/au/csiro/pathling/test/benchmark/PathlingBenchmarkRunner.java
+++ b/fhir-server/src/test/java/au/csiro/pathling/test/benchmark/PathlingBenchmarkRunner.java
@@ -21,6 +21,7 @@
import java.io.File;
import java.util.Properties;
+import au.csiro.pathling.jmh.SpringBootJmhContext;
import lombok.extern.slf4j.Slf4j;
import org.openjdk.jmh.results.format.ResultFormatType;
import org.openjdk.jmh.runner.Runner;
@@ -79,7 +80,12 @@ public static void main(final String... argc) throws Exception {
.shouldFailOnError(true)
.jvmArgs("-server -Xmx4g -ea -Duser.timezone=UTC")
.build();
- new Runner(opt).run();
+ try {
+ new Runner(opt).run();
+ } finally {
+ // clean up the test application contexts created by the benchmarks
+ SpringBootJmhContext.cleanUpAll();
+ }
}
}
From 54e90bba9f52f2f467bdab50c551fe636069f167 Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Wed, 1 May 2024 14:35:04 +1000
Subject: [PATCH 095/175] Remove unnecessary exclusion of Tomcat from Spring
Boot
---
pom.xml | 6 ------
1 file changed, 6 deletions(-)
diff --git a/pom.xml b/pom.xml
index 1d22223abb..71165e2322 100644
--- a/pom.xml
+++ b/pom.xml
@@ -387,12 +387,6 @@
org.springframework.boot
spring-boot-starter-web
${pathling.springBootVersion}
-
-
- org.springframework.boot
- spring-boot-starter-tomcat
-
-
org.springframework.boot
From 4b2d3bad9f67b740f0901fd70018be48706497da Mon Sep 17 00:00:00 2001
From: Piotr Szul
Date: Thu, 2 May 2024 15:08:01 +1000
Subject: [PATCH 096/175] Revert "Remove unnecessary exclusion of Tomcat from
Spring Boot"
This reverts commit 54e90bba9f52f2f467bdab50c551fe636069f167.
---
pom.xml | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/pom.xml b/pom.xml
index 71165e2322..1d22223abb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -387,6 +387,12 @@
org.springframework.boot
spring-boot-starter-web
${pathling.springBootVersion}
+
+
+ org.springframework.boot
+ spring-boot-starter-tomcat
+
+
org.springframework.boot
From 989f6e52eb8f56d5faff56cbe265a6d73aa49c13 Mon Sep 17 00:00:00 2001
From: Piotr Szul
Date: Tue, 7 May 2024 11:04:55 +1000
Subject: [PATCH 097/175] Adding ability to override the location of benchmark
dataset with maven properties.
---
fhir-server/pom.xml | 6 ++++--
.../csiro/pathling/test/benchmark/AggregateBenchmark.java | 2 +-
2 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/fhir-server/pom.xml b/fhir-server/pom.xml
index 35301ef2b5..3187f7b9c2 100644
--- a/fhir-server/pom.xml
+++ b/fhir-server/pom.xml
@@ -38,6 +38,8 @@
arm64
1.37
amazoncorretto:17
+ file://${project.basedir}/src/test/resources/test-data
+ parquet
@@ -453,8 +455,8 @@
--add-exports=java.base/sun.nio.ch=ALL-UNNAMED
--add-opens=java.base/java.net=ALL-UNNAMED
-Dspring.profiles.active=unit-test
- -Dpathling.storage.warehouseUrl=file://${project.basedir}/src/test/resources/test-data
- -Dpathling.storage.databaseName=parquet
+ -Dpathling.storage.warehouseUrl=${pathling.benchmark.warehouseUrl}
+ -Dpathling.storage.databaseName=${pathling.benchmark.databaseName}
au.csiro.pathling.test.benchmark.PathlingBenchmarkRunner
${project.build.directory}/benchmark
diff --git a/fhir-server/src/test/java/au/csiro/pathling/test/benchmark/AggregateBenchmark.java b/fhir-server/src/test/java/au/csiro/pathling/test/benchmark/AggregateBenchmark.java
index 8d1228e577..4d7c58aee8 100644
--- a/fhir-server/src/test/java/au/csiro/pathling/test/benchmark/AggregateBenchmark.java
+++ b/fhir-server/src/test/java/au/csiro/pathling/test/benchmark/AggregateBenchmark.java
@@ -98,7 +98,7 @@ public void setUp() {
SharedMocks.resetAll();
mockResource(ResourceType.PATIENT, ResourceType.CONDITION, ResourceType.ENCOUNTER,
ResourceType.PROCEDURE, ResourceType.MEDICATIONREQUEST, ResourceType.OBSERVATION,
- ResourceType.DIAGNOSTICREPORT, ResourceType.ORGANIZATION, ResourceType.QUESTIONNAIRE,
+ ResourceType.DIAGNOSTICREPORT, ResourceType.ORGANIZATION,
ResourceType.CAREPLAN);
executor = new AggregateExecutor(configuration, fhirContext, spark, database,
From 225a0c7a60d72374f299a290271d267992d8c811 Mon Sep 17 00:00:00 2001
From: Piotr Szul
Date: Tue, 7 May 2024 11:37:41 +1000
Subject: [PATCH 098/175] Adding ability to set benchmark iterations with maven
properties.
---
fhir-server/pom.xml | 4 ++++
.../pathling/test/benchmark/PathlingBenchmarkRunner.java | 2 +-
2 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/fhir-server/pom.xml b/fhir-server/pom.xml
index 3187f7b9c2..405d15b0c8 100644
--- a/fhir-server/pom.xml
+++ b/fhir-server/pom.xml
@@ -40,6 +40,8 @@
amazoncorretto:17
file://${project.basedir}/src/test/resources/test-data
parquet
+ 1
+ 5
@@ -457,6 +459,8 @@
-Dspring.profiles.active=unit-test
-Dpathling.storage.warehouseUrl=${pathling.benchmark.warehouseUrl}
-Dpathling.storage.databaseName=${pathling.benchmark.databaseName}
+ -Dbenchmark.test.iterations=${pathling.benchmark.testIterations}
+ -Dbenchmark.warmup.iterations=${pathling.benchmark.warmupIterations}
au.csiro.pathling.test.benchmark.PathlingBenchmarkRunner
${project.build.directory}/benchmark
diff --git a/fhir-server/src/test/java/au/csiro/pathling/test/benchmark/PathlingBenchmarkRunner.java b/fhir-server/src/test/java/au/csiro/pathling/test/benchmark/PathlingBenchmarkRunner.java
index b245315fbd..6ab38e0ff4 100644
--- a/fhir-server/src/test/java/au/csiro/pathling/test/benchmark/PathlingBenchmarkRunner.java
+++ b/fhir-server/src/test/java/au/csiro/pathling/test/benchmark/PathlingBenchmarkRunner.java
@@ -43,7 +43,7 @@ public static void main(final String... argc) throws Exception {
? argc[0]
: "target/benchmark";
- final Properties properties = PropertiesLoaderUtils.loadAllProperties("benchmark.properties");
+ final Properties properties = System.getProperties();
final int warmup = Integer
.parseInt(properties.getProperty("benchmark.warmup.iterations", "1"));
From 8b66355832ba80ff294935ff058691ad4e7bb42b Mon Sep 17 00:00:00 2001
From: Piotr Szul
Date: Wed, 8 May 2024 07:39:53 +1000
Subject: [PATCH 099/175] Increasing number of benchmark iterations to gather
data.
---
.github/workflows/test.yml | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index d0ed7cdaa5..297e7e8fe5 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -443,7 +443,8 @@ jobs:
-pl fhir-server -am
-P${{ env.PATHLING_PROFILES }}
-DskipSurefireTests
- timeout-minutes: 80
+ -Dpathling.benchmark.testIterations=100
+ timeout-minutes: 720
- name: Upload benchmark artifact
uses: actions/upload-artifact@v3
with:
From 0464a43c1997aadcdf86fb13a5a37140ec153f1c Mon Sep 17 00:00:00 2001
From: Piotr Szul
Date: Wed, 8 May 2024 07:41:24 +1000
Subject: [PATCH 100/175] Increasing number of benchmark warmup iterations to
gather data.
---
.github/workflows/test.yml | 1 +
1 file changed, 1 insertion(+)
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 297e7e8fe5..3c9e80855f 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -444,6 +444,7 @@ jobs:
-P${{ env.PATHLING_PROFILES }}
-DskipSurefireTests
-Dpathling.benchmark.testIterations=100
+ -Dpathling.benchmark.warmupIterations=10
timeout-minutes: 720
- name: Upload benchmark artifact
uses: actions/upload-artifact@v3
From 503c713e052e1420e0809f2bf698532492b9a313 Mon Sep 17 00:00:00 2001
From: Piotr Szul
Date: Wed, 8 May 2024 10:36:58 +1000
Subject: [PATCH 101/175] Fixing the issue of expired AWS credentials when
uploading results of long-running benchmarks to S3.
---
.github/workflows/test.yml | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 3c9e80855f..868aa898f5 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -401,11 +401,6 @@ jobs:
permissions:
id-token: write
steps:
- - name: Configure AWS credentials
- uses: aws-actions/configure-aws-credentials@v1
- with:
- role-to-assume: arn:aws:iam::865780493209:role/PathlingBenchmarkUpload
- aws-region: ap-southeast-2
- name: Checkout code
uses: actions/checkout@v3
with:
@@ -451,6 +446,11 @@ jobs:
with:
name: benchmark-results
path: "**/jmh-*.json"
+ - name: Configure AWS credentials
+ uses: aws-actions/configure-aws-credentials@v1
+ with:
+ role-to-assume: arn:aws:iam::865780493209:role/PathlingBenchmarkUpload
+ aws-region: ap-southeast-2
- name: Upload benchmark file to S3
run: aws s3 sync fhir-server/target/benchmark s3://pathling-benchmark/${{ github.ref }}/${{ github.run_id }}/${{ steps.timestamp.outputs.timestamp }}/
From 607302647e0d66ecca9b88f65b33f26e871af7dc Mon Sep 17 00:00:00 2001
From: Piotr Szul
Date: Sun, 12 May 2024 20:03:00 +1000
Subject: [PATCH 102/175] Making changes necessary run on Databricks with Spark
3.5.0.
---
.../au/csiro/pathling/encoders/Catalyst.scala | 32 +++++++++++++++++++
.../pathling/encoders/EncoderUtils.scala | 2 +-
.../pathling/encoders/QuantitySupport.scala | 6 ++--
.../pathling/encoders/SerializerBuilder.scala | 6 ++--
.../encoders/datatypes/DataTypeMappings.scala | 4 +--
.../datatypes/DecimalCustomCoder.scala | 8 ++---
.../encoders/datatypes/IdCustomCoder.scala | 6 ++--
.../datatypes/R4DataTypeMappings.scala | 6 ++--
.../sql/types/FlexiDecimalSupport.scala | 5 +--
library-runtime/pom.xml | 7 ++++
10 files changed, 61 insertions(+), 21 deletions(-)
create mode 100644 encoders/src/main/scala/au/csiro/pathling/encoders/Catalyst.scala
diff --git a/encoders/src/main/scala/au/csiro/pathling/encoders/Catalyst.scala b/encoders/src/main/scala/au/csiro/pathling/encoders/Catalyst.scala
new file mode 100644
index 0000000000..e84d349c79
--- /dev/null
+++ b/encoders/src/main/scala/au/csiro/pathling/encoders/Catalyst.scala
@@ -0,0 +1,32 @@
+package au.csiro.pathling.encoders
+
+import org.apache.spark.sql.catalyst.expressions.Expression
+import org.apache.spark.sql.catalyst.expressions.objects.StaticInvoke
+import org.apache.spark.sql.types.DataType
+
+object Catalyst {
+ lazy val staticInvokeAdapter:(Class[_],DataType, String, Seq[Expression]) => StaticInvoke = {
+ val constructor = classOf[StaticInvoke].getConstructors.head
+ if (constructor.getParameterCount == 8) {
+ StaticInvoke.apply(_,_,_,_)
+ } else {
+ (staticObject: Class[_], dataType: DataType, functionName: String, arguments: Seq[Expression]) =>
+ constructor.newInstance(staticObject, dataType, functionName,
+ arguments,
+ Nil,
+ Boolean.box(true),
+ Boolean.box(true),
+ Boolean.box(true),
+ None).asInstanceOf[StaticInvoke]
+ }
+ }
+
+ def staticInvoke(
+ staticObject: Class[_],
+ dataType: DataType,
+ functionName: String,
+ arguments: Seq[Expression] = Nil): StaticInvoke = {
+ staticInvokeAdapter(staticObject, dataType, functionName, arguments)
+ }
+
+}
diff --git a/encoders/src/main/scala/au/csiro/pathling/encoders/EncoderUtils.scala b/encoders/src/main/scala/au/csiro/pathling/encoders/EncoderUtils.scala
index 9074ba3781..95bbde9df4 100644
--- a/encoders/src/main/scala/au/csiro/pathling/encoders/EncoderUtils.scala
+++ b/encoders/src/main/scala/au/csiro/pathling/encoders/EncoderUtils.scala
@@ -37,7 +37,7 @@ object EncoderUtils {
}
def arrayExpression(array: Expression): StaticInvoke = {
- StaticInvoke(
+ Catalyst.staticInvoke(
classOf[util.Arrays],
ObjectType(classOf[util.List[_]]),
"asList",
diff --git a/encoders/src/main/scala/au/csiro/pathling/encoders/QuantitySupport.scala b/encoders/src/main/scala/au/csiro/pathling/encoders/QuantitySupport.scala
index d43b711f3f..9efc513f2f 100644
--- a/encoders/src/main/scala/au/csiro/pathling/encoders/QuantitySupport.scala
+++ b/encoders/src/main/scala/au/csiro/pathling/encoders/QuantitySupport.scala
@@ -52,15 +52,15 @@ object QuantitySupport {
val canonicalizedValue =
createFlexiDecimalSerializer(
- StaticInvoke(classOf[Ucum], ObjectType(classOf[java.math.BigDecimal]),
+ Catalyst.staticInvoke(classOf[Ucum], ObjectType(classOf[java.math.BigDecimal]),
"getCanonicalValue", Seq(valueExp, codeExp)))
val canonicalizedCode =
- StaticInvoke(
+ Catalyst.staticInvoke(
classOf[UTF8String],
DataTypes.StringType,
"fromString",
- StaticInvoke(classOf[Ucum], ObjectType(classOf[java.lang.String]), "getCanonicalCode",
+ Catalyst.staticInvoke(classOf[Ucum], ObjectType(classOf[java.lang.String]), "getCanonicalCode",
Seq(valueExp, codeExp)) :: Nil)
Seq(
(VALUE_CANONICALIZED_FIELD_NAME, canonicalizedValue),
diff --git a/encoders/src/main/scala/au/csiro/pathling/encoders/SerializerBuilder.scala b/encoders/src/main/scala/au/csiro/pathling/encoders/SerializerBuilder.scala
index 87ff0a1d9c..86f09a9591 100644
--- a/encoders/src/main/scala/au/csiro/pathling/encoders/SerializerBuilder.scala
+++ b/encoders/src/main/scala/au/csiro/pathling/encoders/SerializerBuilder.scala
@@ -95,7 +95,7 @@ private[encoders] class SerializerBuilderProcessor(expression: Expression,
private def createExtensionsFields(definition: BaseRuntimeElementCompositeDefinition[_]): Seq[(String, Expression)] = {
val maybeExtensionValueField = definition match {
case _: RuntimeResourceDefinition =>
- val collectExtensionsExpression = StaticInvoke(
+ val collectExtensionsExpression = Catalyst.staticInvoke(
classOf[SerializerBuilderProcessor],
ObjectType(classOf[Map[Int, java.util.List[Extension]]]),
"flattenExtensions",
@@ -111,7 +111,7 @@ private[encoders] class SerializerBuilderProcessor(expression: Expression,
case _ => Nil
}
// append _fid serializer
- (FID_FIELD_NAME, StaticInvoke(
+ (FID_FIELD_NAME, Catalyst.staticInvoke(
classOf[System], IntegerType, "identityHashCode",
expression :: Nil)) :: maybeExtensionValueField
}
@@ -207,7 +207,7 @@ private[encoders] object SerializerBuilderProcessor {
}
private def dataTypeToUtf8Expr(inputObject: Expression): Expression = {
- StaticInvoke(
+ Catalyst.staticInvoke(
classOf[UTF8String],
DataTypes.StringType,
"fromString",
diff --git a/encoders/src/main/scala/au/csiro/pathling/encoders/datatypes/DataTypeMappings.scala b/encoders/src/main/scala/au/csiro/pathling/encoders/datatypes/DataTypeMappings.scala
index 326c28eb94..51fcda1af7 100644
--- a/encoders/src/main/scala/au/csiro/pathling/encoders/datatypes/DataTypeMappings.scala
+++ b/encoders/src/main/scala/au/csiro/pathling/encoders/datatypes/DataTypeMappings.scala
@@ -23,7 +23,7 @@
package au.csiro.pathling.encoders.datatypes
-import au.csiro.pathling.encoders.ExpressionWithName
+import au.csiro.pathling.encoders.{Catalyst, ExpressionWithName}
import ca.uhn.fhir.context._
import org.apache.spark.sql.catalyst.expressions.Expression
import org.apache.spark.sql.catalyst.expressions.objects.{Invoke, StaticInvoke}
@@ -60,7 +60,7 @@ trait DataTypeMappings {
*/
def dataTypeToUtf8Expr(inputObject: Expression): Expression = {
- StaticInvoke(
+ Catalyst.staticInvoke(
classOf[UTF8String],
DataTypes.StringType,
"fromString",
diff --git a/encoders/src/main/scala/au/csiro/pathling/encoders/datatypes/DecimalCustomCoder.scala b/encoders/src/main/scala/au/csiro/pathling/encoders/datatypes/DecimalCustomCoder.scala
index eb7ef335d8..f24e1e7c04 100644
--- a/encoders/src/main/scala/au/csiro/pathling/encoders/datatypes/DecimalCustomCoder.scala
+++ b/encoders/src/main/scala/au/csiro/pathling/encoders/datatypes/DecimalCustomCoder.scala
@@ -24,7 +24,7 @@
package au.csiro.pathling.encoders.datatypes
import au.csiro.pathling.encoders.EncoderUtils.arrayExpression
-import au.csiro.pathling.encoders.ExpressionWithName
+import au.csiro.pathling.encoders.{Catalyst, ExpressionWithName}
import au.csiro.pathling.encoders.datatypes.DecimalCustomCoder.decimalType
import org.apache.spark.sql.catalyst.expressions.objects.{Invoke, NewInstance, StaticInvoke}
import org.apache.spark.sql.catalyst.expressions.{Expression, Literal}
@@ -54,7 +54,7 @@ case class DecimalCustomCoder(elementName: String) extends CustomCoder {
decimalExpression(addToPath)
} else {
// Let's to this manually as we need to zip two independent arrays into into one
- val array = StaticInvoke(
+ val array = Catalyst.staticInvoke(
classOf[DecimalCustomCoder],
ObjectType(classOf[Array[Any]]),
"zipToDecimal",
@@ -66,7 +66,7 @@ case class DecimalCustomCoder(elementName: String) extends CustomCoder {
}
override def customSerializer(evaluator: (Expression => Expression) => Expression): Seq[ExpressionWithName] = {
- val valueExpression = evaluator(exp => StaticInvoke(classOf[Decimal],
+ val valueExpression = evaluator(exp => Catalyst.staticInvoke(classOf[Decimal],
decimalType,
"apply",
Invoke(exp, "getValue", ObjectType(classOf[java.math.BigDecimal])) :: Nil))
@@ -95,7 +95,7 @@ case class DecimalCustomCoder(elementName: String) extends CustomCoder {
}
private def scaleExpression(inputObject: Expression) = {
- StaticInvoke(classOf[Math],
+ Catalyst.staticInvoke(classOf[Math],
IntegerType,
"min", Literal(decimalType.scale) ::
Invoke(Invoke(inputObject, "getValue", ObjectType(classOf[java.math.BigDecimal])),
diff --git a/encoders/src/main/scala/au/csiro/pathling/encoders/datatypes/IdCustomCoder.scala b/encoders/src/main/scala/au/csiro/pathling/encoders/datatypes/IdCustomCoder.scala
index 899ff27f2c..cb1b3e85f8 100644
--- a/encoders/src/main/scala/au/csiro/pathling/encoders/datatypes/IdCustomCoder.scala
+++ b/encoders/src/main/scala/au/csiro/pathling/encoders/datatypes/IdCustomCoder.scala
@@ -24,7 +24,7 @@
package au.csiro.pathling.encoders.datatypes
import au.csiro.pathling.encoders.EncoderUtils.arrayExpression
-import au.csiro.pathling.encoders.ExpressionWithName
+import au.csiro.pathling.encoders.{Catalyst, ExpressionWithName}
import org.apache.spark.sql.catalyst.expressions.Expression
import org.apache.spark.sql.catalyst.expressions.objects.{Invoke, MapObjects, NewInstance, StaticInvoke}
import org.apache.spark.sql.types._
@@ -72,11 +72,11 @@ case class IdCustomCoder(elementName: String) extends CustomCoder {
override def customSerializer(evaluator: (Expression => Expression) => Expression): Seq[ExpressionWithName] = {
val idExpression = evaluator(
- exp => StaticInvoke(classOf[UTF8String], DataTypes.StringType, "fromString",
+ exp => Catalyst.staticInvoke(classOf[UTF8String], DataTypes.StringType, "fromString",
List(Invoke(exp, "getIdPart", ObjectType(classOf[String])))))
val versionedIdExpression = evaluator(
- exp => StaticInvoke(classOf[UTF8String], DataTypes.StringType, "fromString",
+ exp => Catalyst.staticInvoke(classOf[UTF8String], DataTypes.StringType, "fromString",
List(Invoke(exp, "getValue", ObjectType(classOf[String])))))
Seq((elementName, idExpression), (versionedName, versionedIdExpression))
}
diff --git a/encoders/src/main/scala/au/csiro/pathling/encoders/datatypes/R4DataTypeMappings.scala b/encoders/src/main/scala/au/csiro/pathling/encoders/datatypes/R4DataTypeMappings.scala
index 43cbe00e22..1bf67ed1a4 100644
--- a/encoders/src/main/scala/au/csiro/pathling/encoders/datatypes/R4DataTypeMappings.scala
+++ b/encoders/src/main/scala/au/csiro/pathling/encoders/datatypes/R4DataTypeMappings.scala
@@ -24,7 +24,7 @@
package au.csiro.pathling.encoders.datatypes
import au.csiro.pathling.encoders.datatypes.R4DataTypeMappings.{fhirPrimitiveToSparkTypes, isValidOpenElementType}
-import au.csiro.pathling.encoders.{ExpressionWithName, StaticField}
+import au.csiro.pathling.encoders.{Catalyst, ExpressionWithName, StaticField}
import ca.uhn.fhir.context._
import ca.uhn.fhir.model.api.TemporalPrecisionEnum
import org.apache.spark.sql.catalyst.analysis.GetColumnByOrdinal
@@ -150,13 +150,13 @@ class R4DataTypeMappings extends DataTypeMappings {
ObjectType(classOf[TemporalPrecisionEnum]),
"MILLI")
- val UTCZone = StaticInvoke(classOf[TimeZone],
+ val UTCZone = Catalyst.staticInvoke(classOf[TimeZone],
ObjectType(classOf[TimeZone]),
"getTimeZone",
Literal("UTC", ObjectType(classOf[String])) :: Nil)
NewInstance(primitiveClass,
- List(StaticInvoke(org.apache.spark.sql.catalyst.util.DateTimeUtils.getClass,
+ List(Catalyst.staticInvoke(org.apache.spark.sql.catalyst.util.DateTimeUtils.getClass,
ObjectType(classOf[java.sql.Timestamp]),
"toJavaTimestamp",
getPath :: Nil),
diff --git a/encoders/src/main/scala/au/csiro/pathling/sql/types/FlexiDecimalSupport.scala b/encoders/src/main/scala/au/csiro/pathling/sql/types/FlexiDecimalSupport.scala
index d4cfebdc7e..808ed5c99b 100644
--- a/encoders/src/main/scala/au/csiro/pathling/sql/types/FlexiDecimalSupport.scala
+++ b/encoders/src/main/scala/au/csiro/pathling/sql/types/FlexiDecimalSupport.scala
@@ -23,6 +23,7 @@
package au.csiro.pathling.sql.types
+import au.csiro.pathling.encoders.Catalyst
import org.apache.spark.sql.Column
import org.apache.spark.sql.catalyst.expressions.objects.{Invoke, StaticInvoke}
import org.apache.spark.sql.catalyst.expressions.{CreateNamedStruct, Expression, If, IsNull, Literal}
@@ -57,12 +58,12 @@ object FlexiDecimalSupport {
// TODO: Performance: consider if the normalized value could be cached in
// a variable
- val normalizedExpression: Expression = StaticInvoke(classOf[FlexiDecimal],
+ val normalizedExpression: Expression = Catalyst.staticInvoke(classOf[FlexiDecimal],
ObjectType(classOf[java.math.BigDecimal]),
"normalize",
expression :: Nil)
- val valueExpression: Expression = StaticInvoke(classOf[Decimal],
+ val valueExpression: Expression = Catalyst.staticInvoke(classOf[Decimal],
FlexiDecimal.DECIMAL_TYPE,
"apply",
Invoke(normalizedExpression, "unscaledValue",
diff --git a/library-runtime/pom.xml b/library-runtime/pom.xml
index 4358674d0b..5f49ef9b88 100644
--- a/library-runtime/pom.xml
+++ b/library-runtime/pom.xml
@@ -124,6 +124,13 @@
com/fasterxml/jackson/**
+
+ org/
+ ${shaded.dependency.prefix}.org.
+
+ org/hibernate/validator/**
+
+
From d02103fe7683ea3b4b197ed377ced853fe902410 Mon Sep 17 00:00:00 2001
From: Piotr Szul
Date: Mon, 13 May 2024 15:02:12 +1000
Subject: [PATCH 103/175] Adding javadocs to the Spark Catalyst compatibility
layer.
---
.../au/csiro/pathling/encoders/Catalyst.scala | 35 +++++++++++++++----
1 file changed, 29 insertions(+), 6 deletions(-)
diff --git a/encoders/src/main/scala/au/csiro/pathling/encoders/Catalyst.scala b/encoders/src/main/scala/au/csiro/pathling/encoders/Catalyst.scala
index e84d349c79..3afaa88da2 100644
--- a/encoders/src/main/scala/au/csiro/pathling/encoders/Catalyst.scala
+++ b/encoders/src/main/scala/au/csiro/pathling/encoders/Catalyst.scala
@@ -4,23 +4,47 @@ import org.apache.spark.sql.catalyst.expressions.Expression
import org.apache.spark.sql.catalyst.expressions.objects.StaticInvoke
import org.apache.spark.sql.types.DataType
+
+/**
+ * This class provides a compatibility layer for Spark Catalyst.
+ * It is used to createnew Expressions using constructors compatible with the runtime
+ * version of Spark Catalyst.
+ * This is necessary to address running Pathling in Databricks environments,
+ * which habitually use different (newer) version of Catalyst that one used by
+ * the corresponding Spark public release.
+ */
object Catalyst {
- lazy val staticInvokeAdapter:(Class[_],DataType, String, Seq[Expression]) => StaticInvoke = {
+
+ private lazy val staticInvokeAdapter: (Class[_], DataType, String, Seq[Expression]) => StaticInvoke = {
val constructor = classOf[StaticInvoke].getConstructors.head
if (constructor.getParameterCount == 8) {
- StaticInvoke.apply(_,_,_,_)
- } else {
+ // catalyst 3.5.x (used by Spark 3.5.x)
+ StaticInvoke.apply(_, _, _, _)
+ } else if (constructor.getParameterCount == 9) {
+ // catalyst 4.0.0-preview-rc1 (used by Databricks runtime 14.3 LTS with Spark 3.5.0)
(staticObject: Class[_], dataType: DataType, functionName: String, arguments: Seq[Expression]) =>
- constructor.newInstance(staticObject, dataType, functionName,
+ constructor.newInstance(staticObject, dataType, functionName,
arguments,
Nil,
Boolean.box(true),
Boolean.box(true),
- Boolean.box(true),
+ Boolean.box(true),
None).asInstanceOf[StaticInvoke]
+ } else {
+ throw new IllegalStateException(
+ "Unsupported version of Spark Catalyst with InvokeStatic constructor: " + constructor)
}
}
+ /**
+ * Creates a new [[StaticInvoke]] expression using a constructor compatible with the runtime version of Spark Catalyst.
+ *
+ * @param staticObject the class object to invoke.
+ * @param dataType the return type of the function.
+ * @param functionName the name of the function to invoke.
+ * @param arguments the arguments to pass to the function.
+ * @return the new [[StaticInvoke]] expression.
+ */
def staticInvoke(
staticObject: Class[_],
dataType: DataType,
@@ -28,5 +52,4 @@ object Catalyst {
arguments: Seq[Expression] = Nil): StaticInvoke = {
staticInvokeAdapter(staticObject, dataType, functionName, arguments)
}
-
}
From c6b06e778944f209fde46f6a8250ebda3104f98b Mon Sep 17 00:00:00 2001
From: Piotr Szul
Date: Thu, 2 May 2024 16:15:08 +1000
Subject: [PATCH 104/175] Changing the SPARK encoding of empty non-primitive
elements in HAPI objects to produce NULL values rather than empty
structs/arrays.
---
.../csiro/pathling/encoders/Expressions.scala | 48 +++++++++++++++++++
.../pathling/encoders/SerializerBuilder.scala | 27 +++++++----
.../pathling/encoders/FhirEncodersTest.java | 40 ++++++++++++++++
3 files changed, 106 insertions(+), 9 deletions(-)
diff --git a/encoders/src/main/scala/au/csiro/pathling/encoders/Expressions.scala b/encoders/src/main/scala/au/csiro/pathling/encoders/Expressions.scala
index 30e326a826..2109ad5e03 100644
--- a/encoders/src/main/scala/au/csiro/pathling/encoders/Expressions.scala
+++ b/encoders/src/main/scala/au/csiro/pathling/encoders/Expressions.scala
@@ -113,6 +113,54 @@ case class InstanceOf(value: Expression,
}
+
+/**
+ * Gets value of an element of a HAPI object. This is could be composed from `If` and `Invoke`
+ * expression but having it as a dedicated expression makes the serializer expression more readable
+ * and also avoids the problems with 'If' optimisations.
+ *
+ * @param value the expression with the reference to the HAPI object
+ * @param dataType the data type of the element to get
+ * @param hasMethod the name of method to check if the element is present, e.g. hasNameElement()
+ * @param getMethod the name of method to get the value of the element, e.g. getNameElement()
+ * @return the value of the element or null if the element is not present or the object is null
+ */
+case class GetHapiValue(value: Expression,
+ dataType: DataType,
+ hasMethod: String, getMethod: String)
+ extends Expression with NonSQLExpression {
+
+ override def nullable: Boolean = true
+
+ override def children: Seq[Expression] = value :: Nil
+
+ override def eval(input: InternalRow): Any =
+ throw new UnsupportedOperationException("Only code-generated evaluation is supported.")
+
+ override def doGenCode(ctx: CodegenContext, ev: ExprCode): ExprCode = {
+
+ val obj = value.genCode(ctx)
+ val javaType = CodeGenerator.javaType(dataType)
+ val code =
+ code"""
+ |// BEGIN: GetHapiValue
+ |${obj.code}
+ |boolean ${ev.isNull} = true;
+ |$javaType ${ev.value} = ${CodeGenerator.defaultValue(dataType)};
+ |if (!${obj.isNull} && ${obj.value}.$hasMethod()) {
+ | ${ev.isNull} = false;
+ | ${ev.value} = ${obj.value}.$getMethod();
+ |}
+ |// END: GetHapiValue
+ """.stripMargin
+ ev.copy(code = code)
+ }
+
+ override protected def withNewChildrenInternal(newChildren: IndexedSeq[Expression]): Expression = {
+ GetHapiValue(newChildren.head, dataType, hasMethod, getMethod)
+ }
+}
+
/**
* Casts the result of an expression to another type.
*
diff --git a/encoders/src/main/scala/au/csiro/pathling/encoders/SerializerBuilder.scala b/encoders/src/main/scala/au/csiro/pathling/encoders/SerializerBuilder.scala
index 87ff0a1d9c..37ecb641c0 100644
--- a/encoders/src/main/scala/au/csiro/pathling/encoders/SerializerBuilder.scala
+++ b/encoders/src/main/scala/au/csiro/pathling/encoders/SerializerBuilder.scala
@@ -188,11 +188,12 @@ private[encoders] object SerializerBuilderProcessor {
private def getChildExpression(parentObject: Expression,
childDefinition: BaseRuntimeChildDefinition,
dataType: DataType): Expression = {
- Invoke(parentObject,
- accessorFor(childDefinition),
- dataType)
+
+ val (hasMethod, getMethod) = accessorsFor(childDefinition)
+ GetHapiValue(parentObject, dataType, hasMethod, getMethod)
}
+
private def getChildExpression(parentObject: Expression,
childDefinition: BaseRuntimeChildDefinition): Expression = {
@@ -217,9 +218,17 @@ private[encoders] object SerializerBuilderProcessor {
}
/**
- * Returns the accessor method for the given child field.
+ * Returns the accessor methods for the given child field.
+ * These are the 'has' and 'get' methods that test for the presence of the field an retrieve its value.
+ *
+ * @param field the runtime child definition of the field
+ * @return a tuple containing the names of 'has' and 'get' methods
*/
- private def accessorFor(field: BaseRuntimeChildDefinition): String = {
+ private def accessorsFor(field: BaseRuntimeChildDefinition): (String, String) = {
+
+ def defaultAccessors(suffix: String): (String, String) = {
+ ("has" + suffix, "get" + suffix)
+ }
// Primitive single-value types typically use the Element suffix in their
// accessors, with the exception of the "div" field for reasons that are not clear.
@@ -234,14 +243,14 @@ private[encoders] object SerializerBuilderProcessor {
// StringType and getReferenceElement_ needs to be used instead.
// All subclasses of IBaseReference have a getReferenceElement_
// method.
- "getReferenceElement_"
+ ("hasReferenceElement", "getReferenceElement_")
} else {
- "get" + p.getElementName.capitalize + "Element"
+ defaultAccessors(p.getElementName.capitalize + "Element")
}
case f if f.getElementName.equals("class") =>
- "get" + f.getElementName.capitalize + "_"
+ defaultAccessors(f.getElementName.capitalize + "_")
case _ =>
- "get" + field.getElementName.capitalize
+ defaultAccessors(field.getElementName.capitalize)
}
}
diff --git a/encoders/src/test/java/au/csiro/pathling/encoders/FhirEncodersTest.java b/encoders/src/test/java/au/csiro/pathling/encoders/FhirEncodersTest.java
index 281ba09ad3..b72a5a7793 100644
--- a/encoders/src/test/java/au/csiro/pathling/encoders/FhirEncodersTest.java
+++ b/encoders/src/test/java/au/csiro/pathling/encoders/FhirEncodersTest.java
@@ -30,6 +30,7 @@
import static org.junit.jupiter.api.Assertions.assertSame;
import static org.junit.jupiter.api.Assertions.assertTrue;
+import ca.uhn.fhir.parser.IParser;
import com.google.common.collect.ImmutableList;
import java.io.IOException;
import java.math.BigDecimal;
@@ -624,4 +625,43 @@ public void testQuantityComparator() {
assertEquals(originalComparator.toCode(), queriedComparator);
}
+
+ @Test
+ public void nullEncoding() {
+ // empty elements of all types should be encoded as nulls
+ final Observation emptyObservation = new Observation();
+ assertFalse(emptyObservation.hasSubject());
+ final Dataset observationsDataset = spark.createDataset(
+ ImmutableList.of(emptyObservation),
+ ENCODERS_L0.of(Observation.class));
+ // 'subject' is a struct
+ // 'identifier' is an array of struct
+ // 'status' is a primitive type
+ final Row subjectRow = observationsDataset.toDF().select("subject", "identifier", "status")
+ .first();
+ assertTrue(subjectRow.isNullAt(0));
+ assertTrue(subjectRow.isNullAt(1));
+ assertTrue(subjectRow.isNullAt(2));
+ }
+
+
+ @Test
+ public void nullEncodingFromJson() {
+ final IParser parser = ENCODERS_L0.getContext().newJsonParser();
+ final Observation emptyObservationFromJson = parser.parseResource(Observation.class,
+ "{ \"resourceType\": \"Observation\"}");
+ assertFalse(emptyObservationFromJson.hasSubject());
+ final Dataset observationsDataset = spark.createDataset(
+ ImmutableList.of(emptyObservationFromJson),
+ ENCODERS_L0.of(Observation.class));
+ // 'subject' is a struct
+ // 'identifier' is an array of struct
+ // 'status' is a primitive type
+ final Row subjectRow = observationsDataset.toDF().select("subject", "identifier", "status")
+ .first();
+ assertTrue(subjectRow.isNullAt(0));
+ assertTrue(subjectRow.isNullAt(1));
+ assertTrue(subjectRow.isNullAt(2));
+ }
+
}
From 8c809eda4d7c66cf632088ddf1a623ea73934032 Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Thu, 16 May 2024 16:28:34 +1000
Subject: [PATCH 105/175] Bump Infinispan version to 15.0.3.Final
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 1d22223abb..50053020e2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -86,7 +86,7 @@
1.12.603
1.18.32
32.1.3-jre
- 15.0.2.Final
+ 15.0.3.Final
2.16.1
2.40
3.1.2
From f042a518e263685f5aefa46a36ca3406b4cbd75b Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Thu, 16 May 2024 16:40:25 +1000
Subject: [PATCH 106/175] Bump Spring Boot version to 3.2.5
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 50053020e2..d84c978764 100644
--- a/pom.xml
+++ b/pom.xml
@@ -79,7 +79,7 @@
3.3.4
3
7.0.2
- 3.2.0
+ 3.2.5
6.2.0
4.9.3
3.3.4
From 8e89cba246c68003c1f7d074764fcc4cd3404037 Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Thu, 16 May 2024 16:44:26 +1000
Subject: [PATCH 107/175] Bump micrometer-registry-prometheus to 1.13.0
---
fhir-server/pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/fhir-server/pom.xml b/fhir-server/pom.xml
index 405d15b0c8..09320f4534 100644
--- a/fhir-server/pom.xml
+++ b/fhir-server/pom.xml
@@ -190,7 +190,7 @@
io.micrometer
micrometer-registry-prometheus
- 1.11.3
+ 1.13.0
From ba36e30a9c2fa71bbd049aed6241768cf8dcb22e Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Thu, 16 May 2024 16:46:13 +1000
Subject: [PATCH 108/175] Bump scala-maven-plugin to 4.9.1
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index d84c978764..3890cb982b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -707,7 +707,7 @@
net.alchim31.maven
scala-maven-plugin
- 4.7.2
+ 4.9.1
scala-compile-first
From ed7e8399097e28e2f263ceafbda5f0932ee73336 Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Thu, 16 May 2024 16:47:29 +1000
Subject: [PATCH 109/175] Bump maven-deploy-plugin to 3.1.2
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 3890cb982b..a37bebb773 100644
--- a/pom.xml
+++ b/pom.xml
@@ -901,7 +901,7 @@
org.apache.maven.plugins
maven-deploy-plugin
- 3.1.1
+ 3.1.2
true
From 483cd87b002f8e66ce5ed128717ac8fe64f5dfdf Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Thu, 16 May 2024 16:48:34 +1000
Subject: [PATCH 110/175] Bump maven-shade-plugin to 3.5.3
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index a37bebb773..562cdb4a17 100644
--- a/pom.xml
+++ b/pom.xml
@@ -909,7 +909,7 @@
org.apache.maven.plugins
maven-shade-plugin
- 3.4.1
+ 3.5.3
From 86ad575df285fcc70f1aa03e2ac68e114e834cf8 Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Thu, 16 May 2024 16:49:22 +1000
Subject: [PATCH 111/175] Bump maven-jar-plugin to 3.4.1
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 562cdb4a17..fb0233e5b2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -943,7 +943,7 @@
org.apache.maven.plugins
maven-jar-plugin
- 3.3.0
+ 3.4.1
org.apache.maven.plugins
From 1934b0c106e499471e28231aa3503c09a912cc37 Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Thu, 16 May 2024 16:53:15 +1000
Subject: [PATCH 112/175] Bump maven-gpg-plugin to 3.2.4
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index fb0233e5b2..2439f10d01 100644
--- a/pom.xml
+++ b/pom.xml
@@ -870,7 +870,7 @@
org.apache.maven.plugins
maven-gpg-plugin
- 3.1.0
+ 3.2.4
sign
From aa441653975fb493fcd6a1ab63ad86d34ae1e519 Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Thu, 16 May 2024 16:55:48 +1000
Subject: [PATCH 113/175] Bump commons-text to 1.12.0
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 2439f10d01..2809e80a0c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -624,7 +624,7 @@
org.apache.commons
commons-text
- 1.10.0
+ 1.12.0
From 4823c3c82552500192ba4f9aa99131f171030cb3 Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Thu, 16 May 2024 17:00:01 +1000
Subject: [PATCH 114/175] Bump maven-source-plugin to 3.3.1
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 2809e80a0c..9517025799 100644
--- a/pom.xml
+++ b/pom.xml
@@ -812,7 +812,7 @@
org.apache.maven.plugins
maven-source-plugin
- 3.3.0
+ 3.3.1
jar-no-fork
From 916bb39ec925a1cc48d260e88e9078c07e27bce6 Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Thu, 16 May 2024 17:01:45 +1000
Subject: [PATCH 115/175] Bump json to 20240303
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 9517025799..3092b59070 100644
--- a/pom.xml
+++ b/pom.xml
@@ -559,7 +559,7 @@
org.json
json
- 20230618
+ 20240303
commons-beanutils
From 2d3e654fdeb7e42aefb4ca23d92f25484662195f Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Thu, 16 May 2024 17:03:16 +1000
Subject: [PATCH 116/175] Bump maven-javadoc-plugin to 3.6.3
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 3092b59070..016824c157 100644
--- a/pom.xml
+++ b/pom.xml
@@ -825,7 +825,7 @@
org.apache.maven.plugins
maven-javadoc-plugin
- 3.5.0
+ 3.6.3
javadoc
From 6c08227ff401e011726e9e1665f6d623dcf26446 Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Thu, 16 May 2024 17:04:52 +1000
Subject: [PATCH 117/175] Bump exec-maven-plugin to 3.2.0
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 016824c157..8f714001dc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -764,7 +764,7 @@
org.codehaus.mojo
exec-maven-plugin
- 3.1.0
+ 3.2.0
org.codehaus.mojo
From bbd3d7a071b5f71b7a588f12ff344994a276048a Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Thu, 16 May 2024 17:05:38 +1000
Subject: [PATCH 118/175] Bump maven-compiler-plugin to 3.13.0
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 8f714001dc..5af79cacc1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -695,7 +695,7 @@
org.apache.maven.plugins
maven-compiler-plugin
- 3.11.0
+ 3.13.0
17
From 29a9fbe09904bd648bcad2175a59cb983ecc7910 Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Thu, 16 May 2024 17:07:28 +1000
Subject: [PATCH 119/175] Bump curator-client to 5.6.0
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 5af79cacc1..e0c0b9bd88 100644
--- a/pom.xml
+++ b/pom.xml
@@ -336,7 +336,7 @@
org.apache.curator
curator-client
- 5.5.0
+ 5.6.0
org.scala-lang
From ee6835e5837657488a6329c0a575eac2300b9ae9 Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Thu, 16 May 2024 17:09:00 +1000
Subject: [PATCH 120/175] Bump commons-io to 2.16.1
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index e0c0b9bd88..04d67103ff 100644
--- a/pom.xml
+++ b/pom.xml
@@ -575,7 +575,7 @@
commons-io
commons-io
- 2.13.0
+ 2.16.1
com.google.guava
From 2e11b61cf8b166698d9c9426bc60bbfb917bcc17 Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Thu, 16 May 2024 17:09:53 +1000
Subject: [PATCH 121/175] Bump Surefire version to 3.2.5
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 04d67103ff..2dd419f043 100644
--- a/pom.xml
+++ b/pom.xml
@@ -89,7 +89,7 @@
15.0.3.Final
2.16.1
2.40
- 3.1.2
+ 3.2.5
1.4.14
2.0.9
10.14.2.0
From 9c4aacd9775471b594f0518553ed38eedc92a691 Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Thu, 16 May 2024 17:11:08 +1000
Subject: [PATCH 122/175] Bump maven-dependency-plugin to 3.6.1
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 2dd419f043..386ab703ce 100644
--- a/pom.xml
+++ b/pom.xml
@@ -924,7 +924,7 @@
org.apache.maven.plugins
maven-dependency-plugin
- 3.6.0
+ 3.6.1
analyze-only
From df6f0a3b9de25b91768c2a6a618cc3a73183c534 Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Thu, 16 May 2024 17:13:20 +1000
Subject: [PATCH 123/175] Bump jib-maven-plugin to 3.4.2 and remove unnecessary
section from fhirpath pom
---
fhir-server/pom.xml | 2 +-
fhirpath/pom.xml | 43 -------------------------------------------
2 files changed, 1 insertion(+), 44 deletions(-)
diff --git a/fhir-server/pom.xml b/fhir-server/pom.xml
index 09320f4534..80c59af42c 100644
--- a/fhir-server/pom.xml
+++ b/fhir-server/pom.xml
@@ -367,7 +367,7 @@
com.google.cloud.tools
jib-maven-plugin
- 3.3.2
+ 3.4.2
${pathling.dockerBaseImage}
diff --git a/fhirpath/pom.xml b/fhirpath/pom.xml
index 9b923d44bb..980bde08aa 100644
--- a/fhirpath/pom.xml
+++ b/fhirpath/pom.xml
@@ -260,49 +260,6 @@
-
-
-
- com.google.cloud.tools
- jib-maven-plugin
- 3.3.2
-
-
- ${pathling.dockerBaseImage}
-
-
- ${pathling.dockerArchitecture}
- linux
-
-
-
-
- ${pathling.fhirServerDockerRepo}
-
- ${pathling.fhirServerDockerTag}
- ${project.version}
- ${project.majorVersion}
- ${git.commit.id}
-
-
-
-
- ${project.version}
- -Xmx2g -XX:MaxMetaspaceSize=400m -XX:ReservedCodeCacheSize=240m -Xss1m -Duser.timezone=UTC
-
-
- Copyright © 2018-2023, Commonwealth Scientific and Industrial Research Organisation (CSIRO) ABN 41 687 119 230. Licensed under the CSIRO Open Source Software Licence Agreement.
- John Grimes <John.Grimes@csiro.au>
-
-
- 8080
- 4040
-
-
-
-
-
-
From ebb3a0dc004d2bbb35b939b38d5386855bfa307b Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Thu, 16 May 2024 17:14:36 +1000
Subject: [PATCH 124/175] Bump joda-time to 2.12.7
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 386ab703ce..c2a9c2e97f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -549,7 +549,7 @@
joda-time
joda-time
- 2.12.5
+ 2.12.7
com.google.code.findbugs
From 035282f910bfec29f5672afa6c11a4b51b7cba45 Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Thu, 16 May 2024 17:15:26 +1000
Subject: [PATCH 125/175] Bump maven-clean-plugin to 3.3.2
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index c2a9c2e97f..b935853cdb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -948,7 +948,7 @@
org.apache.maven.plugins
maven-clean-plugin
- 3.3.1
+ 3.3.2
From 2654299276137fa61842bf084e8f0513ca76f359 Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Thu, 16 May 2024 17:17:41 +1000
Subject: [PATCH 126/175] Bump wiremock-jre8-standalone to 2.35.2
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index b935853cdb..84c758bbc3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -522,7 +522,7 @@
com.github.tomakehurst
wiremock-jre8-standalone
- 2.35.0
+ 2.35.2
test
From 75c501000ed26d60146c18b656ab298097fa25bf Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Thu, 16 May 2024 17:19:17 +1000
Subject: [PATCH 127/175] Remove version pin for ivy
---
pom.xml | 7 -------
1 file changed, 7 deletions(-)
diff --git a/pom.xml b/pom.xml
index 84c758bbc3..77de72f4c6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -633,13 +633,6 @@
snakeyaml
2.2
-
-
-
- org.apache.ivy
- ivy
- 2.5.1
-
From 36432ddbde32c60052378ae09793d8eaa7f9f723 Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Thu, 16 May 2024 17:21:02 +1000
Subject: [PATCH 128/175] Bump jwks-rsa to 0.22.1
---
fhir-server/pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/fhir-server/pom.xml b/fhir-server/pom.xml
index 80c59af42c..d1b6f652f6 100644
--- a/fhir-server/pom.xml
+++ b/fhir-server/pom.xml
@@ -165,7 +165,7 @@
com.auth0
jwks-rsa
- 0.22.0
+ 0.22.1
com.google.code.gson
From 1bdef1a7c0b1ebf4ceac9fa60b22861cd9347f48 Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Thu, 16 May 2024 17:23:45 +1000
Subject: [PATCH 129/175] Set spark.databricks.delta.schema.autoMerge.enabled
to false by default
Resolves #1785.
---
fhir-server/src/main/resources/application.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/fhir-server/src/main/resources/application.yml b/fhir-server/src/main/resources/application.yml
index 73de2f6982..407933b126 100644
--- a/fhir-server/src/main/resources/application.yml
+++ b/fhir-server/src/main/resources/application.yml
@@ -160,7 +160,7 @@ spark:
delta:
schema:
autoMerge:
- enabled: true
+ enabled: false
scheduler:
mode: FAIR
From 8a2b89d22f81a7671108b86594500a2e109380a1 Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Fri, 17 May 2024 09:48:52 +1000
Subject: [PATCH 130/175] Revert "Bump Spring Boot version to 3.2.5"
This reverts commit f042a518e263685f5aefa46a36ca3406b4cbd75b.
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 77de72f4c6..41dba0b418 100644
--- a/pom.xml
+++ b/pom.xml
@@ -79,7 +79,7 @@
3.3.4
3
7.0.2
- 3.2.5
+ 3.2.0
6.2.0
4.9.3
3.3.4
From d5eda66db540e064a10fd43e588de4cc6454d97f Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Fri, 17 May 2024 10:02:01 +1000
Subject: [PATCH 131/175] Move benchmark job out to its own on-demand workflow
---
.github/workflows/benchmark.yml | 71 +++++++++++++++++++++++++++++++++
.github/workflows/test.yml | 59 ---------------------------
2 files changed, 71 insertions(+), 59 deletions(-)
create mode 100644 .github/workflows/benchmark.yml
diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml
new file mode 100644
index 0000000000..684c50c91c
--- /dev/null
+++ b/.github/workflows/benchmark.yml
@@ -0,0 +1,71 @@
+# This workflow runs a set of performance benchmarks that run and upload their results to a S3
+# bucket.
+
+name: Benchmark
+
+on:
+ workflow_dispatch:
+
+env:
+ # The add-exports and add-opens flags are required for Java 17
+ MAVEN_OPTS: --add-exports=java.base/sun.nio.ch=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED
+
+jobs:
+ benchmark:
+ name: Benchmark
+ runs-on: ubuntu-latest
+ permissions:
+ id-token: write
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v3
+ with:
+ # This is required so that git-commit-id-plugin can find the latest tag.
+ fetch-depth: 0
+ - name: Set up JDK
+ uses: actions/setup-java@v2
+ with:
+ java-version: 17
+ distribution: "zulu"
+ - name: Cache local Maven repository
+ uses: actions/cache@v3
+ with:
+ path: ~/.m2/repository
+ key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
+ restore-keys: |-
+ ${{ runner.os }}-maven-
+ - name: Cache test data
+ id: cache-test-data
+ uses: actions/cache@v3
+ with:
+ path: fhir-server/src/test/resources/test-data/parquet
+ key: ${{ runner.os }}-test-data-${{ hashFiles('fhir-server/src/test/resources/test-data/fhir/*.ndjson', 'encoders/src/main/**/*.java', 'encoders/src/main/**/*.scala', 'fhir-server/src/main/java/au/csiro/pathling/io/Database.java') }}
+ - name: Get current time
+ id: timestamp
+ run: echo "::set-output name=timestamp::$(date +'%Y%m%d%H%M%S')"
+ - name: Run the verify goal with Maven
+ env:
+ # If there is a cache hit on the test data, we don't need to import it. If it is a cache
+ # miss, we still need to explicitly activate the `importTestData` profile, otherwise
+ # it will be deactivated by `skipTests`.
+ PATHLING_PROFILES: runBenchmark,${{ steps.cache-test-data.outputs.cache-hit && '!importTestData' || 'importTestData' }}
+ run: >-
+ mvn --batch-mode verify
+ -pl fhir-server -am
+ -P${{ env.PATHLING_PROFILES }}
+ -DskipSurefireTests
+ -Dpathling.benchmark.testIterations=100
+ -Dpathling.benchmark.warmupIterations=10
+ timeout-minutes: 720
+ - name: Upload benchmark artifact
+ uses: actions/upload-artifact@v3
+ with:
+ name: benchmark-results
+ path: "**/jmh-*.json"
+ - name: Configure AWS credentials
+ uses: aws-actions/configure-aws-credentials@v1
+ with:
+ role-to-assume: arn:aws:iam::865780493209:role/PathlingBenchmarkUpload
+ aws-region: ap-southeast-2
+ - name: Upload benchmark file to S3
+ run: aws s3 sync fhir-server/target/benchmark s3://pathling-benchmark/${{ github.ref }}/${{ github.run_id }}/${{ steps.timestamp.outputs.timestamp }}/
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 868aa898f5..9f22a26977 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -395,65 +395,6 @@ jobs:
check_name: Docker image test report
fail_on_test_failures: true
- benchmark:
- name: Benchmark
- runs-on: ubuntu-latest
- permissions:
- id-token: write
- steps:
- - name: Checkout code
- uses: actions/checkout@v3
- with:
- # This is required so that git-commit-id-plugin can find the latest tag.
- fetch-depth: 0
- - name: Set up JDK
- uses: actions/setup-java@v2
- with:
- java-version: 17
- distribution: "zulu"
- - name: Cache local Maven repository
- uses: actions/cache@v3
- with:
- path: ~/.m2/repository
- key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
- restore-keys: |-
- ${{ runner.os }}-maven-
- - name: Cache test data
- id: cache-test-data
- uses: actions/cache@v3
- with:
- path: fhir-server/src/test/resources/test-data/parquet
- key: ${{ runner.os }}-test-data-${{ hashFiles('fhir-server/src/test/resources/test-data/fhir/*.ndjson', 'encoders/src/main/**/*.java', 'encoders/src/main/**/*.scala', 'fhir-server/src/main/java/au/csiro/pathling/io/Database.java') }}
- - name: Get current time
- id: timestamp
- run: echo "::set-output name=timestamp::$(date +'%Y%m%d%H%M%S')"
- - name: Run the verify goal with Maven
- env:
- # If there is a cache hit on the test data, we don't need to import it. If it is a cache
- # miss, we still need to explicitly activate the `importTestData` profile, otherwise
- # it will be deactivated by `skipTests`.
- PATHLING_PROFILES: runBenchmark,${{ steps.cache-test-data.outputs.cache-hit && '!importTestData' || 'importTestData' }}
- run: >-
- mvn --batch-mode verify
- -pl fhir-server -am
- -P${{ env.PATHLING_PROFILES }}
- -DskipSurefireTests
- -Dpathling.benchmark.testIterations=100
- -Dpathling.benchmark.warmupIterations=10
- timeout-minutes: 720
- - name: Upload benchmark artifact
- uses: actions/upload-artifact@v3
- with:
- name: benchmark-results
- path: "**/jmh-*.json"
- - name: Configure AWS credentials
- uses: aws-actions/configure-aws-credentials@v1
- with:
- role-to-assume: arn:aws:iam::865780493209:role/PathlingBenchmarkUpload
- aws-region: ap-southeast-2
- - name: Upload benchmark file to S3
- run: aws s3 sync fhir-server/target/benchmark s3://pathling-benchmark/${{ github.ref }}/${{ github.run_id }}/${{ steps.timestamp.outputs.timestamp }}/
-
js-client:
name: JavaScript client
runs-on: ubuntu-latest
From 083cbb56a5c7e82a0ad79a7366fd2e7180aabc76 Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Fri, 17 May 2024 10:17:35 +1000
Subject: [PATCH 132/175] Update Spark requirement within R package to 3.5.x
---
lib/R/DESCRIPTION.src | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/R/DESCRIPTION.src b/lib/R/DESCRIPTION.src
index 00d506436b..f1b76b2c07 100644
--- a/lib/R/DESCRIPTION.src
+++ b/lib/R/DESCRIPTION.src
@@ -31,7 +31,7 @@ Suggests:
testthat(>= 3.0.0)
Config/testthat/edition: 3
RoxygenNote: 7.2.3
-SystemRequirements: Spark: 3.4.x
+SystemRequirements: Spark: 3.5.x
Config/pathling/Version: %pathling.version%
Config/pathling/SparkVersion: %pathling.Rapi.sparkVersion%
Config/pathling/ScalaVersion: %pathling.Rapi.scalaVersion%
From ec7c956e91fcb0084587f99ea4f97e9a4c3a32df Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Fri, 17 May 2024 10:20:16 +1000
Subject: [PATCH 133/175] Bump sparklyr to 1.8.6
---
lib/R/DESCRIPTION.src | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/R/DESCRIPTION.src b/lib/R/DESCRIPTION.src
index f1b76b2c07..7cf55e9767 100644
--- a/lib/R/DESCRIPTION.src
+++ b/lib/R/DESCRIPTION.src
@@ -26,7 +26,7 @@ Encoding: UTF-8
Depends:
R (>= 3.5.0)
Imports:
- rlang(>= 1.0.0), sparklyr(>= 1.8.5)
+ rlang(>= 1.0.0), sparklyr(>= 1.8.6)
Suggests:
testthat(>= 3.0.0)
Config/testthat/edition: 3
From 94af5ed19f92e53a69f91f08d46d8a651eacece5 Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Fri, 17 May 2024 10:20:34 +1000
Subject: [PATCH 134/175] Bump testthat to 3.2.1.1
---
lib/R/DESCRIPTION.src | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/R/DESCRIPTION.src b/lib/R/DESCRIPTION.src
index 7cf55e9767..df3308449b 100644
--- a/lib/R/DESCRIPTION.src
+++ b/lib/R/DESCRIPTION.src
@@ -28,7 +28,7 @@ Depends:
Imports:
rlang(>= 1.0.0), sparklyr(>= 1.8.6)
Suggests:
- testthat(>= 3.0.0)
+ testthat(>= 3.2.1.1)
Config/testthat/edition: 3
RoxygenNote: 7.2.3
SystemRequirements: Spark: 3.5.x
From bea38cd06fa6deeeb1b07ec548a4e1c03fa5fa4e Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Fri, 17 May 2024 10:39:27 +1000
Subject: [PATCH 135/175] Fix R package caching
---
.github/workflows/test.yml | 16 +++++++++++++---
1 file changed, 13 insertions(+), 3 deletions(-)
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 9f22a26977..4ca4f1ff9e 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -528,7 +528,11 @@ jobs:
R-api:
name: R API
runs-on: ubuntu-latest
+ env:
+ R_LIBS_USER: ${{ github.workspace }}/lib/R
steps:
+ - name: Create R package installation location
+ run: mkdir -p $R_LIBS_USER
- name: Checkout code
uses: actions/checkout@v3
with:
@@ -546,12 +550,10 @@ jobs:
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
restore-keys: |-
${{ runner.os }}-maven-
- - name: Get R package installation location
- run: echo "R_PACKAGES=$(Rscript -e 'cat(.libPaths(), sep="\n")' | head -n 1)" >> $GITHUB_ENV
- name: Cache R packages
uses: actions/cache@v2
with:
- path: ${{ env.R_PACKAGES }}
+ path: ${{ env.R_LIBS_USER }}
key: r-packages-${{ runner.os }}-${{ hashFiles('lib/R/DESCRIPTION.src') }}
restore-keys: r-packages-${{ runner.os }}-
- name: Extract Spark version
@@ -601,6 +603,8 @@ jobs:
site:
name: Site
runs-on: ubuntu-latest
+ env:
+ R_LIBS_USER: ${{ github.workspace }}/lib/R
steps:
- name: Checkout code
uses: actions/checkout@v3
@@ -626,6 +630,12 @@ jobs:
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
restore-keys: |-
${{ runner.os }}-maven-
+ - name: Cache R packages
+ uses: actions/cache@v2
+ with:
+ path: ${{ env.R_LIBS_USER }}
+ key: r-packages-${{ runner.os }}-${{ hashFiles('lib/R/DESCRIPTION.src') }}
+ restore-keys: r-packages-${{ runner.os }}-
- name: Extract Spark version
working-directory: lib/R
run: echo "SPARK_VERSION=$(mvn help:evaluate -Dexpression=pathling.Rapi.sparkVersion -q -DforceStdout)" >> $GITHUB_ENV
From c3ed6fa7056aa82697b6372416304ff0d3e3f003 Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Fri, 17 May 2024 10:49:01 +1000
Subject: [PATCH 136/175] Fix Hadoop version in Spark cache location
---
.github/workflows/test.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 4ca4f1ff9e..c62040306f 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -561,7 +561,7 @@ jobs:
run: echo "SPARK_VERSION=$(mvn help:evaluate -Dexpression=pathling.Rapi.sparkVersion -q -DforceStdout)" >> $GITHUB_ENV
- name: Extract Hadoop version
working-directory: lib/R
- run: echo "HADOOP_VERSION=$(mvn help:evaluate -Dexpression=pathling.Rapi.hadoopVersion -q -DforceStdout)" >> $GITHUB_ENV
+ run: echo "HADOOP_VERSION=$(mvn help:evaluate -Dexpression=pathling.Rapi.hadoopMajorVersion -q -DforceStdout)" >> $GITHUB_ENV
- name: Cache Spark
id: cache-spark
uses: actions/cache@v2
@@ -641,7 +641,7 @@ jobs:
run: echo "SPARK_VERSION=$(mvn help:evaluate -Dexpression=pathling.Rapi.sparkVersion -q -DforceStdout)" >> $GITHUB_ENV
- name: Extract Hadoop version
working-directory: lib/R
- run: echo "HADOOP_VERSION=$(mvn help:evaluate -Dexpression=pathling.Rapi.hadoopVersion -q -DforceStdout)" >> $GITHUB_ENV
+ run: echo "HADOOP_VERSION=$(mvn help:evaluate -Dexpression=pathling.Rapi.hadoopMajorVersion -q -DforceStdout)" >> $GITHUB_ENV
- name: Cache Spark
id: cache-spark
uses: actions/cache@v2
From ddf7c84be654ce894b6d3ef166ff516bcd60acee Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Fri, 17 May 2024 10:54:43 +1000
Subject: [PATCH 137/175] Explicitly set R_LIBS_USER using Rscript
---
.github/workflows/test.yml | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index c62040306f..32c07bb933 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -575,6 +575,8 @@ jobs:
with:
r-version: "4.1.3"
use-public-rspm: true
+ - name: Set R user library location
+ run: Rscript -e "Sys.setenv(R_LIBS_USER = '$R_LIBS_USER')"
- name: Install texlive and libcurl
run: sudo apt-get install -y texlive-latex-base texlive-fonts-extra libcurl4-openssl-dev
- name: Run the install goal with Maven
@@ -655,6 +657,8 @@ jobs:
with:
r-version: "4.1.3"
use-public-rspm: true
+ - name: Set R user library location
+ run: Rscript -e "Sys.setenv(R_LIBS_USER = '$R_LIBS_USER')"
- name: Install texlive and libcurl
run: sudo apt-get install -y texlive-latex-base texlive-fonts-extra libcurl4-openssl-dev
- name: Run the verify goal with Maven
From e40bda9b1d5282f5dd0bd7e68a7e89ca8028e3a4 Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Fri, 17 May 2024 10:59:12 +1000
Subject: [PATCH 138/175] Fix location of explicit user library set call
---
.github/workflows/test.yml | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 32c07bb933..4cfd90a097 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -576,7 +576,7 @@ jobs:
r-version: "4.1.3"
use-public-rspm: true
- name: Set R user library location
- run: Rscript -e "Sys.setenv(R_LIBS_USER = '$R_LIBS_USER')"
+ run: Rscript -e "Sys.setenv(R_LIBS_USER = '{{ github.workspace }}/lib/R')"
- name: Install texlive and libcurl
run: sudo apt-get install -y texlive-latex-base texlive-fonts-extra libcurl4-openssl-dev
- name: Run the install goal with Maven
@@ -608,6 +608,8 @@ jobs:
env:
R_LIBS_USER: ${{ github.workspace }}/lib/R
steps:
+ - name: Create R package installation location
+ run: mkdir -p $R_LIBS_USER
- name: Checkout code
uses: actions/checkout@v3
with:
@@ -658,7 +660,7 @@ jobs:
r-version: "4.1.3"
use-public-rspm: true
- name: Set R user library location
- run: Rscript -e "Sys.setenv(R_LIBS_USER = '$R_LIBS_USER')"
+ run: Rscript -e "Sys.setenv(R_LIBS_USER = '{{ github.workspace }}/lib/R')"
- name: Install texlive and libcurl
run: sudo apt-get install -y texlive-latex-base texlive-fonts-extra libcurl4-openssl-dev
- name: Run the verify goal with Maven
From e1d0c452c51edfb8e796f4703654c3950ac42010 Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Fri, 17 May 2024 11:07:00 +1000
Subject: [PATCH 139/175] Bump pytest to 8.2.0
---
lib/python/requirements/dev.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/python/requirements/dev.txt b/lib/python/requirements/dev.txt
index 68e21c2110..0e8f74cd50 100644
--- a/lib/python/requirements/dev.txt
+++ b/lib/python/requirements/dev.txt
@@ -1,7 +1,7 @@
-r package.txt
Sphinx>=1.6,<8
sphinx-rtd-theme==1.2.2
-pytest==7.4.0
+pytest==8.2.0
ipython==8.10.0
wheel==0.40.0
twine==4.0.2
From c83ac110a068448ed4f9e00e4ea191696edae310 Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Fri, 17 May 2024 11:07:30 +1000
Subject: [PATCH 140/175] Bump pytest-cov to 5.0.0
---
lib/python/requirements/dev.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/python/requirements/dev.txt b/lib/python/requirements/dev.txt
index 0e8f74cd50..ae96b5f408 100644
--- a/lib/python/requirements/dev.txt
+++ b/lib/python/requirements/dev.txt
@@ -6,4 +6,4 @@ ipython==8.10.0
wheel==0.40.0
twine==4.0.2
build==0.10.0
-pytest-cov==4.1.0
+pytest-cov==5.0.0
From f4da17847535e7aa62c9e42835a7a71521008d6b Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Fri, 17 May 2024 11:07:53 +1000
Subject: [PATCH 141/175] Bump wheel to 0.43.0
---
lib/python/requirements/dev.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/python/requirements/dev.txt b/lib/python/requirements/dev.txt
index ae96b5f408..1b01c73159 100644
--- a/lib/python/requirements/dev.txt
+++ b/lib/python/requirements/dev.txt
@@ -3,7 +3,7 @@ Sphinx>=1.6,<8
sphinx-rtd-theme==1.2.2
pytest==8.2.0
ipython==8.10.0
-wheel==0.40.0
+wheel==0.43.0
twine==4.0.2
build==0.10.0
pytest-cov==5.0.0
From 619836628ee9e9c51b247e4786f6715defe5fddf Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Fri, 17 May 2024 11:08:23 +1000
Subject: [PATCH 142/175] Bump twine to 5.0.0
---
lib/python/requirements/dev.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/python/requirements/dev.txt b/lib/python/requirements/dev.txt
index 1b01c73159..38c5260b9f 100644
--- a/lib/python/requirements/dev.txt
+++ b/lib/python/requirements/dev.txt
@@ -4,6 +4,6 @@ sphinx-rtd-theme==1.2.2
pytest==8.2.0
ipython==8.10.0
wheel==0.43.0
-twine==4.0.2
+twine==5.0.0
build==0.10.0
pytest-cov==5.0.0
From 29a59a816eaced05e1192671a564c04832492613 Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Fri, 17 May 2024 11:08:54 +1000
Subject: [PATCH 143/175] Bump build to 1.2.1
---
lib/python/requirements/dev.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/python/requirements/dev.txt b/lib/python/requirements/dev.txt
index 38c5260b9f..7e6014def7 100644
--- a/lib/python/requirements/dev.txt
+++ b/lib/python/requirements/dev.txt
@@ -5,5 +5,5 @@ pytest==8.2.0
ipython==8.10.0
wheel==0.43.0
twine==5.0.0
-build==0.10.0
+build==1.2.1
pytest-cov==5.0.0
From b543f7c4bda10e36b56120c986a90aba439a1dbd Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Fri, 17 May 2024 11:18:22 +1000
Subject: [PATCH 144/175] Use default R user library created by actions/setup-r
---
.github/workflows/test.yml | 16 ++--------------
1 file changed, 2 insertions(+), 14 deletions(-)
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 4cfd90a097..4ba994143f 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -528,11 +528,7 @@ jobs:
R-api:
name: R API
runs-on: ubuntu-latest
- env:
- R_LIBS_USER: ${{ github.workspace }}/lib/R
steps:
- - name: Create R package installation location
- run: mkdir -p $R_LIBS_USER
- name: Checkout code
uses: actions/checkout@v3
with:
@@ -553,7 +549,7 @@ jobs:
- name: Cache R packages
uses: actions/cache@v2
with:
- path: ${{ env.R_LIBS_USER }}
+ path: ${{ runner.temp }}/Library
key: r-packages-${{ runner.os }}-${{ hashFiles('lib/R/DESCRIPTION.src') }}
restore-keys: r-packages-${{ runner.os }}-
- name: Extract Spark version
@@ -575,8 +571,6 @@ jobs:
with:
r-version: "4.1.3"
use-public-rspm: true
- - name: Set R user library location
- run: Rscript -e "Sys.setenv(R_LIBS_USER = '{{ github.workspace }}/lib/R')"
- name: Install texlive and libcurl
run: sudo apt-get install -y texlive-latex-base texlive-fonts-extra libcurl4-openssl-dev
- name: Run the install goal with Maven
@@ -605,11 +599,7 @@ jobs:
site:
name: Site
runs-on: ubuntu-latest
- env:
- R_LIBS_USER: ${{ github.workspace }}/lib/R
steps:
- - name: Create R package installation location
- run: mkdir -p $R_LIBS_USER
- name: Checkout code
uses: actions/checkout@v3
with:
@@ -637,7 +627,7 @@ jobs:
- name: Cache R packages
uses: actions/cache@v2
with:
- path: ${{ env.R_LIBS_USER }}
+ path: ${{ runner.temp }}/Library
key: r-packages-${{ runner.os }}-${{ hashFiles('lib/R/DESCRIPTION.src') }}
restore-keys: r-packages-${{ runner.os }}-
- name: Extract Spark version
@@ -659,8 +649,6 @@ jobs:
with:
r-version: "4.1.3"
use-public-rspm: true
- - name: Set R user library location
- run: Rscript -e "Sys.setenv(R_LIBS_USER = '{{ github.workspace }}/lib/R')"
- name: Install texlive and libcurl
run: sudo apt-get install -y texlive-latex-base texlive-fonts-extra libcurl4-openssl-dev
- name: Run the verify goal with Maven
From 9265ffeda74cbb7214f86c7ba7c5e4366b077097 Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Fri, 17 May 2024 14:47:27 +1000
Subject: [PATCH 145/175] Add upload of check logs as artifact
---
.github/workflows/test.yml | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 4ba994143f..fd3b999a39 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -590,6 +590,15 @@ jobs:
-pl lib/R -am -Pdocs
${{ env.PATHLING_OPTS }}
timeout-minutes: 60
+ - name: Upload check logs
+ uses: actions/upload-artifact@v2
+ if: always()
+ with:
+ name: r-check-logs
+ path: |
+ lib/R/target/pathling.Rcheck/*.log
+ lib/R/target/pathling.Rcheck/*.out
+ lib/R/target/pathling.Rcheck/*.fail
- name: Upload package as artifact
uses: actions/upload-artifact@v2
with:
From 2a1134af502e97a526da9446eef34d45844f8b56 Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Mon, 20 May 2024 13:26:01 +1000
Subject: [PATCH 146/175] Broaden type of decodeMany to accommodate different
implementation in Databricks
---
.../au/csiro/pathling/sql/udf/TerminologyUdfHelpers.java | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/terminology/src/main/java/au/csiro/pathling/sql/udf/TerminologyUdfHelpers.java b/terminology/src/main/java/au/csiro/pathling/sql/udf/TerminologyUdfHelpers.java
index 5134380070..0c56854e92 100644
--- a/terminology/src/main/java/au/csiro/pathling/sql/udf/TerminologyUdfHelpers.java
+++ b/terminology/src/main/java/au/csiro/pathling/sql/udf/TerminologyUdfHelpers.java
@@ -26,8 +26,8 @@
import java.util.stream.Stream;
import org.apache.spark.sql.Row;
import org.hl7.fhir.r4.model.Coding;
+import scala.collection.Iterable;
import scala.collection.JavaConverters;
-import scala.collection.mutable.WrappedArray;
/**
* Helper functions for terminology UDFs.
@@ -49,8 +49,8 @@ static Row[] encodeMany(@Nullable final Stream codings) {
@Nullable
public static Stream decodeOneOrMany(final @Nullable Object codingRowOrArray,
final int argumentIndex) {
- if (codingRowOrArray instanceof WrappedArray>) {
- return decodeMany((WrappedArray) codingRowOrArray);
+ if (codingRowOrArray instanceof Iterable>) {
+ return decodeMany((Iterable) codingRowOrArray);
} else if (codingRowOrArray instanceof Row || codingRowOrArray == null) {
return decodeOne((Row) codingRowOrArray);
} else {
@@ -73,7 +73,7 @@ public static Stream decodeOne(final @Nullable Row codingRow) {
}
@Nullable
- public static Stream decodeMany(final @Nullable WrappedArray codingsRow) {
+ public static Stream decodeMany(final @Nullable Iterable codingsRow) {
return codingsRow != null
? JavaConverters.asJavaCollection(codingsRow).stream().filter(Objects::nonNull)
.map(CodingEncoding::decode)
From 6ee7e73ebfe3070cb6ff73609865dd627b0d8204 Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Mon, 20 May 2024 14:46:47 +1000
Subject: [PATCH 147/175] Upgrade Delta Lake to 3.2.0
---
lib/python/examples/query.py | 5 ++---
pom.xml | 2 +-
2 files changed, 3 insertions(+), 4 deletions(-)
diff --git a/lib/python/examples/query.py b/lib/python/examples/query.py
index e837cb4617..5dab019bf3 100755
--- a/lib/python/examples/query.py
+++ b/lib/python/examples/query.py
@@ -14,9 +14,8 @@
# limitations under the License.
import os
-from tempfile import mkdtemp
-
from pyspark.sql import DataFrame, SparkSession
+from tempfile import mkdtemp
from pathling import PathlingContext, DataSource, Expression as exp
from pathling._version import __java_version__
@@ -36,7 +35,7 @@
spark = (
SparkSession.builder.config(
"spark.jars.packages",
- f"au.csiro.pathling:library-runtime:{__java_version__},io.delta:delta-spark_2.12:3.1.0",
+ f"au.csiro.pathling:library-runtime:{__java_version__},io.delta:delta-spark_2.12:3.2.0",
)
.config(
"spark.sql.extensions",
diff --git a/pom.xml b/pom.xml
index 41dba0b418..157904387e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -75,7 +75,7 @@
3.5.0
2.12
2.12.17
- 3.1.0
+ 3.2.0
3.3.4
3
7.0.2
From 4e383bcce916242c0141b8f71a2220e6b5b47b7f Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Mon, 20 May 2024 15:20:37 +1000
Subject: [PATCH 148/175] Fix year-only input to until function
---
.../sql/misc/TemporalDifferenceFunction.java | 9 +++--
.../fhirpath/function/UntilFunctionTest.java | 33 +++++++++++++++++++
2 files changed, 40 insertions(+), 2 deletions(-)
diff --git a/fhirpath/src/main/java/au/csiro/pathling/sql/misc/TemporalDifferenceFunction.java b/fhirpath/src/main/java/au/csiro/pathling/sql/misc/TemporalDifferenceFunction.java
index 9430758768..47847a9976 100644
--- a/fhirpath/src/main/java/au/csiro/pathling/sql/misc/TemporalDifferenceFunction.java
+++ b/fhirpath/src/main/java/au/csiro/pathling/sql/misc/TemporalDifferenceFunction.java
@@ -23,6 +23,7 @@
import jakarta.annotation.Nonnull;
import jakarta.annotation.Nullable;
import java.time.LocalDate;
+import java.time.Year;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeParseException;
@@ -105,8 +106,12 @@ private ZonedDateTime parse(final @Nonnull String encodedFrom) {
try {
return LocalDate.parse(encodedFrom).atStartOfDay(ZoneId.of("UTC"));
} catch (final DateTimeParseException ex) {
- // If we can't parse the value as a date or datetime, return null.
- return null;
+ try {
+ return Year.parse(encodedFrom).atDay(1).atStartOfDay(ZoneId.of("UTC"));
+ } catch (final DateTimeParseException exc) {
+ // If we can't parse the value as a date or datetime, return null.
+ return null;
+ }
}
}
}
diff --git a/fhirpath/src/test/java/au/csiro/pathling/fhirpath/function/UntilFunctionTest.java b/fhirpath/src/test/java/au/csiro/pathling/fhirpath/function/UntilFunctionTest.java
index 6408944c6a..70142f544b 100644
--- a/fhirpath/src/test/java/au/csiro/pathling/fhirpath/function/UntilFunctionTest.java
+++ b/fhirpath/src/test/java/au/csiro/pathling/fhirpath/function/UntilFunctionTest.java
@@ -313,6 +313,39 @@ void dateTimeLiteralArgument() throws ParseException {
.hasRows(expectedResult);
}
+ @Test
+ void yearOnlyDateInput() throws ParseException {
+ final Dataset leftDataset = new DatasetBuilder(spark)
+ .withIdColumn(ID_ALIAS)
+ .withColumn(DataTypes.StringType)
+ .withRow("patient-1", "2020")
+ .build();
+ final ElementPath input = new ElementPathBuilder(spark)
+ .fhirType(FHIRDefinedType.DATE)
+ .dataset(leftDataset)
+ .idAndValueColumns()
+ .singular(true)
+ .build();
+ final DateTimeLiteralPath argument = DateTimeLiteralPath.fromString("2020-01-02T00:00:00Z",
+ input);
+ final ParserContext context = new ParserContextBuilder(spark, fhirContext)
+ .groupingColumns(Collections.singletonList(input.getIdColumn()))
+ .build();
+ final Dataset expectedResult = new DatasetBuilder(spark)
+ .withIdColumn(ID_ALIAS)
+ .withColumn(DataTypes.IntegerType)
+ .withRow("patient-1", 86400000)
+ .build();
+ final List arguments = List.of(argument,
+ StringLiteralPath.fromString("millisecond", input));
+ final NamedFunctionInput functionInput = new NamedFunctionInput(context, input, arguments);
+ final FhirPath result = NamedFunction.getInstance("until").invoke(functionInput);
+ assertThat(result)
+ .isElementPath(IntegerPath.class)
+ .selectResult()
+ .hasRows(expectedResult);
+ }
+
@Test
void invalidCalendarDuration() {
final Dataset leftDataset = new DatasetBuilder(spark)
From 3b4f0173b06ddacdfeff487d2759ad145bdbd49d Mon Sep 17 00:00:00 2001
From: John Grimes
Date: Mon, 20 May 2024 15:48:01 +1000
Subject: [PATCH 149/175] Update licenses
---
LICENSE | 86 +-
encoders/src/license/THIRD-PARTY.properties | 5 +-
fhirpath/src/license/THIRD-PARTY.properties | 9 +-
lib/R/src/license/THIRD-PARTY.properties | 8 +-
.../src/license/THIRD-PARTY.properties | 10 +-
.../apache 2.0 license - license-2.0.html | 5 +-
...ache license, version 2.0 - apache2.0.html | 56 +-
...ith classpath exception - cddl+gpl-1.1.txt | 760 +++++++++++
...ser general public license - lgpl-2.1.html | 4 +-
licenses/mit - mit-license.html | 993 ++++++++++----
licenses/mit - mit.html | 1176 +++++++++++++++++
licenses/public domain - license.html | 810 ++++++++----
...che license, version 2.0 - license-2.0.txt | 202 +++
site/docs/libraries/encoders/schema.md | 5 +
.../src/license/THIRD-PARTY.properties | 9 +-
utilities/src/license/THIRD-PARTY.properties | 8 +-
16 files changed, 3543 insertions(+), 603 deletions(-)
create mode 100644 licenses/cddl + gplv2 with classpath exception - cddl+gpl-1.1.txt
create mode 100644 licenses/mit - mit.html
create mode 100644 licenses/the apache license, version 2.0 - license-2.0.txt
diff --git a/LICENSE b/LICENSE
index 7623319917..6a50f430e4 100644
--- a/LICENSE
+++ b/LICENSE
@@ -183,61 +183,65 @@ agree to comply with the licence terms for these components as part of
accessing the Software. Other third party software may also be identified in
separate files distributed with the Software.
-* (Apache License, Version 2.0) HAPI FHIR - Core Library (ca.uhn.hapi.fhir:hapi-fhir-base:6.10.0 - http://jamesagnew.github.io/hapi-fhir/)
-* (Apache License, Version 2.0) HAPI FHIR - Client Framework (ca.uhn.hapi.fhir:hapi-fhir-client:6.10.0 - https://hapifhir.io/hapi-deployable-pom/hapi-fhir-client)
-* (Apache License, Version 2.0) HAPI FHIR - Server Framework (ca.uhn.hapi.fhir:hapi-fhir-server:6.10.0 - https://hapifhir.io/hapi-deployable-pom/hapi-fhir-server)
-* (Apache License, Version 2.0) HAPI FHIR Structures - FHIR R4 (ca.uhn.hapi.fhir:hapi-fhir-structures-r4:6.10.0 - https://hapifhir.io/hapi-deployable-pom/hapi-fhir-structures-r4)
-* (Eclipse Public License 1.0) (GNU Lesser General Public License) Logback Classic Module (ch.qos.logback:logback-classic:1.2.11 - http://logback.qos.ch/logback-classic)
+* (Apache License, Version 2.0) HAPI FHIR - Core Library (ca.uhn.hapi.fhir:hapi-fhir-base:7.0.2 - http://jamesagnew.github.io/hapi-fhir/)
+* (Apache License, Version 2.0) HAPI FHIR - Client Framework (ca.uhn.hapi.fhir:hapi-fhir-client:7.0.2 - https://hapifhir.io/hapi-deployable-pom/hapi-fhir-client)
+* (Apache License, Version 2.0) HAPI FHIR - Server Framework (ca.uhn.hapi.fhir:hapi-fhir-server:7.0.2 - https://hapifhir.io/hapi-deployable-pom/hapi-fhir-server)
+* (Apache License, Version 2.0) HAPI FHIR Structures - FHIR R4 (ca.uhn.hapi.fhir:hapi-fhir-structures-r4:7.0.2 - https://hapifhir.io/hapi-deployable-pom/hapi-fhir-structures-r4)
+* (Eclipse Public License 1.0) (GNU Lesser General Public License) Logback Classic Module (ch.qos.logback:logback-classic:1.4.14 - http://logback.qos.ch/logback-classic)
* (Apache License, Version 2.0) AWS SDK for Java - Bundle (com.amazonaws:aws-java-sdk-bundle:1.12.603 - https://aws.amazon.com/sdkforjava)
* (MIT License) java jwt (com.auth0:java-jwt:4.4.0 - https://github.com/auth0/java-jwt)
-* (MIT License) jwks-rsa (com.auth0:jwks-rsa:0.22.0 - https://github.com/auth0/jwks-rsa-java)
-* (Apache License, Version 2.0) Jackson-core (com.fasterxml.jackson.core:jackson-core:2.15.3 - https://github.com/FasterXML/jackson-core)
+* (MIT License) jwks-rsa (com.auth0:jwks-rsa:0.22.1 - https://github.com/auth0/jwks-rsa-java)
+* (Apache License, Version 2.0) Jackson-core (com.fasterxml.jackson.core:jackson-core:2.16.1 - https://github.com/FasterXML/jackson-core)
* (Apache License, Version 2.0) Woodstox (com.fasterxml.woodstox:woodstox-core:6.4.0 - https://github.com/FasterXML/woodstox)
* (Apache License, Version 2.0) docker-java (com.github.docker-java:docker-java:3.3.4 - https://github.com/docker-java/docker-java)
* (Apache License, Version 2.0) docker-java-transport-okhttp (com.github.docker-java:docker-java-transport-okhttp:3.3.4 - https://github.com/docker-java/docker-java)
-* (Apache License, Version 2.0) WireMock (com.github.tomakehurst:wiremock-jre8-standalone:2.35.0 - http://wiremock.org)
+* (Apache License, Version 2.0) WireMock (com.github.tomakehurst:wiremock-jre8-standalone:2.35.2 - http://wiremock.org)
* (Apache License, Version 2.0) FindBugs-jsr305 (com.google.code.findbugs:jsr305:3.0.2 - http://findbugs.sourceforge.net/)
* (Apache License, Version 2.0) Gson (com.google.code.gson:gson:2.10 - https://github.com/google/gson/gson)
* (Apache License, Version 2.0) Guava: Google Core Libraries for Java (com.google.guava:guava:32.1.3-jre - https://github.com/google/guava)
* (Apache License, Version 2.0) Apache Commons BeanUtils (commons-beanutils:commons-beanutils:1.9.4 - https://commons.apache.org/proper/commons-beanutils/)
-* (Apache License, Version 2.0) Apache Commons IO (commons-io:commons-io:2.13.0 - https://commons.apache.org/proper/commons-io/)
+* (Apache License, Version 2.0) Apache Commons IO (commons-io:commons-io:2.16.1 - https://commons.apache.org/proper/commons-io/)
* (Apache License, Version 2.0) Commons Lang (commons-lang:commons-lang:2.6 - http://commons.apache.org/lang/)
-* (Apache License, Version 2.0) delta-spark (io.delta:delta-spark_2.12:3.1.0 - https://delta.io/)
-* (Apache License, Version 2.0) micrometer-registry-prometheus (io.micrometer:micrometer-registry-prometheus:1.11.3 - https://github.com/micrometer-metrics/micrometer)
+* (Apache License, Version 2.0) delta-spark (io.delta:delta-spark_2.12:3.2.0 - https://delta.io/)
+* (Apache License, Version 2.0) micrometer-registry-prometheus (io.micrometer:micrometer-registry-prometheus:1.13.0 - https://github.com/micrometer-metrics/micrometer)
* (MIT License) Sentry SDK (io.sentry:sentry:6.6.0 - https://github.com/getsentry/sentry-java)
-* (Apache License, Version 2.0) Jakarta Bean Validation API (jakarta.validation:jakarta.validation-api:2.0.2 - https://beanvalidation.org)
-* (Apache License, Version 2.0) Joda-Time (joda-time:joda-time:2.12.5 - https://www.joda.org/joda-time/)
+* (Apache License, Version 2.0) Jakarta Bean Validation API (jakarta.validation:jakarta.validation-api:3.0.2 - https://beanvalidation.org)
+* (CDDL + GPLv2 with classpath exception) Java Servlet API (javax.servlet:javax.servlet-api:4.0.1 - https://javaee.github.io/servlet-spec/)
+* (Apache License, Version 2.0) Joda-Time (joda-time:joda-time:2.12.7 - https://www.joda.org/joda-time/)
* (BSD License) ANTLR 4 Tool (org.antlr:antlr4:4.9.3 - http://www.antlr.org)
-* (Apache License, Version 2.0) Apache Commons Lang (org.apache.commons:commons-lang3:3.12.0 - https://commons.apache.org/proper/commons-lang/)
+* (Apache License, Version 2.0) Apache Commons Lang (org.apache.commons:commons-lang3:3.14.0 - https://commons.apache.org/proper/commons-lang/)
+* (Apache License, Version 2.0) Apache Derby Tools (org.apache.derby:derbytools:10.14.2.0 - http://db.apache.org/derby/)
* (Apache License, Version 2.0) Apache Hadoop Amazon Web Services support (org.apache.hadoop:hadoop-aws:3.3.4 - no url defined)
* (Apache License, Version 2.0) Apache Hadoop Client API (org.apache.hadoop:hadoop-client-api:3.3.4 - no url defined)
-* (Apache License, Version 2.0) Spark Project Catalyst (org.apache.spark:spark-catalyst_2.12:3.4.1 - https://spark.apache.org/)
-* (Apache License, Version 2.0) Spark Project Core (org.apache.spark:spark-core_2.12:3.4.1 - https://spark.apache.org/)
-* (Apache License, Version 2.0) Spark Project Hive (org.apache.spark:spark-hive_2.12:3.4.1 - https://spark.apache.org/)
-* (Apache License, Version 2.0) Spark Project Kubernetes (org.apache.spark:spark-kubernetes_2.12:3.4.1 - https://spark.apache.org/spark-kubernetes_2.12/)
-* (Apache License, Version 2.0) Spark Project SQL (org.apache.spark:spark-sql_2.12:3.4.1 - https://spark.apache.org/)
-* (Apache License, Version 2.0) Spark Project Unsafe (org.apache.spark:spark-unsafe_2.12:3.4.1 - https://spark.apache.org/)
+* (Apache License, Version 2.0) Spark Project Catalyst (org.apache.spark:spark-catalyst_2.12:3.5.0 - https://spark.apache.org/)
+* (Apache License, Version 2.0) Spark Project Core (org.apache.spark:spark-core_2.12:3.5.0 - https://spark.apache.org/)
+* (Apache License, Version 2.0) Spark Project Hive (org.apache.spark:spark-hive_2.12:3.5.0 - https://spark.apache.org/)
+* (Apache License, Version 2.0) Spark Project Kubernetes (org.apache.spark:spark-kubernetes_2.12:3.5.0 - https://spark.apache.org/spark-kubernetes_2.12/)
+* (Apache License, Version 2.0) Spark Project SQL (org.apache.spark:spark-sql_2.12:3.5.0 - https://spark.apache.org/)
+* (Apache License, Version 2.0) Spark Project Unsafe (org.apache.spark:spark-unsafe_2.12:3.5.0 - https://spark.apache.org/)
* (Apache License, Version 2.0) Awaitility (org.awaitility:awaitility:4.2.0 - http://awaitility.org)
-* (Apache License, Version 2.0) Hibernate Validator Engine (org.hibernate.validator:hibernate-validator:6.0.13.Final - http://hibernate.org/validator/hibernate-validator)
-* (Apache License, Version 2.0) Infinispan Commons (org.infinispan:infinispan-commons:14.0.21.Final - http://www.infinispan.org/infinispan-commons-parent/infinispan-commons)
-* (Apache License, Version 2.0) Infinispan Core (org.infinispan:infinispan-core:14.0.21.Final - http://www.infinispan.org/infinispan-core)
-* (Public Domain) JSON in Java (org.json:json:20230618 - https://github.com/douglascrockford/JSON-java)
-* (Eclipse Public License v2.0) JUnit Jupiter API (org.junit.jupiter:junit-jupiter-api:5.9.1 - https://junit.org/junit5/)
-* (Eclipse Public License v2.0) JUnit Jupiter Engine (org.junit.jupiter:junit-jupiter-engine:5.9.1 - https://junit.org/junit5/)
-* (Eclipse Public License v2.0) JUnit Jupiter Params (org.junit.jupiter:junit-jupiter-params:5.9.1 - https://junit.org/junit5/)
-* (MIT License) mockito-core (org.mockito:mockito-core:4.8.1 - https://github.com/mockito/mockito)
-* (GNU General Public License (GPL), version 2, with the Classpath exception) JMH Core (org.openjdk.jmh:jmh-core:1.36 - http://openjdk.java.net/projects/code-tools/jmh/jmh-core/)
-* (GNU General Public License (GPL), version 2, with the Classpath exception) JMH Generators: Annotation Processors (org.openjdk.jmh:jmh-generator-annprocess:1.36 - http://openjdk.java.net/projects/code-tools/jmh/jmh-generator-annprocess/)
-* (MIT License) Project Lombok (org.projectlombok:lombok:1.18.28 - https://projectlombok.org)
+* (Apache License, Version 2.0) Hibernate Validator Engine (org.hibernate.validator:hibernate-validator:8.0.1.Final - http://hibernate.org/validator/hibernate-validator)
+* (Apache License, Version 2.0) Infinispan Commons (org.infinispan:infinispan-commons:15.0.3.Final - http://www.infinispan.org)
+* (Apache License, Version 2.0) Infinispan Component Annotations (org.infinispan:infinispan-component-annotations:15.0.3.Final - http://www.infinispan.org)
+* (Apache License, Version 2.0) Infinispan Core (org.infinispan:infinispan-core:15.0.3.Final - http://www.infinispan.org)
+* (Public Domain) JSON in Java (org.json:json:20240303 - https://github.com/douglascrockford/JSON-java)
+* (Eclipse Public License v2.0) JUnit Jupiter API (org.junit.jupiter:junit-jupiter-api:5.10.1 - https://junit.org/junit5/)
+* (Eclipse Public License v2.0) JUnit Jupiter Engine (org.junit.jupiter:junit-jupiter-engine:5.10.1 - https://junit.org/junit5/)
+* (Eclipse Public License v2.0) JUnit Jupiter Params (org.junit.jupiter:junit-jupiter-params:5.10.1 - https://junit.org/junit5/)
+* (MIT License) mockito-core (org.mockito:mockito-core:5.8.0 - https://github.com/mockito/mockito)
+* (GNU General Public License (GPL), version 2, with the Classpath exception) JMH Core (org.openjdk.jmh:jmh-core:1.37 - http://openjdk.java.net/projects/code-tools/jmh/jmh-core/)
+* (GNU General Public License (GPL), version 2, with the Classpath exception) JMH Generators: Annotation Processors (org.openjdk.jmh:jmh-generator-annprocess:1.37 - http://openjdk.java.net/projects/code-tools/jmh/jmh-generator-annprocess/)
+* (MIT License) Project Lombok (org.projectlombok:lombok:1.18.32 - https://projectlombok.org)
* (Apache License, Version 2.0) Scala Library (org.scala-lang:scala-library:2.12.17 - https://www.scala-lang.org/)
* (Apache License, Version 2.0) JSONassert (org.skyscreamer:jsonassert:1.5.1 - https://github.com/skyscreamer/JSONassert)
-* (MIT License) SLF4J API Module (org.slf4j:slf4j-api:1.7.36 - http://www.slf4j.org)
-* (Apache License, Version 2.0) spring-boot-configuration-processor (org.springframework.boot:spring-boot-configuration-processor:2.7.18 - https://spring.io/projects/spring-boot)
-* (Apache License, Version 2.0) spring-boot-starter-actuator (org.springframework.boot:spring-boot-starter-actuator:2.7.18 - https://spring.io/projects/spring-boot)
-* (Apache License, Version 2.0) spring-boot-starter-aop (org.springframework.boot:spring-boot-starter-aop:2.7.18 - https://spring.io/projects/spring-boot)
-* (Apache License, Version 2.0) spring-boot-starter-security (org.springframework.boot:spring-boot-starter-security:2.7.18 - https://spring.io/projects/spring-boot)
-* (Apache License, Version 2.0) spring-boot-starter-test (org.springframework.boot:spring-boot-starter-test:2.7.18 - https://spring.io/projects/spring-boot)
-* (Apache License, Version 2.0) spring-boot-starter-web (org.springframework.boot:spring-boot-starter-web:2.7.18 - https://spring.io/projects/spring-boot)
-* (Apache License, Version 2.0) spring-security-oauth2-jose (org.springframework.security:spring-security-oauth2-jose:5.7.10 - https://spring.io/projects/spring-security)
-* (Apache License, Version 2.0) spring-security-oauth2-resource-server (org.springframework.security:spring-security-oauth2-resource-server:5.7.10 - https://spring.io/projects/spring-security)
-* (Apache License, Version 2.0) spring-security-test (org.springframework.security:spring-security-test:5.7.10 - https://spring.io/projects/spring-security)
+* (MIT License) SLF4J API Module (org.slf4j:slf4j-api:2.0.9 - http://www.slf4j.org)
+* (Apache License, Version 2.0) spring-boot-configuration-processor (org.springframework.boot:spring-boot-configuration-processor:3.2.0 - https://spring.io/projects/spring-boot)
+* (Apache License, Version 2.0) spring-boot-starter-actuator (org.springframework.boot:spring-boot-starter-actuator:3.2.0 - https://spring.io/projects/spring-boot)
+* (Apache License, Version 2.0) spring-boot-starter-aop (org.springframework.boot:spring-boot-starter-aop:3.2.0 - https://spring.io/projects/spring-boot)
+* (Apache License, Version 2.0) spring-boot-starter-jetty (org.springframework.boot:spring-boot-starter-jetty:3.2.0 - https://spring.io/projects/spring-boot)
+* (Apache License, Version 2.0) spring-boot-starter-security (org.springframework.boot:spring-boot-starter-security:3.2.0 - https://spring.io/projects/spring-boot)
+* (Apache License, Version 2.0) spring-boot-starter-test (org.springframework.boot:spring-boot-starter-test:3.2.0 - https://spring.io/projects/spring-boot)
+* (Apache License, Version 2.0) spring-boot-starter-web (org.springframework.boot:spring-boot-starter-web:3.2.0 - https://spring.io/projects/spring-boot)
+* (Apache License, Version 2.0) spring-security-oauth2-jose (org.springframework.security:spring-security-oauth2-jose:6.2.0 - https://spring.io/projects/spring-security)
+* (Apache License, Version 2.0) spring-security-oauth2-resource-server (org.springframework.security:spring-security-oauth2-resource-server:6.2.0 - https://spring.io/projects/spring-security)
+* (Apache License, Version 2.0) spring-security-test (org.springframework.security:spring-security-test:6.2.0 - https://spring.io/projects/spring-security)
diff --git a/encoders/src/license/THIRD-PARTY.properties b/encoders/src/license/THIRD-PARTY.properties
index f17c8e7aae..1a72053020 100644
--- a/encoders/src/license/THIRD-PARTY.properties
+++ b/encoders/src/license/THIRD-PARTY.properties
@@ -18,13 +18,16 @@
# - BSD 3 Clause
# - BSD 3-clause
# - BSD-3-Clause
+# - CDDL + GPLv2 with classpath exception
# - COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0
# - EDL 1.0
# - EPL 2.0
+# - EPL-2.0
# - Eclipse Public License - v 1.0
# - Eclipse Public License v2.0
# - GNU General Public License, version 2
# - GNU Lesser General Public License
+# - GPL-2.0-with-classpath-exception
# - GPL2 w/ CPE
# - Indiana University Extreme! Lab Software License, vesion 1.1.1
# - LGPL 2.1
@@ -50,5 +53,5 @@
# Please fill the missing licenses for dependencies :
#
#
-#Fri Dec 01 16:32:30 AEST 2023
+#Mon May 20 15:42:34 AEST 2024
oro--oro--2.0.8=
diff --git a/fhirpath/src/license/THIRD-PARTY.properties b/fhirpath/src/license/THIRD-PARTY.properties
index c855b989f6..a5dd080b04 100644
--- a/fhirpath/src/license/THIRD-PARTY.properties
+++ b/fhirpath/src/license/THIRD-PARTY.properties
@@ -10,7 +10,6 @@
# - Apache License Version 2.0
# - Apache License, 2.0
# - Apache License, Version 2.0
-# - Apache License, version 2.0
# - Apache Software License 2.0
# - Apache Software License, version 1.1
# - Apache-2.0
@@ -24,22 +23,26 @@
# - BSD licence
# - BSD-3-Clause
# - Bouncy Castle Licence
-# - CC0
+# - CDDL + GPLv2 with classpath exception
# - COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0
# - Dual license consisting of the CDDL v1.1 and GPL v2
# - EDL 1.0
# - EPL 2.0
+# - EPL-2.0
# - Eclipse Distribution License - v 1.0
# - Eclipse Public License - v 1.0
# - Eclipse Public License v2.0
# - GNU General Public License, version 2
# - GNU Lesser General Public License
+# - GPL-2.0-with-classpath-exception
# - GPL2 w/ CPE
# - Indiana University Extreme! Lab Software License, vesion 1.1.1
# - LGPL 2.1
# - LGPL-2.1-or-later
+# - MIT
# - MIT License
# - MIT license
+# - MIT-0
# - MPL 1.1
# - Modified BSD
# - New BSD License
@@ -60,5 +63,5 @@
# Please fill the missing licenses for dependencies :
#
#
-#Fri Dec 01 16:33:30 AEST 2023
+#Mon May 20 15:43:36 AEST 2024
oro--oro--2.0.8=
diff --git a/lib/R/src/license/THIRD-PARTY.properties b/lib/R/src/license/THIRD-PARTY.properties
index 3716e1a8e6..00719fb2e0 100644
--- a/lib/R/src/license/THIRD-PARTY.properties
+++ b/lib/R/src/license/THIRD-PARTY.properties
@@ -9,7 +9,6 @@
# - Apache License V2.0
# - Apache License, 2.0
# - Apache License, Version 2.0
-# - Apache License, version 2.0
# - Apache Software License 2.0
# - Apache Software License, version 1.1
# - Apache-2.0
@@ -21,19 +20,22 @@
# - BSD 3-clause
# - BSD licence
# - BSD-3-Clause
-# - CC0
+# - CDDL + GPLv2 with classpath exception
# - COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0
# - Dual license consisting of the CDDL v1.1 and GPL v2
# - EDL 1.0
# - EPL 2.0
+# - EPL-2.0
# - Eclipse Public License - v 1.0
# - GNU General Public License, version 2
# - GNU Lesser General Public License
+# - GPL-2.0-with-classpath-exception
# - GPL2 w/ CPE
# - Indiana University Extreme! Lab Software License, vesion 1.1.1
# - LGPL 2.1
# - MIT License
# - MIT license
+# - MIT-0
# - MPL 1.1
# - Modified BSD
# - New BSD License
@@ -53,5 +55,5 @@
# Please fill the missing licenses for dependencies :
#
#
-#Fri Dec 01 16:35:15 AEST 2023
+#Mon May 20 15:45:54 AEST 2024
oro--oro--2.0.8=
diff --git a/library-api/src/license/THIRD-PARTY.properties b/library-api/src/license/THIRD-PARTY.properties
index d948b4656a..5175cd141a 100644
--- a/library-api/src/license/THIRD-PARTY.properties
+++ b/library-api/src/license/THIRD-PARTY.properties
@@ -9,7 +9,6 @@
# - Apache License V2.0
# - Apache License, 2.0
# - Apache License, Version 2.0
-# - Apache License, version 2.0
# - Apache Software License 2.0
# - Apache Software License, version 1.1
# - Apache v2
@@ -23,23 +22,28 @@
# - BSD License
# - BSD licence
# - BSD-3-Clause
-# - CC0
+# - CDDL + GPLv2 with classpath exception
# - COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0
# - Dual license consisting of the CDDL v1.1 and GPL v2
# - EDL 1.0
# - EPL 2.0
+# - EPL-2.0
# - Eclipse Public License - v 1.0
# - Eclipse Public License v2.0
# - GNU General Public License, version 2
# - GNU Lesser General Public License
+# - GPL-2.0-with-classpath-exception
# - GPL2 w/ CPE
# - Indiana University Extreme! Lab Software License, vesion 1.1.1
# - LGPL 2.1
+# - MIT
# - MIT License
# - MIT license
+# - MIT-0
# - MPL 1.1
# - Modified BSD
# - New BSD License
+# - New BSD license
# - Public Domain
# - The Apache License, Version 2.0
# - The Apache Software License, Version 2.0
@@ -57,7 +61,7 @@
# Please fill the missing licenses for dependencies :
#
#
-#Fri Dec 01 16:33:56 AEST 2023
+#Mon May 20 15:44:02 AEST 2024
javax.transaction--transaction-api--1.1=
javax.transaction--jta--1.1=
oro--oro--2.0.8=
diff --git a/licenses/apache 2.0 license - license-2.0.html b/licenses/apache 2.0 license - license-2.0.html
index 535c113155..15f2c60ac4 100644
--- a/licenses/apache 2.0 license - license-2.0.html
+++ b/licenses/apache 2.0 license - license-2.0.html
@@ -30,6 +30,7 @@
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+}
+
+#pre-footer .wpcf7 input {
+ width: 50%;
+ border-radius: 0;
+ display:inline-block;
+ border: 2px black solid;
+ margin:0;
+ padding: 15px 20px;
+}
+#pre-footer .wpcf7 input[type=submit] {
+ background-color:black;
+ color:white;
+}
+
+.sidebar-post-loop ul li .wp-block-post-date {
+ margin-top: 0;
+}
+.sidebar-post-loop ul li.wp-block-post {
+ border-bottom : #CECECE 1px solid;
+ padding-bottom : 10px;
+ margin-bottom : 10px;
+ margin-top : 0;
+}
+
+.sidebar-post-loop ul li.wp-block-post:last-child {
+ border-bottom : none;
+}
+
+.sidebar-post-title.wp-block-post-title {
+ margin-bottom : 3px !important;
+ margin-top : 0;
+ font-family : 'Poppins', sans-serif;
+}
+
+.sidebar-comment-posts {
+ padding-left : 0;
+}
+
+.sidebar-comment-posts li.wp-block-latest-comments__comment {
+ padding-bottom : 10px;
+ margin-bottom : 10px;
+ border-bottom : #CECECE 1px solid;
+}
+
+.sidebar-comment-posts li.wp-block-latest-comments__comment:last-child {
+ border-bottom : none;
+}
+
+.sidebar-comment-posts li.wp-block-latest-comments__comment .wp-block-latest-comments__comment-meta {
+ font-size : 16px;
+ line-height : 24px;
+}
+
+.sidebar-comment-posts li.wp-block-latest-comments__comment .wp-block-latest-comments__comment-meta a {
+ text-decoration : none;
+ color : #3DA639;
+}
+
+.sidebar-comment-posts li.wp-block-latest-comments__comment .wp-block-latest-comments__comment-excerpt {
+ font-size : 16px;
+ line-height : 28px;
+ color : #767676;
+}
+
+.sidebar-comment-posts li.wp-block-latest-comments__comment .wp-block-latest-comments__comment-excerpt p {
+ margin-bottom : 0;
+}
+
+.sidebar-terms {
+ padding-left : 0;
+ margin-left: 0;
+ list-style : none;
+}
+
+.sidebar-terms li {
+ border-bottom : 1px solid #CECECE;
+ padding : 0 0 10px;
+ margin : 0 0 10px;
+}
+
+.sidebar-terms li:last-child {
+ border-bottom : none;
+}
+
+.sidebar-terms li a {
+ text-decoration : none;
+ color : #3DA639;
+}
+
+.main-post-loop ul li .wp-block-post-featured-image {
+ border : 1px solid #E1E1E1;
+}
+
+#more-blog-link a {
+ text-decoration : none;
+ color : #1D1D1D;
+}
+
+#wp--skip-link--target {
+ margin-top : 24px !important;
+}
+
+.blog-page--main-post-query .wp-block-post-featured-image {
+ margin-bottom: 15px;
+}
+
+
+.page-id-9688 .content--page .entry-header {
+ display: none;
+}
+
+.special-sep {
+ position : relative;
+}
+
+.special-sep:before {
+ content : '';
+ top : 50%;
+ left : 0;
+ right : 0;
+ height : 1px;
+ content : '';
+ position : absolute;
+ background-color : #000000;
+}
+
+.special-sep:after {
+ content : '';
+ left : calc(50% - 80px / 2);
+ width : 80px;
+ content : '';
+ position : absolute;
+ height : 40px;
+ top : -20px;
+ background : #FFFFFF url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyNi4wLjEsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4yIiBiYXNlUHJvZmlsZT0idGlueSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiDQoJIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMjU2IDI0OCIgb3ZlcmZsb3c9InZpc2libGUiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggZmlsbD0ibm9uZSIgZD0iTTE0My4zLDE2Ny44YzIyLjEtOC41LDMzLjEtMzMuMiwyNC42LTU1LjNjLTguNS0yMi4xLTMzLjItMzMuMS01NS4zLTI0LjZjLTIyLjEsOC41LTMzLjEsMzMuMi0yNC42LDU1LjMNCgkJYzQuMywxMS4zLDEzLjMsMjAuMywyNC42LDI0LjZMODMuOCwyNDNjLTYzLjUtMjQuNC05NS4zLTk1LjctNzAuOS0xNTkuM3M5NS43LTk1LjMsMTU5LjItNzAuOXM5NS4zLDk1LjcsNzAuOSwxNTkuMw0KCQljLTEyLjUsMzIuNi0zOC4zLDU4LjQtNzAuOSw3MC45TDE0My4zLDE2Ny44Ii8+DQoJPHBhdGggZmlsbD0iIzIzMUYyMCIgZD0iTTE3Mi4yLDI0Ny40Yy0wLjYsMC0xLjItMC4xLTEuOC0wLjRjLTEuMS0wLjUtMS45LTEuNC0yLjMtMi40bC0yOC44LTc1LjFjLTAuOS0yLjMsMC4zLTQuOCwyLjUtNS43DQoJCWM5LjYtMy43LDE3LjEtMTAuOSwyMS4zLTIwLjJjNC4yLTkuNCw0LjQtMTkuOCwwLjgtMjkuNEMxNTYuMiw5NC4zLDEzNCw4NC40LDExNC4yLDkyYy0xOS44LDcuNi0yOS43LDI5LjgtMjIuMSw0OS42DQoJCWMzLjksMTAuMSwxMS45LDE4LjIsMjIuMSwyMi4xYzIuMywwLjksMy40LDMuNCwyLjUsNS43TDg4LDI0NC41Yy0wLjQsMS4xLTEuMywyLTIuMywyLjRjLTEuMSwwLjUtMi4zLDAuNS0zLjQsMC4xDQoJCWMtMzEuOC0xMi4yLTU3LTM2LjEtNzAuOS02Ny4zQy0yLjUsMTQ4LjctMy40LDExNCw4LjgsODIuMXMzNi4xLTU3LDY3LjItNzAuOXM2NS44LTE0LjgsOTcuNy0yLjZzNTcsMzYuMSw3MC45LDY3LjMNCgkJYzEzLjksMzEuMiwxNC44LDY1LjgsMi42LDk3LjdjLTEyLjksMzMuNy0zOS43LDYwLjUtNzMuNCw3My41QzE3My4yLDI0Ny4zLDE3Mi43LDI0Ny40LDE3Mi4yLDI0Ny40TDE3Mi4yLDI0Ny40eiBNMTI4LDguOQ0KCQljLTE2LjQsMC0zMi44LDMuNS00OC4zLDEwLjNjLTI5LDEyLjktNTEuMiwzNi40LTYyLjYsNjZjLTExLjQsMjkuNi0xMC41LDYxLjksMi40LDkwLjljMTIuMywyNy43LDM0LjIsNDkuMiw2MS45LDYxbDI1LjctNjcNCgkJYy0xMC42LTUuMi0xOC45LTE0LjMtMjMuMS0yNS40Yy05LjMtMjQuMywyLjktNTEuNywyNy4xLTYxYzI0LjMtOS4zLDUxLjYsMi45LDYxLDI3LjJjNC41LDExLjgsNC4yLDI0LjYtMC45LDM2LjENCgkJYy00LjUsMTAuMi0xMi4zLDE4LjItMjIuMiwyMy4xbDI1LjcsNjdjMjkuNS0xMi42LDUyLjgtMzYuNyw2NC4zLTY2LjdjMTEuNC0yOS42LDEwLjUtNjEuOS0yLjQtOTAuOWMtMTIuOS0yOS0zNi4zLTUxLjItNjYtNjIuNg0KCQlDMTU2LjgsMTEuNiwxNDIuMyw4LjksMTI4LDguOUwxMjgsOC45eiIvPg0KCTxwYXRoIGZpbGw9IiMyMzFGMjAiIGQ9Ik0yMzcuNywyMjkuNmMtMS42LDEuNi0yLjQsMy42LTIuNCw1LjhjMCwyLjMsMC44LDQuMywyLjQsNS45YzEuNiwxLjYsMy42LDIuNCw1LjksMi40DQoJCWMyLjMsMCw0LjItMC44LDUuOC0yLjRjMS42LTEuNiwyLjQtMy42LDIuNC01LjljMC0yLjItMC44LTQuMi0yLjQtNS44Yy0xLjYtMS43LTMuNi0yLjUtNS45LTIuNQ0KCQlDMjQxLjMsMjI3LjEsMjM5LjQsMjI3LjksMjM3LjcsMjI5LjZMMjM3LjcsMjI5LjZ6IE0yNTAuNywyNDIuNmMtMiwxLjktNC4zLDIuOC03LDIuOGMtMi44LDAtNS4yLTEtNy4xLTIuOQ0KCQljLTEuOS0xLjktMi45LTQuMy0yLjktNy4xYzAtMi45LDEtNS40LDMuMS03LjNjMi0xLjgsNC4zLTIuNyw2LjktMi43YzIuOCwwLDUuMSwxLDcuMSwyLjljMiwyLDIuOSw0LjMsMi45LDcuMQ0KCQlDMjUzLjcsMjM4LjIsMjUyLjcsMjQwLjYsMjUwLjcsMjQyLjZMMjUwLjcsMjQyLjZ6IE0yNDQuNSwyMzJjLTAuNC0wLjItMS0wLjItMS43LTAuMmgtMC43djMuMmgxLjFjMC43LDAsMS4yLTAuMSwxLjYtMC40DQoJCXMwLjYtMC43LDAuNi0xLjNDMjQ1LjQsMjMyLjcsMjQ1LjEsMjMyLjMsMjQ0LjUsMjMyTDI0NC41LDIzMnogTTIzOS4yLDI0MXYtMTEuMWMwLjcsMCwxLjcsMCwzLjEsMHMyLjEsMCwyLjMsMA0KCQljMC45LDAuMSwxLjYsMC4zLDIuMiwwLjZjMSwwLjUsMS41LDEuNCwxLjUsMi43YzAsMC45LTAuMywxLjYtMC44LDJjLTAuNSwwLjQtMS4yLDAuNy0xLjksMC43YzAuNywwLjEsMS4yLDAuNCwxLjYsMC42DQoJCWMwLjcsMC41LDEsMS40LDEsMi41djFjMCwwLjEsMCwwLjIsMCwwLjNzMCwwLjIsMC4xLDAuM2wwLjEsMC4zaC0yLjhjLTAuMS0wLjQtMC4xLTAuOS0wLjItMS41cy0wLjEtMS4xLTAuMi0xLjQNCgkJYy0wLjEtMC40LTAuNC0wLjctMC44LTAuOGMtMC4yLTAuMS0wLjUtMC4xLTEtMC4ybC0wLjYsMGgtMC42djMuOUgyMzkuMnoiLz4NCjwvZz4NCjwvc3ZnPg0K) no-repeat center;
+}
+
+.sidebar .wp-block-latest-posts__list li,
+.sidebar .wp-block-latest-comments li {
+ border-bottom: #CECECE 1px solid;
+ padding-bottom: 10px;
+ margin-bottom: 10px;
+ margin-top: 0;
+}
+.sidebar .wp-block-latest-posts__post-date,
+.sidebar .wp-block-post-date, .wp-block-coblocks-posts__date {
+ color: #1d1d1d;
+ font-size: 13px;
+ font-weight: 400;
+ margin: 0;
+}
+.sidebar .wp-block-latest-comments__comment-excerpt p,
+.sidebar .wp-block-latest-comments__comment-excerpt,
+.sidebar .has-avatars .wp-block-latest-comments__comment .wp-block-latest-comments__comment-excerpt,
+.sidebar .has-avatars .wp-block-latest-comments__comment .wp-block-latest-comments__comment-meta {
+ margin: 0;
+ margin-left:0;
+ line-height: 28px;
+ color: #767676;
+}
+
+.blog .sidebar .wp-block-latest-posts__post-title,
+.blog .sidebar .wp-block-latest-comments__comment-link,
+.blog .sidebar .wp-block-latest-comments__comment-author,
+.blog .sidebar .widget_top-posts a,
+.blog .sidebar .widget_recent_entries,
+.blog .sidebar .widget_categories,
+.blog .sidebar #recentcomments {
+ font-weight: 400;
+ color: #3da639;
+ font-size: clamp(14px, 0.875rem + ((1vw - 3.2px) * 0.217), 16px);
+ line-height: 1.8;
+ text-decoration: none;
+}
+.blog .sidebar h2 {
+ font-size: clamp(14px, 0.875rem + ((1vw - 3.2px) * 0.435), 18px);
+}
+
+
+.blog .sidebar .wp-block-categories-list,
+.blog .sidebar .widget_top-posts ul,
+.blog .sidebar .widget_recent_entries,
+.blog .sidebar .widget_recent_entries ul,
+.blog .sidebar #recentcomments,
+.blog .sidebar .widget_categories ul {
+ padding-left: 0px;
+}
+.blog .sidebar .wp-block-categories-list li,
+.blog .sidebar .widget_top-posts li,
+.blog .sidebar .widget_recent_entries li,
+.blog .sidebar #recentcomments li,
+.blog .sidebar .widget_categories li {
+ list-style: none;
+ border-bottom: 1px solid #CECECE;
+ padding: 0 0 10px;
+ margin: 0 0 10px;
+}
-
+.blog .sidebar .wp-block-categories-list li a,
+.blog .sidebar .widget_recent_entries a,
+.blog .sidebar .widget_categories a,
+.blog .sidebar #recentcomments a {
+ text-decoration: none;
+ cursor: pointer !important;
+ line-height: 1.8;
+ font-weight: 400;
+ color: #3da639;
+}
+
+#comments ul.reaction-list {
+ list-style-type: none;
+}
+#comments ul.reaction-list li {
+ display:inline-block;
+ padding:0;
+ margin:0
+}
+#comments ul.reaction-list li .hide-name,
+#comments ul.reaction-list li .emoji-overlay {
+ display:none;
+}
+#comments ul.reaction-list li img {
+ width:50px;
+ max-width: auto;
+}
+#comments ul.reaction-list li a.customize-unpreviewable {
+ cursor:pointer !important;
+ display:inline-block;
+}
+.comment-body {
+ width: auto;
+}
+.email-block-wrap {
+ display:block;
+ width:100%;
+ clear:both;
+ margin-bottom: -5em;
+ z-index: 0;
+ position: relative;
+}
+.email-block-wrap input {
+ width: 50%;
+ display:inline-block;
+ border-radius: 0;
+ border: 2px black solid;
+ height: 60px;
+}
+.email-block-wrap span.wpcf7-not-valid-tip {
+ position: absolute;
+ color:white
+}
+.email-block-wrap span.wpcf7-form-control-wrap {
+ display: inline-block;
+ width:50%;
+}
+.email-block-wrap span.wpcf7-form-control-wrap input {
+ width:100%;
+}
+.email-block-wrap input[type=submit] {
+ background: black;
+ color:white;
+}
+.email-block-wrap input[type=submit]:hover {
+ background: white;
+ color: black;
+}
+.email-block-wrap input:hover,
+.email-block-wrap form.customize-unpreviewable input:hover,
+form.customize-unpreviewable {
+ cursor:pointer !important;
+}
+.email-block-wrap input[type=email]:hover,
+.email-block-wrap form.customize-unpreviewable input[type=email]:hover {
+ cursor:text !important;
+}
+.email-block-wrap .wpcf7-response-output {
+ border-color:white !important;
+ margin:10px 0 !important;
+ color:white;
+}
+.email-block-wrap form p {
+ margin: 0;
+ padding: 0;
+}
+.email-block-wrap {
+ z-index: 1;
+ border-bottom: 1px solid black;
+}
+.footer-cta {
+ z-index: 2;
+ position: relative;
+}
+.footer-main {
+ padding-top: 50px
+}
+.blog .first-post .post--byline {
+ font-size:clamp(14px, 0.875rem + (1vw - 3.2px) * 0.217, 16px);
+ color: gray;
+}
+.blog .first-post .entry-header ul {
+ list-style-type: none;
+ padding-left: 0;
+ margin-left: 0;
+ font-size: clamp(14px, 0.875rem + (1vw - 3.2px) * 0.217, 16px);
+}
+
+.blog .first-post h2 {
+ font-size: 35px;
+ line-height: 45px;
+}
+
+.blog .content .content-full .content--page {
+ max-width: 1550px;
+}
+.syndication-links {
+ margin-top: 0;
+}
+@media only screen and (min-width: 600px) {
+ .archive-columns {
+ gap: 4%;
+ }
+}
+@media only screen and (min-width: 782px) {
+ .wp-block-column.two-column {
+ max-width: 46%;
+ min-width: 46%;
+ }
+}
+.blog .post-archive-wrap .wp-block-column h2,
+.archive h2.post--title.entry-title {
+ margin-top: 35px;
+ margin-bottom: 35px;
+ line-height: 37px;
+}
+.archive .entry-meta.post--byline a {
+ color: #767676;
+ font-size: clamp(14px, 0.875rem + (1vw - 3.2px) * 0.217, 16px);
+}
+.error-404 label,
+.widget_top-posts .widget-inner > p {
+ display:none;
+}
+
+.archive .archive-title.page--title {
+ margin-bottom: 0.75rem !important;
+}
+
+.archive-description {
+ padding-bottom: 2.75rem;
+}
+
+.archive-description p {
+ margin: 0;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Skip to content
@@ -495,17 +783,19 @@
@@ -628,40 +915,52 @@ The MIT License