From 4eaa9fbfb2744a9688e09b119abf53f665fce46c Mon Sep 17 00:00:00 2001 From: jvi Date: Mon, 8 Feb 2021 16:36:55 +0100 Subject: [PATCH] Springified the wiring of interceptors --- .../jpa/starter/BaseJpaRestfulServer.java | 15 +++------ .../jpa/starter/FhirServerConfigCommon.java | 7 ---- ...epositoryValidationInterceptorFactory.java | 32 ++++++++++++------- 3 files changed, 25 insertions(+), 29 deletions(-) diff --git a/src/main/java/ca/uhn/fhir/jpa/starter/BaseJpaRestfulServer.java b/src/main/java/ca/uhn/fhir/jpa/starter/BaseJpaRestfulServer.java index 745d838..01d4c39 100644 --- a/src/main/java/ca/uhn/fhir/jpa/starter/BaseJpaRestfulServer.java +++ b/src/main/java/ca/uhn/fhir/jpa/starter/BaseJpaRestfulServer.java @@ -10,7 +10,6 @@ import ca.uhn.fhir.jpa.api.dao.IFhirSystemDao; import ca.uhn.fhir.jpa.binstore.BinaryStorageInterceptor; import ca.uhn.fhir.jpa.bulk.provider.BulkDataExportProvider; import ca.uhn.fhir.jpa.interceptor.CascadingDeleteInterceptor; -import ca.uhn.fhir.jpa.interceptor.validation.RepositoryValidatingInterceptor; import ca.uhn.fhir.jpa.packages.IPackageInstallerSvc; import ca.uhn.fhir.jpa.packages.PackageInstallationSpec; import ca.uhn.fhir.jpa.partition.PartitionManagementProvider; @@ -97,6 +96,10 @@ public class BaseJpaRestfulServer extends RestfulServer { @Autowired ApplicationContext myApplicationContext; + + @Autowired(required = false) + RepositoryValidationInterceptorFactory repositoryValidationInterceptorFactory; + public BaseJpaRestfulServer() { } @@ -364,15 +367,5 @@ public class BaseJpaRestfulServer extends RestfulServer { } daoConfig.getModelConfig().setNormalizedQuantitySearchLevel(appProperties.getNormalized_quantity_search_level()); - - // Repository Validating Interceptor - if (Boolean.TRUE.equals(appProperties.getEnable_repository_validating_interceptor())) { - RepositoryValidationInterceptorFactory repositoryValidationInterceptorFactory = myApplicationContext.getBean(RepositoryValidationInterceptorFactory.class); - RepositoryValidatingInterceptor interceptor = repositoryValidationInterceptorFactory.build(); - interceptorService.registerInterceptor(interceptor); - } - } - - } diff --git a/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigCommon.java b/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigCommon.java index 965e028..80bbe24 100644 --- a/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigCommon.java +++ b/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigCommon.java @@ -132,13 +132,6 @@ public class FhirServerConfigCommon { } - @Bean - @Lazy - public RepositoryValidationInterceptorFactory repositoryValidationInterceptorFactory() { - return new RepositoryValidationInterceptorFactory(); - } - - @Primary @Bean public HibernatePropertiesProvider jpaStarterDialectProvider(LocalContainerEntityManagerFactoryBean myEntityManagerFactory) { diff --git a/src/main/java/ca/uhn/fhir/jpa/starter/RepositoryValidationInterceptorFactory.java b/src/main/java/ca/uhn/fhir/jpa/starter/RepositoryValidationInterceptorFactory.java index 0ea6652..c9ecff7 100644 --- a/src/main/java/ca/uhn/fhir/jpa/starter/RepositoryValidationInterceptorFactory.java +++ b/src/main/java/ca/uhn/fhir/jpa/starter/RepositoryValidationInterceptorFactory.java @@ -1,38 +1,48 @@ package ca.uhn.fhir.jpa.starter; import ca.uhn.fhir.context.FhirContext; +import ca.uhn.fhir.interceptor.api.IInterceptorService; +import ca.uhn.fhir.jpa.api.dao.DaoRegistry; import ca.uhn.fhir.jpa.interceptor.validation.IRepositoryValidatingRule; import ca.uhn.fhir.jpa.interceptor.validation.RepositoryValidatingInterceptor; import ca.uhn.fhir.jpa.interceptor.validation.RepositoryValidatingRuleBuilder; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.ApplicationContext; +import ca.uhn.fhir.jpa.starter.annotations.OnEitherVersion; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Conditional; +import org.springframework.context.annotation.Configuration; import java.util.List; /** * This class can be customized to enable the {@link ca.uhn.fhir.jpa.interceptor.validation.RepositoryValidatingInterceptor} * on this server. - * + *

* The enable_repository_validating_interceptor property must be enabled in application.yaml * in order to use this class. */ +@ConditionalOnProperty(prefix = "hapi.fhir", name = "enable_repository_validating_interceptor", havingValue = "true") +@Configuration +@Conditional({OnEitherVersion.class}) public class RepositoryValidationInterceptorFactory { - @Autowired - private ApplicationContext myApplicationContext; - @Autowired - private FhirContext myFhirContext; + private final FhirContext fhirContext; + private final RepositoryValidatingRuleBuilder repositoryValidatingRuleBuilder; + + public RepositoryValidationInterceptorFactory(RepositoryValidatingRuleBuilder repositoryValidatingRuleBuilder, DaoRegistry daoRegistry, IInterceptorService interceptorService) { + this.repositoryValidatingRuleBuilder = repositoryValidatingRuleBuilder; + this.fhirContext = daoRegistry.getSystemDao().getContext(); + interceptorService.registerInterceptor(build()); + } public RepositoryValidatingInterceptor build() { - RepositoryValidatingRuleBuilder ruleBuilder = myApplicationContext.getBean(RepositoryValidatingRuleBuilder.class); // Customize the ruleBuilder here to have the rules you want! We will give a simple example // of enabling validation for all Patient resources - ruleBuilder.forResourcesOfType("Patient").requireValidationToDeclaredProfiles(); + repositoryValidatingRuleBuilder.forResourcesOfType("Patient").requireValidationToDeclaredProfiles(); // Do not customize below this line - List rules = ruleBuilder.build(); - return new RepositoryValidatingInterceptor(myFhirContext, rules); + List rules = repositoryValidatingRuleBuilder.build(); + return new RepositoryValidatingInterceptor(fhirContext, rules); } }