Remove use of version specific model
This commit is contained in:
@@ -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");
|
||||||
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user