001package ca.uhn.fhir.mdm.provider;
002
003/*-
004 * #%L
005 * HAPI FHIR - Master Data Management
006 * %%
007 * Copyright (C) 2014 - 2022 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.ConfigurationException;
024import ca.uhn.fhir.context.FhirContext;
025import ca.uhn.fhir.mdm.api.IMdmControllerSvc;
026import ca.uhn.fhir.mdm.api.IMdmSettings;
027import ca.uhn.fhir.mdm.api.IMdmSubmitSvc;
028import ca.uhn.fhir.rest.server.provider.ResourceProviderFactory;
029import org.springframework.beans.factory.annotation.Autowired;
030import org.springframework.stereotype.Service;
031
032import javax.annotation.PreDestroy;
033
034@Service
035public class MdmProviderLoader {
036        @Autowired
037        private FhirContext myFhirContext;
038        @Autowired
039        private ResourceProviderFactory myResourceProviderFactory;
040        @Autowired
041        private MdmControllerHelper myMdmControllerHelper;
042        @Autowired
043        private IMdmControllerSvc myMdmControllerSvc;
044        @Autowired
045        private IMdmSubmitSvc myMdmSubmitSvc;
046        @Autowired
047        private IMdmSettings myMdmSettings;
048
049        private BaseMdmProvider myMdmProvider;
050
051        public void loadProvider() {
052                switch (myFhirContext.getVersion().getVersion()) {
053                        case DSTU3:
054                        case R4:
055                                myResourceProviderFactory.addSupplier(() -> {
056                                        myMdmProvider = new MdmProviderDstu3Plus(myFhirContext,
057                                                myMdmControllerSvc,
058                                                myMdmControllerHelper,
059                                                myMdmSubmitSvc,
060                                                myMdmSettings);
061                                        return myMdmProvider;
062                                });
063                                break;
064                        default:
065                                throw new ConfigurationException("MDM not supported for FHIR version " + myFhirContext.getVersion().getVersion());
066                }
067        }
068
069        @PreDestroy
070        public void unloadProvider() {
071                myResourceProviderFactory.removeSupplier(() -> myMdmProvider);
072        }
073}
074