Remove use of version specific model

This commit is contained in:
Brenin Rhodes
2025-04-04 11:22:02 -06:00
parent c9452bcfd6
commit 5ba6ab133e

View File

@@ -1,28 +1,44 @@
package ca.uhn.fhir.jpa.starter.cdshooks; 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.RequestDetails;
import ca.uhn.fhir.rest.api.server.cdshooks.CdsServiceRequestJson; import ca.uhn.fhir.rest.api.server.cdshooks.CdsServiceRequestJson;
import ca.uhn.hapi.fhir.cdshooks.api.ICdsConfigService; import ca.uhn.hapi.fhir.cdshooks.api.ICdsConfigService;
import org.hl7.fhir.r4.model.BooleanType; import org.hl7.fhir.instance.model.api.IBaseParameters;
import org.hl7.fhir.r4.model.Parameters; import org.hl7.fhir.instance.model.api.IPrimitiveType;
import org.opencds.cqf.fhir.api.Repository; import org.opencds.cqf.fhir.api.Repository;
import org.opencds.cqf.fhir.cr.hapi.cdshooks.CdsCrService; 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.Constants.APPLY_PARAMETER_DATA;
import static org.opencds.cqf.fhir.utility.r4.Parameters.part;
public class UpdatedCdsCrService extends CdsCrService { public class UpdatedCdsCrService extends CdsCrService {
private final IAdapterFactory adapterFactory;
public UpdatedCdsCrService( public UpdatedCdsCrService(
RequestDetails theRequestDetails, Repository theRepository, ICdsConfigService theCdsConfigService) { RequestDetails theRequestDetails, Repository theRepository, ICdsConfigService theCdsConfigService) {
super(theRequestDetails, theRepository, theCdsConfigService); super(theRequestDetails, theRepository, theCdsConfigService);
adapterFactory = IAdapterFactory.forFhirContext(theRepository.fhirContext());
} }
@Override @Override
public Parameters encodeParams(CdsServiceRequestJson theJson) { public IBaseParameters encodeParams(CdsServiceRequestJson theJson) {
var parameters = (Parameters) super.encodeParams(theJson); var parameters = adapterFactory.createParameters(super.encodeParams(theJson));
if (parameters.hasParameter(APPLY_PARAMETER_DATA)) { 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<Boolean> 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");
};
} }
} }