001package ca.uhn.fhir.jpa.mdm.config;
002
003/*-
004 * #%L
005 * HAPI FHIR JPA Server - Master Data Management
006 * %%
007 * Copyright (C) 2014 - 2023 Smile CDR, Inc.
008 * %%
009 * Licensed under the Apache License, Version 2.0 (the "License");
010 * you may not use this file except in compliance with the License.
011 * You may obtain a copy of the License at
012 *
013 *      http://www.apache.org/licenses/LICENSE-2.0
014 *
015 * Unless required by applicable law or agreed to in writing, software
016 * distributed under the License is distributed on an "AS IS" BASIS,
017 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
018 * See the License for the specific language governing permissions and
019 * limitations under the License.
020 * #L%
021 */
022
023import ca.uhn.fhir.context.FhirContext;
024import ca.uhn.fhir.jpa.api.dao.DaoRegistry;
025import ca.uhn.fhir.jpa.api.svc.IGoldenResourceSearchSvc;
026import ca.uhn.fhir.jpa.mdm.broker.MdmMessageHandler;
027import ca.uhn.fhir.jpa.mdm.broker.MdmMessageKeySvc;
028import ca.uhn.fhir.jpa.mdm.broker.MdmQueueConsumerLoader;
029import ca.uhn.fhir.jpa.mdm.dao.MdmLinkDaoSvc;
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.mdm.util.MdmPartitionHelper;
053import ca.uhn.fhir.jpa.partition.IRequestPartitionHelperSvc;
054import ca.uhn.fhir.jpa.subscription.channel.api.IChannelFactory;
055import ca.uhn.fhir.mdm.api.IGoldenResourceMergerSvc;
056import ca.uhn.fhir.mdm.api.IMdmControllerSvc;
057import ca.uhn.fhir.mdm.api.IMdmLinkCreateSvc;
058import ca.uhn.fhir.mdm.api.IMdmLinkQuerySvc;
059import ca.uhn.fhir.mdm.api.IMdmLinkSvc;
060import ca.uhn.fhir.mdm.api.IMdmLinkUpdaterSvc;
061import ca.uhn.fhir.mdm.api.IMdmMatchFinderSvc;
062import ca.uhn.fhir.mdm.api.IMdmSettings;
063import ca.uhn.fhir.mdm.api.IMdmSurvivorshipService;
064import ca.uhn.fhir.mdm.batch2.MdmBatch2Config;
065import ca.uhn.fhir.mdm.dao.IMdmLinkImplFactory;
066import ca.uhn.fhir.mdm.dao.MdmLinkFactory;
067import ca.uhn.fhir.mdm.interceptor.IMdmStorageInterceptor;
068import ca.uhn.fhir.mdm.interceptor.MdmStorageInterceptor;
069import ca.uhn.fhir.mdm.log.Logs;
070import ca.uhn.fhir.mdm.provider.MdmControllerHelper;
071import ca.uhn.fhir.mdm.provider.MdmProviderLoader;
072import ca.uhn.fhir.mdm.rules.svc.MdmResourceMatcherSvc;
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.MessageHelper;
077import ca.uhn.fhir.validation.IResourceLoader;
078import org.slf4j.Logger;
079import org.springframework.context.annotation.Bean;
080import org.springframework.context.annotation.Configuration;
081import org.springframework.context.annotation.Import;
082
083@Configuration
084@Import({MdmCommonConfig.class, MdmBatch2Config.class})
085public class MdmConsumerConfig {
086        private static final Logger ourLog = Logs.getMdmTroubleshootingLog();
087
088        @Bean
089        IMdmStorageInterceptor mdmStorageInterceptor() {
090                return new MdmStorageInterceptor();
091        }
092
093        @Bean
094        IMdmSurvivorshipService mdmSurvivorshipService() { return new MdmSurvivorshipSvcImpl(); }
095
096        @Bean
097        MdmQueueConsumerLoader mdmQueueConsumerLoader(IChannelFactory theChannelFactory, IMdmSettings theMdmSettings, MdmMessageHandler theMdmMessageHandler) {
098                return new MdmQueueConsumerLoader(theChannelFactory, theMdmSettings, theMdmMessageHandler);
099        }
100
101        @Bean
102        MdmMessageHandler mdmMessageHandler() {
103                return new MdmMessageHandler();
104        }
105
106        @Bean
107        MdmMessageKeySvc mdmMessageKeySvc() {
108                return new MdmMessageKeySvc();
109        }
110        @Bean
111        MdmMatchLinkSvc mdmMatchLinkSvc() {
112                return new MdmMatchLinkSvc();
113        }
114
115        @Bean
116        MdmEidUpdateService eidUpdateService() {
117                return new MdmEidUpdateService();
118        }
119
120        @Bean
121        MdmResourceDaoSvc mdmResourceDaoSvc() {
122                return new MdmResourceDaoSvc();
123        }
124
125        @Bean
126        IMdmLinkSvc mdmLinkSvc() {
127                return new MdmLinkSvcImpl();
128        }
129
130        @Bean
131        GoldenResourceHelper goldenResourceHelper(FhirContext theFhirContext) {
132                return new GoldenResourceHelper(theFhirContext);
133        }
134
135        @Bean
136        MessageHelper messageHelper(IMdmSettings theMdmSettings, FhirContext theFhirContext) {
137                return new MessageHelper(theMdmSettings, theFhirContext);
138        }
139
140        @Bean
141        MdmSubscriptionLoader mdmSubscriptionLoader() {
142                return new MdmSubscriptionLoader();
143        }
144
145        @Bean
146        MdmGoldenResourceFindingSvc mdmGoldenResourceFindingSvc() {
147                return new MdmGoldenResourceFindingSvc();
148        }
149
150        @Bean
151        FindCandidateByEidSvc findCandidateByEidSvc() {
152                return new FindCandidateByEidSvc();
153        }
154
155        @Bean
156        FindCandidateByLinkSvc findCandidateByLinkSvc() {
157                return new FindCandidateByLinkSvc();
158        }
159
160        @Bean
161        FindCandidateByExampleSvc findCandidateByScoreSvc() {
162                return new FindCandidateByExampleSvc();
163        }
164
165        @Bean
166        MdmProviderLoader mdmProviderLoader() {
167                return new MdmProviderLoader();
168        }
169
170
171        @Bean
172        IMdmMatchFinderSvc mdmMatchFinderSvc() {
173                return new MdmMatchFinderSvcImpl();
174        }
175
176        @Bean
177        IGoldenResourceMergerSvc mdmGoldenResourceMergerSvc() {
178                return new GoldenResourceMergerSvcImpl();
179        }
180
181
182        @Bean
183        IMdmLinkQuerySvc mdmLinkQuerySvc() {
184                return new MdmLinkQuerySvcImplSvc();
185        }
186
187        @Bean
188        IMdmModelConverterSvc mdmModelConverterSvc() {
189                return new MdmModelConverterSvcImpl();
190        }
191
192
193        @Bean
194        MdmCandidateSearchSvc mdmCandidateSearchSvc() {
195                return new MdmCandidateSearchSvc();
196        }
197
198        @Bean
199        CandidateSearcher candidateSearcher(DaoRegistry theDaoRegistry, IMdmSettings theMdmSettings, MdmSearchParamSvc theMdmSearchParamSvc) {
200                return new CandidateSearcher(theDaoRegistry, theMdmSettings, theMdmSearchParamSvc);
201        }
202
203        @Bean
204        MdmCandidateSearchCriteriaBuilderSvc mdmCriteriaBuilderSvc() {
205                return new MdmCandidateSearchCriteriaBuilderSvc();
206        }
207
208        @Bean
209        MdmResourceMatcherSvc mdmResourceComparatorSvc(FhirContext theFhirContext, IMdmSettings theMdmSettings) {
210                return new MdmResourceMatcherSvc(theFhirContext, theMdmSettings);
211        }
212
213        @Bean
214        EIDHelper eidHelper(FhirContext theFhirContext, IMdmSettings theMdmSettings) {
215                return new EIDHelper(theFhirContext, theMdmSettings);
216        }
217
218        @Bean
219        MdmLinkDaoSvc mdmLinkDaoSvc() {
220                return new MdmLinkDaoSvc();
221        }
222
223        @Bean
224        MdmLinkFactory mdmLinkFactory(IMdmSettings theMdmSettings, IMdmLinkImplFactory theMdmLinkImplFactory) {
225                return new MdmLinkFactory(theMdmSettings, theMdmLinkImplFactory);
226        }
227
228        @Bean
229        IMdmLinkUpdaterSvc mdmLinkUpdaterSvc() {
230                return new MdmLinkUpdaterSvcImpl();
231        }
232
233        @Bean
234        IMdmLinkCreateSvc mdmLinkCreateSvc() {
235                return new MdmLinkCreateSvcImpl();
236        }
237
238
239        @Bean
240        MdmLoader mdmLoader() {
241                return new MdmLoader();
242        }
243
244        @Bean
245        MdmResourceFilteringSvc mdmResourceFilteringSvc() {
246                return new MdmResourceFilteringSvc();
247        }
248
249        @Bean
250        MdmControllerHelper mdmProviderHelper(FhirContext theFhirContext,
251                                                                                                          IResourceLoader theResourceLoader,
252                                                                                                          IMdmSettings theMdmSettings,
253                                                                                                          IMdmMatchFinderSvc theMdmMatchFinderSvc,
254                                                                                                          MessageHelper messageHelper,
255                                                                                                          IRequestPartitionHelperSvc partitionHelperSvc) {
256                return new MdmControllerHelper(theFhirContext,
257                        theResourceLoader,
258                        theMdmMatchFinderSvc,
259                        theMdmSettings,
260                        messageHelper,
261                        partitionHelperSvc);
262        }
263
264        @Bean
265        IMdmControllerSvc mdmControllerSvc() {
266                return new MdmControllerSvcImpl();
267        }
268
269        @Bean
270        MdmPartitionHelper mdmPartitionHelper() {return new MdmPartitionHelper();}
271
272        @Bean
273        public IGoldenResourceSearchSvc goldenResourceSearchSvc() {
274                return new GoldenResourceSearchSvcImpl();
275        }
276}