From c32eab90b64420903742608b55f6a3599ca98aac Mon Sep 17 00:00:00 2001 From: Anton Vasetenkov Date: Tue, 6 Jan 2026 08:25:06 +1300 Subject: [PATCH 1/2] Add library params builder to improve the engine evaluate API for Java users --- .../cql/engine/execution/EvaluationParams.kt | 56 +++++++++++-------- 1 file changed, 32 insertions(+), 24 deletions(-) diff --git a/Src/java/engine/src/main/kotlin/org/opencds/cqf/cql/engine/execution/EvaluationParams.kt b/Src/java/engine/src/main/kotlin/org/opencds/cqf/cql/engine/execution/EvaluationParams.kt index 3843f8bb3..2280b4487 100644 --- a/Src/java/engine/src/main/kotlin/org/opencds/cqf/cql/engine/execution/EvaluationParams.kt +++ b/Src/java/engine/src/main/kotlin/org/opencds/cqf/cql/engine/execution/EvaluationParams.kt @@ -35,20 +35,24 @@ class EvaluationParams( * Adds a library to the evaluation. * * @param id The VersionedIdentifier of the library. - * @param block A DSL block to define specific expressions. + * @param libraryParams Library parameters containing expressions to evaluate. */ - fun library(id: VersionedIdentifier, block: (LibraryScope.() -> Unit)? = null) = apply { + fun library(id: VersionedIdentifier, libraryParams: LibraryParams) { + expressions[id] = libraryParams.expressions + } + + /** Adds a library to the evaluation. */ + fun library(id: VersionedIdentifier, block: (LibraryParams.Builder.() -> Unit)? = null) { if (block == null) { expressions[id] = null } else { - val scope = LibraryScope() - scope.block() - expressions[id] = scope.build() + val libraryParams = LibraryParams.Builder().apply(block).build() + expressions[id] = libraryParams.expressions } } /** Shorthand for adding a library by name. */ - fun library(libraryName: String, block: (LibraryScope.() -> Unit)? = null) { + fun library(libraryName: String, block: (LibraryParams.Builder.() -> Unit)? = null) { library(VersionedIdentifier().apply { id = libraryName }, block) } @@ -63,29 +67,33 @@ class EvaluationParams( } } - /** Scopes expression calls within a library block. */ - class LibraryScope { - private val expressions = mutableListOf() + /** Parameters for a specific library's evaluation. */ + class LibraryParams(val expressions: List) { + class Builder { + private val expressions = mutableListOf() - /** Adds expression refs to be evaluated. */ - fun expressions(vararg refs: EvaluationExpressionRef) { - expressions.addAll(refs) - } + /** Adds expression refs to be evaluated. */ + fun expressions(vararg refs: EvaluationExpressionRef) { + expressions.addAll(refs) + } - /** Adds expressions by name. */ - fun expressions(names: Iterable) { - for (name in names) { - expressions.add(EvaluationExpressionRef(name)) + /** Adds expressions by name. */ + fun expressions(names: Iterable) { + for (name in names) { + expressions.add(EvaluationExpressionRef(name)) + } } - } - /** Adds expressions by name. */ - fun expressions(vararg names: String) { - for (name in names) { - expressions.add(EvaluationExpressionRef(name)) + /** Adds expressions by name. */ + fun expressions(vararg names: String) { + for (name in names) { + expressions.add(EvaluationExpressionRef(name)) + } } - } - fun build(): List = expressions + fun build(): LibraryParams { + return LibraryParams(expressions) + } + } } } From 4bbbeefdfc9427bcb224fdf3d227b22fc8b8fbf9 Mon Sep 17 00:00:00 2001 From: Anton Vasetenkov Date: Tue, 6 Jan 2026 09:38:55 +1300 Subject: [PATCH 2/2] Make LibraryParams.expressions nullable --- .../cql/engine/execution/EvaluationParams.kt | 40 ++++++++++++++----- 1 file changed, 29 insertions(+), 11 deletions(-) diff --git a/Src/java/engine/src/main/kotlin/org/opencds/cqf/cql/engine/execution/EvaluationParams.kt b/Src/java/engine/src/main/kotlin/org/opencds/cqf/cql/engine/execution/EvaluationParams.kt index 2280b4487..56abc7061 100644 --- a/Src/java/engine/src/main/kotlin/org/opencds/cqf/cql/engine/execution/EvaluationParams.kt +++ b/Src/java/engine/src/main/kotlin/org/opencds/cqf/cql/engine/execution/EvaluationParams.kt @@ -41,14 +41,18 @@ class EvaluationParams( expressions[id] = libraryParams.expressions } + /** Shorthand for adding a library by name. */ + fun library(libraryName: String, libraryParams: LibraryParams) { + library(VersionedIdentifier().apply { id = libraryName }, libraryParams) + } + /** Adds a library to the evaluation. */ fun library(id: VersionedIdentifier, block: (LibraryParams.Builder.() -> Unit)? = null) { - if (block == null) { - expressions[id] = null - } else { - val libraryParams = LibraryParams.Builder().apply(block).build() - expressions[id] = libraryParams.expressions + val builder = LibraryParams.Builder() + if (block != null) { + builder.apply(block) } + library(id, builder.build()) } /** Shorthand for adding a library by name. */ @@ -67,27 +71,41 @@ class EvaluationParams( } } - /** Parameters for a specific library's evaluation. */ - class LibraryParams(val expressions: List) { + /** + * Parameters for a specific library's evaluation. + * + * @property expressions The list of expression refs to evaluate for this library. If the value + * is null, all expressions in the library will be evaluated. + */ + class LibraryParams(val expressions: List?) { class Builder { - private val expressions = mutableListOf() + private var expressions: MutableList? = null /** Adds expression refs to be evaluated. */ fun expressions(vararg refs: EvaluationExpressionRef) { - expressions.addAll(refs) + if (expressions == null) { + expressions = mutableListOf() + } + expressions!!.addAll(refs) } /** Adds expressions by name. */ fun expressions(names: Iterable) { + if (expressions == null) { + expressions = mutableListOf() + } for (name in names) { - expressions.add(EvaluationExpressionRef(name)) + expressions!!.add(EvaluationExpressionRef(name)) } } /** Adds expressions by name. */ fun expressions(vararg names: String) { + if (expressions == null) { + expressions = mutableListOf() + } for (name in names) { - expressions.add(EvaluationExpressionRef(name)) + expressions!!.add(EvaluationExpressionRef(name)) } }