All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.ibm.fhir.model.util.ReferenceMappingVisitor Maven / Gradle / Ivy

/*
 * (C) Copyright IBM Corp. 2019
 *
 * SPDX-License-Identifier: Apache-2.0
 */

package com.ibm.fhir.model.util;

import static com.ibm.fhir.model.type.String.string;

import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;

import com.ibm.fhir.model.type.Reference;
import com.ibm.fhir.model.visitor.CopyingVisitor;
import com.ibm.fhir.model.visitor.Visitable;

/**
 * Copy the value of each element within a Resource/Element to a new element
 * with the same values, replacing {@code Reference.reference} values with a new value
 * 
 * @param  The type to copy. Only visitables of this type should be visited.
 */
public class ReferenceMappingVisitor extends CopyingVisitor {
    private static final Logger log = java.util.logging.Logger.getLogger(ReferenceMappingVisitor.class.getName());
    private Map localRefMap;

    /**
     * @param localRefMap a mapping from the current Reference values to the desired ones
     */
    public ReferenceMappingVisitor(Map localRefMap) {
        super();
        this.localRefMap = localRefMap;
    }

    @Override
    public boolean visit(String elementName, int elementIndex, Reference reference) {
        if (reference != null && reference.getReference() != null && reference.getReference().hasValue()) {
            String refValue = reference.getReference().getValue();
            String newRefValue = localRefMap.get(refValue);
            if (newRefValue != null) {
                if (log.isLoggable(Level.FINER)) {
                    log.finer("Replacing '" + refValue + "' with new value '" + newRefValue + "'");
                }
                ((Reference.Builder) getBuilder()).reference(string(newRefValue));
                markDirty();
            } else {
                if (log.isLoggable(Level.FINER)) {
                    log.finer("Reference '" + refValue + "' is not replaced "
                            + "because it was not found in the local reference map");
                }
            }
        }
        return false;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy