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