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}