001package ca.uhn.fhir.cql.common.helper;
002
003/*-
004 * #%L
005 * HAPI FHIR JPA Server - Clinical Quality Language
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 org.apache.commons.lang3.tuple.Triple;
024import org.cqframework.cql.elm.execution.Library.Usings;
025import org.cqframework.cql.elm.execution.UsingDef;
026
027import java.util.ArrayList;
028import java.util.Collections;
029import java.util.HashMap;
030import java.util.List;
031import java.util.Map;
032
033public class UsingHelper {
034
035    private static Map<String, String> urlsByModelName = new HashMap<String, String>() {
036        private static final long serialVersionUID = 1L;
037
038        {
039            put("FHIR", "http://hl7.org/fhir");
040            put("QDM", "urn:healthit-gov:qdm:v5_4");
041        }
042    };
043
044    // Returns a list of (Model, Version, Url) for the usings in library. The
045    // "System" using is excluded.
046    public static List<Triple<String, String, String>> getUsingUrlAndVersion(Usings usings) {
047        if (usings == null || usings.getDef() == null) {
048            return Collections.emptyList();
049        }
050
051        List<Triple<String, String, String>> usingDefs = new ArrayList<>();
052        for (UsingDef def : usings.getDef()) {
053
054            if (def.getLocalIdentifier().equals("System"))
055                continue;
056
057            usingDefs.add(Triple.of(def.getLocalIdentifier(), def.getVersion(),
058                    urlsByModelName.get(def.getLocalIdentifier())));
059        }
060
061        return usingDefs;
062    }
063}