add cqlconfigbeans

This commit is contained in:
justin.mckelvy
2023-06-16 09:15:54 -06:00
parent 6fe8784860
commit 300a21fcb4
4 changed files with 66 additions and 18 deletions

View File

@@ -427,7 +427,7 @@ public class AppProperties {
getCqlCompilerSignatureLevel(),
getCqlCompilerCompatibilityLevel()
);
public CqlTranslatorOptions getCqlTranslator() {
public CqlTranslatorOptions getCqlTranslatorOptions() {
return this.cqlTranslatorOptions;
}
@@ -446,7 +446,7 @@ public class AppProperties {
CqlOptions cqlOptions = new CqlOptions();
cqlOptions.setUseEmbeddedLibraries(this.cql_use_embedded_libraries);
cqlOptions.setCqlEngineOptions(this.getCqlEngineOptions());
cqlOptions.setCqlTranslatorOptions(this.getCqlTranslator());
cqlOptions.setCqlTranslatorOptions(this.getCqlTranslatorOptions());
return cqlOptions;
}

View File

@@ -17,6 +17,7 @@ import ca.uhn.fhir.rest.server.mail.MailSvc;
import ca.uhn.fhir.rest.server.provider.ResourceProviderFactory;
import com.google.common.base.Strings;
import org.cqframework.cql.cql2elm.CqlTranslatorOptions;
import org.hl7.fhir.r4.model.Bundle.BundleType;
import org.springframework.beans.factory.FactoryBean;
import org.springframework.boot.env.YamlPropertySourceLoader;
@@ -255,4 +256,6 @@ public class FhirServerConfigCommon {
return null;
}
}

View File

@@ -1,7 +1,7 @@
package ca.uhn.fhir.jpa.starter.cr;
import ca.uhn.fhir.context.FhirContext;
import ca.uhn.fhir.cr.common.IRepositoryFactory;
import ca.uhn.fhir.context.FhirVersionEnum;
import ca.uhn.fhir.cr.config.CrDstu3Config;
import ca.uhn.fhir.cr.dstu3.IActivityDefinitionProcessorFactory;
import ca.uhn.fhir.cr.dstu3.IPlanDefinitionProcessorFactory;
@@ -11,26 +11,26 @@ import ca.uhn.fhir.cr.dstu3.activitydefinition.ActivityDefinitionOperationsProvi
import ca.uhn.fhir.cr.dstu3.plandefinition.PlanDefinitionOperationsProvider;
import ca.uhn.fhir.cr.dstu3.questionnaire.QuestionnaireOperationsProvider;
import ca.uhn.fhir.cr.dstu3.questionnaireresponse.QuestionnaireResponseOperationsProvider;
import ca.uhn.fhir.cr.repo.HapiFhirRepository;
import ca.uhn.fhir.jpa.api.dao.DaoRegistry;
import ca.uhn.fhir.jpa.starter.AppProperties;
import ca.uhn.fhir.jpa.starter.annotations.OnDSTU3Condition;
import ca.uhn.fhir.rest.server.RestfulServer;
import ca.uhn.fhir.rest.server.provider.ResourceProviderFactory;
import org.cqframework.cql.cql2elm.CqlTranslatorOptions;
import org.opencds.cqf.cql.evaluator.CqlOptions;
import org.opencds.cqf.cql.evaluator.activitydefinition.dstu3.ActivityDefinitionProcessor;
import org.opencds.cqf.cql.evaluator.library.EvaluationSettings;
import org.opencds.cqf.cql.evaluator.plandefinition.dstu3.PlanDefinitionProcessor;
import org.opencds.cqf.cql.evaluator.questionnaire.dstu3.QuestionnaireProcessor;
import org.opencds.cqf.cql.evaluator.questionnaireresponse.dstu3.QuestionnaireResponseProcessor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.*;
@Configuration
@Conditional({ OnDSTU3Condition.class, CrConfigCondition.class })
@Import({ CrDstu3Config.class })
public class StarterCrDstu3Config {
private static final Logger ourLogger = LoggerFactory.getLogger(StarterCrDstu3Config.class);
@Bean
public PostInitProviderRegisterer postInitProviderRegisterer(RestfulServer theRestfulServer,
ResourceProviderFactory theResourceProviderFactory) {
@@ -93,4 +93,25 @@ public class StarterCrDstu3Config {
EvaluationSettings theEvaluationSettings) {
return r -> new PlanDefinitionProcessor(r, theEvaluationSettings);
}
@Primary
@Bean
public CqlOptions cqlOptions(AppProperties theAppProperties) {
return theAppProperties.getCqlOptions();
}
@Primary
@Bean
public CqlTranslatorOptions cqlTranslatorOptions(FhirContext theFhirContext, AppProperties theAppProperties) {
CqlTranslatorOptions options = theAppProperties.getCqlTranslatorOptions();
if (theFhirContext.getVersion().getVersion().isOlderThan(FhirVersionEnum.R4)
&& (options.getCompatibilityLevel().equals("1.5") || options.getCompatibilityLevel().equals("1.4"))) {
ourLogger.warn("{} {} {}",
"This server is configured to use CQL version > 1.4 and FHIR version <= DSTU3.",
"Most available CQL content for DSTU3 and below is for CQL versions 1.3.",
"If your CQL content causes translation errors, try setting the CQL compatibility level to 1.3");
}
return options;
}
}

View File

@@ -2,7 +2,8 @@ package ca.uhn.fhir.jpa.starter.cr;
import ca.uhn.fhir.IHapiBootOrder;
import ca.uhn.fhir.context.FhirContext;
import ca.uhn.fhir.cr.common.IRepositoryFactory;
import ca.uhn.fhir.context.FhirVersionEnum;
import ca.uhn.fhir.cr.config.CrR4Config;
import ca.uhn.fhir.cr.r4.IActivityDefinitionProcessorFactory;
import ca.uhn.fhir.cr.r4.IPlanDefinitionProcessorFactory;
@@ -12,26 +13,26 @@ import ca.uhn.fhir.cr.r4.activitydefinition.ActivityDefinitionOperationsProvider
import ca.uhn.fhir.cr.r4.plandefinition.PlanDefinitionOperationsProvider;
import ca.uhn.fhir.cr.r4.questionnaire.QuestionnaireOperationsProvider;
import ca.uhn.fhir.cr.r4.questionnaireresponse.QuestionnaireResponseOperationsProvider;
import ca.uhn.fhir.cr.repo.HapiFhirRepository;
import ca.uhn.fhir.jpa.api.dao.DaoRegistry;
import ca.uhn.fhir.jpa.starter.AppProperties;
import ca.uhn.fhir.jpa.starter.annotations.OnR4Condition;
import ca.uhn.fhir.rest.server.RestfulServer;
import ca.uhn.fhir.rest.server.provider.ResourceProviderFactory;
import org.cqframework.cql.cql2elm.CqlTranslatorOptions;
import org.opencds.cqf.cql.evaluator.CqlOptions;
import org.opencds.cqf.cql.evaluator.activitydefinition.r4.ActivityDefinitionProcessor;
import org.opencds.cqf.cql.evaluator.library.EvaluationSettings;
import org.opencds.cqf.cql.evaluator.plandefinition.r4.PlanDefinitionProcessor;
import org.opencds.cqf.cql.evaluator.questionnaire.r4.QuestionnaireProcessor;
import org.opencds.cqf.cql.evaluator.questionnaireresponse.r4.QuestionnaireResponseProcessor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.*;
@Configuration
@Conditional({ OnR4Condition.class, CrConfigCondition.class })
@Import({ CrR4Config.class })
public class StarterCrR4Config {
private static final Logger ourLogger = LoggerFactory.getLogger(StarterCrR4Config.class);
@Bean
public PostInitProviderRegisterer postInitProviderRegisterer(RestfulServer theRestfulServer,
ResourceProviderFactory theResourceProviderFactory) {
@@ -94,4 +95,27 @@ public class StarterCrR4Config {
EvaluationSettings theEvaluationSettings) {
return r -> new PlanDefinitionProcessor(r, theEvaluationSettings);
}
@Primary
@Bean
public CqlOptions cqlOptions(AppProperties theAppProperties) {
return theAppProperties.getCqlOptions();
}
@Primary
@Bean
public CqlTranslatorOptions cqlTranslatorOptions(FhirContext theFhirContext, AppProperties theAppProperties) {
CqlTranslatorOptions options = theAppProperties.getCqlTranslatorOptions();
if (theFhirContext.getVersion().getVersion().isOlderThan(FhirVersionEnum.R4)
&& (options.getCompatibilityLevel().equals("1.5") || options.getCompatibilityLevel().equals("1.4"))) {
ourLogger.warn("{} {} {}",
"This server is configured to use CQL version > 1.4 and FHIR version <= DSTU3.",
"Most available CQL content for DSTU3 and below is for CQL versions 1.3.",
"If your CQL content causes translation errors, try setting the CQL compatibility level to 1.3");
}
return options;
}
}