From 3d51876a8d9724aa331cc23fa7babf467f843048 Mon Sep 17 00:00:00 2001 From: Brenin Rhodes Date: Thu, 28 Sep 2023 20:15:28 -0600 Subject: [PATCH] Update to 6.9.8 --- pom.xml | 8 +- .../ca/uhn/fhir/jpa/starter/Application.java | 10 + .../uhn/fhir/jpa/starter/cr/CrR4Config.java | 182 ++++++++++++++++++ .../jpa/starter/cr/StarterCrR4Config.java | 19 +- 4 files changed, 205 insertions(+), 14 deletions(-) create mode 100644 src/main/java/ca/uhn/fhir/jpa/starter/cr/CrR4Config.java diff --git a/pom.xml b/pom.xml index 905f4c5..231ab69 100644 --- a/pom.xml +++ b/pom.xml @@ -14,7 +14,7 @@ ca.uhn.hapi.fhir hapi-fhir - 6.9.7-SNAPSHOT + 6.9.8-SNAPSHOT hapi-fhir-jpaserver-starter @@ -132,6 +132,12 @@ hapi-fhir-jpaserver-mdm ${project.version} + + + ca.uhn.hapi.fhir + hapi-fhir-server-cds-hooks + ${project.version} + ca.uhn.hapi.fhir diff --git a/src/main/java/ca/uhn/fhir/jpa/starter/Application.java b/src/main/java/ca/uhn/fhir/jpa/starter/Application.java index 5a33baa..da701fb 100644 --- a/src/main/java/ca/uhn/fhir/jpa/starter/Application.java +++ b/src/main/java/ca/uhn/fhir/jpa/starter/Application.java @@ -1,8 +1,12 @@ package ca.uhn.fhir.jpa.starter; import ca.uhn.fhir.batch2.jobs.config.Batch2JobsConfig; +import ca.uhn.fhir.cr.common.IRepositoryFactory; +import ca.uhn.fhir.cr.repo.HapiFhirRepository; +import ca.uhn.fhir.jpa.api.dao.DaoRegistry; import ca.uhn.fhir.jpa.batch2.JpaBatch2Config; import ca.uhn.fhir.jpa.starter.annotations.OnEitherVersion; +import ca.uhn.fhir.jpa.starter.cdshooks.StarterCdsHooksConfig; import ca.uhn.fhir.jpa.starter.common.FhirTesterConfig; import ca.uhn.fhir.jpa.starter.cr.StarterCrDstu3Config; import ca.uhn.fhir.jpa.starter.cr.StarterCrR4Config; @@ -33,6 +37,7 @@ import org.springframework.web.servlet.DispatcherServlet; @Import({ StarterCrR4Config.class, StarterCrDstu3Config.class, + StarterCdsHooksConfig.class, SubscriptionSubmitterConfig.class, SubscriptionProcessorConfig.class, SubscriptionChannelConfig.class, @@ -90,4 +95,9 @@ public class Application extends SpringBootServletInitializer { return registrationBean; } + + @Bean + IRepositoryFactory repositoryFactory(DaoRegistry theDaoRegistry, RestfulServer theRestfulServer) { + return rd -> new HapiFhirRepository(theDaoRegistry, rd, theRestfulServer); + } } diff --git a/src/main/java/ca/uhn/fhir/jpa/starter/cr/CrR4Config.java b/src/main/java/ca/uhn/fhir/jpa/starter/cr/CrR4Config.java new file mode 100644 index 0000000..4713bdb --- /dev/null +++ b/src/main/java/ca/uhn/fhir/jpa/starter/cr/CrR4Config.java @@ -0,0 +1,182 @@ +package ca.uhn.fhir.jpa.starter.cr; + +import ca.uhn.fhir.context.FhirContext; +import ca.uhn.fhir.context.FhirVersionEnum; +import ca.uhn.fhir.cr.common.IRepositoryFactory; +import ca.uhn.fhir.cr.config.ProviderLoader; +import ca.uhn.fhir.cr.config.ProviderSelector; +import ca.uhn.fhir.cr.r4.IActivityDefinitionProcessorFactory; +import ca.uhn.fhir.cr.r4.ICareGapsServiceFactory; +import ca.uhn.fhir.cr.r4.ICqlExecutionServiceFactory; +import ca.uhn.fhir.cr.r4.IMeasureServiceFactory; +import ca.uhn.fhir.cr.r4.IPlanDefinitionProcessorFactory; +import ca.uhn.fhir.cr.r4.IQuestionnaireProcessorFactory; +import ca.uhn.fhir.cr.r4.IQuestionnaireResponseProcessorFactory; +import ca.uhn.fhir.cr.r4.ISubmitDataProcessorFactory; +import ca.uhn.fhir.cr.r4.activitydefinition.ActivityDefinitionApplyProvider; +import ca.uhn.fhir.cr.r4.cqlexecution.CqlExecutionOperationProvider; +import ca.uhn.fhir.cr.r4.measure.CareGapsOperationProvider; +import ca.uhn.fhir.cr.r4.measure.MeasureOperationsProvider; +import ca.uhn.fhir.cr.r4.measure.MeasureService; +import ca.uhn.fhir.cr.r4.measure.SubmitDataProvider; +import ca.uhn.fhir.cr.r4.plandefinition.PlanDefinitionApplyProvider; +import ca.uhn.fhir.cr.r4.plandefinition.PlanDefinitionPackageProvider; +import ca.uhn.fhir.cr.r4.questionnaire.QuestionnairePackageProvider; +import ca.uhn.fhir.cr.r4.questionnaire.QuestionnairePopulateProvider; +import ca.uhn.fhir.cr.r4.questionnaireresponse.QuestionnaireResponseExtractProvider; +import ca.uhn.fhir.rest.server.RestfulServer; +import org.opencds.cqf.fhir.cql.EvaluationSettings; +import org.opencds.cqf.fhir.cr.activitydefinition.r4.ActivityDefinitionProcessor; +import org.opencds.cqf.fhir.cr.cql.r4.R4CqlExecutionService; +import org.opencds.cqf.fhir.cr.measure.CareGapsProperties; +import org.opencds.cqf.fhir.cr.measure.MeasureEvaluationOptions; +import org.opencds.cqf.fhir.cr.measure.r4.R4CareGapsService; +import org.opencds.cqf.fhir.cr.measure.r4.R4SubmitDataService; +import org.opencds.cqf.fhir.cr.plandefinition.r4.PlanDefinitionProcessor; +import org.opencds.cqf.fhir.cr.questionnaire.r4.QuestionnaireProcessor; +import org.opencds.cqf.fhir.cr.questionnaireresponse.r4.QuestionnaireResponseProcessor; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.Arrays; +import java.util.Map; +import java.util.concurrent.Executor; + +@Configuration +public class CrR4Config { + + @Bean + IMeasureServiceFactory r4MeasureServiceFactory( + IRepositoryFactory theRepositoryFactory, MeasureEvaluationOptions theEvaluationOptions) { + return rd -> new MeasureService(theRepositoryFactory.create(rd), theEvaluationOptions); + } + + @Bean + ISubmitDataProcessorFactory r4SubmitDataProcessorFactory(IRepositoryFactory theRepositoryFactory) { + return rd -> new R4SubmitDataService(theRepositoryFactory.create(rd)); + } + + @Bean + ICqlExecutionServiceFactory r4CqlExecutionServiceFactory( + IRepositoryFactory theRepositoryFactory, EvaluationSettings theEvaluationSettings) { + return rd -> new R4CqlExecutionService(theRepositoryFactory.create(rd), theEvaluationSettings); + } + + @Bean + CqlExecutionOperationProvider r4CqlExecutionOperationProvider() { + return new CqlExecutionOperationProvider(); + } + + @Bean + ICareGapsServiceFactory careGapsServiceFactory( + IRepositoryFactory theRepositoryFactory, + CareGapsProperties theCareGapsProperties, + MeasureEvaluationOptions theMeasureEvaluationOptions, + @Qualifier("cqlExecutor") Executor theExecutor) { + return rd -> new R4CareGapsService( + theCareGapsProperties, + theRepositoryFactory.create(rd), + theMeasureEvaluationOptions, + theExecutor, + rd.getFhirServerBase()); + } + + @Bean + CareGapsOperationProvider r4CareGapsOperationProvider() { + return new CareGapsOperationProvider(); + } + + @Bean + SubmitDataProvider r4SubmitDataProvider() { + return new SubmitDataProvider(); + } + + @Bean + MeasureOperationsProvider r4MeasureOperationsProvider() { + return new MeasureOperationsProvider(); + } + + @Bean + IActivityDefinitionProcessorFactory r4ActivityDefinitionProcessorFactory( + IRepositoryFactory theRepositoryFactory, EvaluationSettings theEvaluationSettings) { + return rd -> new ActivityDefinitionProcessor( + theRepositoryFactory.create(rd), theEvaluationSettings); + } + + @Bean + IPlanDefinitionProcessorFactory r4PlanDefinitionProcessorFactory( + IRepositoryFactory theRepositoryFactory, EvaluationSettings theEvaluationSettings) { + return rd -> new PlanDefinitionProcessor( + theRepositoryFactory.create(rd), theEvaluationSettings); + } + + @Bean + IQuestionnaireProcessorFactory r4QuestionnaireProcessorFactory( + IRepositoryFactory theRepositoryFactory, EvaluationSettings theEvaluationSettings) { + return rd -> new QuestionnaireProcessor( + theRepositoryFactory.create(rd), theEvaluationSettings); + } + + @Bean + IQuestionnaireResponseProcessorFactory r4QuestionnaireResponseProcessorFactory( + IRepositoryFactory theRepositoryFactory, EvaluationSettings theEvaluationSettings) { + return rd -> new QuestionnaireResponseProcessor( + theRepositoryFactory.create(rd), theEvaluationSettings); + } + + @Bean + ActivityDefinitionApplyProvider r4ActivityDefinitionApplyProvider() { + return new ActivityDefinitionApplyProvider(); + } + + @Bean + PlanDefinitionApplyProvider r4PlanDefinitionApplyProvider() { + return new PlanDefinitionApplyProvider(); + } + + @Bean + QuestionnaireResponseExtractProvider + r4QuestionnaireResponseExtractProvider() { + return new QuestionnaireResponseExtractProvider(); + } + + @Bean + PlanDefinitionPackageProvider r4PlanDefinitionPackageProvider() { + return new PlanDefinitionPackageProvider(); + } + + @Bean + QuestionnairePackageProvider r4QuestionnairePackageProvider() { + return new QuestionnairePackageProvider(); + } + + @Bean + QuestionnairePopulateProvider r4QuestionnairePopulateProvider() { + return new QuestionnairePopulateProvider(); + } + + @Bean + public ProviderLoader r4PdLoader( + ApplicationContext theApplicationContext, FhirContext theFhirContext, RestfulServer theRestfulServer) { + + var selector = new ProviderSelector( + theFhirContext, + Map.of( + FhirVersionEnum.R4, + Arrays.asList( + MeasureOperationsProvider.class, + SubmitDataProvider.class, + CareGapsOperationProvider.class, + CqlExecutionOperationProvider.class, + ActivityDefinitionApplyProvider.class, + PlanDefinitionApplyProvider.class, + QuestionnaireResponseExtractProvider.class, + QuestionnairePackageProvider.class, + PlanDefinitionPackageProvider.class, + QuestionnairePopulateProvider.class))); + + return new ProviderLoader(theRestfulServer, theApplicationContext, selector); + } +} diff --git a/src/main/java/ca/uhn/fhir/jpa/starter/cr/StarterCrR4Config.java b/src/main/java/ca/uhn/fhir/jpa/starter/cr/StarterCrR4Config.java index 0d63e3e..09e37b7 100644 --- a/src/main/java/ca/uhn/fhir/jpa/starter/cr/StarterCrR4Config.java +++ b/src/main/java/ca/uhn/fhir/jpa/starter/cr/StarterCrR4Config.java @@ -1,18 +1,13 @@ package ca.uhn.fhir.jpa.starter.cr; -import ca.uhn.fhir.cr.config.r4.ApplyOperationConfig; -import ca.uhn.fhir.cr.config.r4.CrR4Config; -import ca.uhn.fhir.cr.config.r4.ExtractOperationConfig; -import ca.uhn.fhir.cr.config.r4.PackageOperationConfig; -import ca.uhn.fhir.cr.config.r4.PopulateOperationConfig; +import ca.uhn.fhir.cr.repo.HapiFhirRepository; 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.springframework.context.annotation.Conditional; -import org.springframework.context.annotation.Import; - import ca.uhn.fhir.cr.common.CqlThreadFactory; +import ca.uhn.fhir.cr.common.IRepositoryFactory; +import ca.uhn.fhir.jpa.api.dao.DaoRegistry; import ca.uhn.fhir.jpa.starter.AppProperties; import org.cqframework.cql.cql2elm.CqlCompilerOptions; import org.cqframework.cql.cql2elm.model.CompiledLibrary; @@ -38,11 +33,7 @@ import java.util.concurrent.Executors; @Configuration @Conditional({ OnR4Condition.class, CrConfigCondition.class }) -@Import({ CrR4Config.class, - ApplyOperationConfig.class, - ExtractOperationConfig.class, - PackageOperationConfig.class, - PopulateOperationConfig.class}) +@Import(CrR4Config.class) public class StarterCrR4Config { private static final Logger ourLogger = LoggerFactory.getLogger(StarterCrR4Config.class); @@ -57,6 +48,7 @@ public class StarterCrR4Config { return executor; } + @Bean CareGapsProperties careGapsProperties(AppProperties theAppProperties) { var careGapsProperties = new CareGapsProperties(); @@ -75,6 +67,7 @@ public class StarterCrR4Config { } return measureEvalOptions; } + @Bean public EvaluationSettings evaluationSettings( AppProperties theAppProperties,