001package org.hl7.fhir.convertors.conv40_50.resources40_50;
002
003import org.hl7.fhir.convertors.VersionConvertorConstants;
004import org.hl7.fhir.convertors.context.ConversionContext40_50;
005import org.hl7.fhir.convertors.conv40_50.datatypes40_50.general40_50.CodeableConcept40_50;
006import org.hl7.fhir.convertors.conv40_50.datatypes40_50.general40_50.Identifier40_50;
007import org.hl7.fhir.convertors.conv40_50.datatypes40_50.metadata40_50.ContactDetail40_50;
008import org.hl7.fhir.convertors.conv40_50.datatypes40_50.metadata40_50.UsageContext40_50;
009import org.hl7.fhir.convertors.conv40_50.datatypes40_50.primitive40_50.Boolean40_50;
010import org.hl7.fhir.convertors.conv40_50.datatypes40_50.primitive40_50.Canonical40_50;
011import org.hl7.fhir.convertors.conv40_50.datatypes40_50.primitive40_50.Code40_50;
012import org.hl7.fhir.convertors.conv40_50.datatypes40_50.primitive40_50.DateTime40_50;
013import org.hl7.fhir.convertors.conv40_50.datatypes40_50.primitive40_50.MarkDown40_50;
014import org.hl7.fhir.convertors.conv40_50.datatypes40_50.primitive40_50.String40_50;
015import org.hl7.fhir.convertors.conv40_50.datatypes40_50.primitive40_50.Uri40_50;
016import org.hl7.fhir.exceptions.FHIRException;
017import org.hl7.fhir.r4.model.Enumerations.ConceptMapEquivalence;
018import org.hl7.fhir.r5.extensions.ExtensionDefinitions;
019import org.hl7.fhir.r5.extensions.ExtensionUtilities;
020import org.hl7.fhir.r5.model.*;
021import org.hl7.fhir.r5.model.Enumerations.ConceptMapRelationship;
022import org.hl7.fhir.utilities.CanonicalPair;
023
024/*
025  Copyright (c) 2011+, HL7, Inc.
026  All rights reserved.
027  
028  Redistribution and use in source and binary forms, with or without modification, 
029  are permitted provided that the following conditions are met:
030  
031   * Redistributions of source code must retain the above copyright notice, this 
032     list of conditions and the following disclaimer.
033   * Redistributions in binary form must reproduce the above copyright notice, 
034     this list of conditions and the following disclaimer in the documentation 
035     and/or other materials provided with the distribution.
036   * Neither the name of HL7 nor the names of its contributors may be used to 
037     endorse or promote products derived from this software without specific 
038     prior written permission.
039  
040  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
041  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
042  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
043  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
044  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
045  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
046  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
047  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
048  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
049  POSSIBILITY OF SUCH DAMAGE.
050  
051*/
052// Generated on Sun, Feb 24, 2019 11:37+1100 for FHIR v4.0.0
053public class ConceptMap40_50 {
054
055  public static org.hl7.fhir.r5.model.ConceptMap convertConceptMap(org.hl7.fhir.r4.model.ConceptMap src) throws FHIRException {
056    if (src == null)
057      return null;
058    org.hl7.fhir.r5.model.ConceptMap tgt = new org.hl7.fhir.r5.model.ConceptMap();
059    ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyDomainResource(src, tgt);
060    if (src.hasUrl())
061      tgt.setUrlElement(Uri40_50.convertUri(src.getUrlElement()));
062    if (src.hasIdentifier())
063      tgt.addIdentifier(Identifier40_50.convertIdentifier(src.getIdentifier()));
064    if (src.hasVersion())
065      tgt.setVersionElement(String40_50.convertString(src.getVersionElement()));
066    if (src.hasName())
067      tgt.setNameElement(String40_50.convertString(src.getNameElement()));
068    if (src.hasTitle())
069      tgt.setTitleElement(String40_50.convertString(src.getTitleElement()));
070    if (src.hasStatus())
071      tgt.setStatusElement(Enumerations40_50.convertPublicationStatus(src.getStatusElement()));
072    if (src.hasExperimental())
073      tgt.setExperimentalElement(Boolean40_50.convertBoolean(src.getExperimentalElement()));
074    if (src.hasDate())
075      tgt.setDateElement(DateTime40_50.convertDateTime(src.getDateElement()));
076    if (src.hasPublisher())
077      tgt.setPublisherElement(String40_50.convertString(src.getPublisherElement()));
078    for (org.hl7.fhir.r4.model.ContactDetail t : src.getContact())
079      tgt.addContact(ContactDetail40_50.convertContactDetail(t));
080    if (src.hasDescription())
081      tgt.setDescriptionElement(MarkDown40_50.convertMarkdown(src.getDescriptionElement()));
082    for (org.hl7.fhir.r4.model.UsageContext t : src.getUseContext())
083      tgt.addUseContext(UsageContext40_50.convertUsageContext(t));
084    for (org.hl7.fhir.r4.model.CodeableConcept t : src.getJurisdiction())
085      tgt.addJurisdiction(CodeableConcept40_50.convertCodeableConcept(t));
086    if (src.hasPurpose())
087      tgt.setPurposeElement(MarkDown40_50.convertMarkdown(src.getPurposeElement()));
088    if (src.hasCopyright())
089      tgt.setCopyrightElement(MarkDown40_50.convertMarkdown(src.getCopyrightElement()));
090    if (src.hasSource())
091      tgt.setSourceScope(ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().convertType(src.getSource()));
092    if (src.hasTarget())
093      tgt.setTargetScope(ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().convertType(src.getTarget()));
094    for (org.hl7.fhir.r4.model.ConceptMap.ConceptMapGroupComponent t : src.getGroup())
095      tgt.addGroup(convertConceptMapGroupComponent(t, tgt));
096    return tgt;
097  }
098
099  public static org.hl7.fhir.r4.model.ConceptMap convertConceptMap(org.hl7.fhir.r5.model.ConceptMap src) throws FHIRException {
100    if (src == null)
101      return null;
102    org.hl7.fhir.r4.model.ConceptMap tgt = new org.hl7.fhir.r4.model.ConceptMap();
103    ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyDomainResource(src, tgt);
104    if (src.hasUrl())
105      tgt.setUrlElement(Uri40_50.convertUri(src.getUrlElement()));
106    if (src.hasIdentifier())
107      tgt.setIdentifier(Identifier40_50.convertIdentifier(src.getIdentifierFirstRep()));
108    if (src.hasVersion())
109      tgt.setVersionElement(String40_50.convertString(src.getVersionElement()));
110    if (src.hasName())
111      tgt.setNameElement(String40_50.convertString(src.getNameElement()));
112    if (src.hasTitle())
113      tgt.setTitleElement(String40_50.convertString(src.getTitleElement()));
114    if (src.hasStatus())
115      tgt.setStatusElement(Enumerations40_50.convertPublicationStatus(src.getStatusElement()));
116    if (src.hasExperimental())
117      tgt.setExperimentalElement(Boolean40_50.convertBoolean(src.getExperimentalElement()));
118    if (src.hasDate())
119      tgt.setDateElement(DateTime40_50.convertDateTime(src.getDateElement()));
120    if (src.hasPublisher())
121      tgt.setPublisherElement(String40_50.convertString(src.getPublisherElement()));
122    for (org.hl7.fhir.r5.model.ContactDetail t : src.getContact())
123      tgt.addContact(ContactDetail40_50.convertContactDetail(t));
124    if (src.hasDescription())
125      tgt.setDescriptionElement(MarkDown40_50.convertMarkdown(src.getDescriptionElement()));
126    for (org.hl7.fhir.r5.model.UsageContext t : src.getUseContext())
127      tgt.addUseContext(UsageContext40_50.convertUsageContext(t));
128    for (org.hl7.fhir.r5.model.CodeableConcept t : src.getJurisdiction())
129      tgt.addJurisdiction(CodeableConcept40_50.convertCodeableConcept(t));
130    if (src.hasPurpose())
131      tgt.setPurposeElement(MarkDown40_50.convertMarkdown(src.getPurposeElement()));
132    if (src.hasCopyright())
133      tgt.setCopyrightElement(MarkDown40_50.convertMarkdown(src.getCopyrightElement()));
134    if (src.hasSourceScope())
135      tgt.setSource(ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().convertType(src.getSourceScope()));
136    if (src.hasTargetScope())
137      tgt.setTarget(ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().convertType(src.getTargetScope()));
138    for (org.hl7.fhir.r5.model.ConceptMap.ConceptMapGroupComponent t : src.getGroup())
139      tgt.addGroup(convertConceptMapGroupComponent(t, src));
140    return tgt;
141  }
142
143  public static org.hl7.fhir.r5.model.ConceptMap.ConceptMapGroupComponent convertConceptMapGroupComponent(org.hl7.fhir.r4.model.ConceptMap.ConceptMapGroupComponent src, org.hl7.fhir.r5.model.ConceptMap tgtMap) throws FHIRException {
144    if (src == null)
145      return null;
146    org.hl7.fhir.r5.model.ConceptMap.ConceptMapGroupComponent tgt = new org.hl7.fhir.r5.model.ConceptMap.ConceptMapGroupComponent();
147    ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyBackboneElement(src, tgt);
148    if (src.hasSource() || src.hasSourceVersion())
149      tgt.setSourceElement(convertUriAndVersionToCanonical(src.getSourceElement(), src.getSourceVersionElement()));
150    if (src.hasTarget() || src.hasTargetVersion())
151      tgt.setTargetElement(convertUriAndVersionToCanonical(src.getTargetElement(), src.getTargetVersionElement()));
152    for (org.hl7.fhir.r4.model.ConceptMap.SourceElementComponent t : src.getElement())
153      tgt.addElement(convertSourceElementComponent(t, tgtMap));
154    if (src.hasUnmapped())
155      tgt.setUnmapped(convertConceptMapGroupUnmappedComponent(src.getUnmapped()));
156    return tgt;
157  }
158
159  private static CanonicalType convertUriAndVersionToCanonical(org.hl7.fhir.r4.model.UriType srcUri, org.hl7.fhir.r4.model.StringType srcVersion) {
160    if (srcUri == null && srcVersion == null)
161      return null;
162    org.hl7.fhir.r5.model.CanonicalType tgt = new org.hl7.fhir.r5.model.CanonicalType();
163    ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyElement(srcUri == null ? srcVersion : srcUri, tgt);
164    if (srcUri.hasValue()) {
165      if (srcVersion.hasValue()) {
166        tgt.setValue(srcUri.getValue() + "|" + srcVersion.getValue());
167      } else {
168        tgt.setValue(srcUri.getValue());
169      }
170    }
171    return tgt;
172  }
173
174  public static org.hl7.fhir.r4.model.ConceptMap.ConceptMapGroupComponent convertConceptMapGroupComponent(org.hl7.fhir.r5.model.ConceptMap.ConceptMapGroupComponent src, org.hl7.fhir.r5.model.ConceptMap srcMap) throws FHIRException {
175    if (src == null)
176      return null;
177    org.hl7.fhir.r4.model.ConceptMap.ConceptMapGroupComponent tgt = new org.hl7.fhir.r4.model.ConceptMap.ConceptMapGroupComponent();
178    ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyBackboneElement(src, tgt);
179    if (src.hasSource()) {
180      CanonicalPair cp = new CanonicalPair(src.getSource());
181      tgt.setSource(cp.getUrl());
182      tgt.setSourceVersion(cp.getVersion());
183    }
184    if (src.hasTarget()) {
185      CanonicalPair cp = new CanonicalPair(src.getTarget());
186      tgt.setTarget(cp.getUrl());
187      tgt.setTargetVersion(cp.getVersion());
188    }
189    for (org.hl7.fhir.r5.model.ConceptMap.SourceElementComponent t : src.getElement())
190      tgt.addElement(convertSourceElementComponent(t, srcMap));
191    if (src.hasUnmapped())
192      tgt.setUnmapped(convertConceptMapGroupUnmappedComponent(src.getUnmapped()));
193    return tgt;
194  }
195
196  public static org.hl7.fhir.r5.model.ConceptMap.SourceElementComponent convertSourceElementComponent(org.hl7.fhir.r4.model.ConceptMap.SourceElementComponent src, org.hl7.fhir.r5.model.ConceptMap tgtMap) throws FHIRException {
197    if (src == null)
198      return null;
199    org.hl7.fhir.r5.model.ConceptMap.SourceElementComponent tgt = new org.hl7.fhir.r5.model.ConceptMap.SourceElementComponent();
200    ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyBackboneElement(src, tgt);
201    if (src.hasCode())
202      tgt.setCodeElement(Code40_50.convertCode(src.getCodeElement()));
203    if (src.hasDisplay())
204      tgt.setDisplayElement(String40_50.convertString(src.getDisplayElement()));
205    for (org.hl7.fhir.r4.model.ConceptMap.TargetElementComponent t : src.getTarget()) {
206      if (t.getEquivalence() == org.hl7.fhir.r4.model.Enumerations.ConceptMapEquivalence.UNMATCHED) {
207        tgt.setNoMap(true);
208        if (t.hasComment()) {
209          if (tgt.hasExtension(ExtensionDefinitions.EXT_CM_NOMAP_COMMENT)) {
210            throw new FHIRException("A source can only have one 'unmatched' relationship. Consider using 'disjoint' ");
211          }
212          tgt.addExtension(ExtensionDefinitions.EXT_CM_NOMAP_COMMENT, ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().convertType(t.getCommentElement()));
213        }
214      } else {
215        tgt.addTarget(convertTargetElementComponent(t, tgtMap));
216      }
217    }
218    return tgt;
219  }
220
221  public static org.hl7.fhir.r4.model.ConceptMap.SourceElementComponent convertSourceElementComponent(org.hl7.fhir.r5.model.ConceptMap.SourceElementComponent src, org.hl7.fhir.r5.model.ConceptMap srcMap) throws FHIRException {
222    if (src == null)
223      return null;
224    org.hl7.fhir.r4.model.ConceptMap.SourceElementComponent tgt = new org.hl7.fhir.r4.model.ConceptMap.SourceElementComponent();
225    ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyBackboneElement(src, tgt, ExtensionDefinitions.EXT_CM_NOMAP_COMMENT);
226    if (src.hasCode())
227      tgt.setCodeElement(Code40_50.convertCode(src.getCodeElement()));
228    if (src.hasDisplay())
229      tgt.setDisplayElement(String40_50.convertString(src.getDisplayElement()));
230    if (src.hasNoMap() && src.getNoMap() == true) {
231      org.hl7.fhir.r4.model.ConceptMap.TargetElementComponent t = new org.hl7.fhir.r4.model.ConceptMap.TargetElementComponent();
232      t.setEquivalence(org.hl7.fhir.r4.model.Enumerations.ConceptMapEquivalence.UNMATCHED);
233      if (src.hasExtension(ExtensionDefinitions.EXT_CM_NOMAP_COMMENT)) {
234        t.setCommentElement((org.hl7.fhir.r4.model.StringType) ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().convertType(src.getExtensionByUrl(ExtensionDefinitions.EXT_CM_NOMAP_COMMENT).getValue()));
235      }
236      tgt.addTarget(t);
237    } else {
238      for (org.hl7.fhir.r5.model.ConceptMap.TargetElementComponent t : src.getTarget())
239        tgt.addTarget(convertTargetElementComponent(t, srcMap));
240    }
241    return tgt;
242  }
243
244  public static org.hl7.fhir.r5.model.ConceptMap.TargetElementComponent convertTargetElementComponent(org.hl7.fhir.r4.model.ConceptMap.TargetElementComponent src, org.hl7.fhir.r5.model.ConceptMap tgtMap) throws FHIRException {
245    if (src == null)
246      return null;
247    org.hl7.fhir.r5.model.ConceptMap.TargetElementComponent tgt = new org.hl7.fhir.r5.model.ConceptMap.TargetElementComponent();
248    ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyBackboneElement(src, tgt);
249    if (src.hasCode())
250      tgt.setCodeElement(Code40_50.convertCode(src.getCodeElement()));
251    if (src.hasDisplay())
252      tgt.setDisplayElement(String40_50.convertString(src.getDisplayElement()));
253    if (src.hasEquivalence())
254      tgt.setRelationshipElement(convertConceptMapRelationship(src.getEquivalenceElement(), tgt));
255    if (src.hasComment())
256      tgt.setCommentElement(String40_50.convertString(src.getCommentElement()));
257    for (org.hl7.fhir.r4.model.ConceptMap.OtherElementComponent t : src.getDependsOn())
258      tgt.addDependsOn(convertOtherElementComponent(t, tgtMap));
259    for (org.hl7.fhir.r4.model.ConceptMap.OtherElementComponent t : src.getProduct())
260      tgt.addProduct(convertOtherElementComponent(t, tgtMap));
261    return tgt;
262  }
263
264  public static org.hl7.fhir.r4.model.ConceptMap.TargetElementComponent convertTargetElementComponent(org.hl7.fhir.r5.model.ConceptMap.TargetElementComponent src, org.hl7.fhir.r5.model.ConceptMap srcMap) throws FHIRException {
265    if (src == null)
266      return null;
267    org.hl7.fhir.r4.model.ConceptMap.TargetElementComponent tgt = new org.hl7.fhir.r4.model.ConceptMap.TargetElementComponent();
268    ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyBackboneElement(src, tgt, VersionConvertorConstants.EXT_OLD_CONCEPTMAP_EQUIVALENCE);
269    if (src.hasCode())
270      tgt.setCodeElement(Code40_50.convertCode(src.getCodeElement()));
271    if (src.hasDisplay())
272      tgt.setDisplayElement(String40_50.convertString(src.getDisplayElement()));
273    if (src.hasRelationship())
274      tgt.setEquivalenceElement(convertConceptMapEquivalence(src.getRelationshipElement(), src));
275    else
276      tgt.setEquivalence(ConceptMapEquivalence.RELATEDTO);
277    if (src.hasComment())
278      tgt.setCommentElement(String40_50.convertString(src.getCommentElement()));
279    for (org.hl7.fhir.r5.model.ConceptMap.OtherElementComponent t : src.getDependsOn())
280      tgt.addDependsOn(convertOtherElementComponent(t, srcMap));
281    for (org.hl7.fhir.r5.model.ConceptMap.OtherElementComponent t : src.getProduct())
282      tgt.addProduct(convertOtherElementComponent(t, srcMap));
283    return tgt;
284  }
285
286  public static org.hl7.fhir.r4.model.Enumeration<ConceptMapEquivalence> convertConceptMapEquivalence(Enumeration<ConceptMapRelationship> src, org.hl7.fhir.r5.model.ConceptMap.TargetElementComponent ccm) throws FHIRException {
287    if (src == null || src.isEmpty())
288      return null;
289    org.hl7.fhir.r4.model.Enumeration<ConceptMapEquivalence> tgt = new org.hl7.fhir.r4.model.Enumeration<ConceptMapEquivalence>(new org.hl7.fhir.r4.model.Enumerations.ConceptMapEquivalenceEnumFactory());
290    ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyElement(src, tgt);
291    if (ccm.hasExtension(VersionConvertorConstants.EXT_OLD_CONCEPTMAP_EQUIVALENCE)) {
292      tgt.setValueAsString(ccm.getExtensionString(VersionConvertorConstants.EXT_OLD_CONCEPTMAP_EQUIVALENCE));
293    } else {
294        if (src.getValue() == null) {
295            tgt.setValue(null);
296        } else {
297            switch (src.getValue()) {
298                case RELATEDTO:
299                    tgt.setValue(ConceptMapEquivalence.RELATEDTO);
300                    break;
301                case EQUIVALENT:
302                    tgt.setValue(ConceptMapEquivalence.EQUIVALENT);
303                    break;
304                case SOURCEISNARROWERTHANTARGET:
305                    tgt.setValue(ConceptMapEquivalence.WIDER);
306                    break;
307                case SOURCEISBROADERTHANTARGET:
308                    tgt.setValue(ConceptMapEquivalence.NARROWER);
309                    break;
310                case NOTRELATEDTO:
311                    tgt.setValue(ConceptMapEquivalence.DISJOINT);
312                    break;
313                default:
314                    tgt.setValue(ConceptMapEquivalence.NULL);
315                    break;
316            }
317        }
318    }
319    return tgt;
320  }
321
322  public static Enumeration<ConceptMapRelationship> convertConceptMapRelationship(org.hl7.fhir.r4.model.Enumeration<ConceptMapEquivalence> src, org.hl7.fhir.r5.model.ConceptMap.TargetElementComponent tgtCtxt) throws FHIRException {
323      if (src == null || src.isEmpty())
324          return null;
325      Enumeration<ConceptMapRelationship> tgt = new Enumeration<ConceptMapRelationship>(new Enumerations.ConceptMapRelationshipEnumFactory());
326      ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyElement(src, tgt);
327      ExtensionUtilities.setCodeExtensionMod(tgtCtxt, VersionConvertorConstants.EXT_OLD_CONCEPTMAP_EQUIVALENCE, src.getValueAsString());
328      if (src.getValue() == null) {
329          tgt.setValue(null);
330      } else {
331          switch (src.getValue()) {
332              case EQUIVALENT:
333                  tgt.setValue(ConceptMapRelationship.EQUIVALENT);
334                  break;
335              case EQUAL:
336                  tgt.setValue(ConceptMapRelationship.EQUIVALENT);
337                  break;
338              case WIDER:
339                  tgt.setValue(ConceptMapRelationship.SOURCEISNARROWERTHANTARGET);
340                  break;
341              case SUBSUMES:
342                  tgt.setValue(ConceptMapRelationship.SOURCEISNARROWERTHANTARGET);
343                  break;
344              case NARROWER:
345                  tgt.setValue(ConceptMapRelationship.SOURCEISBROADERTHANTARGET);
346                  break;
347              case SPECIALIZES:
348                  tgt.setValue(ConceptMapRelationship.SOURCEISBROADERTHANTARGET);
349                  break;
350              case RELATEDTO:
351                  tgt.setValue(ConceptMapRelationship.RELATEDTO);
352                  break;
353              case INEXACT:
354                  tgt.setValue(ConceptMapRelationship.RELATEDTO);
355                  break;
356              case UNMATCHED:
357                  tgt.setValue(ConceptMapRelationship.NULL);
358                  break;
359              case DISJOINT:
360                  tgt.setValue(ConceptMapRelationship.NOTRELATEDTO);
361                  break;
362              default:
363                  tgt.setValue(ConceptMapRelationship.NULL);
364                  break;
365          }
366      }
367      return tgt;
368  }
369
370  public static org.hl7.fhir.r5.model.ConceptMap.OtherElementComponent convertOtherElementComponent(org.hl7.fhir.r4.model.ConceptMap.OtherElementComponent src, org.hl7.fhir.r5.model.ConceptMap tgtMap) throws FHIRException {
371    if (src == null)
372      return null;
373    org.hl7.fhir.r5.model.ConceptMap.OtherElementComponent tgt = new org.hl7.fhir.r5.model.ConceptMap.OtherElementComponent();
374    ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyBackboneElement(src, tgt);
375    if (src.hasProperty())
376      tgt.setAttribute(tgtMap.registerAttribute(src.getProperty()));
377    if (src.hasSystem()) {
378      tgt.setValue(new Coding().setSystem(src.getSystem()).setCode(src.getValue()).setDisplay(src.getDisplay()));
379    } else if (src.hasValueElement()) {
380      tgt.setValue(String40_50.convertString(src.getValueElement()));
381    }
382    return tgt;
383  }
384
385  public static org.hl7.fhir.r4.model.ConceptMap.OtherElementComponent convertOtherElementComponent(org.hl7.fhir.r5.model.ConceptMap.OtherElementComponent src, org.hl7.fhir.r5.model.ConceptMap srcMap) throws FHIRException {
386    if (src == null)
387      return null;
388    org.hl7.fhir.r4.model.ConceptMap.OtherElementComponent tgt = new org.hl7.fhir.r4.model.ConceptMap.OtherElementComponent();
389    ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyBackboneElement(src, tgt);
390    if (src.hasAttribute())
391      tgt.setProperty(srcMap.getAttributeUri(src.getAttribute()));    
392
393    if (src.hasValueCoding()) {
394      tgt.setSystem(src.getValueCoding().getSystem());
395      tgt.setValue(src.getValueCoding().getCode());
396      tgt.setDisplay(src.getValueCoding().getDisplay());
397    } else if (src.hasValue()) {
398        tgt.setValue(src.getValue().primitiveValue());
399    }
400
401    return tgt;
402  }
403
404  public static org.hl7.fhir.r5.model.ConceptMap.ConceptMapGroupUnmappedComponent convertConceptMapGroupUnmappedComponent(org.hl7.fhir.r4.model.ConceptMap.ConceptMapGroupUnmappedComponent src) throws FHIRException {
405    if (src == null)
406      return null;
407    org.hl7.fhir.r5.model.ConceptMap.ConceptMapGroupUnmappedComponent tgt = new org.hl7.fhir.r5.model.ConceptMap.ConceptMapGroupUnmappedComponent();
408    ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyBackboneElement(src, tgt);
409    if (src.hasMode())
410      tgt.setModeElement(convertConceptMapGroupUnmappedMode(src.getModeElement()));
411    if (src.hasCode())
412      tgt.setCodeElement(Code40_50.convertCode(src.getCodeElement()));
413    if (src.hasDisplay())
414      tgt.setDisplayElement(String40_50.convertString(src.getDisplayElement()));
415    if (src.hasUrl())
416      tgt.setOtherMapElement(Canonical40_50.convertCanonical(src.getUrlElement()));
417    return tgt;
418  }
419
420  public static org.hl7.fhir.r4.model.ConceptMap.ConceptMapGroupUnmappedComponent convertConceptMapGroupUnmappedComponent(org.hl7.fhir.r5.model.ConceptMap.ConceptMapGroupUnmappedComponent src) throws FHIRException {
421    if (src == null)
422      return null;
423    org.hl7.fhir.r4.model.ConceptMap.ConceptMapGroupUnmappedComponent tgt = new org.hl7.fhir.r4.model.ConceptMap.ConceptMapGroupUnmappedComponent();
424    ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyBackboneElement(src, tgt);
425    if (src.hasMode())
426      tgt.setModeElement(convertConceptMapGroupUnmappedMode(src.getModeElement()));
427    if (src.hasCode())
428      tgt.setCodeElement(Code40_50.convertCode(src.getCodeElement()));
429    if (src.hasDisplay())
430      tgt.setDisplayElement(String40_50.convertString(src.getDisplayElement()));
431    if (src.hasOtherMap())
432      tgt.setUrlElement(Canonical40_50.convertCanonical(src.getOtherMapElement()));
433    return tgt;
434  }
435
436  static public org.hl7.fhir.r5.model.Enumeration<org.hl7.fhir.r5.model.ConceptMap.ConceptMapGroupUnmappedMode> convertConceptMapGroupUnmappedMode(org.hl7.fhir.r4.model.Enumeration<org.hl7.fhir.r4.model.ConceptMap.ConceptMapGroupUnmappedMode> src) throws FHIRException {
437      if (src == null || src.isEmpty())
438          return null;
439      Enumeration<ConceptMap.ConceptMapGroupUnmappedMode> tgt = new Enumeration<>(new ConceptMap.ConceptMapGroupUnmappedModeEnumFactory());
440      ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyElement(src, tgt);
441      if (src.getValue() == null) {
442          tgt.setValue(null);
443      } else {
444          switch (src.getValue()) {
445              case PROVIDED:
446                  tgt.setValue(ConceptMap.ConceptMapGroupUnmappedMode.USESOURCECODE);
447                  break;
448              case FIXED:
449                  tgt.setValue(ConceptMap.ConceptMapGroupUnmappedMode.FIXED);
450                  break;
451              case OTHERMAP:
452                  tgt.setValue(ConceptMap.ConceptMapGroupUnmappedMode.OTHERMAP);
453                  break;
454              default:
455                  tgt.setValue(ConceptMap.ConceptMapGroupUnmappedMode.NULL);
456                  break;
457          }
458      }
459      return tgt;
460  }
461
462  static public org.hl7.fhir.r4.model.Enumeration<org.hl7.fhir.r4.model.ConceptMap.ConceptMapGroupUnmappedMode> convertConceptMapGroupUnmappedMode(org.hl7.fhir.r5.model.Enumeration<org.hl7.fhir.r5.model.ConceptMap.ConceptMapGroupUnmappedMode> src) throws FHIRException {
463      if (src == null || src.isEmpty())
464          return null;
465      org.hl7.fhir.r4.model.Enumeration<org.hl7.fhir.r4.model.ConceptMap.ConceptMapGroupUnmappedMode> tgt = new org.hl7.fhir.r4.model.Enumeration<>(new org.hl7.fhir.r4.model.ConceptMap.ConceptMapGroupUnmappedModeEnumFactory());
466      ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyElement(src, tgt);
467      if (src.getValue() == null) {
468          tgt.setValue(null);
469      } else {
470          switch (src.getValue()) {
471              case USESOURCECODE:
472                  tgt.setValue(org.hl7.fhir.r4.model.ConceptMap.ConceptMapGroupUnmappedMode.PROVIDED);
473                  break;
474              case FIXED:
475                  tgt.setValue(org.hl7.fhir.r4.model.ConceptMap.ConceptMapGroupUnmappedMode.FIXED);
476                  break;
477              case OTHERMAP:
478                  tgt.setValue(org.hl7.fhir.r4.model.ConceptMap.ConceptMapGroupUnmappedMode.OTHERMAP);
479                  break;
480              default:
481                  tgt.setValue(org.hl7.fhir.r4.model.ConceptMap.ConceptMapGroupUnmappedMode.NULL);
482                  break;
483          }
484      }
485      return tgt;
486  }
487}