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