add cr operation loader
This commit is contained in:
@@ -9,7 +9,6 @@ import ca.uhn.fhir.context.ConfigurationException;
|
|||||||
import ca.uhn.fhir.context.FhirContext;
|
import ca.uhn.fhir.context.FhirContext;
|
||||||
import ca.uhn.fhir.context.FhirVersionEnum;
|
import ca.uhn.fhir.context.FhirVersionEnum;
|
||||||
import ca.uhn.fhir.context.support.IValidationSupport;
|
import ca.uhn.fhir.context.support.IValidationSupport;
|
||||||
import ca.uhn.fhir.cr.config.CrProviderLoader;
|
|
||||||
import ca.uhn.fhir.interceptor.api.IInterceptorBroadcaster;
|
import ca.uhn.fhir.interceptor.api.IInterceptorBroadcaster;
|
||||||
import ca.uhn.fhir.jpa.api.IDaoRegistry;
|
import ca.uhn.fhir.jpa.api.IDaoRegistry;
|
||||||
import ca.uhn.fhir.jpa.api.config.JpaStorageSettings;
|
import ca.uhn.fhir.jpa.api.config.JpaStorageSettings;
|
||||||
@@ -43,6 +42,7 @@ import ca.uhn.fhir.jpa.starter.AppProperties;
|
|||||||
import ca.uhn.fhir.jpa.starter.annotations.OnCorsPresent;
|
import ca.uhn.fhir.jpa.starter.annotations.OnCorsPresent;
|
||||||
import ca.uhn.fhir.jpa.starter.annotations.OnImplementationGuidesPresent;
|
import ca.uhn.fhir.jpa.starter.annotations.OnImplementationGuidesPresent;
|
||||||
import ca.uhn.fhir.jpa.starter.common.validation.IRepositoryValidationInterceptorFactory;
|
import ca.uhn.fhir.jpa.starter.common.validation.IRepositoryValidationInterceptorFactory;
|
||||||
|
import ca.uhn.fhir.jpa.starter.cr.CrProviderLoader;
|
||||||
import ca.uhn.fhir.jpa.starter.util.EnvironmentHelper;
|
import ca.uhn.fhir.jpa.starter.util.EnvironmentHelper;
|
||||||
import ca.uhn.fhir.jpa.subscription.util.SubscriptionDebugLogInterceptor;
|
import ca.uhn.fhir.jpa.subscription.util.SubscriptionDebugLogInterceptor;
|
||||||
import ca.uhn.fhir.jpa.util.ResourceCountCache;
|
import ca.uhn.fhir.jpa.util.ResourceCountCache;
|
||||||
|
|||||||
@@ -0,0 +1,93 @@
|
|||||||
|
package ca.uhn.fhir.jpa.starter.cr;
|
||||||
|
|
||||||
|
import ca.uhn.fhir.context.ConfigurationException;
|
||||||
|
import ca.uhn.fhir.context.FhirContext;
|
||||||
|
import ca.uhn.fhir.cr.dstu3.measure.MeasureOperationsProvider;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.context.ApplicationContext;
|
||||||
|
import org.springframework.context.annotation.Primary;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class represents clinical reasoning provider factory used for loading cql and measure operation dependencies of various fhir models
|
||||||
|
**/
|
||||||
|
@Primary
|
||||||
|
@Service
|
||||||
|
public class CrProviderFactory {
|
||||||
|
@Autowired
|
||||||
|
private FhirContext myFhirContext;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ApplicationContext myApplicationContext;
|
||||||
|
|
||||||
|
public Object getMeasureOperationsProvider() {
|
||||||
|
switch (myFhirContext.getVersion().getVersion()) {
|
||||||
|
case DSTU3:
|
||||||
|
return myApplicationContext.getBean(MeasureOperationsProvider.class);
|
||||||
|
case R4:
|
||||||
|
return myApplicationContext.getBean(ca.uhn.fhir.cr.r4.measure.MeasureOperationsProvider.class);
|
||||||
|
default:
|
||||||
|
throw new ConfigurationException("EvaluateMeasure is not supported for FHIR version " + myFhirContext.getVersion().getVersion());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public Object getActivityDefinitionOperationProvider() {
|
||||||
|
switch (myFhirContext.getVersion().getVersion()) {
|
||||||
|
case DSTU3:
|
||||||
|
return myApplicationContext.getBean(ca.uhn.fhir.cr.dstu3.activitydefinition.ActivityDefinitionOperationsProvider.class);
|
||||||
|
case R4:
|
||||||
|
return myApplicationContext.getBean(ca.uhn.fhir.cr.r4.activitydefinition.ActivityDefinitionOperationsProvider.class);
|
||||||
|
default:
|
||||||
|
throw new ConfigurationException("ActivityDefinition is not supported for FHIR version " + myFhirContext.getVersion().getVersion());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public Object getPlanDefinitionOperationProvider() {
|
||||||
|
switch (myFhirContext.getVersion().getVersion()) {
|
||||||
|
case DSTU3:
|
||||||
|
return myApplicationContext.getBean(ca.uhn.fhir.cr.dstu3.plandefinition.PlanDefinitionOperationsProvider.class);
|
||||||
|
case R4:
|
||||||
|
return myApplicationContext.getBean(ca.uhn.fhir.cr.r4.plandefinition.PlanDefinitionOperationsProvider.class);
|
||||||
|
default:
|
||||||
|
throw new ConfigurationException("PlanDefinition is not supported for FHIR version " + myFhirContext.getVersion().getVersion());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object getCareGapsOperationProvider() {
|
||||||
|
switch (myFhirContext.getVersion().getVersion()) {
|
||||||
|
case R4:
|
||||||
|
return myApplicationContext.getBean(ca.uhn.fhir.cr.r4.measure.CareGapsOperationProvider.class);
|
||||||
|
default:
|
||||||
|
throw new ConfigurationException("Caregaps is not supported for FHIR version " + myFhirContext.getVersion().getVersion());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object getSubmitDataOperationProvider() {
|
||||||
|
switch (myFhirContext.getVersion().getVersion()) {
|
||||||
|
case R4:
|
||||||
|
return myApplicationContext.getBean(ca.uhn.fhir.cr.r4.measure.SubmitDataProvider.class);
|
||||||
|
default:
|
||||||
|
throw new ConfigurationException("SubmitData is not supported for FHIR version " + myFhirContext.getVersion().getVersion());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object getQuestionnaireOperationProvider() {
|
||||||
|
switch (myFhirContext.getVersion().getVersion()) {
|
||||||
|
case DSTU3:
|
||||||
|
return myApplicationContext.getBean(ca.uhn.fhir.cr.dstu3.questionnaire.QuestionnaireOperationsProvider.class);
|
||||||
|
case R4:
|
||||||
|
return myApplicationContext.getBean(ca.uhn.fhir.cr.r4.questionnaire.QuestionnaireOperationsProvider.class);
|
||||||
|
default:
|
||||||
|
throw new ConfigurationException("Questionnaire is not supported for FHIR version " + myFhirContext.getVersion().getVersion());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public Object getQuestionnaireResponseOperationProvider() {
|
||||||
|
switch (myFhirContext.getVersion().getVersion()) {
|
||||||
|
case DSTU3:
|
||||||
|
return myApplicationContext.getBean(ca.uhn.fhir.cr.dstu3.questionnaireresponse.QuestionnaireResponseOperationsProvider.class);
|
||||||
|
case R4:
|
||||||
|
return myApplicationContext.getBean(ca.uhn.fhir.cr.r4.questionnaireresponse.QuestionnaireResponseOperationsProvider.class);
|
||||||
|
default:
|
||||||
|
throw new ConfigurationException("Questionnaire Response is not supported for FHIR version " + myFhirContext.getVersion().getVersion());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
package ca.uhn.fhir.jpa.starter.cr;
|
||||||
|
|
||||||
|
import ca.uhn.fhir.context.ConfigurationException;
|
||||||
|
import ca.uhn.fhir.context.FhirContext;
|
||||||
|
|
||||||
|
import ca.uhn.fhir.i18n.Msg;
|
||||||
|
import ca.uhn.fhir.rest.server.provider.ResourceProviderFactory;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.context.annotation.Primary;
|
||||||
|
import org.springframework.context.event.ContextRefreshedEvent;
|
||||||
|
import org.springframework.context.event.EventListener;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class loads and registers CQL provider factory for clinical reasoning into hapi-fhir central provider factory
|
||||||
|
**/
|
||||||
|
@Primary
|
||||||
|
@Service
|
||||||
|
public class CrProviderLoader {
|
||||||
|
private static final Logger myLogger = LoggerFactory.getLogger(CrProviderLoader.class);
|
||||||
|
private final FhirContext myFhirContext;
|
||||||
|
private final ResourceProviderFactory myResourceProviderFactory;
|
||||||
|
private final CrProviderFactory myCrProviderFactory;
|
||||||
|
|
||||||
|
public CrProviderLoader(FhirContext theFhirContext, ResourceProviderFactory theResourceProviderFactory, CrProviderFactory theCrProviderFactory) {
|
||||||
|
myFhirContext = theFhirContext;
|
||||||
|
myResourceProviderFactory = theResourceProviderFactory;
|
||||||
|
myCrProviderFactory = theCrProviderFactory;
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventListener(ContextRefreshedEvent.class)
|
||||||
|
public void loadProvider() {
|
||||||
|
switch (myFhirContext.getVersion().getVersion()) {
|
||||||
|
case DSTU3:
|
||||||
|
myLogger.info("Registering Dstu3 Cr Providers");
|
||||||
|
myResourceProviderFactory.addSupplier(() -> myCrProviderFactory.getMeasureOperationsProvider());
|
||||||
|
myResourceProviderFactory.addSupplier(() -> myCrProviderFactory.getActivityDefinitionOperationProvider());
|
||||||
|
myResourceProviderFactory.addSupplier(() -> myCrProviderFactory.getPlanDefinitionOperationProvider());
|
||||||
|
myResourceProviderFactory.addSupplier(() -> myCrProviderFactory.getQuestionnaireOperationProvider());
|
||||||
|
myResourceProviderFactory.addSupplier(() -> myCrProviderFactory.getQuestionnaireResponseOperationProvider());
|
||||||
|
case R4:
|
||||||
|
myLogger.info("Registering R4 Cr Providers");
|
||||||
|
myResourceProviderFactory.addSupplier(() -> myCrProviderFactory.getMeasureOperationsProvider());
|
||||||
|
myResourceProviderFactory.addSupplier(() -> myCrProviderFactory.getActivityDefinitionOperationProvider());
|
||||||
|
myResourceProviderFactory.addSupplier(() -> myCrProviderFactory.getPlanDefinitionOperationProvider());
|
||||||
|
myResourceProviderFactory.addSupplier(() -> myCrProviderFactory.getCareGapsOperationProvider());
|
||||||
|
myResourceProviderFactory.addSupplier(() -> myCrProviderFactory.getSubmitDataOperationProvider());
|
||||||
|
myResourceProviderFactory.addSupplier(() -> myCrProviderFactory.getQuestionnaireOperationProvider());
|
||||||
|
myResourceProviderFactory.addSupplier(() -> myCrProviderFactory.getQuestionnaireResponseOperationProvider());
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new ConfigurationException(Msg.code(1653) + "Cr providers not supported for FHIR version " + myFhirContext.getVersion().getVersion());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -8,4 +8,8 @@ import org.springframework.context.annotation.Import;
|
|||||||
@Conditional({OnR4Condition.class, CrConfigCondition.class})
|
@Conditional({OnR4Condition.class, CrConfigCondition.class})
|
||||||
@Import({CrR4Config.class})
|
@Import({CrR4Config.class})
|
||||||
public class StarterCrR4Config {
|
public class StarterCrR4Config {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user