diff --git a/src/main/java/ca/uhn/fhir/jpa/starter/cdshooks/UpdatedCdsCrService.java b/src/main/java/ca/uhn/fhir/jpa/starter/cdshooks/UpdatedCdsCrService.java index e81fcfb..414993c 100644 --- a/src/main/java/ca/uhn/fhir/jpa/starter/cdshooks/UpdatedCdsCrService.java +++ b/src/main/java/ca/uhn/fhir/jpa/starter/cdshooks/UpdatedCdsCrService.java @@ -1,28 +1,44 @@ package ca.uhn.fhir.jpa.starter.cdshooks; +import ca.uhn.fhir.context.FhirVersionEnum; import ca.uhn.fhir.rest.api.server.RequestDetails; import ca.uhn.fhir.rest.api.server.cdshooks.CdsServiceRequestJson; import ca.uhn.hapi.fhir.cdshooks.api.ICdsConfigService; -import org.hl7.fhir.r4.model.BooleanType; -import org.hl7.fhir.r4.model.Parameters; +import org.hl7.fhir.instance.model.api.IBaseParameters; +import org.hl7.fhir.instance.model.api.IPrimitiveType; import org.opencds.cqf.fhir.api.Repository; import org.opencds.cqf.fhir.cr.hapi.cdshooks.CdsCrService; +import org.opencds.cqf.fhir.utility.adapter.IAdapterFactory; import static org.opencds.cqf.fhir.utility.Constants.APPLY_PARAMETER_DATA; -import static org.opencds.cqf.fhir.utility.r4.Parameters.part; public class UpdatedCdsCrService extends CdsCrService { + private final IAdapterFactory adapterFactory; + public UpdatedCdsCrService( RequestDetails theRequestDetails, Repository theRepository, ICdsConfigService theCdsConfigService) { super(theRequestDetails, theRepository, theCdsConfigService); + adapterFactory = IAdapterFactory.forFhirContext(theRepository.fhirContext()); } @Override - public Parameters encodeParams(CdsServiceRequestJson theJson) { - var parameters = (Parameters) super.encodeParams(theJson); + public IBaseParameters encodeParams(CdsServiceRequestJson theJson) { + var parameters = adapterFactory.createParameters(super.encodeParams(theJson)); if (parameters.hasParameter(APPLY_PARAMETER_DATA)) { - parameters.addParameter(part("useServerData", new BooleanType(false))); + parameters.addParameter( + "useServerData", + booleanTypeForVersion(parameters.fhirContext().getVersion().getVersion(), false)); } - return parameters; + return (IBaseParameters) parameters.get(); + } + + private IPrimitiveType booleanTypeForVersion(FhirVersionEnum fhirVersion, boolean value) { + return switch (fhirVersion) { + case DSTU2 -> new org.hl7.fhir.dstu2.model.BooleanType(value); + case DSTU3 -> new org.hl7.fhir.dstu3.model.BooleanType(value); + case R4 -> new org.hl7.fhir.r4.model.BooleanType(value); + case R5 -> new org.hl7.fhir.r5.model.BooleanType(value); + default -> throw new IllegalArgumentException("unknown or unsupported FHIR version"); + }; } }