001/*- 002 * #%L 003 * HAPI FHIR JPA Server - Master Data Management 004 * %% 005 * Copyright (C) 2014 - 2023 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.mdm.config; 021 022import ca.uhn.fhir.context.FhirContext; 023import ca.uhn.fhir.jpa.api.dao.DaoRegistry; 024import ca.uhn.fhir.jpa.api.svc.IGoldenResourceSearchSvc; 025import ca.uhn.fhir.jpa.mdm.broker.MdmMessageHandler; 026import ca.uhn.fhir.jpa.mdm.broker.MdmMessageKeySvc; 027import ca.uhn.fhir.jpa.mdm.broker.MdmQueueConsumerLoader; 028import ca.uhn.fhir.jpa.mdm.dao.MdmLinkDaoSvc; 029import ca.uhn.fhir.jpa.mdm.svc.BlockRuleEvaluationSvcImpl; 030import ca.uhn.fhir.jpa.mdm.svc.GoldenResourceMergerSvcImpl; 031import ca.uhn.fhir.jpa.mdm.svc.GoldenResourceSearchSvcImpl; 032import ca.uhn.fhir.jpa.mdm.svc.IMdmModelConverterSvc; 033import ca.uhn.fhir.jpa.mdm.svc.MdmControllerSvcImpl; 034import ca.uhn.fhir.jpa.mdm.svc.MdmEidUpdateService; 035import ca.uhn.fhir.jpa.mdm.svc.MdmLinkCreateSvcImpl; 036import ca.uhn.fhir.jpa.mdm.svc.MdmLinkQuerySvcImplSvc; 037import ca.uhn.fhir.jpa.mdm.svc.MdmLinkSvcImpl; 038import ca.uhn.fhir.jpa.mdm.svc.MdmLinkUpdaterSvcImpl; 039import ca.uhn.fhir.jpa.mdm.svc.MdmMatchFinderSvcImpl; 040import ca.uhn.fhir.jpa.mdm.svc.MdmMatchLinkSvc; 041import ca.uhn.fhir.jpa.mdm.svc.MdmModelConverterSvcImpl; 042import ca.uhn.fhir.jpa.mdm.svc.MdmResourceDaoSvc; 043import ca.uhn.fhir.jpa.mdm.svc.MdmResourceFilteringSvc; 044import ca.uhn.fhir.jpa.mdm.svc.MdmSurvivorshipSvcImpl; 045import ca.uhn.fhir.jpa.mdm.svc.candidate.CandidateSearcher; 046import ca.uhn.fhir.jpa.mdm.svc.candidate.FindCandidateByEidSvc; 047import ca.uhn.fhir.jpa.mdm.svc.candidate.FindCandidateByExampleSvc; 048import ca.uhn.fhir.jpa.mdm.svc.candidate.FindCandidateByLinkSvc; 049import ca.uhn.fhir.jpa.mdm.svc.candidate.MdmCandidateSearchCriteriaBuilderSvc; 050import ca.uhn.fhir.jpa.mdm.svc.candidate.MdmCandidateSearchSvc; 051import ca.uhn.fhir.jpa.mdm.svc.candidate.MdmGoldenResourceFindingSvc; 052import ca.uhn.fhir.jpa.partition.IRequestPartitionHelperSvc; 053import ca.uhn.fhir.jpa.subscription.channel.api.IChannelFactory; 054import ca.uhn.fhir.mdm.api.IGoldenResourceMergerSvc; 055import ca.uhn.fhir.mdm.api.IMdmControllerSvc; 056import ca.uhn.fhir.mdm.api.IMdmLinkCreateSvc; 057import ca.uhn.fhir.mdm.api.IMdmLinkQuerySvc; 058import ca.uhn.fhir.mdm.api.IMdmLinkSvc; 059import ca.uhn.fhir.mdm.api.IMdmLinkUpdaterSvc; 060import ca.uhn.fhir.mdm.api.IMdmMatchFinderSvc; 061import ca.uhn.fhir.mdm.api.IMdmSettings; 062import ca.uhn.fhir.mdm.api.IMdmSurvivorshipService; 063import ca.uhn.fhir.mdm.batch2.MdmBatch2Config; 064import ca.uhn.fhir.mdm.blocklist.svc.IBlockListRuleProvider; 065import ca.uhn.fhir.mdm.blocklist.svc.IBlockRuleEvaluationSvc; 066import ca.uhn.fhir.mdm.dao.IMdmLinkImplFactory; 067import ca.uhn.fhir.mdm.dao.MdmLinkFactory; 068import ca.uhn.fhir.mdm.interceptor.IMdmStorageInterceptor; 069import ca.uhn.fhir.mdm.interceptor.MdmStorageInterceptor; 070import ca.uhn.fhir.mdm.log.Logs; 071import ca.uhn.fhir.mdm.provider.MdmControllerHelper; 072import ca.uhn.fhir.mdm.provider.MdmProviderLoader; 073import ca.uhn.fhir.mdm.svc.MdmSearchParamSvc; 074import ca.uhn.fhir.mdm.util.EIDHelper; 075import ca.uhn.fhir.mdm.util.GoldenResourceHelper; 076import ca.uhn.fhir.mdm.util.MdmPartitionHelper; 077import ca.uhn.fhir.mdm.util.MessageHelper; 078import ca.uhn.fhir.validation.IResourceLoader; 079import org.slf4j.Logger; 080import org.springframework.beans.factory.annotation.Autowired; 081import org.springframework.context.annotation.Bean; 082import org.springframework.context.annotation.Configuration; 083import org.springframework.context.annotation.Import; 084 085@Configuration 086@Import({MdmCommonConfig.class, MdmBatch2Config.class}) 087public class MdmConsumerConfig { 088 private static final Logger ourLog = Logs.getMdmTroubleshootingLog(); 089 090 @Bean 091 IMdmStorageInterceptor mdmStorageInterceptor() { 092 return new MdmStorageInterceptor(); 093 } 094 095 @Bean 096 IMdmSurvivorshipService mdmSurvivorshipService() { 097 return new MdmSurvivorshipSvcImpl(); 098 } 099 100 @Bean 101 MdmQueueConsumerLoader mdmQueueConsumerLoader( 102 IChannelFactory theChannelFactory, IMdmSettings theMdmSettings, MdmMessageHandler theMdmMessageHandler) { 103 return new MdmQueueConsumerLoader(theChannelFactory, theMdmSettings, theMdmMessageHandler); 104 } 105 106 @Bean 107 MdmMessageHandler mdmMessageHandler() { 108 return new MdmMessageHandler(); 109 } 110 111 @Bean 112 MdmMessageKeySvc mdmMessageKeySvc() { 113 return new MdmMessageKeySvc(); 114 } 115 116 @Bean 117 MdmMatchLinkSvc mdmMatchLinkSvc() { 118 return new MdmMatchLinkSvc(); 119 } 120 121 @Bean 122 IBlockRuleEvaluationSvc blockRuleEvaluationSvc( 123 @Autowired FhirContext theContext, @Autowired(required = false) IBlockListRuleProvider theProvider) { 124 return new BlockRuleEvaluationSvcImpl(theContext, theProvider); 125 } 126 127 @Bean 128 MdmEidUpdateService eidUpdateService() { 129 return new MdmEidUpdateService(); 130 } 131 132 @Bean 133 MdmResourceDaoSvc mdmResourceDaoSvc() { 134 return new MdmResourceDaoSvc(); 135 } 136 137 @Bean 138 IMdmLinkSvc mdmLinkSvc() { 139 return new MdmLinkSvcImpl(); 140 } 141 142 @Bean 143 GoldenResourceHelper goldenResourceHelper(FhirContext theFhirContext) { 144 return new GoldenResourceHelper(theFhirContext); 145 } 146 147 @Bean 148 MessageHelper messageHelper(IMdmSettings theMdmSettings, FhirContext theFhirContext) { 149 return new MessageHelper(theMdmSettings, theFhirContext); 150 } 151 152 @Bean 153 MdmSubscriptionLoader mdmSubscriptionLoader() { 154 return new MdmSubscriptionLoader(); 155 } 156 157 @Bean 158 MdmGoldenResourceFindingSvc mdmGoldenResourceFindingSvc() { 159 return new MdmGoldenResourceFindingSvc(); 160 } 161 162 @Bean 163 FindCandidateByEidSvc findCandidateByEidSvc() { 164 return new FindCandidateByEidSvc(); 165 } 166 167 @Bean 168 FindCandidateByLinkSvc findCandidateByLinkSvc() { 169 return new FindCandidateByLinkSvc(); 170 } 171 172 @Bean 173 FindCandidateByExampleSvc findCandidateByScoreSvc() { 174 return new FindCandidateByExampleSvc(); 175 } 176 177 @Bean 178 MdmProviderLoader mdmProviderLoader() { 179 return new MdmProviderLoader(); 180 } 181 182 @Bean 183 IMdmMatchFinderSvc mdmMatchFinderSvc() { 184 return new MdmMatchFinderSvcImpl(); 185 } 186 187 @Bean 188 IGoldenResourceMergerSvc mdmGoldenResourceMergerSvc() { 189 return new GoldenResourceMergerSvcImpl(); 190 } 191 192 @Bean 193 IMdmLinkQuerySvc mdmLinkQuerySvc() { 194 return new MdmLinkQuerySvcImplSvc(); 195 } 196 197 @Bean 198 IMdmModelConverterSvc mdmModelConverterSvc() { 199 return new MdmModelConverterSvcImpl(); 200 } 201 202 @Bean 203 MdmCandidateSearchSvc mdmCandidateSearchSvc() { 204 return new MdmCandidateSearchSvc(); 205 } 206 207 @Bean 208 CandidateSearcher candidateSearcher( 209 DaoRegistry theDaoRegistry, IMdmSettings theMdmSettings, MdmSearchParamSvc theMdmSearchParamSvc) { 210 return new CandidateSearcher(theDaoRegistry, theMdmSettings, theMdmSearchParamSvc); 211 } 212 213 @Bean 214 MdmCandidateSearchCriteriaBuilderSvc mdmCriteriaBuilderSvc() { 215 return new MdmCandidateSearchCriteriaBuilderSvc(); 216 } 217 218 @Bean 219 EIDHelper eidHelper(FhirContext theFhirContext, IMdmSettings theMdmSettings) { 220 return new EIDHelper(theFhirContext, theMdmSettings); 221 } 222 223 @Bean 224 MdmLinkDaoSvc mdmLinkDaoSvc() { 225 return new MdmLinkDaoSvc(); 226 } 227 228 @Bean 229 MdmLinkFactory mdmLinkFactory(IMdmSettings theMdmSettings, IMdmLinkImplFactory theMdmLinkImplFactory) { 230 return new MdmLinkFactory(theMdmSettings, theMdmLinkImplFactory); 231 } 232 233 @Bean 234 IMdmLinkUpdaterSvc mdmLinkUpdaterSvc() { 235 return new MdmLinkUpdaterSvcImpl(); 236 } 237 238 @Bean 239 IMdmLinkCreateSvc mdmLinkCreateSvc() { 240 return new MdmLinkCreateSvcImpl(); 241 } 242 243 @Bean 244 MdmLoader mdmLoader() { 245 return new MdmLoader(); 246 } 247 248 @Bean 249 MdmResourceFilteringSvc mdmResourceFilteringSvc() { 250 return new MdmResourceFilteringSvc(); 251 } 252 253 @Bean 254 MdmControllerHelper mdmProviderHelper( 255 FhirContext theFhirContext, 256 IResourceLoader theResourceLoader, 257 IMdmSettings theMdmSettings, 258 IMdmMatchFinderSvc theMdmMatchFinderSvc, 259 MessageHelper messageHelper, 260 IRequestPartitionHelperSvc partitionHelperSvc) { 261 return new MdmControllerHelper( 262 theFhirContext, 263 theResourceLoader, 264 theMdmMatchFinderSvc, 265 theMdmSettings, 266 messageHelper, 267 partitionHelperSvc); 268 } 269 270 @Bean 271 IMdmControllerSvc mdmControllerSvc() { 272 return new MdmControllerSvcImpl(); 273 } 274 275 @Bean 276 MdmPartitionHelper mdmPartitionHelper(MessageHelper theMessageHelper, IMdmSettings theMdmSettings) { 277 return new MdmPartitionHelper(theMessageHelper, theMdmSettings); 278 } 279 280 @Bean 281 public IGoldenResourceSearchSvc goldenResourceSearchSvc() { 282 return new GoldenResourceSearchSvcImpl(); 283 } 284}