From db56f2b09fc10cd244cad0646bc233b958884550 Mon Sep 17 00:00:00 2001 From: Kostia Tarasenko Date: Fri, 21 Apr 2023 20:29:01 +0200 Subject: [PATCH] Rename ImplementationGuide library to Knowledge (#1977) --- benchmark/build.gradle.kts | 2 +- .../fhir/benchmark/G_CqlEvaluatorBenchmark.kt | 8 +-- buildSrc/src/main/kotlin/Releases.kt | 6 +- {implementationguide => knowledge}/.gitignore | 0 .../build.gradle.kts | 12 ++-- .../proguard-rules.pro | 0 .../db/impl/KnowledgeDatabaseTest.kt | 62 ++++++++++--------- .../src/main/AndroidManifest.xml | 2 +- .../fhir/knowledge}/ImplementationGuide.kt | 2 +- .../fhir/knowledge/KnowledgeManager.kt | 55 ++++++++-------- .../knowledge}/db/impl/DbTypeConverters.kt | 2 +- .../knowledge/db/impl/KnowledgeDatabase.kt | 17 ++--- .../knowledge/db/impl/dao/KnowledgeDao.kt | 12 ++-- .../entities/ImplementationGuideEntity.kt | 4 +- ...plementationGuideResourceMetadataEntity.kt | 2 +- .../impl/entities/ResourceMetadataEntity.kt | 2 +- .../fhir/knowledge/KnowledgeManagerTest.kt | 45 +++++++------- .../testdata/anc-cds/Library-ANCIND01.json | 0 .../anc-cds/Library-ANCStratifiers.json | 0 .../testdata/anc-cds/Library-FHIRCommon.json | 0 .../testdata/anc-cds/Library-FHIRHelpers.json | 0 .../testdata/anc-cds/Library-WHOCommon.json | 0 .../testdata/anc-cds/Measure-ANCIND01.json | 0 settings.gradle.kts | 2 +- workflow/build.gradle.kts | 2 +- .../FhirOperatorLibraryEvaluateTest.kt | 8 +-- .../android/fhir/workflow/FhirEngineDal.kt | 12 ++-- .../FhirEngineLibraryContentProvider.kt | 6 +- .../workflow/FhirEngineTerminologyProvider.kt | 10 +-- .../android/fhir/workflow/FhirOperator.kt | 15 +++-- .../fhir/workflow/FhirOperatorBuilder.kt | 12 ++-- .../fhir/workflow/FhirEngineDalTest.kt | 4 +- .../FhirEngineRetrieveProviderTest.kt | 4 +- .../FhirEngineTerminologyProviderTest.kt | 4 +- .../FhirOperatorLibraryEvaluateJavaTest.kt | 14 ++--- .../android/fhir/workflow/FhirOperatorTest.kt | 14 ++--- 36 files changed, 174 insertions(+), 166 deletions(-) rename {implementationguide => knowledge}/.gitignore (100%) rename {implementationguide => knowledge}/build.gradle.kts (91%) rename {implementationguide => knowledge}/proguard-rules.pro (100%) rename implementationguide/src/androidTest/java/com/google/android/fhir/implementationguide/db/impl/ImplementationGuideDatabaseTest.kt => knowledge/src/androidTest/java/com/google/android/fhir/knowledge/db/impl/KnowledgeDatabaseTest.kt (56%) rename {implementationguide => knowledge}/src/main/AndroidManifest.xml (54%) rename {implementationguide/src/main/java/com/google/android/fhir/implementationguide => knowledge/src/main/java/com/google/android/fhir/knowledge}/ImplementationGuide.kt (93%) rename implementationguide/src/main/java/com/google/android/fhir/implementationguide/IgManager.kt => knowledge/src/main/java/com/google/android/fhir/knowledge/KnowledgeManager.kt (70%) rename {implementationguide/src/main/java/com/google/android/fhir/implementationguide => knowledge/src/main/java/com/google/android/fhir/knowledge}/db/impl/DbTypeConverters.kt (93%) rename implementationguide/src/main/java/com/google/android/fhir/implementationguide/db/impl/ImplementationGuideDatabase.kt => knowledge/src/main/java/com/google/android/fhir/knowledge/db/impl/KnowledgeDatabase.kt (67%) rename implementationguide/src/main/java/com/google/android/fhir/implementationguide/db/impl/dao/ImplementationGuideDao.kt => knowledge/src/main/java/com/google/android/fhir/knowledge/db/impl/dao/KnowledgeDao.kt (89%) rename {implementationguide/src/main/java/com/google/android/fhir/implementationguide => knowledge/src/main/java/com/google/android/fhir/knowledge}/db/impl/entities/ImplementationGuideEntity.kt (92%) rename {implementationguide/src/main/java/com/google/android/fhir/implementationguide => knowledge/src/main/java/com/google/android/fhir/knowledge}/db/impl/entities/ImplementationGuideResourceMetadataEntity.kt (96%) rename {implementationguide/src/main/java/com/google/android/fhir/implementationguide => knowledge/src/main/java/com/google/android/fhir/knowledge}/db/impl/entities/ResourceMetadataEntity.kt (95%) rename implementationguide/src/test/java/com/google/android/fhir/implementationguide/IgManagerTest.kt => knowledge/src/test/java/com/google/android/fhir/knowledge/KnowledgeManagerTest.kt (62%) rename {implementationguide => knowledge}/testdata/anc-cds/Library-ANCIND01.json (100%) rename {implementationguide => knowledge}/testdata/anc-cds/Library-ANCStratifiers.json (100%) rename {implementationguide => knowledge}/testdata/anc-cds/Library-FHIRCommon.json (100%) rename {implementationguide => knowledge}/testdata/anc-cds/Library-FHIRHelpers.json (100%) rename {implementationguide => knowledge}/testdata/anc-cds/Library-WHOCommon.json (100%) rename {implementationguide => knowledge}/testdata/anc-cds/Measure-ANCIND01.json (100%) diff --git a/benchmark/build.gradle.kts b/benchmark/build.gradle.kts index 7951ad58e5..9b9dafed1b 100644 --- a/benchmark/build.gradle.kts +++ b/benchmark/build.gradle.kts @@ -87,7 +87,7 @@ dependencies { androidTestImplementation(Dependencies.truth) androidTestImplementation(project(":engine")) - androidTestImplementation(project(":implementationguide")) + androidTestImplementation(project(":knowledge")) androidTestImplementation(project(":workflow")) androidTestImplementation(project(":workflow-testing")) } diff --git a/benchmark/src/androidTest/java/com/google/android/fhir/benchmark/G_CqlEvaluatorBenchmark.kt b/benchmark/src/androidTest/java/com/google/android/fhir/benchmark/G_CqlEvaluatorBenchmark.kt index 22b4001c0e..ed18754f1f 100644 --- a/benchmark/src/androidTest/java/com/google/android/fhir/benchmark/G_CqlEvaluatorBenchmark.kt +++ b/benchmark/src/androidTest/java/com/google/android/fhir/benchmark/G_CqlEvaluatorBenchmark.kt @@ -24,7 +24,7 @@ import androidx.test.ext.junit.runners.AndroidJUnit4 import ca.uhn.fhir.context.FhirContext import ca.uhn.fhir.context.FhirVersionEnum import com.google.android.fhir.FhirEngineProvider -import com.google.android.fhir.implementationguide.IgManager +import com.google.android.fhir.knowledge.KnowledgeManager import com.google.android.fhir.workflow.FhirOperatorBuilder import com.google.common.truth.Truth.assertThat import java.io.File @@ -57,14 +57,14 @@ class G_CqlEvaluatorBenchmark { val patientImmunizationHistory = jsonParser.parseResource(open("/immunity-check/ImmunizationHistory.json")) as Bundle val fhirEngine = FhirEngineProvider.getInstance(ApplicationProvider.getApplicationContext()) - val igManager = IgManager.createInMemory(context) + val knowledgeManager = KnowledgeManager.createInMemory(context) val lib = jsonParser.parseResource(open("/immunity-check/ImmunityCheck.json")) as Library runBlocking { for (entry in patientImmunizationHistory.entry) { fhirEngine.create(entry.resource) } - igManager.install( + knowledgeManager.install( File(context.filesDir, lib.name).apply { writeText(jsonParser.encodeResourceToString(lib)) } @@ -74,7 +74,7 @@ class G_CqlEvaluatorBenchmark { FhirOperatorBuilder(context) .withFhirContext(fhirContext) .withFhirEngine(fhirEngine) - .withIgManager(igManager) + .withIgManager(knowledgeManager) .build() } diff --git a/buildSrc/src/main/kotlin/Releases.kt b/buildSrc/src/main/kotlin/Releases.kt index 0e6e8e9161..c8dfa616f8 100644 --- a/buildSrc/src/main/kotlin/Releases.kt +++ b/buildSrc/src/main/kotlin/Releases.kt @@ -72,10 +72,10 @@ object Releases { } } - object ImplementationGuide : LibraryArtifact { - override val artifactId = "implementationguide" + object Knowledge : LibraryArtifact { + override val artifactId = "knowledger" override val version = "0.1.0-alpha001" - override val name = "Android FHIR Implementation Guide Library" + override val name = "Android FHIR Knowledge Manager Library" } // Demo apps diff --git a/implementationguide/.gitignore b/knowledge/.gitignore similarity index 100% rename from implementationguide/.gitignore rename to knowledge/.gitignore diff --git a/implementationguide/build.gradle.kts b/knowledge/build.gradle.kts similarity index 91% rename from implementationguide/build.gradle.kts rename to knowledge/build.gradle.kts index 149a97b774..4fede41808 100644 --- a/implementationguide/build.gradle.kts +++ b/knowledge/build.gradle.kts @@ -9,7 +9,7 @@ plugins { id(Plugins.BuildPlugins.dokka).version(Plugins.Versions.dokka) } -publishArtifact(Releases.ImplementationGuide) +publishArtifact(Releases.Knowledge) createJacocoTestReportTask() @@ -21,7 +21,7 @@ android { targetSdk = Sdk.targetSdk testInstrumentationRunner = Dependencies.androidJunitRunner // Need to specify this to prevent junit runner from going deep into our dependencies - testInstrumentationRunnerArguments["package"] = "com.google.android.fhir.implementationguide" + testInstrumentationRunnerArguments["package"] = "com.google.android.fhir.knowledge" } sourceSets { @@ -110,15 +110,13 @@ dependencies { tasks.dokkaHtml.configure { outputDirectory.set( - file( - "../docs/${Releases.ImplementationGuide.artifactId}/${Releases.ImplementationGuide.version}" - ) + file("../docs/${Releases.Knowledge.artifactId}/${Releases.Knowledge.version}") ) suppressInheritedMembers.set(true) dokkaSourceSets { named("main") { - moduleName.set(Releases.ImplementationGuide.artifactId) - moduleVersion.set(Releases.ImplementationGuide.version) + moduleName.set(Releases.Knowledge.artifactId) + moduleVersion.set(Releases.Knowledge.version) noAndroidSdkLink.set(false) externalDocumentationLink { url.set(URL("https://hapifhir.io/hapi-fhir/apidocs/hapi-fhir-structures-r4/")) diff --git a/implementationguide/proguard-rules.pro b/knowledge/proguard-rules.pro similarity index 100% rename from implementationguide/proguard-rules.pro rename to knowledge/proguard-rules.pro diff --git a/implementationguide/src/androidTest/java/com/google/android/fhir/implementationguide/db/impl/ImplementationGuideDatabaseTest.kt b/knowledge/src/androidTest/java/com/google/android/fhir/knowledge/db/impl/KnowledgeDatabaseTest.kt similarity index 56% rename from implementationguide/src/androidTest/java/com/google/android/fhir/implementationguide/db/impl/ImplementationGuideDatabaseTest.kt rename to knowledge/src/androidTest/java/com/google/android/fhir/knowledge/db/impl/KnowledgeDatabaseTest.kt index 77f52d351c..f6d47f9705 100644 --- a/implementationguide/src/androidTest/java/com/google/android/fhir/implementationguide/db/impl/ImplementationGuideDatabaseTest.kt +++ b/knowledge/src/androidTest/java/com/google/android/fhir/knowledge/db/impl/KnowledgeDatabaseTest.kt @@ -14,14 +14,14 @@ * limitations under the License. */ -package com.google.android.fhir.implementationguide.db.impl +package com.google.android.fhir.knowledge.db.impl import android.content.Context import androidx.room.Room import androidx.test.core.app.ApplicationProvider import androidx.test.ext.junit.runners.AndroidJUnit4 -import com.google.android.fhir.implementationguide.db.impl.entities.ImplementationGuideEntity -import com.google.android.fhir.implementationguide.db.impl.entities.ResourceMetadataEntity +import com.google.android.fhir.knowledge.db.impl.entities.ImplementationGuideEntity +import com.google.android.fhir.knowledge.db.impl.entities.ResourceMetadataEntity import com.google.common.truth.Truth.assertThat import java.io.File import kotlinx.coroutines.ExperimentalCoroutinesApi @@ -33,27 +33,28 @@ import org.junit.runner.RunWith @OptIn(ExperimentalCoroutinesApi::class) @RunWith(AndroidJUnit4::class) -internal class ImplementationGuideDatabaseTest { +internal class KnowledgeDatabaseTest { private val context: Context = ApplicationProvider.getApplicationContext() - private val igDb = - Room.inMemoryDatabaseBuilder(context, ImplementationGuideDatabase::class.java).build() - private val igDao = igDb.implementationGuideDao() + private val knowledgeDb = + Room.inMemoryDatabaseBuilder(context, KnowledgeDatabase::class.java).build() + private val knowledgeDao = knowledgeDb.knowledgeDao() @After fun tearDownDb() { - igDb.close() + knowledgeDb.close() } @Test fun igInserted(): Unit = runTest { - assertThat(igDao.insert(IG_ENTITY)).isGreaterThan(0) - assertThat(igDao.getImplementationGuides().map { it.packageId }).containsExactly(IG_PACKAGE_ID) + assertThat(knowledgeDao.insert(IG_ENTITY)).isGreaterThan(0) + assertThat(knowledgeDao.getImplementationGuides().map { it.packageId }) + .containsExactly(IG_PACKAGE_ID) } @Test fun resourcesInserted() = runTest { - val igId = igDao.insert(IG_ENTITY) + val igId = knowledgeDao.insert(IG_ENTITY) val resource = ResourceMetadataEntity( 0L, @@ -64,18 +65,19 @@ internal class ImplementationGuideDatabaseTest { File("resId") ) - igDao.insertResource(igId, resource) + knowledgeDao.insertResource(igId, resource) - assertThat(igDao.getResources(ResourceType.ValueSet).map { it.url }).containsExactly(RES_URL) - assertThat(igDao.getResources(ResourceType.Account)).isEmpty() - assertThat(igDao.getImplementationGuidesWithResources(igId)?.resources?.map { it.url }) + assertThat(knowledgeDao.getResources(ResourceType.ValueSet).map { it.url }) .containsExactly(RES_URL) - assertThat(igDao.getImplementationGuidesWithResources(-1)).isNull() + assertThat(knowledgeDao.getResources(ResourceType.Account)).isEmpty() + assertThat(knowledgeDao.getImplementationGuidesWithResources(igId)?.resources?.map { it.url }) + .containsExactly(RES_URL) + assertThat(knowledgeDao.getImplementationGuidesWithResources(-1)).isNull() } @Test fun resourcesDeleted() = runTest { - val igId = igDao.insert(IG_ENTITY) + val igId = knowledgeDao.insert(IG_ENTITY) val resource = ResourceMetadataEntity( 0L, @@ -85,19 +87,19 @@ internal class ImplementationGuideDatabaseTest { RES_VERSION, File("resId") ) - igDao.insertResource(igId, resource) + knowledgeDao.insertResource(igId, resource) - igDao.deleteImplementationGuide(IG_PACKAGE_ID, IG_VERSION) + knowledgeDao.deleteImplementationGuide(IG_PACKAGE_ID, IG_VERSION) - assertThat(igDao.getImplementationGuides()).isEmpty() - assertThat(igDao.getResources()).isEmpty() - assertThat(igDao.getImplementationGuidesWithResources(igId)).isNull() + assertThat(knowledgeDao.getImplementationGuides()).isEmpty() + assertThat(knowledgeDao.getResources()).isEmpty() + assertThat(knowledgeDao.getImplementationGuidesWithResources(igId)).isNull() } @Test fun resourcesReused() = runTest { - val igId1 = igDao.insert(IG_ENTITY) - val igId2 = igDao.insert(IG_ENTITY.copy(version = "2.0.0")) + val igId1 = knowledgeDao.insert(IG_ENTITY) + val igId2 = knowledgeDao.insert(IG_ENTITY.copy(version = "2.0.0")) val resource = ResourceMetadataEntity( 0L, @@ -108,15 +110,15 @@ internal class ImplementationGuideDatabaseTest { File("resId") ) - igDao.insertResource(igId1, resource) - igDao.insertResource(igId2, resource) + knowledgeDao.insertResource(igId1, resource) + knowledgeDao.insertResource(igId2, resource) - assertThat(igDao.getImplementationGuidesWithResources(igId1)?.resources?.map { it.url }) + assertThat(knowledgeDao.getImplementationGuidesWithResources(igId1)?.resources?.map { it.url }) .containsExactly(RES_URL) - assertThat(igDao.getImplementationGuidesWithResources(igId2)?.resources?.map { it.url }) + assertThat(knowledgeDao.getImplementationGuidesWithResources(igId2)?.resources?.map { it.url }) .containsExactly(RES_URL) - assertThat(igDao.getResources()).hasSize(1) - assertThat(igDao.getImplementationGuidesWithResources(-1)).isNull() + assertThat(knowledgeDao.getResources()).hasSize(1) + assertThat(knowledgeDao.getImplementationGuidesWithResources(-1)).isNull() } private companion object { diff --git a/implementationguide/src/main/AndroidManifest.xml b/knowledge/src/main/AndroidManifest.xml similarity index 54% rename from implementationguide/src/main/AndroidManifest.xml rename to knowledge/src/main/AndroidManifest.xml index 3bb58d6898..c2b0bc5091 100644 --- a/implementationguide/src/main/AndroidManifest.xml +++ b/knowledge/src/main/AndroidManifest.xml @@ -1,5 +1,5 @@ - + diff --git a/implementationguide/src/main/java/com/google/android/fhir/implementationguide/ImplementationGuide.kt b/knowledge/src/main/java/com/google/android/fhir/knowledge/ImplementationGuide.kt similarity index 93% rename from implementationguide/src/main/java/com/google/android/fhir/implementationguide/ImplementationGuide.kt rename to knowledge/src/main/java/com/google/android/fhir/knowledge/ImplementationGuide.kt index 23301e9557..07caa6bdbe 100644 --- a/implementationguide/src/main/java/com/google/android/fhir/implementationguide/ImplementationGuide.kt +++ b/knowledge/src/main/java/com/google/android/fhir/knowledge/ImplementationGuide.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.android.fhir.implementationguide +package com.google.android.fhir.knowledge /** * Holds Implementation Guide attributes. Used to define dependencies, load dependencies from diff --git a/implementationguide/src/main/java/com/google/android/fhir/implementationguide/IgManager.kt b/knowledge/src/main/java/com/google/android/fhir/knowledge/KnowledgeManager.kt similarity index 70% rename from implementationguide/src/main/java/com/google/android/fhir/implementationguide/IgManager.kt rename to knowledge/src/main/java/com/google/android/fhir/knowledge/KnowledgeManager.kt index 5da945db94..407e814826 100644 --- a/implementationguide/src/main/java/com/google/android/fhir/implementationguide/IgManager.kt +++ b/knowledge/src/main/java/com/google/android/fhir/knowledge/KnowledgeManager.kt @@ -14,14 +14,15 @@ * limitations under the License. */ -package com.google.android.fhir.implementationguide +package com.google.android.fhir.knowledge import android.content.Context import androidx.room.Room import ca.uhn.fhir.context.FhirContext -import com.google.android.fhir.implementationguide.db.impl.ImplementationGuideDatabase -import com.google.android.fhir.implementationguide.db.impl.entities.ResourceMetadataEntity -import com.google.android.fhir.implementationguide.db.impl.entities.toEntity +import ca.uhn.fhir.parser.IParser +import com.google.android.fhir.knowledge.db.impl.KnowledgeDatabase +import com.google.android.fhir.knowledge.db.impl.entities.ResourceMetadataEntity +import com.google.android.fhir.knowledge.db.impl.entities.toEntity import java.io.File import java.io.FileInputStream import kotlinx.coroutines.Dispatchers @@ -33,10 +34,13 @@ import org.hl7.fhir.r4.model.ResourceType import timber.log.Timber /** Responsible for importing, accessing and deleting Implementation Guides. */ -class IgManager internal constructor(private val igDatabase: ImplementationGuideDatabase) { +class KnowledgeManager +internal constructor( + private val knowledgeDatabase: KnowledgeDatabase, + private val jsonParser: IParser = FhirContext.forR4().newJsonParser(), +) { - private val igDao = igDatabase.implementationGuideDao() - private val jsonParser = FhirContext.forR4().newJsonParser() + private val knowledgeDao = knowledgeDatabase.knowledgeDao() /** * * Checks if the [implementationGuides] are present in DB. If necessary, downloads the @@ -53,7 +57,7 @@ class IgManager internal constructor(private val igDatabase: ImplementationGuide */ suspend fun install(implementationGuide: ImplementationGuide, rootDirectory: File) { // TODO(ktarasenko) copy files to the safe space? - val igId = igDao.insert(implementationGuide.toEntity(rootDirectory)) + val igId = knowledgeDao.insert(implementationGuide.toEntity(rootDirectory)) rootDirectory.listFiles()?.forEach { file -> try { val resource = jsonParser.parseResource(FileInputStream(file)) @@ -68,7 +72,7 @@ class IgManager internal constructor(private val igDatabase: ImplementationGuide } } - /** Imports the IG from the provided [file] to the default dependency. */ + /** Imports the Knolwedge Artifact from the provided [file] to the default dependency. */ suspend fun install(file: File) { importFile(null, file) } @@ -84,12 +88,12 @@ class IgManager internal constructor(private val igDatabase: ImplementationGuide val resType = ResourceType.fromCode(resourceType) val resourceEntities = when { - url != null -> listOfNotNull(igDao.getResourceWithUrl(url)) - id != null -> listOfNotNull(igDao.getResourceWithUrlLike("%$id")) + url != null -> listOfNotNull(knowledgeDao.getResourceWithUrl(url)) + id != null -> listOfNotNull(knowledgeDao.getResourceWithUrlLike("%$id")) name != null && version != null -> - listOfNotNull(igDao.getResourcesWithNameAndVersion(resType, name, version)) - name != null -> igDao.getResourcesWithName(resType, name) - else -> igDao.getResources(resType) + listOfNotNull(knowledgeDao.getResourcesWithNameAndVersion(resType, name, version)) + name != null -> knowledgeDao.getResourcesWithName(resType, name) + else -> knowledgeDao.getResources(resType) } return resourceEntities.map { loadResource(it) } } @@ -97,9 +101,10 @@ class IgManager internal constructor(private val igDatabase: ImplementationGuide /** Deletes Implementation Guide, cleans up files. */ suspend fun delete(vararg igDependencies: ImplementationGuide) { igDependencies.forEach { igDependency -> - val igEntity = igDao.getImplementationGuide(igDependency.packageId, igDependency.version) + val igEntity = + knowledgeDao.getImplementationGuide(igDependency.packageId, igDependency.version) if (igEntity != null) { - igDao.deleteImplementationGuide(igEntity) + knowledgeDao.deleteImplementationGuide(igEntity) igEntity.rootDirectory.deleteRecursively() } } @@ -130,7 +135,7 @@ class IgManager internal constructor(private val igDatabase: ImplementationGuide metadataResource?.version, file ) - igDao.insertResource(igId, res) + knowledgeDao.insertResource(igId, res) } private fun loadResource(resourceEntity: ResourceMetadataEntity): IBaseResource { @@ -138,22 +143,20 @@ class IgManager internal constructor(private val igDatabase: ImplementationGuide } fun close() { - igDatabase.close() + knowledgeDatabase.close() } companion object { - private const val DB_NAME = "implementationguide.db" + private const val DB_NAME = "knowledge.db" - /** Creates an [IgManager] backed by the Room DB. */ + /** Creates an [KnowledgeManager] backed by the Room DB. */ fun create(context: Context) = - IgManager( - Room.databaseBuilder(context, ImplementationGuideDatabase::class.java, DB_NAME).build() + KnowledgeManager( + Room.databaseBuilder(context, KnowledgeDatabase::class.java, DB_NAME).build() ) - /** Creates an [IgManager] backed by the in-memory DB. */ + /** Creates an [KnowledgeManager] backed by the in-memory DB. */ fun createInMemory(context: Context) = - IgManager( - Room.inMemoryDatabaseBuilder(context, ImplementationGuideDatabase::class.java).build() - ) + KnowledgeManager(Room.inMemoryDatabaseBuilder(context, KnowledgeDatabase::class.java).build()) } } diff --git a/implementationguide/src/main/java/com/google/android/fhir/implementationguide/db/impl/DbTypeConverters.kt b/knowledge/src/main/java/com/google/android/fhir/knowledge/db/impl/DbTypeConverters.kt similarity index 93% rename from implementationguide/src/main/java/com/google/android/fhir/implementationguide/db/impl/DbTypeConverters.kt rename to knowledge/src/main/java/com/google/android/fhir/knowledge/db/impl/DbTypeConverters.kt index 555062120a..fae710eb29 100644 --- a/implementationguide/src/main/java/com/google/android/fhir/implementationguide/db/impl/DbTypeConverters.kt +++ b/knowledge/src/main/java/com/google/android/fhir/knowledge/db/impl/DbTypeConverters.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.android.fhir.implementationguide.db.impl +package com.google.android.fhir.knowledge.db.impl import androidx.room.TypeConverter import java.io.File diff --git a/implementationguide/src/main/java/com/google/android/fhir/implementationguide/db/impl/ImplementationGuideDatabase.kt b/knowledge/src/main/java/com/google/android/fhir/knowledge/db/impl/KnowledgeDatabase.kt similarity index 67% rename from implementationguide/src/main/java/com/google/android/fhir/implementationguide/db/impl/ImplementationGuideDatabase.kt rename to knowledge/src/main/java/com/google/android/fhir/knowledge/db/impl/KnowledgeDatabase.kt index e8377f1176..7e1795fb75 100644 --- a/implementationguide/src/main/java/com/google/android/fhir/implementationguide/db/impl/ImplementationGuideDatabase.kt +++ b/knowledge/src/main/java/com/google/android/fhir/knowledge/db/impl/KnowledgeDatabase.kt @@ -14,18 +14,19 @@ * limitations under the License. */ -package com.google.android.fhir.implementationguide.db.impl +package com.google.android.fhir.knowledge.db.impl import androidx.room.Database import androidx.room.RoomDatabase import androidx.room.TypeConverters -import com.google.android.fhir.implementationguide.db.impl.dao.ImplementationGuideDao -import com.google.android.fhir.implementationguide.db.impl.entities.ImplementationGuideEntity -import com.google.android.fhir.implementationguide.db.impl.entities.ImplementationGuideResourceMetadataEntity -import com.google.android.fhir.implementationguide.db.impl.entities.ResourceMetadataEntity +import com.google.android.fhir.knowledge.db.impl.dao.KnowledgeDao +import com.google.android.fhir.knowledge.db.impl.entities.ImplementationGuideEntity +import com.google.android.fhir.knowledge.db.impl.entities.ImplementationGuideResourceMetadataEntity +import com.google.android.fhir.knowledge.db.impl.entities.ResourceMetadataEntity /** - * Stores metadata for implementation guides and their containing FHIR Resources. + * Stores knowledge artifacts metadata for implementation guides and their containing FHIR + * Resources. * * Same FhirResource (identified as the resource with the same `url`) can be part of the different * IGs. To avoid duplications, [ImplementationGuideEntity] are connected with @@ -44,6 +45,6 @@ import com.google.android.fhir.implementationguide.db.impl.entities.ResourceMeta exportSchema = false ) @TypeConverters(DbTypeConverters::class) -internal abstract class ImplementationGuideDatabase : RoomDatabase() { - abstract fun implementationGuideDao(): ImplementationGuideDao +internal abstract class KnowledgeDatabase : RoomDatabase() { + abstract fun knowledgeDao(): KnowledgeDao } diff --git a/implementationguide/src/main/java/com/google/android/fhir/implementationguide/db/impl/dao/ImplementationGuideDao.kt b/knowledge/src/main/java/com/google/android/fhir/knowledge/db/impl/dao/KnowledgeDao.kt similarity index 89% rename from implementationguide/src/main/java/com/google/android/fhir/implementationguide/db/impl/dao/ImplementationGuideDao.kt rename to knowledge/src/main/java/com/google/android/fhir/knowledge/db/impl/dao/KnowledgeDao.kt index 3f37458c6e..2f4edec5ec 100644 --- a/implementationguide/src/main/java/com/google/android/fhir/implementationguide/db/impl/dao/ImplementationGuideDao.kt +++ b/knowledge/src/main/java/com/google/android/fhir/knowledge/db/impl/dao/KnowledgeDao.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.android.fhir.implementationguide.db.impl.dao +package com.google.android.fhir.knowledge.db.impl.dao import androidx.room.Dao import androidx.room.Delete @@ -22,14 +22,14 @@ import androidx.room.Insert import androidx.room.OnConflictStrategy import androidx.room.Query import androidx.room.Transaction -import com.google.android.fhir.implementationguide.db.impl.entities.ImplementationGuideEntity -import com.google.android.fhir.implementationguide.db.impl.entities.ImplementationGuideResourceMetadataEntity -import com.google.android.fhir.implementationguide.db.impl.entities.ImplementationGuideWithResources -import com.google.android.fhir.implementationguide.db.impl.entities.ResourceMetadataEntity +import com.google.android.fhir.knowledge.db.impl.entities.ImplementationGuideEntity +import com.google.android.fhir.knowledge.db.impl.entities.ImplementationGuideResourceMetadataEntity +import com.google.android.fhir.knowledge.db.impl.entities.ImplementationGuideWithResources +import com.google.android.fhir.knowledge.db.impl.entities.ResourceMetadataEntity import org.hl7.fhir.r4.model.ResourceType @Dao -abstract class ImplementationGuideDao { +abstract class KnowledgeDao { @Transaction internal open suspend fun insertResource( diff --git a/implementationguide/src/main/java/com/google/android/fhir/implementationguide/db/impl/entities/ImplementationGuideEntity.kt b/knowledge/src/main/java/com/google/android/fhir/knowledge/db/impl/entities/ImplementationGuideEntity.kt similarity index 92% rename from implementationguide/src/main/java/com/google/android/fhir/implementationguide/db/impl/entities/ImplementationGuideEntity.kt rename to knowledge/src/main/java/com/google/android/fhir/knowledge/db/impl/entities/ImplementationGuideEntity.kt index 550a05722b..171c7aaf2b 100644 --- a/implementationguide/src/main/java/com/google/android/fhir/implementationguide/db/impl/entities/ImplementationGuideEntity.kt +++ b/knowledge/src/main/java/com/google/android/fhir/knowledge/db/impl/entities/ImplementationGuideEntity.kt @@ -14,12 +14,12 @@ * limitations under the License. */ -package com.google.android.fhir.implementationguide.db.impl.entities +package com.google.android.fhir.knowledge.db.impl.entities import androidx.room.Entity import androidx.room.Index import androidx.room.PrimaryKey -import com.google.android.fhir.implementationguide.ImplementationGuide +import com.google.android.fhir.knowledge.ImplementationGuide import java.io.File /** diff --git a/implementationguide/src/main/java/com/google/android/fhir/implementationguide/db/impl/entities/ImplementationGuideResourceMetadataEntity.kt b/knowledge/src/main/java/com/google/android/fhir/knowledge/db/impl/entities/ImplementationGuideResourceMetadataEntity.kt similarity index 96% rename from implementationguide/src/main/java/com/google/android/fhir/implementationguide/db/impl/entities/ImplementationGuideResourceMetadataEntity.kt rename to knowledge/src/main/java/com/google/android/fhir/knowledge/db/impl/entities/ImplementationGuideResourceMetadataEntity.kt index 72b3977cbd..0629f2dc36 100644 --- a/implementationguide/src/main/java/com/google/android/fhir/implementationguide/db/impl/entities/ImplementationGuideResourceMetadataEntity.kt +++ b/knowledge/src/main/java/com/google/android/fhir/knowledge/db/impl/entities/ImplementationGuideResourceMetadataEntity.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.android.fhir.implementationguide.db.impl.entities +package com.google.android.fhir.knowledge.db.impl.entities import androidx.room.Embedded import androidx.room.Entity diff --git a/implementationguide/src/main/java/com/google/android/fhir/implementationguide/db/impl/entities/ResourceMetadataEntity.kt b/knowledge/src/main/java/com/google/android/fhir/knowledge/db/impl/entities/ResourceMetadataEntity.kt similarity index 95% rename from implementationguide/src/main/java/com/google/android/fhir/implementationguide/db/impl/entities/ResourceMetadataEntity.kt rename to knowledge/src/main/java/com/google/android/fhir/knowledge/db/impl/entities/ResourceMetadataEntity.kt index d7f5e5c251..29887c396c 100644 --- a/implementationguide/src/main/java/com/google/android/fhir/implementationguide/db/impl/entities/ResourceMetadataEntity.kt +++ b/knowledge/src/main/java/com/google/android/fhir/knowledge/db/impl/entities/ResourceMetadataEntity.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.android.fhir.implementationguide.db.impl.entities +package com.google.android.fhir.knowledge.db.impl.entities import androidx.room.Entity import androidx.room.Index diff --git a/implementationguide/src/test/java/com/google/android/fhir/implementationguide/IgManagerTest.kt b/knowledge/src/test/java/com/google/android/fhir/knowledge/KnowledgeManagerTest.kt similarity index 62% rename from implementationguide/src/test/java/com/google/android/fhir/implementationguide/IgManagerTest.kt rename to knowledge/src/test/java/com/google/android/fhir/knowledge/KnowledgeManagerTest.kt index 269b9a70dd..7ab7e59735 100644 --- a/implementationguide/src/test/java/com/google/android/fhir/implementationguide/IgManagerTest.kt +++ b/knowledge/src/test/java/com/google/android/fhir/knowledge/KnowledgeManagerTest.kt @@ -14,12 +14,12 @@ * limitations under the License. */ -package com.google.android.fhir.implementationguide +package com.google.android.fhir.knowledge import android.content.Context import androidx.room.Room import androidx.test.core.app.ApplicationProvider -import com.google.android.fhir.implementationguide.db.impl.ImplementationGuideDatabase +import com.google.android.fhir.knowledge.db.impl.KnowledgeDatabase import com.google.common.truth.Truth.assertThat import java.io.File import kotlinx.coroutines.ExperimentalCoroutinesApi @@ -31,31 +31,28 @@ import org.robolectric.RobolectricTestRunner @OptIn(ExperimentalCoroutinesApi::class) @RunWith(RobolectricTestRunner::class) -internal class IgManagerTest { +internal class KnowledgeManagerTest { private val context: Context = ApplicationProvider.getApplicationContext() - private val igDb = - Room.inMemoryDatabaseBuilder(context, ImplementationGuideDatabase::class.java).build() - private val igManager = IgManager(igDb) + private val knowledgeDb = + Room.inMemoryDatabaseBuilder(context, KnowledgeDatabase::class.java).build() + private val knowledgeManager = KnowledgeManager(knowledgeDb) private val implementationGuide = ImplementationGuide("anc-cds", "0.3.0", "http://url.com") private val dataFolder = File(javaClass.getResource("/anc-cds")!!.file) @After fun closeDb() { - igDb.close() + knowledgeDb.close() } @Test fun `importing IG creates entries in DB`() = runTest { - igManager.install(implementationGuide, dataFolder) + knowledgeManager.install(implementationGuide, dataFolder) val implementationGuideId = - igDb - .implementationGuideDao() - .getImplementationGuide("anc-cds", "0.3.0")!! - .implementationGuideId + knowledgeDb.knowledgeDao().getImplementationGuide("anc-cds", "0.3.0")!!.implementationGuideId assertThat( - igDb - .implementationGuideDao() + knowledgeDb + .knowledgeDao() .getImplementationGuidesWithResources(implementationGuideId) ?.resources ) @@ -67,29 +64,31 @@ internal class IgManagerTest { val igRoot = File(dataFolder.parentFile, "anc-cds.copy") igRoot.deleteOnExit() dataFolder.copyRecursively(igRoot) - igManager.install(implementationGuide, igRoot) + knowledgeManager.install(implementationGuide, igRoot) - igManager.delete(implementationGuide) + knowledgeManager.delete(implementationGuide) - assertThat(igDb.implementationGuideDao().getImplementationGuides()).isEmpty() + assertThat(knowledgeDb.knowledgeDao().getImplementationGuides()).isEmpty() assertThat(igRoot.exists()).isFalse() } @Test fun `imported entries are readable`() = runTest { - igManager.install(implementationGuide, dataFolder) + knowledgeManager.install(implementationGuide, dataFolder) - assertThat(igManager.loadResources(resourceType = "Library", name = "WHOCommon")).isNotNull() - assertThat(igManager.loadResources(resourceType = "Library", url = "FHIRCommon")).isNotNull() - assertThat(igManager.loadResources(resourceType = "Measure")).hasSize(1) + assertThat(knowledgeManager.loadResources(resourceType = "Library", name = "WHOCommon")) + .isNotNull() + assertThat(knowledgeManager.loadResources(resourceType = "Library", url = "FHIRCommon")) + .isNotNull() + assertThat(knowledgeManager.loadResources(resourceType = "Measure")).hasSize(1) assertThat( - igManager.loadResources( + knowledgeManager.loadResources( resourceType = "Measure", url = "http://fhir.org/guides/who/anc-cds/Measure/ANCIND01" ) ) .isNotEmpty() - assertThat(igManager.loadResources(resourceType = "Measure", url = "Measure/ANCIND01")) + assertThat(knowledgeManager.loadResources(resourceType = "Measure", url = "Measure/ANCIND01")) .isNotNull() } } diff --git a/implementationguide/testdata/anc-cds/Library-ANCIND01.json b/knowledge/testdata/anc-cds/Library-ANCIND01.json similarity index 100% rename from implementationguide/testdata/anc-cds/Library-ANCIND01.json rename to knowledge/testdata/anc-cds/Library-ANCIND01.json diff --git a/implementationguide/testdata/anc-cds/Library-ANCStratifiers.json b/knowledge/testdata/anc-cds/Library-ANCStratifiers.json similarity index 100% rename from implementationguide/testdata/anc-cds/Library-ANCStratifiers.json rename to knowledge/testdata/anc-cds/Library-ANCStratifiers.json diff --git a/implementationguide/testdata/anc-cds/Library-FHIRCommon.json b/knowledge/testdata/anc-cds/Library-FHIRCommon.json similarity index 100% rename from implementationguide/testdata/anc-cds/Library-FHIRCommon.json rename to knowledge/testdata/anc-cds/Library-FHIRCommon.json diff --git a/implementationguide/testdata/anc-cds/Library-FHIRHelpers.json b/knowledge/testdata/anc-cds/Library-FHIRHelpers.json similarity index 100% rename from implementationguide/testdata/anc-cds/Library-FHIRHelpers.json rename to knowledge/testdata/anc-cds/Library-FHIRHelpers.json diff --git a/implementationguide/testdata/anc-cds/Library-WHOCommon.json b/knowledge/testdata/anc-cds/Library-WHOCommon.json similarity index 100% rename from implementationguide/testdata/anc-cds/Library-WHOCommon.json rename to knowledge/testdata/anc-cds/Library-WHOCommon.json diff --git a/implementationguide/testdata/anc-cds/Measure-ANCIND01.json b/knowledge/testdata/anc-cds/Measure-ANCIND01.json similarity index 100% rename from implementationguide/testdata/anc-cds/Measure-ANCIND01.json rename to knowledge/testdata/anc-cds/Measure-ANCIND01.json diff --git a/settings.gradle.kts b/settings.gradle.kts index 3c839061ca..e41eb82ff2 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -41,7 +41,7 @@ include(":demo") include(":engine") -include(":implementationguide") +include(":knowledge") include(":workflow") diff --git a/workflow/build.gradle.kts b/workflow/build.gradle.kts index d2b888e871..cb41e56a23 100644 --- a/workflow/build.gradle.kts +++ b/workflow/build.gradle.kts @@ -138,7 +138,7 @@ dependencies { implementation(Dependencies.Kotlin.stdlib) implementation(Dependencies.xerces) implementation(project(":engine")) - implementation(project(":implementationguide")) + implementation(project(":knowledge")) testImplementation(Dependencies.AndroidxTest.core) testImplementation(Dependencies.jsonAssert) diff --git a/workflow/src/androidTest/java/com/google/android/fhir/workflow/FhirOperatorLibraryEvaluateTest.kt b/workflow/src/androidTest/java/com/google/android/fhir/workflow/FhirOperatorLibraryEvaluateTest.kt index 99964df4c8..615cb94fd0 100644 --- a/workflow/src/androidTest/java/com/google/android/fhir/workflow/FhirOperatorLibraryEvaluateTest.kt +++ b/workflow/src/androidTest/java/com/google/android/fhir/workflow/FhirOperatorLibraryEvaluateTest.kt @@ -23,7 +23,7 @@ import ca.uhn.fhir.context.FhirContext import ca.uhn.fhir.context.FhirVersionEnum import com.google.android.fhir.FhirEngine import com.google.android.fhir.FhirEngineProvider -import com.google.android.fhir.implementationguide.IgManager +import com.google.android.fhir.knowledge.KnowledgeManager import com.google.android.fhir.testing.FhirEngineProviderTestRule import com.google.common.truth.Truth.assertThat import java.io.File @@ -48,7 +48,7 @@ class FhirOperatorLibraryEvaluateTest { private val context: Context = ApplicationProvider.getApplicationContext() private val fhirContext = FhirContext.forCached(FhirVersionEnum.R4) - private val igManager = IgManager.createInMemory(context) + private val knowledgeManager = KnowledgeManager.createInMemory(context) private val jsonParser = fhirContext.newJsonParser() private fun open(asset: String): InputStream? { @@ -73,7 +73,7 @@ class FhirOperatorLibraryEvaluateTest { FhirOperatorBuilder(context) .withFhirContext(fhirContext) .withFhirEngine(fhirEngine) - .withIgManager(igManager) + .withIgManager(knowledgeManager) .build() } @@ -120,7 +120,7 @@ class FhirOperatorLibraryEvaluateTest { } // Load Library that checks if Patient has taken a vaccine - igManager.install(copy("/immunity-check/ImmunityCheck.json")) + knowledgeManager.install(copy("/immunity-check/ImmunityCheck.json")) // Evaluates a specific Patient val results = diff --git a/workflow/src/main/java/com/google/android/fhir/workflow/FhirEngineDal.kt b/workflow/src/main/java/com/google/android/fhir/workflow/FhirEngineDal.kt index daf6638ba0..8610be6a96 100644 --- a/workflow/src/main/java/com/google/android/fhir/workflow/FhirEngineDal.kt +++ b/workflow/src/main/java/com/google/android/fhir/workflow/FhirEngineDal.kt @@ -20,7 +20,7 @@ import ca.uhn.fhir.rest.gclient.UriClientParam import com.google.android.fhir.FhirEngine import com.google.android.fhir.db.ResourceNotFoundException import com.google.android.fhir.getResourceType -import com.google.android.fhir.implementationguide.IgManager +import com.google.android.fhir.knowledge.KnowledgeManager import com.google.android.fhir.search.Search import org.hl7.fhir.instance.model.api.IBaseResource import org.hl7.fhir.instance.model.api.IIdType @@ -31,13 +31,13 @@ import timber.log.Timber internal class FhirEngineDal( private val fhirEngine: FhirEngine, - private val igManager: IgManager, + private val knowledgeManager: KnowledgeManager, ) : FhirDal { override fun read(id: IIdType): IBaseResource = runBlockingOrThrowMainThreadException { val clazz = id.getResourceClass() if (id.isAbsolute) { - igManager + knowledgeManager .loadResources( resourceType = id.resourceType, url = "${id.baseUrl}/${id.resourceType}/${id.idPart}" @@ -51,7 +51,7 @@ internal class FhirEngineDal( // https://github.com/google/android-fhir/issues/1920 // remove when the issue is resolved. val searchByNameWorkaround = - igManager.loadResources(resourceType = id.resourceType, id = id.toString()) + knowledgeManager.loadResources(resourceType = id.resourceType, id = id.toString()) if (searchByNameWorkaround.count() > 1) { Timber.w("Found more than one value in the IgManager for the id $id") } @@ -76,7 +76,7 @@ internal class FhirEngineDal( override fun search(resourceType: String): Iterable = runBlockingOrThrowMainThreadException { val search = Search(type = ResourceType.fromCode(resourceType)) - igManager.loadResources(resourceType = resourceType) + fhirEngine.search(search) + knowledgeManager.loadResources(resourceType = resourceType) + fhirEngine.search(search) } override fun searchByUrl(resourceType: String, url: String): Iterable = @@ -84,7 +84,7 @@ internal class FhirEngineDal( val search = Search(type = ResourceType.fromCode(resourceType)) search.filter(UriClientParam("url"), { value = url }) // Searching for knowledge artifact, no need to lookup for fhirEngine - igManager.loadResources(resourceType = resourceType, url = url) + knowledgeManager.loadResources(resourceType = resourceType, url = url) } @Suppress("UNCHECKED_CAST") diff --git a/workflow/src/main/java/com/google/android/fhir/workflow/FhirEngineLibraryContentProvider.kt b/workflow/src/main/java/com/google/android/fhir/workflow/FhirEngineLibraryContentProvider.kt index fc2b7da05e..9d34d26d61 100644 --- a/workflow/src/main/java/com/google/android/fhir/workflow/FhirEngineLibraryContentProvider.kt +++ b/workflow/src/main/java/com/google/android/fhir/workflow/FhirEngineLibraryContentProvider.kt @@ -16,7 +16,7 @@ package com.google.android.fhir.workflow -import com.google.android.fhir.implementationguide.IgManager +import com.google.android.fhir.knowledge.KnowledgeManager import org.hl7.elm.r1.VersionedIdentifier import org.hl7.fhir.instance.model.api.IBaseResource import org.opencds.cqf.cql.evaluator.cql2elm.content.fhir.BaseFhirLibrarySourceProvider @@ -24,12 +24,12 @@ import org.opencds.cqf.cql.evaluator.fhir.adapter.r4.AdapterFactory internal class FhirEngineLibraryContentProvider( adapterFactory: AdapterFactory, - private val igManager: IgManager, + private val knowledgeManager: KnowledgeManager, ) : BaseFhirLibrarySourceProvider(adapterFactory) { override fun getLibrary(libraryIdentifier: VersionedIdentifier): IBaseResource? { return runBlockingOrThrowMainThreadException { - igManager + knowledgeManager .loadResources( resourceType = "Library", name = libraryIdentifier.id, diff --git a/workflow/src/main/java/com/google/android/fhir/workflow/FhirEngineTerminologyProvider.kt b/workflow/src/main/java/com/google/android/fhir/workflow/FhirEngineTerminologyProvider.kt index 043ef5b9ed..2093a7a415 100644 --- a/workflow/src/main/java/com/google/android/fhir/workflow/FhirEngineTerminologyProvider.kt +++ b/workflow/src/main/java/com/google/android/fhir/workflow/FhirEngineTerminologyProvider.kt @@ -19,7 +19,7 @@ package com.google.android.fhir.workflow import ca.uhn.fhir.context.FhirContext import com.google.android.fhir.FhirEngine import com.google.android.fhir.db.ResourceNotFoundException -import com.google.android.fhir.implementationguide.IgManager +import com.google.android.fhir.knowledge.KnowledgeManager import com.google.android.fhir.search.search import org.hl7.fhir.r4.model.CodeSystem import org.hl7.fhir.r4.model.Resource @@ -35,7 +35,7 @@ import org.opencds.cqf.cql.evaluator.engine.util.ValueSetUtil internal class FhirEngineTerminologyProvider( private val fhirContext: FhirContext, private val fhirEngine: FhirEngine, - private val igManager: IgManager, + private val knowledgeManager: KnowledgeManager, ) : TerminologyProvider { companion object { @@ -99,9 +99,9 @@ internal class FhirEngineTerminologyProvider( private suspend fun searchByUrl(url: String?): List { if (url == null) return emptyList() - return igManager.loadResources(resourceType = ResourceType.ValueSet.name, url = url).map { - it as ValueSet - } + fhirEngine.search { filter(ValueSet.URL, { value = url }) } + return knowledgeManager + .loadResources(resourceType = ResourceType.ValueSet.name, url = url) + .map { it as ValueSet } + fhirEngine.search { filter(ValueSet.URL, { value = url }) } } private suspend fun searchByIdentifier(identifier: String?): List { diff --git a/workflow/src/main/java/com/google/android/fhir/workflow/FhirOperator.kt b/workflow/src/main/java/com/google/android/fhir/workflow/FhirOperator.kt index 28e7354991..b1cea04224 100644 --- a/workflow/src/main/java/com/google/android/fhir/workflow/FhirOperator.kt +++ b/workflow/src/main/java/com/google/android/fhir/workflow/FhirOperator.kt @@ -20,7 +20,7 @@ import androidx.annotation.WorkerThread import ca.uhn.fhir.context.FhirContext import ca.uhn.fhir.context.FhirVersionEnum import com.google.android.fhir.FhirEngine -import com.google.android.fhir.implementationguide.IgManager +import com.google.android.fhir.knowledge.KnowledgeManager import java.util.function.Supplier import org.hl7.fhir.instance.model.api.IBaseParameters import org.hl7.fhir.instance.model.api.IBaseResource @@ -61,12 +61,17 @@ import org.opencds.cqf.cql.evaluator.plandefinition.r4.PlanDefinitionProcessor object CachedR4FhirModelResolver : R4FhirModelResolver(FhirContext.forR4Cached()) class FhirOperator -internal constructor(fhirContext: FhirContext, fhirEngine: FhirEngine, igManager: IgManager) { +internal constructor( + fhirContext: FhirContext, + fhirEngine: FhirEngine, + knowledgeManager: KnowledgeManager +) { // Initialize the measure processor private val fhirEngineTerminologyProvider = - FhirEngineTerminologyProvider(fhirContext, fhirEngine, igManager) + FhirEngineTerminologyProvider(fhirContext, fhirEngine, knowledgeManager) private val adapterFactory = AdapterFactory() - private val libraryContentProvider = FhirEngineLibraryContentProvider(adapterFactory, igManager) + private val libraryContentProvider = + FhirEngineLibraryContentProvider(adapterFactory, knowledgeManager) private val fhirTypeConverter = FhirTypeConverterFactory().create(FhirVersionEnum.R4) private val fhirEngineRetrieveProvider = FhirEngineRetrieveProvider(fhirEngine).apply { @@ -79,7 +84,7 @@ internal constructor(fhirContext: FhirContext, fhirEngine: FhirEngine, igManager CachingModelResolverDecorator(CachedR4FhirModelResolver), fhirEngineRetrieveProvider ) - private val fhirEngineDal = FhirEngineDal(fhirEngine, igManager) + private val fhirEngineDal = FhirEngineDal(fhirEngine, knowledgeManager) private val measureProcessor = R4MeasureProcessor( diff --git a/workflow/src/main/java/com/google/android/fhir/workflow/FhirOperatorBuilder.kt b/workflow/src/main/java/com/google/android/fhir/workflow/FhirOperatorBuilder.kt index c8d2b9ff4b..4ce58534fd 100644 --- a/workflow/src/main/java/com/google/android/fhir/workflow/FhirOperatorBuilder.kt +++ b/workflow/src/main/java/com/google/android/fhir/workflow/FhirOperatorBuilder.kt @@ -21,22 +21,22 @@ import ca.uhn.fhir.context.FhirContext import ca.uhn.fhir.context.FhirVersionEnum import com.google.android.fhir.FhirEngine import com.google.android.fhir.FhirEngineProvider -import com.google.android.fhir.implementationguide.IgManager -import com.google.android.fhir.implementationguide.ImplementationGuide +import com.google.android.fhir.knowledge.ImplementationGuide +import com.google.android.fhir.knowledge.KnowledgeManager class FhirOperatorBuilder(private val applicationContext: Context) { private var fhirContext: FhirContext? = null private var fhirEngine: FhirEngine? = null private var implementationGuides: List = emptyList() - private var igManager: IgManager? = null + private var knowledgeManager: KnowledgeManager? = null fun withFhirEngine(fhirEngine: FhirEngine): FhirOperatorBuilder { this.fhirEngine = fhirEngine return this } - fun withIgManager(igManager: IgManager): FhirOperatorBuilder { - this.igManager = igManager + fun withIgManager(knowledgeManager: KnowledgeManager): FhirOperatorBuilder { + this.knowledgeManager = knowledgeManager return this } @@ -56,7 +56,7 @@ class FhirOperatorBuilder(private val applicationContext: Context) { return FhirOperator( fhirContext ?: FhirContext(FhirVersionEnum.R4), fhirEngine ?: FhirEngineProvider.getInstance(applicationContext), - igManager ?: IgManager.create(applicationContext) + knowledgeManager ?: KnowledgeManager.create(applicationContext) ) } } diff --git a/workflow/src/test/java/com/google/android/fhir/workflow/FhirEngineDalTest.kt b/workflow/src/test/java/com/google/android/fhir/workflow/FhirEngineDalTest.kt index 73d9a0defc..2d82721986 100644 --- a/workflow/src/test/java/com/google/android/fhir/workflow/FhirEngineDalTest.kt +++ b/workflow/src/test/java/com/google/android/fhir/workflow/FhirEngineDalTest.kt @@ -20,7 +20,7 @@ import android.content.Context import androidx.test.core.app.ApplicationProvider import com.google.android.fhir.FhirEngine import com.google.android.fhir.FhirEngineProvider -import com.google.android.fhir.implementationguide.IgManager +import com.google.android.fhir.knowledge.KnowledgeManager import com.google.android.fhir.search.search import com.google.android.fhir.testing.FhirEngineProviderTestRule import com.google.common.truth.Truth.assertThat @@ -48,7 +48,7 @@ class FhirEngineDalTest { fun setupTest() { val context: Context = ApplicationProvider.getApplicationContext() fhirEngine = FhirEngineProvider.getInstance(context) - fhirEngineDal = FhirEngineDal(fhirEngine, IgManager.createInMemory(context)) + fhirEngineDal = FhirEngineDal(fhirEngine, KnowledgeManager.createInMemory(context)) runBlocking { fhirEngine.create(testPatient) } } diff --git a/workflow/src/test/java/com/google/android/fhir/workflow/FhirEngineRetrieveProviderTest.kt b/workflow/src/test/java/com/google/android/fhir/workflow/FhirEngineRetrieveProviderTest.kt index 9a35ab3ba3..46efcce77b 100644 --- a/workflow/src/test/java/com/google/android/fhir/workflow/FhirEngineRetrieveProviderTest.kt +++ b/workflow/src/test/java/com/google/android/fhir/workflow/FhirEngineRetrieveProviderTest.kt @@ -21,7 +21,7 @@ import androidx.test.core.app.ApplicationProvider import ca.uhn.fhir.context.FhirContext import com.google.android.fhir.FhirEngine import com.google.android.fhir.FhirEngineProvider -import com.google.android.fhir.implementationguide.IgManager +import com.google.android.fhir.knowledge.KnowledgeManager import com.google.android.fhir.testing.FhirEngineProviderTestRule import com.google.android.fhir.workflow.testing.Loadable import com.google.common.truth.Truth.assertThat @@ -62,7 +62,7 @@ class FhirEngineRetrieveProviderTest : Loadable() { FhirEngineTerminologyProvider( FhirContext.forR4Cached(), fhirEngine, - IgManager.createInMemory(context) + KnowledgeManager.createInMemory(context) ) isExpandValueSets = true } diff --git a/workflow/src/test/java/com/google/android/fhir/workflow/FhirEngineTerminologyProviderTest.kt b/workflow/src/test/java/com/google/android/fhir/workflow/FhirEngineTerminologyProviderTest.kt index c36c2a8b35..656f5512d5 100644 --- a/workflow/src/test/java/com/google/android/fhir/workflow/FhirEngineTerminologyProviderTest.kt +++ b/workflow/src/test/java/com/google/android/fhir/workflow/FhirEngineTerminologyProviderTest.kt @@ -21,7 +21,7 @@ import androidx.test.core.app.ApplicationProvider import ca.uhn.fhir.context.FhirContext import com.google.android.fhir.FhirEngine import com.google.android.fhir.FhirEngineProvider -import com.google.android.fhir.implementationguide.IgManager +import com.google.android.fhir.knowledge.KnowledgeManager import com.google.android.fhir.testing.FhirEngineProviderTestRule import com.google.android.fhir.workflow.testing.Loadable import com.google.common.truth.Truth.assertThat @@ -59,7 +59,7 @@ class FhirEngineTerminologyProviderTest : Loadable() { FhirEngineTerminologyProvider( FhirContext.forR4Cached(), fhirEngine, - IgManager.createInMemory(context) + KnowledgeManager.createInMemory(context) ) } diff --git a/workflow/src/test/java/com/google/android/fhir/workflow/FhirOperatorLibraryEvaluateJavaTest.kt b/workflow/src/test/java/com/google/android/fhir/workflow/FhirOperatorLibraryEvaluateJavaTest.kt index 27d2a79def..6190853895 100644 --- a/workflow/src/test/java/com/google/android/fhir/workflow/FhirOperatorLibraryEvaluateJavaTest.kt +++ b/workflow/src/test/java/com/google/android/fhir/workflow/FhirOperatorLibraryEvaluateJavaTest.kt @@ -22,7 +22,7 @@ import ca.uhn.fhir.context.FhirContext import ca.uhn.fhir.context.FhirVersionEnum import com.google.android.fhir.FhirEngine import com.google.android.fhir.FhirEngineProvider -import com.google.android.fhir.implementationguide.IgManager +import com.google.android.fhir.knowledge.KnowledgeManager import com.google.android.fhir.testing.FhirEngineProviderTestRule import com.google.android.fhir.workflow.testing.CqlBuilder import com.google.common.truth.Truth.assertThat @@ -51,7 +51,7 @@ class FhirOperatorLibraryEvaluateJavaTest { private lateinit var fhirOperator: FhirOperator private val context: Context = ApplicationProvider.getApplicationContext() - private val igManager = IgManager.createInMemory(context) + private val knowledgeManager = KnowledgeManager.createInMemory(context) private val fhirContext = FhirContext.forCached(FhirVersionEnum.R4) private val jsonParser = fhirContext.newJsonParser() @@ -64,7 +64,7 @@ class FhirOperatorLibraryEvaluateJavaTest { @Before fun setUp() = runBlocking { fhirEngine = FhirEngineProvider.getInstance(context) - fhirOperator = FhirOperator(fhirContext, fhirEngine, igManager) + fhirOperator = FhirOperator(fhirContext, fhirEngine, knowledgeManager) } /** @@ -110,8 +110,8 @@ class FhirOperatorLibraryEvaluateJavaTest { } // Load Library that checks if Patient has taken a vaccine - igManager.install(writeToFile(load("/immunity-check/ImmunityCheck.json") as Library)) - igManager.install(writeToFile(load("/immunity-check/FhirHelpers.json") as Library)) + knowledgeManager.install(writeToFile(load("/immunity-check/ImmunityCheck.json") as Library)) + knowledgeManager.install(writeToFile(load("/immunity-check/FhirHelpers.json") as Library)) // Evaluates a specific Patient val results = @@ -136,7 +136,7 @@ class FhirOperatorLibraryEvaluateJavaTest { val library = CqlBuilder.assembleFhirLib(cql, null, null, "TestGetName", "1.0.0") - igManager.install(writeToFile(library)) + knowledgeManager.install(writeToFile(library)) // Evaluates expression without any extra data val results = fhirOperator.evaluateLibrary(library.url, setOf("GetName")) as Parameters @@ -158,7 +158,7 @@ class FhirOperatorLibraryEvaluateJavaTest { val library = CqlBuilder.assembleFhirLib(cql, null, null, "TestSumWithParams", "1.0.0") - igManager.install(writeToFile(library)) + knowledgeManager.install(writeToFile(library)) val params = Parameters().apply { diff --git a/workflow/src/test/java/com/google/android/fhir/workflow/FhirOperatorTest.kt b/workflow/src/test/java/com/google/android/fhir/workflow/FhirOperatorTest.kt index 99d17401a5..1494b70e13 100644 --- a/workflow/src/test/java/com/google/android/fhir/workflow/FhirOperatorTest.kt +++ b/workflow/src/test/java/com/google/android/fhir/workflow/FhirOperatorTest.kt @@ -21,8 +21,8 @@ import androidx.test.core.app.ApplicationProvider import ca.uhn.fhir.context.FhirContext import com.google.android.fhir.FhirEngine import com.google.android.fhir.FhirEngineProvider -import com.google.android.fhir.implementationguide.IgManager -import com.google.android.fhir.implementationguide.ImplementationGuide +import com.google.android.fhir.knowledge.ImplementationGuide +import com.google.android.fhir.knowledge.KnowledgeManager import com.google.android.fhir.testing.FhirEngineProviderTestRule import com.google.android.fhir.workflow.testing.CqlBuilder import com.google.common.truth.Truth.assertThat @@ -50,7 +50,7 @@ class FhirOperatorTest { @get:Rule val fhirEngineProviderRule = FhirEngineProviderTestRule() private val context: Context = ApplicationProvider.getApplicationContext() - private val igManager = IgManager.createInMemory(context) + private val knowledgeManager = KnowledgeManager.createInMemory(context) private val fhirContext = FhirContext.forR4() private val jsonParser = fhirContext.newJsonParser() private val xmlParser = fhirContext.newXmlParser() @@ -62,11 +62,11 @@ class FhirOperatorTest { fun setUp() = runBlockingOnWorkerThread { TimeZone.setDefault(TimeZone.getTimeZone("GMT")) fhirEngine = FhirEngineProvider.getInstance(context) - fhirOperator = FhirOperator(fhirContext, fhirEngine, igManager) + fhirOperator = FhirOperator(fhirContext, fhirEngine, knowledgeManager) // Installing ANC CDS to the IGManager val rootDirectory = File(javaClass.getResource("/anc-cds")!!.file) - igManager.install( + knowledgeManager.install( ImplementationGuide( "com.google.android.fhir", "1.0.0", @@ -78,7 +78,7 @@ class FhirOperatorTest { @After fun tearDown() { - igManager.close() + knowledgeManager.close() } @Test @@ -286,6 +286,6 @@ class FhirOperatorTest { } private suspend fun installToIgManager(resource: Resource) { - igManager.install(writeToFile(resource)) + knowledgeManager.install(writeToFile(resource)) } }