Skip to content

Commit

Permalink
Definition based extration for custom extensions (google#1511)
Browse files Browse the repository at this point in the history
* Definition based extration for custom extensions

* test case added and spotless check applied

* Added support for Defination based extration for Complex datatype with custom extension

* updated Element to Type

* spotless check applied

* review comments addressed

* indented json strings in other test cases

* review comments addressed
  • Loading branch information
PallaviGanorkar authored Sep 13, 2022
1 parent 626dd68 commit 1443db1
Show file tree
Hide file tree
Showing 2 changed files with 628 additions and 346 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ import org.hl7.fhir.r4.model.CodeType
import org.hl7.fhir.r4.model.CodeableConcept
import org.hl7.fhir.r4.model.Coding
import org.hl7.fhir.r4.model.DecimalType
import org.hl7.fhir.r4.model.DomainResource
import org.hl7.fhir.r4.model.Enumeration
import org.hl7.fhir.r4.model.Expression
import org.hl7.fhir.r4.model.Extension
Expand Down Expand Up @@ -445,9 +446,47 @@ object ResourceMapper {
.javaClass
.getMethod("setValue", Type::class.java)
.invoke(base, questionnaireResponseItem.answer.singleOrNull()?.value)
return
} catch (e: NoSuchMethodException) {
// Do nothing
}

if (base.javaClass.getFieldOrNull(fieldName) == null) {
// If field not found in resource class, assume this is an extension
addDefinitionBasedCustomExtension(questionnaireItem, questionnaireResponseItem, base)
}
}
}

/**
* Adds custom extension for Resource.
* @param questionnaireItem QuestionnaireItemComponent with details for extension
* @param questionnaireResponseItem QuestionnaireResponseItemComponent for response value
* @param base
* - resource's Base class instance See
* https://hapifhir.io/hapi-fhir/docs/model/profiles_and_extensions.html#extensions for more on
* custom extensions
*/
private fun addDefinitionBasedCustomExtension(
questionnaireItem: Questionnaire.QuestionnaireItemComponent,
questionnaireResponseItem: QuestionnaireResponse.QuestionnaireResponseItemComponent,
base: Base
) {
if (base is Type) {
// Create an extension
val ext = Extension()
ext.url = questionnaireItem.definition
ext.setValue(questionnaireResponseItem.answer.first().value)
// Add the extension to the resource
base.addExtension(ext)
}
if (base is DomainResource) {
// Create an extension
val ext = Extension()
ext.url = questionnaireItem.definition
ext.setValue(questionnaireResponseItem.answer.first().value)
// Add the extension to the resource
base.addExtension(ext)
}
}

Expand Down
Loading

0 comments on commit 1443db1

Please sign in to comment.