Springified the wiring of interceptors

This commit is contained in:
jvi
2021-02-08 16:36:55 +01:00
parent eb4ab76d0e
commit 4eaa9fbfb2
3 changed files with 25 additions and 29 deletions

View File

@@ -10,7 +10,6 @@ import ca.uhn.fhir.jpa.api.dao.IFhirSystemDao;
import ca.uhn.fhir.jpa.binstore.BinaryStorageInterceptor; import ca.uhn.fhir.jpa.binstore.BinaryStorageInterceptor;
import ca.uhn.fhir.jpa.bulk.provider.BulkDataExportProvider; import ca.uhn.fhir.jpa.bulk.provider.BulkDataExportProvider;
import ca.uhn.fhir.jpa.interceptor.CascadingDeleteInterceptor; 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.IPackageInstallerSvc;
import ca.uhn.fhir.jpa.packages.PackageInstallationSpec; import ca.uhn.fhir.jpa.packages.PackageInstallationSpec;
import ca.uhn.fhir.jpa.partition.PartitionManagementProvider; import ca.uhn.fhir.jpa.partition.PartitionManagementProvider;
@@ -97,6 +96,10 @@ public class BaseJpaRestfulServer extends RestfulServer {
@Autowired @Autowired
ApplicationContext myApplicationContext; ApplicationContext myApplicationContext;
@Autowired(required = false)
RepositoryValidationInterceptorFactory repositoryValidationInterceptorFactory;
public BaseJpaRestfulServer() { public BaseJpaRestfulServer() {
} }
@@ -364,15 +367,5 @@ public class BaseJpaRestfulServer extends RestfulServer {
} }
daoConfig.getModelConfig().setNormalizedQuantitySearchLevel(appProperties.getNormalized_quantity_search_level()); 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);
} }
}
} }

View File

@@ -132,13 +132,6 @@ public class FhirServerConfigCommon {
} }
@Bean
@Lazy
public RepositoryValidationInterceptorFactory repositoryValidationInterceptorFactory() {
return new RepositoryValidationInterceptorFactory();
}
@Primary @Primary
@Bean @Bean
public HibernatePropertiesProvider jpaStarterDialectProvider(LocalContainerEntityManagerFactoryBean myEntityManagerFactory) { public HibernatePropertiesProvider jpaStarterDialectProvider(LocalContainerEntityManagerFactoryBean myEntityManagerFactory) {

View File

@@ -1,38 +1,48 @@
package ca.uhn.fhir.jpa.starter; package ca.uhn.fhir.jpa.starter;
import ca.uhn.fhir.context.FhirContext; 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.IRepositoryValidatingRule;
import ca.uhn.fhir.jpa.interceptor.validation.RepositoryValidatingInterceptor; import ca.uhn.fhir.jpa.interceptor.validation.RepositoryValidatingInterceptor;
import ca.uhn.fhir.jpa.interceptor.validation.RepositoryValidatingRuleBuilder; import ca.uhn.fhir.jpa.interceptor.validation.RepositoryValidatingRuleBuilder;
import org.springframework.beans.factory.annotation.Autowired; import ca.uhn.fhir.jpa.starter.annotations.OnEitherVersion;
import org.springframework.context.ApplicationContext; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;
import java.util.List; import java.util.List;
/** /**
* This class can be customized to enable the {@link ca.uhn.fhir.jpa.interceptor.validation.RepositoryValidatingInterceptor} * This class can be customized to enable the {@link ca.uhn.fhir.jpa.interceptor.validation.RepositoryValidatingInterceptor}
* on this server. * on this server.
* * <p>
* The <code>enable_repository_validating_interceptor</code> property must be enabled in <code>application.yaml</code> * The <code>enable_repository_validating_interceptor</code> property must be enabled in <code>application.yaml</code>
* in order to use this class. * in order to use this class.
*/ */
@ConditionalOnProperty(prefix = "hapi.fhir", name = "enable_repository_validating_interceptor", havingValue = "true")
@Configuration
@Conditional({OnEitherVersion.class})
public class RepositoryValidationInterceptorFactory { public class RepositoryValidationInterceptorFactory {
@Autowired private final FhirContext fhirContext;
private ApplicationContext myApplicationContext; private final RepositoryValidatingRuleBuilder repositoryValidatingRuleBuilder;
@Autowired
private FhirContext myFhirContext; public RepositoryValidationInterceptorFactory(RepositoryValidatingRuleBuilder repositoryValidatingRuleBuilder, DaoRegistry daoRegistry, IInterceptorService interceptorService) {
this.repositoryValidatingRuleBuilder = repositoryValidatingRuleBuilder;
this.fhirContext = daoRegistry.getSystemDao().getContext();
interceptorService.registerInterceptor(build());
}
public RepositoryValidatingInterceptor 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 // Customize the ruleBuilder here to have the rules you want! We will give a simple example
// of enabling validation for all Patient resources // of enabling validation for all Patient resources
ruleBuilder.forResourcesOfType("Patient").requireValidationToDeclaredProfiles(); repositoryValidatingRuleBuilder.forResourcesOfType("Patient").requireValidationToDeclaredProfiles();
// Do not customize below this line // Do not customize below this line
List<IRepositoryValidatingRule> rules = ruleBuilder.build(); List<IRepositoryValidatingRule> rules = repositoryValidatingRuleBuilder.build();
return new RepositoryValidatingInterceptor(myFhirContext, rules); return new RepositoryValidatingInterceptor(fhirContext, rules);
} }
} }