
001package org.hl7.fhir.convertors.txClient; 002 003import java.net.URISyntaxException; 004 005import org.hl7.fhir.r5.terminologies.client.ITerminologyClient; 006import org.hl7.fhir.r5.terminologies.client.TerminologyClientManager.ITerminologyClientFactory; 007import org.hl7.fhir.r5.terminologies.client.TerminologyClientR5; 008import org.hl7.fhir.utilities.FhirPublication; 009import org.hl7.fhir.utilities.ToolingClientLogger; 010import org.hl7.fhir.utilities.Utilities; 011import org.hl7.fhir.utilities.VersionUtilities; 012 013public class TerminologyClientFactory implements ITerminologyClientFactory { 014 015 private String v; 016 017 public TerminologyClientFactory(FhirPublication v) { 018 super(); 019 this.v = v == null ? null : v.toCode(); 020 } 021 022 public TerminologyClientFactory(String version) { 023 super(); 024 this.v = version; 025 } 026 027 @Override 028 public ITerminologyClient makeClient(String id, String url, String userAgent, ToolingClientLogger logger) throws URISyntaxException { 029 if (v == null) 030 return new TerminologyClientR5(id, checkEndsWith("/r4", url), userAgent).setLogger(logger); 031 v = VersionUtilities.getMajMin(v); 032 if (VersionUtilities.isR2Ver(v)) { 033 return new TerminologyClientR2(id, checkEndsWith("/r2", url), userAgent).setLogger(logger); 034 } 035 if (VersionUtilities.isR2BVer(v)) { 036 return new TerminologyClientR3(id, checkEndsWith("/r3", url), userAgent).setLogger(logger); // r3 is the least worst match 037 } 038 if (VersionUtilities.isR3Ver(v)) { 039 return new TerminologyClientR3(id, checkEndsWith("/r3", url), userAgent).setLogger(logger); // r3 is the least worst match 040 } 041 if (VersionUtilities.isR4Ver(v)) { 042 return new TerminologyClientR4(id, checkEndsWith("/r4", url), userAgent).setLogger(logger); 043 } 044 if (VersionUtilities.isR4BVer(v)) { 045 return new TerminologyClientR4(id, checkEndsWith("/r4", url), userAgent).setLogger(logger); 046 } 047 if (VersionUtilities.isR5Plus(v)) { 048 return new TerminologyClientR5(id, checkEndsWith("/r4", url), userAgent).setLogger(logger); // r4 for now, since the terminology is currently the same 049 } 050 throw new Error("The version " + v + " is not currently supported"); 051 } 052 053 private String checkEndsWith(String term, String url) { 054 if (url.endsWith(term)) 055 return url; 056 if (Utilities.isTxFhirOrgServer(url)) { 057 return Utilities.pathURL(url, term); 058 } 059 return url; 060 } 061 062 @Override 063 public String getVersion() { 064 return v; 065 } 066 067}