001package ca.uhn.fhir.jpa.mdm.svc;
002
003/*-
004 * #%L
005 * HAPI FHIR JPA Server - 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.FhirContext;
024import ca.uhn.fhir.mdm.api.IMdmSurvivorshipService;
025import ca.uhn.fhir.mdm.model.MdmTransactionContext;
026import ca.uhn.fhir.util.TerserUtil;
027import org.hl7.fhir.instance.model.api.IBase;
028import org.hl7.fhir.instance.model.api.IBaseResource;
029import org.springframework.beans.factory.annotation.Autowired;
030
031public class MdmSurvivorshipSvcImpl implements IMdmSurvivorshipService {
032
033        @Autowired
034        private FhirContext myFhirContext;
035
036        /**
037         * Merges two golden resources by overwriting all field values on theGoldenResource param for CREATE_RESOURCE,
038         * UPDATE_RESOURCE, SUBMIT_RESOURCE_TO_MDM, UPDATE_LINK (when setting to MATCH) and MANUAL_MERGE_GOLDEN_RESOURCES.
039         * PID, identifiers and meta values are not affected by this operation.
040         *
041         * @param theTargetResource        Target resource to retrieve fields from
042         * @param theGoldenResource        Golden resource to merge fields into
043         * @param theMdmTransactionContext Current transaction context
044         * @param <T>
045         */
046        @Override
047        public <T extends IBase> void applySurvivorshipRulesToGoldenResource(T theTargetResource, T theGoldenResource, MdmTransactionContext theMdmTransactionContext) {
048                switch (theMdmTransactionContext.getRestOperation()) {
049                        case MERGE_GOLDEN_RESOURCES:
050                                TerserUtil.mergeFields(myFhirContext, (IBaseResource) theTargetResource, (IBaseResource) theGoldenResource, TerserUtil.EXCLUDE_IDS_AND_META);
051                                break;
052                        default:
053                                TerserUtil.replaceFields(myFhirContext, (IBaseResource) theTargetResource, (IBaseResource) theGoldenResource, TerserUtil.EXCLUDE_IDS_AND_META);
054                                break;
055                }
056        }
057}