001package org.hl7.fhir.convertors.context;
002
003import org.hl7.fhir.convertors.loaders.loaderR5.ILoaderKnowledgeProviderR5;
004import org.hl7.fhir.convertors.loaders.loaderR5.R2016MayToR5Loader;
005import org.hl7.fhir.convertors.loaders.loaderR5.R2ToR5Loader;
006import org.hl7.fhir.convertors.loaders.loaderR5.R3ToR5Loader;
007import org.hl7.fhir.convertors.loaders.loaderR5.R4BToR5Loader;
008import org.hl7.fhir.convertors.loaders.loaderR5.R4ToR5Loader;
009import org.hl7.fhir.convertors.loaders.loaderR5.R5ToR5Loader;
010import org.hl7.fhir.convertors.loaders.loaderR5.R6ToR5Loader;
011import org.hl7.fhir.r5.context.IContextResourceLoader;
012import org.hl7.fhir.utilities.Utilities;
013import org.hl7.fhir.utilities.VersionUtilities;
014
015public class ContextResourceLoaderFactory {
016
017  public static IContextResourceLoader makeLoader(String version, ILoaderKnowledgeProviderR5 loader) {
018    if (VersionUtilities.isR2Ver(version)) { 
019      return new R2ToR5Loader(Utilities.strings("Conformance", "StructureDefinition", "ValueSet", "SearchParameter", "OperationDefinition", "Questionnaire", "ConceptMap", "StructureMap", "NamingSystem"), loader);
020    } 
021    if (VersionUtilities.isR2BVer(version)) {
022      return new R2016MayToR5Loader(Utilities.strings("Conformance", "StructureDefinition", "ValueSet", "CodeSystem", "SearchParameter", "OperationDefinition", "Questionnaire", "ConceptMap", "StructureMap", "NamingSystem"), loader); // special case
023    }
024    if (VersionUtilities.isR3Ver(version)) {
025      return new R3ToR5Loader(Utilities.strings("CapabilityStatement", "StructureDefinition", "ValueSet", "CodeSystem", "SearchParameter", "OperationDefinition", "Questionnaire", "ConceptMap", "StructureMap", "NamingSystem"), loader);
026    }
027    if (VersionUtilities.isR4Ver(version)) {
028      return new R4ToR5Loader(Utilities.strings("CapabilityStatement", "StructureDefinition", "ValueSet", "CodeSystem", "SearchParameter", "OperationDefinition", "Questionnaire", "ConceptMap", "StructureMap", "NamingSystem"), loader, version);
029    }
030    if (VersionUtilities.isR4BVer(version)) {
031      return new R4BToR5Loader(Utilities.strings("CapabilityStatement", "StructureDefinition", "ValueSet", "CodeSystem", "SearchParameter", "OperationDefinition", "Questionnaire", "ConceptMap", "StructureMap", "NamingSystem"), loader, version);
032    }
033    if (VersionUtilities.isR6Ver(version)) {
034      return new R6ToR5Loader(Utilities.strings("CapabilityStatement", "StructureDefinition", "ValueSet", "CodeSystem", "SearchParameter", "OperationDefinition", "Questionnaire", "ConceptMap", "StructureMap", "NamingSystem"), loader);
035    }
036    return new R5ToR5Loader(Utilities.strings("CapabilityStatement", "StructureDefinition", "ValueSet", "CodeSystem", "SearchParameter", "OperationDefinition", "Questionnaire", "ConceptMap", "StructureMap", "NamingSystem"), loader);
037  }
038
039}