
001package org.hl7.fhir.convertors.conv10_50.resources10_50; 002 003import java.util.ArrayList; 004import java.util.List; 005import java.util.Objects; 006 007import org.hl7.fhir.convertors.SourceElementComponentWrapper; 008import org.hl7.fhir.convertors.VersionConvertorConstants; 009import org.hl7.fhir.convertors.context.ConversionContext10_50; 010import org.hl7.fhir.convertors.conv10_50.VersionConvertor_10_50; 011import org.hl7.fhir.convertors.conv10_50.datatypes10_50.complextypes10_50.CodeableConcept10_50; 012import org.hl7.fhir.convertors.conv10_50.datatypes10_50.complextypes10_50.ContactPoint10_50; 013import org.hl7.fhir.convertors.conv10_50.datatypes10_50.complextypes10_50.Identifier10_50; 014import org.hl7.fhir.convertors.conv10_50.datatypes10_50.primitivetypes10_50.Boolean10_50; 015import org.hl7.fhir.convertors.conv10_50.datatypes10_50.primitivetypes10_50.Code10_50; 016import org.hl7.fhir.convertors.conv10_50.datatypes10_50.primitivetypes10_50.DateTime10_50; 017import org.hl7.fhir.convertors.conv10_50.datatypes10_50.primitivetypes10_50.String10_50; 018import org.hl7.fhir.convertors.conv10_50.datatypes10_50.primitivetypes10_50.Uri10_50; 019import org.hl7.fhir.dstu2.model.Enumerations.ConceptMapEquivalence; 020import org.hl7.fhir.exceptions.FHIRException; 021import org.hl7.fhir.r5.model.CanonicalType; 022import org.hl7.fhir.r5.model.ConceptMap; 023import org.hl7.fhir.r5.model.ConceptMap.ConceptMapGroupComponent; 024import org.hl7.fhir.r5.model.DataType; 025import org.hl7.fhir.r5.model.Enumeration; 026import org.hl7.fhir.r5.model.Enumerations; 027import org.hl7.fhir.r5.model.Enumerations.ConceptMapRelationship; 028import org.hl7.fhir.r5.utils.ToolingExtensions; 029 030public class ConceptMap10_50 { 031 032 public static org.hl7.fhir.r5.model.ConceptMap convertConceptMap(org.hl7.fhir.dstu2.model.ConceptMap src) throws FHIRException { 033 if (src == null || src.isEmpty()) 034 return null; 035 org.hl7.fhir.r5.model.ConceptMap tgt = new org.hl7.fhir.r5.model.ConceptMap(); 036 ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyDomainResource(src, tgt); 037 if (src.hasUrlElement()) 038 tgt.setUrlElement(Uri10_50.convertUri(src.getUrlElement())); 039 if (src.hasIdentifier()) 040 tgt.addIdentifier(Identifier10_50.convertIdentifier(src.getIdentifier())); 041 if (src.hasVersionElement()) 042 tgt.setVersionElement(String10_50.convertString(src.getVersionElement())); 043 if (src.hasNameElement()) 044 tgt.setNameElement(String10_50.convertString(src.getNameElement())); 045 if (src.hasStatus()) 046 tgt.setStatusElement(Enumerations10_50.convertConformanceResourceStatus(src.getStatusElement())); 047 if (src.hasExperimental()) 048 tgt.setExperimentalElement(Boolean10_50.convertBoolean(src.getExperimentalElement())); 049 if (src.hasPublisherElement()) 050 tgt.setPublisherElement(String10_50.convertString(src.getPublisherElement())); 051 for (org.hl7.fhir.dstu2.model.ConceptMap.ConceptMapContactComponent t : src.getContact()) 052 tgt.addContact(convertConceptMapContactComponent(t)); 053 if (src.hasDate()) 054 tgt.setDateElement(DateTime10_50.convertDateTime(src.getDateElement())); 055 if (src.hasDescription()) 056 tgt.setDescription(src.getDescription()); 057 for (org.hl7.fhir.dstu2.model.CodeableConcept t : src.getUseContext()) 058 if (VersionConvertor_10_50.isJurisdiction(t)) 059 tgt.addJurisdiction(CodeableConcept10_50.convertCodeableConcept(t)); 060 else 061 tgt.addUseContext(CodeableConcept10_50.convertCodeableConceptToUsageContext(t)); 062 if (src.hasRequirements()) 063 tgt.setPurpose(src.getRequirements()); 064 if (src.hasCopyright()) 065 tgt.setCopyright(src.getCopyright()); 066 if (src.hasSource()) { 067 org.hl7.fhir.r5.model.DataType r = ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().convertType(src.getSource()); 068 tgt.setSourceScope(r instanceof org.hl7.fhir.r5.model.Reference ? new CanonicalType(((org.hl7.fhir.r5.model.Reference) r).getReference()) : r); 069 } 070 if (src.hasTarget()) { 071 DataType r = ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().convertType(src.getTarget()); 072 tgt.setTargetScope(r instanceof org.hl7.fhir.r5.model.Reference ? new CanonicalType(((org.hl7.fhir.r5.model.Reference) r).getReference()) : r); 073 } 074 for (org.hl7.fhir.dstu2.model.ConceptMap.SourceElementComponent t : src.getElement()) { 075 List<SourceElementComponentWrapper<ConceptMap.SourceElementComponent>> ws = convertSourceElementComponent(t, tgt); 076 for (SourceElementComponentWrapper<ConceptMap.SourceElementComponent> w : ws) 077 getGroup(tgt, w.getSource(), w.getTarget()).addElement(w.getComp()); 078 } 079 return tgt; 080 } 081 082 public static org.hl7.fhir.dstu2.model.ConceptMap convertConceptMap(org.hl7.fhir.r5.model.ConceptMap src) throws FHIRException { 083 if (src == null || src.isEmpty()) 084 return null; 085 org.hl7.fhir.dstu2.model.ConceptMap tgt = new org.hl7.fhir.dstu2.model.ConceptMap(); 086 ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyDomainResource(src, tgt); 087 if (src.hasUrlElement()) 088 tgt.setUrlElement(Uri10_50.convertUri(src.getUrlElement())); 089 if (src.hasIdentifier()) { 090 if (src.hasIdentifier()) 091 tgt.setIdentifier(Identifier10_50.convertIdentifier(src.getIdentifierFirstRep())); 092 } 093 if (src.hasVersionElement()) 094 tgt.setVersionElement(String10_50.convertString(src.getVersionElement())); 095 if (src.hasNameElement()) 096 tgt.setNameElement(String10_50.convertString(src.getNameElement())); 097 if (src.hasStatus()) 098 tgt.setStatusElement(Enumerations10_50.convertConformanceResourceStatus(src.getStatusElement())); 099 if (src.hasExperimental()) 100 tgt.setExperimentalElement(Boolean10_50.convertBoolean(src.getExperimentalElement())); 101 if (src.hasPublisherElement()) 102 tgt.setPublisherElement(String10_50.convertString(src.getPublisherElement())); 103 for (org.hl7.fhir.r5.model.ContactDetail t : src.getContact()) tgt.addContact(convertConceptMapContactComponent(t)); 104 if (src.hasDate()) 105 tgt.setDateElement(DateTime10_50.convertDateTime(src.getDateElement())); 106 if (src.hasDescription()) 107 tgt.setDescription(src.getDescription()); 108 for (org.hl7.fhir.r5.model.UsageContext t : src.getUseContext()) 109 if (t.hasValueCodeableConcept()) 110 tgt.addUseContext(CodeableConcept10_50.convertCodeableConcept(t.getValueCodeableConcept())); 111 for (org.hl7.fhir.r5.model.CodeableConcept t : src.getJurisdiction()) 112 tgt.addUseContext(CodeableConcept10_50.convertCodeableConcept(t)); 113 if (src.hasPurpose()) 114 tgt.setRequirements(src.getPurpose()); 115 if (src.hasCopyright()) 116 tgt.setCopyright(src.getCopyright()); 117 if (src.hasSourceScope()) 118 tgt.setSource(ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().convertType(src.getSourceScope())); 119 if (src.hasTargetScope()) 120 tgt.setTarget(ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().convertType(src.getTargetScope())); 121 for (org.hl7.fhir.r5.model.ConceptMap.ConceptMapGroupComponent g : src.getGroup()) 122 for (org.hl7.fhir.r5.model.ConceptMap.SourceElementComponent t : g.getElement()) 123 tgt.addElement(convertSourceElementComponent(t, g, src)); 124 return tgt; 125 } 126 127 public static org.hl7.fhir.r5.model.ContactDetail convertConceptMapContactComponent(org.hl7.fhir.dstu2.model.ConceptMap.ConceptMapContactComponent src) throws FHIRException { 128 if (src == null || src.isEmpty()) 129 return null; 130 org.hl7.fhir.r5.model.ContactDetail tgt = new org.hl7.fhir.r5.model.ContactDetail(); 131 ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyElement(src, tgt); 132 if (src.hasNameElement()) 133 tgt.setNameElement(String10_50.convertString(src.getNameElement())); 134 for (org.hl7.fhir.dstu2.model.ContactPoint t : src.getTelecom()) 135 tgt.addTelecom(ContactPoint10_50.convertContactPoint(t)); 136 return tgt; 137 } 138 139 public static org.hl7.fhir.dstu2.model.ConceptMap.ConceptMapContactComponent convertConceptMapContactComponent(org.hl7.fhir.r5.model.ContactDetail src) throws FHIRException { 140 if (src == null || src.isEmpty()) 141 return null; 142 org.hl7.fhir.dstu2.model.ConceptMap.ConceptMapContactComponent tgt = new org.hl7.fhir.dstu2.model.ConceptMap.ConceptMapContactComponent(); 143 ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyElement(src, tgt); 144 if (src.hasNameElement()) 145 tgt.setNameElement(String10_50.convertString(src.getNameElement())); 146 for (org.hl7.fhir.r5.model.ContactPoint t : src.getTelecom()) 147 tgt.addTelecom(ContactPoint10_50.convertContactPoint(t)); 148 return tgt; 149 } 150 151 public static org.hl7.fhir.dstu2.model.Enumeration<ConceptMapEquivalence> convertConceptMapEquivalence(Enumeration<ConceptMapRelationship> src, org.hl7.fhir.r5.model.ConceptMap.TargetElementComponent ccm) throws FHIRException { 152 if (src == null || src.isEmpty()) 153 return null; 154 org.hl7.fhir.dstu2.model.Enumeration<ConceptMapEquivalence> tgt = new org.hl7.fhir.dstu2.model.Enumeration<ConceptMapEquivalence>(new org.hl7.fhir.dstu2.model.Enumerations.ConceptMapEquivalenceEnumFactory()); 155 ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyElement(src, tgt); 156 if (ccm.hasExtension(VersionConvertorConstants.EXT_OLD_CONCEPTMAP_EQUIVALENCE)) { 157 tgt.setValueAsString(ccm.getExtensionString(VersionConvertorConstants.EXT_OLD_CONCEPTMAP_EQUIVALENCE)); 158 } else { 159 if (src.getValue() == null) { 160 tgt.setValue(null); 161 } else { 162 switch (src.getValue()) { 163 case EQUIVALENT: 164 tgt.setValue(ConceptMapEquivalence.EQUIVALENT); 165 break; 166 case SOURCEISNARROWERTHANTARGET: 167 tgt.setValue(ConceptMapEquivalence.WIDER); 168 break; 169 case SOURCEISBROADERTHANTARGET: 170 tgt.setValue(ConceptMapEquivalence.NARROWER); 171 break; 172 case NOTRELATEDTO: 173 tgt.setValue(ConceptMapEquivalence.DISJOINT); 174 break; 175 default: 176 tgt.setValue(ConceptMapEquivalence.NULL); 177 break; 178 } 179 } 180 } 181 return tgt; 182 } 183 184 public static Enumeration<ConceptMapRelationship> convertConceptMapRelationship(org.hl7.fhir.dstu2.model.Enumeration<ConceptMapEquivalence> src, org.hl7.fhir.r5.model.ConceptMap.TargetElementComponent tgtCtxt) throws FHIRException { 185 if (src == null || src.isEmpty()) 186 return null; 187 Enumeration<ConceptMapRelationship> tgt = new Enumeration<ConceptMapRelationship>(new Enumerations.ConceptMapRelationshipEnumFactory()); 188 ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyElement(src, tgt); 189 ToolingExtensions.setCodeExtensionMod(tgtCtxt, VersionConvertorConstants.EXT_OLD_CONCEPTMAP_EQUIVALENCE, src.getValueAsString()); 190 if (src.getValue() == null) { 191 tgt.setValue(null); 192 } else { 193 switch (src.getValue()) { 194 case EQUIVALENT: 195 tgt.setValue(ConceptMapRelationship.EQUIVALENT); 196 break; 197 case EQUAL: 198 tgt.setValue(ConceptMapRelationship.EQUIVALENT); 199 break; 200 case WIDER: 201 tgt.setValue(ConceptMapRelationship.SOURCEISNARROWERTHANTARGET); 202 break; 203 case SUBSUMES: 204 tgt.setValue(ConceptMapRelationship.SOURCEISNARROWERTHANTARGET); 205 break; 206 case NARROWER: 207 tgt.setValue(ConceptMapRelationship.SOURCEISBROADERTHANTARGET); 208 break; 209 case SPECIALIZES: 210 tgt.setValue(ConceptMapRelationship.SOURCEISBROADERTHANTARGET); 211 break; 212 case INEXACT: 213 tgt.setValue(ConceptMapRelationship.RELATEDTO); 214 break; 215 case UNMATCHED: 216 tgt.setValue(ConceptMapRelationship.NULL); 217 break; 218 case DISJOINT: 219 tgt.setValue(ConceptMapRelationship.NOTRELATEDTO); 220 break; 221 default: 222 tgt.setValue(null); 223 break; 224 } 225 } 226 return tgt; 227 } 228 229 public static org.hl7.fhir.dstu2.model.ConceptMap.OtherElementComponent convertOtherElementComponent(org.hl7.fhir.r5.model.ConceptMap.OtherElementComponent src, org.hl7.fhir.r5.model.ConceptMap srcMap) throws FHIRException { 230 if (src == null || src.isEmpty()) 231 return null; 232 org.hl7.fhir.dstu2.model.ConceptMap.OtherElementComponent tgt = new org.hl7.fhir.dstu2.model.ConceptMap.OtherElementComponent(); 233 ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyBackboneElement(src,tgt); 234 if (src.hasAttribute()) 235 tgt.setElement(srcMap.getAttributeUri(src.getAttribute())); 236 if (src.hasValueCoding()) { 237 tgt.setCode(src.getValueCoding().getCode()); 238 } else if (src.hasValue()) { 239 tgt.setCode(src.getValue().primitiveValue()); 240 } 241 return tgt; 242 } 243 244 public static org.hl7.fhir.r5.model.ConceptMap.OtherElementComponent convertOtherElementComponent(org.hl7.fhir.dstu2.model.ConceptMap.OtherElementComponent src, org.hl7.fhir.r5.model.ConceptMap tgtMap) throws FHIRException { 245 if (src == null || src.isEmpty()) 246 return null; 247 org.hl7.fhir.r5.model.ConceptMap.OtherElementComponent tgt = new org.hl7.fhir.r5.model.ConceptMap.OtherElementComponent(); 248 ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyBackboneElement(src,tgt); 249 if (src.hasElementElement()) 250 tgt.setAttribute(tgtMap.registerAttribute(src.getElement())); 251 tgt.setValue(String10_50.convertString(src.getCodeElement())); 252 return tgt; 253 } 254 255 public static org.hl7.fhir.dstu2.model.ConceptMap.SourceElementComponent convertSourceElementComponent(org.hl7.fhir.r5.model.ConceptMap.SourceElementComponent src, org.hl7.fhir.r5.model.ConceptMap.ConceptMapGroupComponent g, org.hl7.fhir.r5.model.ConceptMap srcMap) throws FHIRException { 256 if (src == null || src.isEmpty()) 257 return null; 258 org.hl7.fhir.dstu2.model.ConceptMap.SourceElementComponent tgt = new org.hl7.fhir.dstu2.model.ConceptMap.SourceElementComponent(); 259 ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyBackboneElement(src,tgt); 260 tgt.setCodeSystem(g.getSource()); 261 if (src.hasCodeElement()) 262 tgt.setCodeElement(Code10_50.convertCode(src.getCodeElement())); 263 if (src.hasNoMap() && src.getNoMap() == true) { 264 tgt.addTarget(new org.hl7.fhir.dstu2.model.ConceptMap.TargetElementComponent().setEquivalence(org.hl7.fhir.dstu2.model.Enumerations.ConceptMapEquivalence.UNMATCHED)); 265 } else { 266 for (org.hl7.fhir.r5.model.ConceptMap.TargetElementComponent t : src.getTarget()) 267 tgt.addTarget(convertTargetElementComponent(t, g, srcMap)); 268 } 269 return tgt; 270 } 271 272 public static List<SourceElementComponentWrapper<ConceptMap.SourceElementComponent>> convertSourceElementComponent(org.hl7.fhir.dstu2.model.ConceptMap.SourceElementComponent src, org.hl7.fhir.r5.model.ConceptMap tgtMap) throws FHIRException { 273 List<SourceElementComponentWrapper<ConceptMap.SourceElementComponent>> res = new ArrayList<>(); 274 if (src == null || src.isEmpty()) 275 return res; 276 for (org.hl7.fhir.dstu2.model.ConceptMap.TargetElementComponent t : src.getTarget()) { 277 org.hl7.fhir.r5.model.ConceptMap.SourceElementComponent tgt = new org.hl7.fhir.r5.model.ConceptMap.SourceElementComponent(); 278 ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyBackboneElement(src,tgt); 279 tgt.setCode(src.getCode()); 280 if (t.getEquivalence() == org.hl7.fhir.dstu2.model.Enumerations.ConceptMapEquivalence.UNMATCHED) { 281 tgt.setNoMap(true); 282 } else { 283 tgt.addTarget(convertTargetElementComponent(t, tgtMap)); 284 } 285 res.add(new SourceElementComponentWrapper<>(tgt, src.getCodeSystem(), t.getCodeSystem())); 286 } 287 return res; 288 } 289 290 public static org.hl7.fhir.dstu2.model.ConceptMap.TargetElementComponent convertTargetElementComponent(org.hl7.fhir.r5.model.ConceptMap.TargetElementComponent src, org.hl7.fhir.r5.model.ConceptMap.ConceptMapGroupComponent g, org.hl7.fhir.r5.model.ConceptMap srcMap) throws FHIRException { 291 if (src == null || src.isEmpty()) 292 return null; 293 org.hl7.fhir.dstu2.model.ConceptMap.TargetElementComponent tgt = new org.hl7.fhir.dstu2.model.ConceptMap.TargetElementComponent(); 294 ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyBackboneElement(src,tgt, VersionConvertorConstants.EXT_OLD_CONCEPTMAP_EQUIVALENCE); 295 tgt.setCodeSystem(g.getTarget()); 296 if (src.hasCodeElement()) 297 tgt.setCodeElement(Code10_50.convertCode(src.getCodeElement())); 298 if (src.hasRelationship()) 299 tgt.setEquivalenceElement(convertConceptMapEquivalence(src.getRelationshipElement(), src)); 300 if (src.hasCommentElement()) 301 tgt.setCommentsElement(String10_50.convertString(src.getCommentElement())); 302 for (org.hl7.fhir.r5.model.ConceptMap.OtherElementComponent t : src.getDependsOn()) 303 tgt.addDependsOn(convertOtherElementComponent(t, srcMap)); 304 for (org.hl7.fhir.r5.model.ConceptMap.OtherElementComponent t : src.getProduct()) 305 tgt.addProduct(convertOtherElementComponent(t, srcMap)); 306 return tgt; 307 } 308 309 public static org.hl7.fhir.r5.model.ConceptMap.TargetElementComponent convertTargetElementComponent(org.hl7.fhir.dstu2.model.ConceptMap.TargetElementComponent src, org.hl7.fhir.r5.model.ConceptMap tgtMap) throws FHIRException { 310 if (src == null || src.isEmpty()) 311 return null; 312 org.hl7.fhir.r5.model.ConceptMap.TargetElementComponent tgt = new org.hl7.fhir.r5.model.ConceptMap.TargetElementComponent(); 313 ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyBackboneElement(src,tgt); 314 if (src.hasCodeElement()) 315 tgt.setCodeElement(Code10_50.convertCode(src.getCodeElement())); 316 if (src.hasEquivalence()) 317 tgt.setRelationshipElement(convertConceptMapRelationship(src.getEquivalenceElement(), tgt)); 318 if (src.hasCommentsElement()) 319 tgt.setCommentElement(String10_50.convertString(src.getCommentsElement())); 320 for (org.hl7.fhir.dstu2.model.ConceptMap.OtherElementComponent t : src.getDependsOn()) 321 tgt.addDependsOn(convertOtherElementComponent(t, tgtMap)); 322 for (org.hl7.fhir.dstu2.model.ConceptMap.OtherElementComponent t : src.getProduct()) 323 tgt.addProduct(convertOtherElementComponent(t, tgtMap)); 324 return tgt; 325 } 326 327 static public ConceptMapGroupComponent getGroup(ConceptMap map, String srcs, String tgts) { 328 for (ConceptMapGroupComponent grp : map.getGroup()) { 329 if (Objects.equals(grp.getSource(), srcs) && Objects.equals(grp.getTarget(), tgts)) 330 return grp; 331 } 332 ConceptMapGroupComponent grp = map.addGroup(); 333 grp.setSource(srcs); 334 grp.setTarget(tgts); 335 return grp; 336 } 337}