
001/*- 002 * #%L 003 * HAPI FHIR JPA - Search Parameters 004 * %% 005 * Copyright (C) 2014 - 2025 Smile CDR, Inc. 006 * %% 007 * Licensed under the Apache License, Version 2.0 (the "License"); 008 * you may not use this file except in compliance with the License. 009 * You may obtain a copy of the License at 010 * 011 * http://www.apache.org/licenses/LICENSE-2.0 012 * 013 * Unless required by applicable law or agreed to in writing, software 014 * distributed under the License is distributed on an "AS IS" BASIS, 015 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 016 * See the License for the specific language governing permissions and 017 * limitations under the License. 018 * #L% 019 */ 020package ca.uhn.fhir.jpa.searchparam.config; 021 022import ca.uhn.fhir.context.FhirContext; 023import ca.uhn.fhir.i18n.Msg; 024import ca.uhn.fhir.jpa.cache.IResourceChangeListener; 025import ca.uhn.fhir.jpa.cache.IResourceChangeListenerCacheRefresher; 026import ca.uhn.fhir.jpa.cache.IResourceChangeListenerRegistry; 027import ca.uhn.fhir.jpa.cache.ResourceChangeListenerCache; 028import ca.uhn.fhir.jpa.cache.ResourceChangeListenerCacheFactory; 029import ca.uhn.fhir.jpa.cache.ResourceChangeListenerCacheRefresherImpl; 030import ca.uhn.fhir.jpa.cache.ResourceChangeListenerRegistryImpl; 031import ca.uhn.fhir.jpa.searchparam.MatchUrlService; 032import ca.uhn.fhir.jpa.searchparam.SearchLimiterSvc; 033import ca.uhn.fhir.jpa.searchparam.SearchParameterMap; 034import ca.uhn.fhir.jpa.searchparam.extractor.ISearchParamExtractor; 035import ca.uhn.fhir.jpa.searchparam.extractor.SearchParamExtractorDstu2; 036import ca.uhn.fhir.jpa.searchparam.extractor.SearchParamExtractorDstu3; 037import ca.uhn.fhir.jpa.searchparam.extractor.SearchParamExtractorR4; 038import ca.uhn.fhir.jpa.searchparam.extractor.SearchParamExtractorR4B; 039import ca.uhn.fhir.jpa.searchparam.extractor.SearchParamExtractorR5; 040import ca.uhn.fhir.jpa.searchparam.extractor.SearchParamExtractorService; 041import ca.uhn.fhir.jpa.searchparam.matcher.InMemoryResourceMatcher; 042import ca.uhn.fhir.jpa.searchparam.matcher.IndexedSearchParamExtractor; 043import ca.uhn.fhir.jpa.searchparam.matcher.SearchParamMatcher; 044import ca.uhn.fhir.jpa.searchparam.registry.SearchParamRegistryImpl; 045import ca.uhn.fhir.jpa.searchparam.registry.SearchParameterCanonicalizer; 046import ca.uhn.fhir.jpa.searchparam.util.SearchParameterHelper; 047import ca.uhn.fhir.rest.server.util.ISearchParamRegistry; 048import ca.uhn.fhir.svcs.ISearchLimiterSvc; 049import org.springframework.beans.factory.annotation.Autowired; 050import org.springframework.context.annotation.Bean; 051import org.springframework.context.annotation.Configuration; 052import org.springframework.context.annotation.Lazy; 053import org.springframework.context.annotation.Scope; 054 055@Configuration 056public class SearchParamConfig { 057 058 @Autowired 059 private FhirContext myFhirContext; 060 061 @Bean 062 public ISearchParamExtractor searchParamExtractor() { 063 switch (myFhirContext.getVersion().getVersion()) { 064 case DSTU2: 065 return new SearchParamExtractorDstu2(); 066 case DSTU3: 067 return new SearchParamExtractorDstu3(); 068 case R4: 069 return new SearchParamExtractorR4(); 070 case R4B: 071 return new SearchParamExtractorR4B(); 072 case R5: 073 return new SearchParamExtractorR5(); 074 case DSTU2_HL7ORG: 075 case DSTU2_1: 076 default: 077 throw new IllegalStateException(Msg.code(501) + "Can not handle version: " 078 + myFhirContext.getVersion().getVersion()); 079 } 080 } 081 082 @Bean 083 public ISearchParamRegistry searchParamRegistry() { 084 return new SearchParamRegistryImpl(); 085 } 086 087 @Bean 088 public MatchUrlService matchUrlService() { 089 return new MatchUrlService(); 090 } 091 092 @Bean 093 @Lazy 094 public SearchParamExtractorService searchParamExtractorService() { 095 return new SearchParamExtractorService(); 096 } 097 098 @Bean 099 @Lazy 100 public SearchParameterCanonicalizer searchParameterCanonicalizer(FhirContext theFhirContext) { 101 return new SearchParameterCanonicalizer(theFhirContext); 102 } 103 104 @Bean 105 public IndexedSearchParamExtractor indexedSearchParamExtractor() { 106 return new IndexedSearchParamExtractor(); 107 } 108 109 @Bean 110 public InMemoryResourceMatcher inMemoryResourceMatcher() { 111 return new InMemoryResourceMatcher(); 112 } 113 114 @Bean 115 public SearchParamMatcher searchParamMatcher() { 116 return new SearchParamMatcher(); 117 } 118 119 @Bean 120 IResourceChangeListenerRegistry resourceChangeListenerRegistry( 121 FhirContext theFhirContext, 122 ResourceChangeListenerCacheFactory theResourceChangeListenerCacheFactory, 123 InMemoryResourceMatcher theInMemoryResourceMatcher) { 124 return new ResourceChangeListenerRegistryImpl( 125 theFhirContext, theResourceChangeListenerCacheFactory, theInMemoryResourceMatcher); 126 } 127 128 @Bean 129 IResourceChangeListenerCacheRefresher resourceChangeListenerCacheRefresher() { 130 return new ResourceChangeListenerCacheRefresherImpl(); 131 } 132 133 @Bean 134 ResourceChangeListenerCacheFactory registeredResourceListenerFactory() { 135 return new ResourceChangeListenerCacheFactory(); 136 } 137 138 @Bean 139 @Scope("prototype") 140 ResourceChangeListenerCache registeredResourceChangeListener( 141 String theResourceName, 142 IResourceChangeListener theResourceChangeListener, 143 SearchParameterMap theSearchParameterMap, 144 long theRemoteRefreshIntervalMs) { 145 return new ResourceChangeListenerCache( 146 theResourceName, theResourceChangeListener, theSearchParameterMap, theRemoteRefreshIntervalMs); 147 } 148 149 @Bean 150 @Lazy 151 SearchParameterHelper searchParameterHelper(FhirContext theFhirContext) { 152 return new SearchParameterHelper(searchParameterCanonicalizer(theFhirContext)); 153 } 154 155 @Bean 156 public ISearchLimiterSvc searchLimiterSvc() { 157 return new SearchLimiterSvc(); 158 } 159}