
001package org.hl7.fhir.r5.context; 002 003import org.hl7.fhir.utilities.CommaSeparatedStringBuilder; 004 005import java.util.*; 006 007public interface IOIDServices { 008 009 public static class OIDDefinitionComparer implements Comparator<OIDDefinition> { 010 011 @Override 012 public int compare(OIDDefinition o1, OIDDefinition o2) { 013 if (o1.getUrl().equals(o2.getUrl())) { 014 return -o1.getVersion().compareTo(o2.getVersion()); 015 } else { 016 return o1.getUrl().compareTo(o2.getUrl()); 017 } 018 } 019 } 020 021 public static class OIDDefinition { 022 private String type; 023 private String oid; 024 private String url; 025 private String version; 026 private String packageSrc; 027 private String status; 028 protected OIDDefinition(String type, String oid, String url, String version, String status, String packageSrc) { 029 super(); 030 this.type = type; 031 this.oid = oid; 032 this.url = url; 033 this.version = version == null ? "" : version; 034 this.packageSrc = packageSrc; 035 this.status = status; 036 } 037 public String getType() { 038 return type; 039 } 040 public String getOid() { 041 return oid; 042 } 043 public String getUrl() { 044 return url; 045 } 046 public String getVersion() { 047 return version; 048 } 049 public String getStatus() { 050 return status; 051 } 052 public String getPackageSrc() { 053 return packageSrc; 054 } 055 public String summary() { 056 return url+(version == null ? "" : "|"+version)+(packageSrc != null ? "("+packageSrc+")" : ""); 057 } 058 public boolean matches(OIDDefinition t) { 059 return url.equals(t.url) && version.equals(t.version); 060 } 061 062 } 063 064 public static class OIDSummary { 065 private List<OIDDefinition> definitions = new ArrayList<>(); 066 private List<String> urls = new ArrayList<>(); 067 068 public void addOID(OIDDefinition d) { 069 for (OIDDefinition t : definitions) { 070 if (d.matches(t)) { 071 return; 072 } 073 } 074 definitions.add(d); 075 if (!urls.contains(d.getUrl())) { 076 urls.add(d.getUrl()); 077 } 078 } 079 080 public void addOIDs(Collection<OIDDefinition> collection) { 081 for (OIDDefinition t : collection) { 082 addOID(t); 083 } 084 } 085 086 public List<OIDDefinition> getDefinitions() { 087 return definitions; 088 } 089 090 public void sort() { 091 Collections.sort(definitions, new OIDDefinitionComparer()); 092 Collections.sort(urls); 093 } 094 public String describe() { 095 CommaSeparatedStringBuilder b = new CommaSeparatedStringBuilder(); 096 for (OIDDefinition d : definitions) { 097 b.append(d.summary()); 098 } 099 return b.toString(); 100 } 101 102 public String chooseBestUrl() { 103 for (OIDDefinition d : definitions) { 104 if (d.getPackageSrc() == null) { 105 return d.getUrl(); 106 } 107 } 108 for (OIDDefinition d : definitions) { 109 if (d.getUrl().startsWith("http://hl7.org/fhir/")) { 110 return d.getUrl(); 111 } 112 } 113 for (OIDDefinition d : definitions) { 114 if (!d.getUrl().contains("vsac")) { 115 return d.getUrl(); 116 } 117 } 118 return null; 119 } 120 121 public int urlCount() { 122 return urls.size(); 123 } 124 125 public String getUrl() { 126 return urls.iterator().next(); 127 } 128 } 129 130 public IOIDServices.OIDSummary urlsForOid(String oid, String resourceType); 131 132}