001package org.hl7.fhir.convertors.conv40_50.datatypes40_50.special40_50;
002
003import java.util.stream.Collectors;
004
005import org.hl7.fhir.convertors.context.ConversionContext40_50;
006import org.hl7.fhir.convertors.conv40_50.datatypes40_50.BackboneElement40_50;
007import org.hl7.fhir.convertors.conv40_50.datatypes40_50.general40_50.Coding40_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.Id40_50;
013import org.hl7.fhir.convertors.conv40_50.datatypes40_50.primitive40_50.Integer40_50;
014import org.hl7.fhir.convertors.conv40_50.datatypes40_50.primitive40_50.MarkDown40_50;
015import org.hl7.fhir.convertors.conv40_50.datatypes40_50.primitive40_50.String40_50;
016import org.hl7.fhir.convertors.conv40_50.datatypes40_50.primitive40_50.UnsignedInt40_50;
017import org.hl7.fhir.convertors.conv40_50.datatypes40_50.primitive40_50.Uri40_50;
018import org.hl7.fhir.convertors.conv40_50.resources40_50.Enumerations40_50;
019import org.hl7.fhir.exceptions.FHIRException;
020import org.hl7.fhir.r4.model.BooleanType;
021import org.hl7.fhir.r4.model.CanonicalType;
022import org.hl7.fhir.r4.model.Extension;
023import org.hl7.fhir.r4.model.MarkdownType;
024import org.hl7.fhir.r4.model.StringType;
025import org.hl7.fhir.r5.model.CodeType;
026import org.hl7.fhir.r5.model.ElementDefinition;
027import org.hl7.fhir.r5.model.ElementDefinition.ElementDefinitionBindingAdditionalComponent;
028import org.hl7.fhir.r5.model.UsageContext;
029import org.hl7.fhir.r5.utils.ToolingExtensions;
030
031public class ElementDefinition40_50 {
032  
033  public static org.hl7.fhir.r5.model.ElementDefinition convertElementDefinition(org.hl7.fhir.r4.model.ElementDefinition src) throws FHIRException {
034    if (src == null) return null;
035    org.hl7.fhir.r5.model.ElementDefinition tgt = new org.hl7.fhir.r5.model.ElementDefinition();
036    BackboneElement40_50.copyBackboneElement(src, tgt, 
037        "http://hl7.org/fhir/5.0/StructureDefinition/extension-ElementDefinition.mustHaveValue", 
038        "http://hl7.org/fhir/5.0/StructureDefinition/extension-ElementDefinition.valueAlternatives");
039    if (src.hasPath()) tgt.setPathElement(String40_50.convertString(src.getPathElement()));
040    tgt.setRepresentation(src.getRepresentation().stream().map(ElementDefinition40_50::convertPropertyRepresentation).collect(Collectors.toList()));
041    if (src.hasSliceName()) tgt.setSliceNameElement(String40_50.convertString(src.getSliceNameElement()));
042    if (src.hasSliceIsConstraining())
043      tgt.setSliceIsConstrainingElement(Boolean40_50.convertBoolean(src.getSliceIsConstrainingElement()));
044    if (src.hasLabel()) tgt.setLabelElement(String40_50.convertString(src.getLabelElement()));
045    for (org.hl7.fhir.r4.model.Coding t : src.getCode()) tgt.addCode(Coding40_50.convertCoding(t));
046    if (src.hasSlicing()) tgt.setSlicing(convertElementDefinitionSlicingComponent(src.getSlicing()));
047    if (src.hasShort()) tgt.setShortElement(String40_50.convertString(src.getShortElement()));
048    if (src.hasDefinition()) tgt.setDefinitionElement(MarkDown40_50.convertMarkdown(src.getDefinitionElement()));
049    if (src.hasComment()) tgt.setCommentElement(MarkDown40_50.convertMarkdown(src.getCommentElement()));
050    if (src.hasRequirements()) tgt.setRequirementsElement(MarkDown40_50.convertMarkdown(src.getRequirementsElement()));
051    for (org.hl7.fhir.r4.model.StringType t : src.getAlias()) tgt.getAlias().add(String40_50.convertString(t));
052    if (src.hasMin()) tgt.setMinElement(UnsignedInt40_50.convertUnsignedInt(src.getMinElement()));
053    if (src.hasMax()) tgt.setMaxElement(String40_50.convertString(src.getMaxElement()));
054    if (src.hasBase()) tgt.setBase(convertElementDefinitionBaseComponent(src.getBase()));
055    if (src.hasContentReference())
056      tgt.setContentReferenceElement(Uri40_50.convertUri(src.getContentReferenceElement()));
057    for (org.hl7.fhir.r4.model.ElementDefinition.TypeRefComponent t : src.getType())
058      tgt.addType(convertTypeRefComponent(t));
059    if (src.hasDefaultValue())
060      tgt.setDefaultValue(ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().convertType(src.getDefaultValue()));
061    if (src.hasMeaningWhenMissing())
062      tgt.setMeaningWhenMissingElement(MarkDown40_50.convertMarkdown(src.getMeaningWhenMissingElement()));
063    if (src.hasOrderMeaning()) tgt.setOrderMeaningElement(String40_50.convertString(src.getOrderMeaningElement()));
064    if (src.hasFixed())
065      tgt.setFixed(ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().convertType(src.getFixed()));
066    if (src.hasPattern())
067      tgt.setPattern(ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().convertType(src.getPattern()));
068    for (org.hl7.fhir.r4.model.ElementDefinition.ElementDefinitionExampleComponent t : src.getExample())
069      tgt.addExample(convertElementDefinitionExampleComponent(t));
070    if (src.hasMinValue())
071      tgt.setMinValue(ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().convertType(src.getMinValue()));
072    if (src.hasMaxValue())
073      tgt.setMaxValue(ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().convertType(src.getMaxValue()));
074    if (src.hasMaxLength()) tgt.setMaxLengthElement(Integer40_50.convertInteger(src.getMaxLengthElement()));
075    for (org.hl7.fhir.r4.model.IdType t : src.getCondition()) tgt.getCondition().add(Id40_50.convertId(t));
076    for (org.hl7.fhir.r4.model.ElementDefinition.ElementDefinitionConstraintComponent t : src.getConstraint())
077      tgt.addConstraint(convertElementDefinitionConstraintComponent(t));
078    if (src.hasMustSupport()) tgt.setMustSupportElement(Boolean40_50.convertBoolean(src.getMustSupportElement()));
079    if (src.hasIsModifier()) tgt.setIsModifierElement(Boolean40_50.convertBoolean(src.getIsModifierElement()));
080    if (src.hasIsModifierReason())
081      tgt.setIsModifierReasonElement(String40_50.convertString(src.getIsModifierReasonElement()));
082    if (src.hasIsSummary()) tgt.setIsSummaryElement(Boolean40_50.convertBoolean(src.getIsSummaryElement()));
083    if (src.hasBinding()) tgt.setBinding(convertElementDefinitionBindingComponent(src.getBinding()));
084    for (org.hl7.fhir.r4.model.ElementDefinition.ElementDefinitionMappingComponent t : src.getMapping())
085      tgt.addMapping(convertElementDefinitionMappingComponent(t));
086
087    if (src.hasExtension("http://hl7.org/fhir/5.0/StructureDefinition/extension-ElementDefinition.mustHaveValue")) {
088      tgt.setMustHaveValueElement(Boolean40_50.convertBoolean((org.hl7.fhir.r4.model.BooleanType) src.getExtensionByUrl("http://hl7.org/fhir/5.0/StructureDefinition/extension-ElementDefinition.mustHaveValue").getValueAsPrimitive()));
089    }
090    for (org.hl7.fhir.r4.model.Extension ext : src.getExtensionsByUrl("http://hl7.org/fhir/5.0/StructureDefinition/extension-ElementDefinition.valueAlternatives")) {
091      tgt.addValueAlternative(Canonical40_50.convertCanonical((org.hl7.fhir.r4.model.CanonicalType)ext.getValue()));
092    }
093
094    return tgt;
095  }
096
097  public static org.hl7.fhir.r4.model.ElementDefinition convertElementDefinition(org.hl7.fhir.r5.model.ElementDefinition src) throws FHIRException {
098    if (src == null) return null;
099    org.hl7.fhir.r4.model.ElementDefinition tgt = new org.hl7.fhir.r4.model.ElementDefinition();
100    BackboneElement40_50.copyBackboneElement(src, tgt);
101    if (src.hasPath()) tgt.setPathElement(String40_50.convertString(src.getPathElement()));
102    tgt.setRepresentation(src.getRepresentation().stream().map(ElementDefinition40_50::convertPropertyRepresentation).collect(Collectors.toList()));
103    if (src.hasSliceName()) tgt.setSliceNameElement(String40_50.convertString(src.getSliceNameElement()));
104    if (src.hasSliceIsConstraining())
105      tgt.setSliceIsConstrainingElement(Boolean40_50.convertBoolean(src.getSliceIsConstrainingElement()));
106    if (src.hasLabel()) tgt.setLabelElement(String40_50.convertString(src.getLabelElement()));
107    for (org.hl7.fhir.r5.model.Coding t : src.getCode()) tgt.addCode(Coding40_50.convertCoding(t));
108    if (src.hasSlicing()) tgt.setSlicing(convertElementDefinitionSlicingComponent(src.getSlicing()));
109    if (src.hasShort()) tgt.setShortElement(String40_50.convertString(src.getShortElement()));
110    if (src.hasDefinition()) tgt.setDefinitionElement(MarkDown40_50.convertMarkdown(src.getDefinitionElement()));
111    if (src.hasComment()) tgt.setCommentElement(MarkDown40_50.convertMarkdown(src.getCommentElement()));
112    if (src.hasRequirements()) tgt.setRequirementsElement(MarkDown40_50.convertMarkdown(src.getRequirementsElement()));
113    for (org.hl7.fhir.r5.model.StringType t : src.getAlias()) tgt.getAlias().add(String40_50.convertString(t));
114    if (src.hasMin()) tgt.setMinElement(UnsignedInt40_50.convertUnsignedInt(src.getMinElement()));
115    if (src.hasMax()) tgt.setMaxElement(String40_50.convertString(src.getMaxElement()));
116    if (src.hasBase()) tgt.setBase(convertElementDefinitionBaseComponent(src.getBase()));
117    if (src.hasContentReference())
118      tgt.setContentReferenceElement(Uri40_50.convertUri(src.getContentReferenceElement()));
119    for (org.hl7.fhir.r5.model.ElementDefinition.TypeRefComponent t : src.getType())
120      tgt.addType(convertTypeRefComponent(t));
121    if (src.hasDefaultValue())
122      tgt.setDefaultValue(ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().convertType(src.getDefaultValue()));
123    if (src.hasMeaningWhenMissing())
124      tgt.setMeaningWhenMissingElement(MarkDown40_50.convertMarkdown(src.getMeaningWhenMissingElement()));
125    if (src.hasOrderMeaning()) tgt.setOrderMeaningElement(String40_50.convertString(src.getOrderMeaningElement()));
126    if (src.hasFixed())
127      tgt.setFixed(ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().convertType(src.getFixed()));
128    if (src.hasPattern())
129      tgt.setPattern(ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().convertType(src.getPattern()));
130    for (org.hl7.fhir.r5.model.ElementDefinition.ElementDefinitionExampleComponent t : src.getExample())
131      tgt.addExample(convertElementDefinitionExampleComponent(t));
132    if (src.hasMinValue())
133      tgt.setMinValue(ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().convertType(src.getMinValue()));
134    if (src.hasMaxValue())
135      tgt.setMaxValue(ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().convertType(src.getMaxValue()));
136    if (src.hasMaxLength()) tgt.setMaxLengthElement(Integer40_50.convertInteger(src.getMaxLengthElement()));
137    for (org.hl7.fhir.r5.model.IdType t : src.getCondition()) tgt.getCondition().add(Id40_50.convertId(t));
138    for (org.hl7.fhir.r5.model.ElementDefinition.ElementDefinitionConstraintComponent t : src.getConstraint())
139      tgt.addConstraint(convertElementDefinitionConstraintComponent(t));
140    if (src.hasMustSupport()) tgt.setMustSupportElement(Boolean40_50.convertBoolean(src.getMustSupportElement()));
141    if (src.hasIsModifier()) tgt.setIsModifierElement(Boolean40_50.convertBoolean(src.getIsModifierElement()));
142    if (src.hasIsModifierReason())
143      tgt.setIsModifierReasonElement(String40_50.convertString(src.getIsModifierReasonElement()));
144    if (src.hasIsSummary()) tgt.setIsSummaryElement(Boolean40_50.convertBoolean(src.getIsSummaryElement()));
145    if (src.hasBinding()) tgt.setBinding(convertElementDefinitionBindingComponent(src.getBinding()));
146    for (org.hl7.fhir.r5.model.ElementDefinition.ElementDefinitionMappingComponent t : src.getMapping())
147      tgt.addMapping(convertElementDefinitionMappingComponent(t));
148    if (src.hasMustHaveValue()) {
149      tgt.addExtension("http://hl7.org/fhir/5.0/StructureDefinition/extension-ElementDefinition.mustHaveValue", Boolean40_50.convertBoolean(src.getMustHaveValueElement()));
150    }
151    for (org.hl7.fhir.r5.model.CanonicalType ct : src.getValueAlternatives()) {
152      tgt.addExtension("http://hl7.org/fhir/5.0/StructureDefinition/extension-ElementDefinition.valueAlternatives", Canonical40_50.convertCanonical(ct));      
153    }
154
155    return tgt;
156  }
157
158  static public org.hl7.fhir.r5.model.Enumeration<org.hl7.fhir.r5.model.ElementDefinition.PropertyRepresentation> convertPropertyRepresentation(org.hl7.fhir.r4.model.Enumeration<org.hl7.fhir.r4.model.ElementDefinition.PropertyRepresentation> src) throws FHIRException {
159    if (src == null || src.isEmpty()) return null;
160    org.hl7.fhir.r5.model.Enumeration<org.hl7.fhir.r5.model.ElementDefinition.PropertyRepresentation> tgt = new org.hl7.fhir.r5.model.Enumeration<>(new org.hl7.fhir.r5.model.ElementDefinition.PropertyRepresentationEnumFactory());
161    ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyElement(src, tgt);
162    if (src.getValue() == null) {
163    tgt.setValue(null);
164} else {
165      switch(src.getValue()) {
166        case XMLATTR:
167                    tgt.setValue(ElementDefinition.PropertyRepresentation.XMLATTR);
168                    break;
169                case XMLTEXT:
170                    tgt.setValue(ElementDefinition.PropertyRepresentation.XMLTEXT);
171                    break;
172                case TYPEATTR:
173                    tgt.setValue(ElementDefinition.PropertyRepresentation.TYPEATTR);
174                    break;
175                case CDATEXT:
176                    tgt.setValue(ElementDefinition.PropertyRepresentation.CDATEXT);
177                    break;
178                case XHTML:
179                    tgt.setValue(ElementDefinition.PropertyRepresentation.XHTML);
180                    break;
181                default:
182                    tgt.setValue(ElementDefinition.PropertyRepresentation.NULL);
183                    break;
184       }
185}
186    return tgt;
187  }
188
189  static public org.hl7.fhir.r4.model.Enumeration<org.hl7.fhir.r4.model.ElementDefinition.PropertyRepresentation> convertPropertyRepresentation(org.hl7.fhir.r5.model.Enumeration<org.hl7.fhir.r5.model.ElementDefinition.PropertyRepresentation> src) throws FHIRException {
190    if (src == null || src.isEmpty()) return null;
191    org.hl7.fhir.r4.model.Enumeration<org.hl7.fhir.r4.model.ElementDefinition.PropertyRepresentation> tgt = new org.hl7.fhir.r4.model.Enumeration<>(new org.hl7.fhir.r4.model.ElementDefinition.PropertyRepresentationEnumFactory());
192    ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyElement(src, tgt);
193    if (src.getValue() == null) {
194    tgt.setValue(null);
195} else {
196      switch(src.getValue()) {
197        case XMLATTR:
198                    tgt.setValue(org.hl7.fhir.r4.model.ElementDefinition.PropertyRepresentation.XMLATTR);
199                    break;
200                case XMLTEXT:
201                    tgt.setValue(org.hl7.fhir.r4.model.ElementDefinition.PropertyRepresentation.XMLTEXT);
202                    break;
203                case TYPEATTR:
204                    tgt.setValue(org.hl7.fhir.r4.model.ElementDefinition.PropertyRepresentation.TYPEATTR);
205                    break;
206                case CDATEXT:
207                    tgt.setValue(org.hl7.fhir.r4.model.ElementDefinition.PropertyRepresentation.CDATEXT);
208                    break;
209                case XHTML:
210                    tgt.setValue(org.hl7.fhir.r4.model.ElementDefinition.PropertyRepresentation.XHTML);
211                    break;
212                default:
213                    tgt.setValue(org.hl7.fhir.r4.model.ElementDefinition.PropertyRepresentation.NULL);
214                    break;
215       }
216}
217    return tgt;
218  }
219
220  public static org.hl7.fhir.r5.model.ElementDefinition.ElementDefinitionSlicingComponent convertElementDefinitionSlicingComponent(org.hl7.fhir.r4.model.ElementDefinition.ElementDefinitionSlicingComponent src) throws FHIRException {
221    if (src == null) return null;
222    org.hl7.fhir.r5.model.ElementDefinition.ElementDefinitionSlicingComponent tgt = new org.hl7.fhir.r5.model.ElementDefinition.ElementDefinitionSlicingComponent();
223    ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyElement(src, tgt);
224    for (org.hl7.fhir.r4.model.ElementDefinition.ElementDefinitionSlicingDiscriminatorComponent t : src.getDiscriminator())
225      tgt.addDiscriminator(convertElementDefinitionSlicingDiscriminatorComponent(t));
226    if (src.hasDescription()) tgt.setDescriptionElement(String40_50.convertString(src.getDescriptionElement()));
227    if (src.hasOrdered()) tgt.setOrderedElement(Boolean40_50.convertBoolean(src.getOrderedElement()));
228    if (src.hasRules()) tgt.setRulesElement(convertSlicingRules(src.getRulesElement()));
229    return tgt;
230  }
231
232  public static org.hl7.fhir.r4.model.ElementDefinition.ElementDefinitionSlicingComponent convertElementDefinitionSlicingComponent(org.hl7.fhir.r5.model.ElementDefinition.ElementDefinitionSlicingComponent src) throws FHIRException {
233    if (src == null) return null;
234    org.hl7.fhir.r4.model.ElementDefinition.ElementDefinitionSlicingComponent tgt = new org.hl7.fhir.r4.model.ElementDefinition.ElementDefinitionSlicingComponent();
235    ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyElement(src, tgt);
236    for (org.hl7.fhir.r5.model.ElementDefinition.ElementDefinitionSlicingDiscriminatorComponent t : src.getDiscriminator())
237      tgt.addDiscriminator(convertElementDefinitionSlicingDiscriminatorComponent(t));
238    if (src.hasDescription()) tgt.setDescriptionElement(String40_50.convertString(src.getDescriptionElement()));
239    if (src.hasOrdered()) tgt.setOrderedElement(Boolean40_50.convertBoolean(src.getOrderedElement()));
240    if (src.hasRules()) tgt.setRulesElement(convertSlicingRules(src.getRulesElement()));
241    return tgt;
242  }
243
244  static public org.hl7.fhir.r5.model.Enumeration<org.hl7.fhir.r5.model.ElementDefinition.SlicingRules> convertSlicingRules(org.hl7.fhir.r4.model.Enumeration<org.hl7.fhir.r4.model.ElementDefinition.SlicingRules> src) throws FHIRException {
245    if (src == null || src.isEmpty()) return null;
246    org.hl7.fhir.r5.model.Enumeration<org.hl7.fhir.r5.model.ElementDefinition.SlicingRules> tgt = new org.hl7.fhir.r5.model.Enumeration<>(new org.hl7.fhir.r5.model.ElementDefinition.SlicingRulesEnumFactory());
247    ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyElement(src, tgt);
248    if (src.getValue() == null) {
249    tgt.setValue(null);
250} else {
251      switch(src.getValue()) {
252        case CLOSED:
253                    tgt.setValue(ElementDefinition.SlicingRules.CLOSED);
254                    break;
255                case OPEN:
256                    tgt.setValue(ElementDefinition.SlicingRules.OPEN);
257                    break;
258                case OPENATEND:
259                    tgt.setValue(ElementDefinition.SlicingRules.OPENATEND);
260                    break;
261                default:
262                    tgt.setValue(ElementDefinition.SlicingRules.NULL);
263                    break;
264       }
265}
266    return tgt;
267  }
268
269  static public org.hl7.fhir.r4.model.Enumeration<org.hl7.fhir.r4.model.ElementDefinition.SlicingRules> convertSlicingRules(org.hl7.fhir.r5.model.Enumeration<org.hl7.fhir.r5.model.ElementDefinition.SlicingRules> src) throws FHIRException {
270    if (src == null || src.isEmpty()) return null;
271    org.hl7.fhir.r4.model.Enumeration<org.hl7.fhir.r4.model.ElementDefinition.SlicingRules> tgt = new org.hl7.fhir.r4.model.Enumeration<>(new org.hl7.fhir.r4.model.ElementDefinition.SlicingRulesEnumFactory());
272    ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyElement(src, tgt);
273    if (src.getValue() == null) {
274    tgt.setValue(null);
275} else {
276      switch(src.getValue()) {
277        case CLOSED:
278                    tgt.setValue(org.hl7.fhir.r4.model.ElementDefinition.SlicingRules.CLOSED);
279                    break;
280                case OPEN:
281                    tgt.setValue(org.hl7.fhir.r4.model.ElementDefinition.SlicingRules.OPEN);
282                    break;
283                case OPENATEND:
284                    tgt.setValue(org.hl7.fhir.r4.model.ElementDefinition.SlicingRules.OPENATEND);
285                    break;
286                default:
287                    tgt.setValue(org.hl7.fhir.r4.model.ElementDefinition.SlicingRules.NULL);
288                    break;
289       }
290}
291    return tgt;
292  }
293
294  public static org.hl7.fhir.r5.model.ElementDefinition.ElementDefinitionSlicingDiscriminatorComponent convertElementDefinitionSlicingDiscriminatorComponent(org.hl7.fhir.r4.model.ElementDefinition.ElementDefinitionSlicingDiscriminatorComponent src) throws FHIRException {
295    if (src == null) return null;
296    org.hl7.fhir.r5.model.ElementDefinition.ElementDefinitionSlicingDiscriminatorComponent tgt = new org.hl7.fhir.r5.model.ElementDefinition.ElementDefinitionSlicingDiscriminatorComponent();
297    ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyElement(src, tgt);
298    if (src.hasType()) tgt.setTypeElement(convertDiscriminatorType(src.getTypeElement()));
299    if (src.hasPath()) tgt.setPathElement(String40_50.convertString(src.getPathElement()));
300    return tgt;
301  }
302
303  public static org.hl7.fhir.r4.model.ElementDefinition.ElementDefinitionSlicingDiscriminatorComponent convertElementDefinitionSlicingDiscriminatorComponent(org.hl7.fhir.r5.model.ElementDefinition.ElementDefinitionSlicingDiscriminatorComponent src) throws FHIRException {
304    if (src == null) return null;
305    org.hl7.fhir.r4.model.ElementDefinition.ElementDefinitionSlicingDiscriminatorComponent tgt = new org.hl7.fhir.r4.model.ElementDefinition.ElementDefinitionSlicingDiscriminatorComponent();
306    ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyElement(src, tgt);
307    if (src.hasType()) tgt.setTypeElement(convertDiscriminatorType(src.getTypeElement()));
308    if (src.hasPath()) tgt.setPathElement(String40_50.convertString(src.getPathElement()));
309    return tgt;
310  }
311
312  static public org.hl7.fhir.r5.model.Enumeration<org.hl7.fhir.r5.model.ElementDefinition.DiscriminatorType> convertDiscriminatorType(org.hl7.fhir.r4.model.Enumeration<org.hl7.fhir.r4.model.ElementDefinition.DiscriminatorType> src) throws FHIRException {
313    if (src == null || src.isEmpty()) return null;
314    org.hl7.fhir.r5.model.Enumeration<org.hl7.fhir.r5.model.ElementDefinition.DiscriminatorType> tgt = new org.hl7.fhir.r5.model.Enumeration<>(new org.hl7.fhir.r5.model.ElementDefinition.DiscriminatorTypeEnumFactory());
315    ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyElement(src, tgt);
316    if (src.getValue() == null) {
317    tgt.setValue(null);
318} else {
319      switch(src.getValue()) {
320        case VALUE:
321                    tgt.setValue(ElementDefinition.DiscriminatorType.VALUE);
322                    break;
323                case EXISTS:
324                    tgt.setValue(ElementDefinition.DiscriminatorType.EXISTS);
325                    break;
326                case PATTERN:
327                    tgt.setValue(ElementDefinition.DiscriminatorType.PATTERN);
328                    break;
329                case TYPE:
330                    tgt.setValue(ElementDefinition.DiscriminatorType.TYPE);
331                    break;
332                case PROFILE:
333                    tgt.setValue(ElementDefinition.DiscriminatorType.PROFILE);
334                    break;
335                default:
336                    tgt.setValue(ElementDefinition.DiscriminatorType.NULL);
337                    break;
338       }
339}
340    return tgt;
341  }
342
343  static public org.hl7.fhir.r4.model.Enumeration<org.hl7.fhir.r4.model.ElementDefinition.DiscriminatorType> convertDiscriminatorType(org.hl7.fhir.r5.model.Enumeration<org.hl7.fhir.r5.model.ElementDefinition.DiscriminatorType> src) throws FHIRException {
344    if (src == null || src.isEmpty()) return null;
345    org.hl7.fhir.r4.model.Enumeration<org.hl7.fhir.r4.model.ElementDefinition.DiscriminatorType> tgt = new org.hl7.fhir.r4.model.Enumeration<>(new org.hl7.fhir.r4.model.ElementDefinition.DiscriminatorTypeEnumFactory());
346    ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyElement(src, tgt);
347    if (src.getValue() == null) {
348    tgt.setValue(null);
349} else {
350      switch(src.getValue()) {
351        case VALUE:
352                    tgt.setValue(org.hl7.fhir.r4.model.ElementDefinition.DiscriminatorType.VALUE);
353                    break;
354                case EXISTS:
355                    tgt.setValue(org.hl7.fhir.r4.model.ElementDefinition.DiscriminatorType.EXISTS);
356                    break;
357                case PATTERN:
358                    tgt.setValue(org.hl7.fhir.r4.model.ElementDefinition.DiscriminatorType.PATTERN);
359                    break;
360                case TYPE:
361                    tgt.setValue(org.hl7.fhir.r4.model.ElementDefinition.DiscriminatorType.TYPE);
362                    break;
363                case PROFILE:
364                    tgt.setValue(org.hl7.fhir.r4.model.ElementDefinition.DiscriminatorType.PROFILE);
365                    break;
366                default:
367                    tgt.setValue(org.hl7.fhir.r4.model.ElementDefinition.DiscriminatorType.NULL);
368                    break;
369       }
370}
371    return tgt;
372  }
373
374  public static org.hl7.fhir.r5.model.ElementDefinition.ElementDefinitionBaseComponent convertElementDefinitionBaseComponent(org.hl7.fhir.r4.model.ElementDefinition.ElementDefinitionBaseComponent src) throws FHIRException {
375    if (src == null) return null;
376    org.hl7.fhir.r5.model.ElementDefinition.ElementDefinitionBaseComponent tgt = new org.hl7.fhir.r5.model.ElementDefinition.ElementDefinitionBaseComponent();
377    ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyElement(src, tgt);
378    if (src.hasPath()) tgt.setPathElement(String40_50.convertString(src.getPathElement()));
379    if (src.hasMin()) tgt.setMinElement(UnsignedInt40_50.convertUnsignedInt(src.getMinElement()));
380    if (src.hasMax()) tgt.setMaxElement(String40_50.convertString(src.getMaxElement()));
381    return tgt;
382  }
383
384  public static org.hl7.fhir.r4.model.ElementDefinition.ElementDefinitionBaseComponent convertElementDefinitionBaseComponent(org.hl7.fhir.r5.model.ElementDefinition.ElementDefinitionBaseComponent src) throws FHIRException {
385    if (src == null) return null;
386    org.hl7.fhir.r4.model.ElementDefinition.ElementDefinitionBaseComponent tgt = new org.hl7.fhir.r4.model.ElementDefinition.ElementDefinitionBaseComponent();
387    ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyElement(src, tgt);
388    if (src.hasPath()) tgt.setPathElement(String40_50.convertString(src.getPathElement()));
389    if (src.hasMin()) tgt.setMinElement(UnsignedInt40_50.convertUnsignedInt(src.getMinElement()));
390    if (src.hasMax()) tgt.setMaxElement(String40_50.convertString(src.getMaxElement()));
391    return tgt;
392  }
393
394  public static org.hl7.fhir.r5.model.ElementDefinition.TypeRefComponent convertTypeRefComponent(org.hl7.fhir.r4.model.ElementDefinition.TypeRefComponent src) throws FHIRException {
395    if (src == null) return null;
396    org.hl7.fhir.r5.model.ElementDefinition.TypeRefComponent tgt = new org.hl7.fhir.r5.model.ElementDefinition.TypeRefComponent();
397    ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyElement(src, tgt);
398    if (src.hasCode()) tgt.setCodeElement(Uri40_50.convertUri(src.getCodeElement()));
399    for (org.hl7.fhir.r4.model.CanonicalType t : src.getProfile())
400      tgt.getProfile().add(Canonical40_50.convertCanonical(t));
401    for (org.hl7.fhir.r4.model.CanonicalType t : src.getTargetProfile())
402      tgt.getTargetProfile().add(Canonical40_50.convertCanonical(t));
403    tgt.setAggregation(src.getAggregation().stream().map(ElementDefinition40_50::convertAggregationMode).collect(Collectors.toList()));
404    if (src.hasVersioning()) tgt.setVersioningElement(convertReferenceVersionRules(src.getVersioningElement()));
405    return tgt;
406  }
407
408  public static org.hl7.fhir.r4.model.ElementDefinition.TypeRefComponent convertTypeRefComponent(org.hl7.fhir.r5.model.ElementDefinition.TypeRefComponent src) throws FHIRException {
409    if (src == null) return null;
410    org.hl7.fhir.r4.model.ElementDefinition.TypeRefComponent tgt = new org.hl7.fhir.r4.model.ElementDefinition.TypeRefComponent();
411    ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyElement(src, tgt);
412    if (src.hasCode()) tgt.setCodeElement(Uri40_50.convertUri(src.getCodeElement()));
413    for (org.hl7.fhir.r5.model.CanonicalType t : src.getProfile())
414      tgt.getProfile().add(Canonical40_50.convertCanonical(t));
415    for (org.hl7.fhir.r5.model.CanonicalType t : src.getTargetProfile())
416      tgt.getTargetProfile().add(Canonical40_50.convertCanonical(t));
417    tgt.setAggregation(src.getAggregation().stream().map(ElementDefinition40_50::convertAggregationMode).collect(Collectors.toList()));
418    if (src.hasVersioning()) tgt.setVersioningElement(convertReferenceVersionRules(src.getVersioningElement()));
419    return tgt;
420  }
421
422  static public org.hl7.fhir.r5.model.Enumeration<org.hl7.fhir.r5.model.ElementDefinition.AggregationMode> convertAggregationMode(org.hl7.fhir.r4.model.Enumeration<org.hl7.fhir.r4.model.ElementDefinition.AggregationMode> src) throws FHIRException {
423    if (src == null || src.isEmpty()) return null;
424    org.hl7.fhir.r5.model.Enumeration<org.hl7.fhir.r5.model.ElementDefinition.AggregationMode> tgt = new org.hl7.fhir.r5.model.Enumeration<>(new org.hl7.fhir.r5.model.ElementDefinition.AggregationModeEnumFactory());
425    ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyElement(src, tgt);
426    if (src.getValue() == null) {
427    tgt.setValue(null);
428} else {
429      switch(src.getValue()) {
430        case CONTAINED:
431                    tgt.setValue(ElementDefinition.AggregationMode.CONTAINED);
432                    break;
433                case REFERENCED:
434                    tgt.setValue(ElementDefinition.AggregationMode.REFERENCED);
435                    break;
436                case BUNDLED:
437                    tgt.setValue(ElementDefinition.AggregationMode.BUNDLED);
438                    break;
439                default:
440                    tgt.setValue(ElementDefinition.AggregationMode.NULL);
441                    break;
442       }
443}
444    return tgt;
445  }
446
447  static public org.hl7.fhir.r4.model.Enumeration<org.hl7.fhir.r4.model.ElementDefinition.AggregationMode> convertAggregationMode(org.hl7.fhir.r5.model.Enumeration<org.hl7.fhir.r5.model.ElementDefinition.AggregationMode> src) throws FHIRException {
448    if (src == null || src.isEmpty()) return null;
449    org.hl7.fhir.r4.model.Enumeration<org.hl7.fhir.r4.model.ElementDefinition.AggregationMode> tgt = new org.hl7.fhir.r4.model.Enumeration<>(new org.hl7.fhir.r4.model.ElementDefinition.AggregationModeEnumFactory());
450    ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyElement(src, tgt);
451    if (src.getValue() == null) {
452    tgt.setValue(null);
453} else {
454      switch(src.getValue()) {
455        case CONTAINED:
456                    tgt.setValue(org.hl7.fhir.r4.model.ElementDefinition.AggregationMode.CONTAINED);
457                    break;
458                case REFERENCED:
459                    tgt.setValue(org.hl7.fhir.r4.model.ElementDefinition.AggregationMode.REFERENCED);
460                    break;
461                case BUNDLED:
462                    tgt.setValue(org.hl7.fhir.r4.model.ElementDefinition.AggregationMode.BUNDLED);
463                    break;
464                default:
465                    tgt.setValue(org.hl7.fhir.r4.model.ElementDefinition.AggregationMode.NULL);
466                    break;
467       }
468}
469    return tgt;
470  }
471
472  static public org.hl7.fhir.r5.model.Enumeration<org.hl7.fhir.r5.model.ElementDefinition.ReferenceVersionRules> convertReferenceVersionRules(org.hl7.fhir.r4.model.Enumeration<org.hl7.fhir.r4.model.ElementDefinition.ReferenceVersionRules> src) throws FHIRException {
473    if (src == null || src.isEmpty()) return null;
474    org.hl7.fhir.r5.model.Enumeration<org.hl7.fhir.r5.model.ElementDefinition.ReferenceVersionRules> tgt = new org.hl7.fhir.r5.model.Enumeration<>(new org.hl7.fhir.r5.model.ElementDefinition.ReferenceVersionRulesEnumFactory());
475    ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyElement(src, tgt);
476    if (src.getValue() == null) {
477    tgt.setValue(null);
478} else {
479      switch(src.getValue()) {
480        case EITHER:
481                    tgt.setValue(ElementDefinition.ReferenceVersionRules.EITHER);
482                    break;
483                case INDEPENDENT:
484                    tgt.setValue(ElementDefinition.ReferenceVersionRules.INDEPENDENT);
485                    break;
486                case SPECIFIC:
487                    tgt.setValue(ElementDefinition.ReferenceVersionRules.SPECIFIC);
488                    break;
489                default:
490                    tgt.setValue(ElementDefinition.ReferenceVersionRules.NULL);
491                    break;
492       }
493}
494    return tgt;
495  }
496
497  static public org.hl7.fhir.r4.model.Enumeration<org.hl7.fhir.r4.model.ElementDefinition.ReferenceVersionRules> convertReferenceVersionRules(org.hl7.fhir.r5.model.Enumeration<org.hl7.fhir.r5.model.ElementDefinition.ReferenceVersionRules> src) throws FHIRException {
498    if (src == null || src.isEmpty()) return null;
499    org.hl7.fhir.r4.model.Enumeration<org.hl7.fhir.r4.model.ElementDefinition.ReferenceVersionRules> tgt = new org.hl7.fhir.r4.model.Enumeration<>(new org.hl7.fhir.r4.model.ElementDefinition.ReferenceVersionRulesEnumFactory());
500    ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyElement(src, tgt);
501    if (src.getValue() == null) {
502    tgt.setValue(null);
503} else {
504      switch(src.getValue()) {
505        case EITHER:
506                    tgt.setValue(org.hl7.fhir.r4.model.ElementDefinition.ReferenceVersionRules.EITHER);
507                    break;
508                case INDEPENDENT:
509                    tgt.setValue(org.hl7.fhir.r4.model.ElementDefinition.ReferenceVersionRules.INDEPENDENT);
510                    break;
511                case SPECIFIC:
512                    tgt.setValue(org.hl7.fhir.r4.model.ElementDefinition.ReferenceVersionRules.SPECIFIC);
513                    break;
514                default:
515                    tgt.setValue(org.hl7.fhir.r4.model.ElementDefinition.ReferenceVersionRules.NULL);
516                    break;
517       }
518}
519    return tgt;
520  }
521
522  public static org.hl7.fhir.r5.model.ElementDefinition.ElementDefinitionExampleComponent convertElementDefinitionExampleComponent(org.hl7.fhir.r4.model.ElementDefinition.ElementDefinitionExampleComponent src) throws FHIRException {
523    if (src == null) return null;
524    org.hl7.fhir.r5.model.ElementDefinition.ElementDefinitionExampleComponent tgt = new org.hl7.fhir.r5.model.ElementDefinition.ElementDefinitionExampleComponent();
525    ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyElement(src, tgt);
526    if (src.hasLabel()) tgt.setLabelElement(String40_50.convertString(src.getLabelElement()));
527    if (src.hasValue())
528      tgt.setValue(ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().convertType(src.getValue()));
529    return tgt;
530  }
531
532  public static org.hl7.fhir.r4.model.ElementDefinition.ElementDefinitionExampleComponent convertElementDefinitionExampleComponent(org.hl7.fhir.r5.model.ElementDefinition.ElementDefinitionExampleComponent src) throws FHIRException {
533    if (src == null) return null;
534    org.hl7.fhir.r4.model.ElementDefinition.ElementDefinitionExampleComponent tgt = new org.hl7.fhir.r4.model.ElementDefinition.ElementDefinitionExampleComponent();
535    ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyElement(src, tgt);
536    if (src.hasLabel()) tgt.setLabelElement(String40_50.convertString(src.getLabelElement()));
537    if (src.hasValue())
538      tgt.setValue(ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().convertType(src.getValue()));
539    return tgt;
540  }
541
542  public static org.hl7.fhir.r5.model.ElementDefinition.ElementDefinitionConstraintComponent convertElementDefinitionConstraintComponent(org.hl7.fhir.r4.model.ElementDefinition.ElementDefinitionConstraintComponent src) throws FHIRException {
543    if (src == null) return null;
544    org.hl7.fhir.r5.model.ElementDefinition.ElementDefinitionConstraintComponent tgt = new org.hl7.fhir.r5.model.ElementDefinition.ElementDefinitionConstraintComponent();
545    ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyElement(src, tgt);
546    if (src.hasKey()) tgt.setKeyElement(Id40_50.convertId(src.getKeyElement()));
547    if (src.hasRequirements()) tgt.setRequirementsElement(String40_50.convertStringToMarkdown(src.getRequirementsElement()));
548    if (src.hasSeverity()) tgt.setSeverityElement(convertConstraintSeverity(src.getSeverityElement()));
549    if (src.hasHuman()) tgt.setHumanElement(String40_50.convertString(src.getHumanElement()));
550    if (src.hasExpression()) tgt.setExpressionElement(String40_50.convertString(src.getExpressionElement()));
551    if (src.hasXpath()) {
552      tgt.addExtension(new org.hl7.fhir.r5.model.Extension(org.hl7.fhir.r5.utils.ToolingExtensions.EXT_XPATH_CONSTRAINT, new org.hl7.fhir.r5.model.StringType(src.getXpath())));
553    }
554    if (src.hasSource()) tgt.setSourceElement(Canonical40_50.convertCanonical(src.getSourceElement()));
555    return tgt;
556  }
557
558  public static org.hl7.fhir.r4.model.ElementDefinition.ElementDefinitionConstraintComponent convertElementDefinitionConstraintComponent(org.hl7.fhir.r5.model.ElementDefinition.ElementDefinitionConstraintComponent src) throws FHIRException {
559    if (src == null) return null;
560    org.hl7.fhir.r4.model.ElementDefinition.ElementDefinitionConstraintComponent tgt = new org.hl7.fhir.r4.model.ElementDefinition.ElementDefinitionConstraintComponent();
561    ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyElement(src, tgt, org.hl7.fhir.r5.utils.ToolingExtensions.EXT_XPATH_CONSTRAINT);
562    if (src.hasKey()) tgt.setKeyElement(Id40_50.convertId(src.getKeyElement()));
563    if (src.hasRequirements()) tgt.setRequirementsElement(String40_50.convertString(src.getRequirementsElement()));
564    if (src.hasSeverity()) tgt.setSeverityElement(convertConstraintSeverity(src.getSeverityElement()));
565    if (src.hasHuman()) tgt.setHumanElement(String40_50.convertString(src.getHumanElement()));
566    if (src.hasExpression()) tgt.setExpressionElement(String40_50.convertString(src.getExpressionElement()));
567    if (org.hl7.fhir.r5.utils.ToolingExtensions.hasExtension(src, org.hl7.fhir.r5.utils.ToolingExtensions.EXT_XPATH_CONSTRAINT)) {
568      tgt.setXpath(org.hl7.fhir.r5.utils.ToolingExtensions.readStringExtension(src, org.hl7.fhir.r5.utils.ToolingExtensions.EXT_XPATH_CONSTRAINT));
569    }
570    if (src.hasSource()) tgt.setSourceElement(Canonical40_50.convertCanonical(src.getSourceElement()));
571    return tgt;
572  }
573
574  static public org.hl7.fhir.r5.model.Enumeration<org.hl7.fhir.r5.model.ElementDefinition.ConstraintSeverity> convertConstraintSeverity(org.hl7.fhir.r4.model.Enumeration<org.hl7.fhir.r4.model.ElementDefinition.ConstraintSeverity> src) throws FHIRException {
575    if (src == null || src.isEmpty()) return null;
576    org.hl7.fhir.r5.model.Enumeration<org.hl7.fhir.r5.model.ElementDefinition.ConstraintSeverity> tgt = new org.hl7.fhir.r5.model.Enumeration<>(new org.hl7.fhir.r5.model.ElementDefinition.ConstraintSeverityEnumFactory());
577    ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyElement(src, tgt);
578    if (src.getValue() == null) {
579    tgt.setValue(null);
580} else {
581      switch(src.getValue()) {
582        case ERROR:
583                    tgt.setValue(ElementDefinition.ConstraintSeverity.ERROR);
584                    break;
585                case WARNING:
586                    tgt.setValue(ElementDefinition.ConstraintSeverity.WARNING);
587                    break;
588                default:
589                    tgt.setValue(ElementDefinition.ConstraintSeverity.NULL);
590                    break;
591       }
592}
593    return tgt;
594  }
595
596  static public org.hl7.fhir.r4.model.Enumeration<org.hl7.fhir.r4.model.ElementDefinition.ConstraintSeverity> convertConstraintSeverity(org.hl7.fhir.r5.model.Enumeration<org.hl7.fhir.r5.model.ElementDefinition.ConstraintSeverity> src) throws FHIRException {
597    if (src == null || src.isEmpty()) return null;
598    org.hl7.fhir.r4.model.Enumeration<org.hl7.fhir.r4.model.ElementDefinition.ConstraintSeverity> tgt = new org.hl7.fhir.r4.model.Enumeration<>(new org.hl7.fhir.r4.model.ElementDefinition.ConstraintSeverityEnumFactory());
599    ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyElement(src, tgt);
600    if (src.getValue() == null) {
601    tgt.setValue(null);
602} else {
603      switch(src.getValue()) {
604        case ERROR:
605                    tgt.setValue(org.hl7.fhir.r4.model.ElementDefinition.ConstraintSeverity.ERROR);
606                    break;
607                case WARNING:
608                    tgt.setValue(org.hl7.fhir.r4.model.ElementDefinition.ConstraintSeverity.WARNING);
609                    break;
610                default:
611                    tgt.setValue(org.hl7.fhir.r4.model.ElementDefinition.ConstraintSeverity.NULL);
612                    break;
613       }
614}
615    return tgt;
616  }
617
618  public static org.hl7.fhir.r5.model.ElementDefinition.ElementDefinitionBindingComponent convertElementDefinitionBindingComponent(org.hl7.fhir.r4.model.ElementDefinition.ElementDefinitionBindingComponent src) throws FHIRException {
619    if (src == null) return null;
620    org.hl7.fhir.r5.model.ElementDefinition.ElementDefinitionBindingComponent tgt = new org.hl7.fhir.r5.model.ElementDefinition.ElementDefinitionBindingComponent();
621    ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyElement(src, tgt, 
622        "http://hl7.org/fhir/5.0/StructureDefinition/extension-ElementDefinition.binding.additional", ToolingExtensions.EXT_BINDING_ADDITIONAL);
623    if (src.hasStrength()) tgt.setStrengthElement(Enumerations40_50.convertBindingStrength(src.getStrengthElement()));
624    if (src.hasDescription()) tgt.setDescriptionElement(String40_50.convertStringToMarkdown(src.getDescriptionElement()));
625    if (src.hasValueSet()) tgt.setValueSetElement(Canonical40_50.convertCanonical(src.getValueSetElement()));
626
627    for (org.hl7.fhir.r4.model.Extension ext : src.getExtensionsByUrl("http://hl7.org/fhir/5.0/StructureDefinition/extension-ElementDefinition.binding.additional")) {
628      tgt.addAdditional(convertAdditional(ext));
629    }
630    for (org.hl7.fhir.r4.model.Extension ext : src.getExtensionsByUrl(ToolingExtensions.EXT_BINDING_ADDITIONAL)) {
631      tgt.addAdditional(convertAdditional(ext));
632    }
633    return tgt;
634  }
635
636  private static ElementDefinitionBindingAdditionalComponent convertAdditional(Extension src) {
637    if (src == null) return null;
638    ElementDefinitionBindingAdditionalComponent tgt = new ElementDefinitionBindingAdditionalComponent();
639    ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyElement(src, tgt, "valueSet", "purpose", "documentation", "shortDoco", "usage", "any");
640    if (src.hasExtension("purpose")) {
641      tgt.getPurposeElement().setValueAsString(src.getExtensionByUrl("purpose").getValue().primitiveValue());
642    }
643    if (src.hasExtension("valueSet")) {
644      tgt.setValueSetElement(Canonical40_50.convertCanonical((CanonicalType) src.getExtensionByUrl("valueSet").getValue()));
645    }
646    if (src.hasExtension("documentation")) {
647      tgt.setDocumentationElement(MarkDown40_50.convertMarkdown((MarkdownType) src.getExtensionByUrl("documentation").getValue()));
648    }
649    if (src.hasExtension("shortDoco")) {
650      tgt.setShortDocoElement(String40_50.convertString((StringType) src.getExtensionByUrl("shortDoco").getValue()));
651    }
652    for (Extension t : src.getExtensionsByUrl("usage")) {
653      tgt.addUsage(UsageContext40_50.convertUsageContext((org.hl7.fhir.r4.model.UsageContext) t.getValue()));
654    }
655    if (src.hasExtension("any")) {
656      tgt.setAnyElement(Boolean40_50.convertBoolean((BooleanType) src.getExtensionByUrl("any").getValue()));
657    }
658    return tgt;
659  }
660
661  private static org.hl7.fhir.r4.model.Extension convertAdditional(ElementDefinitionBindingAdditionalComponent src) {
662    if (src == null) return null;
663    org.hl7.fhir.r4.model.Extension tgt = new Extension(ToolingExtensions.EXT_BINDING_ADDITIONAL);
664    ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyElement(src, tgt);
665    if (src.hasPurpose()) {
666      tgt.addExtension(new Extension("purpose", new org.hl7.fhir.r4.model.CodeType(src.getPurposeElement().primitiveValue())));
667    }
668    if (src.hasValueSet()) {
669      tgt.addExtension(new Extension("valueSet", Canonical40_50.convertCanonical(src.getValueSetElement())));
670    }
671    if (src.hasDocumentation()) {
672      tgt.addExtension(new Extension("documentation", MarkDown40_50.convertMarkdown(src.getDocumentationElement())));
673    }
674    if (src.hasShortDoco()) {
675      tgt.addExtension(new Extension("shortDoco", String40_50.convertString(src.getShortDocoElement())));
676    }
677    for (UsageContext t : src.getUsage()) {
678      tgt.addExtension(new Extension("usage", UsageContext40_50.convertUsageContext(t)));
679    }
680    if (src.hasAny()) {
681      tgt.addExtension(new Extension("any", Boolean40_50.convertBoolean(src.getAnyElement())));
682    }
683    
684    return tgt;
685  }
686
687  public static org.hl7.fhir.r4.model.ElementDefinition.ElementDefinitionBindingComponent convertElementDefinitionBindingComponent(org.hl7.fhir.r5.model.ElementDefinition.ElementDefinitionBindingComponent src) throws FHIRException {
688    if (src == null) return null;
689    org.hl7.fhir.r4.model.ElementDefinition.ElementDefinitionBindingComponent tgt = new org.hl7.fhir.r4.model.ElementDefinition.ElementDefinitionBindingComponent();
690    ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyElement(src, tgt);
691    if (src.hasStrength()) tgt.setStrengthElement(Enumerations40_50.convertBindingStrength(src.getStrengthElement()));
692    if (src.hasDescription()) tgt.setDescriptionElement(String40_50.convertString(src.getDescriptionElement()));
693    if (src.hasValueSet()) tgt.setValueSetElement(Canonical40_50.convertCanonical(src.getValueSetElement()));
694    for (ElementDefinitionBindingAdditionalComponent ab : src.getAdditional()) {
695      tgt.addExtension(convertAdditional(ab));
696    }
697    return tgt;
698  }
699
700  public static org.hl7.fhir.r5.model.ElementDefinition.ElementDefinitionMappingComponent convertElementDefinitionMappingComponent(org.hl7.fhir.r4.model.ElementDefinition.ElementDefinitionMappingComponent src) throws FHIRException {
701    if (src == null) return null;
702    org.hl7.fhir.r5.model.ElementDefinition.ElementDefinitionMappingComponent tgt = new org.hl7.fhir.r5.model.ElementDefinition.ElementDefinitionMappingComponent();
703    ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyElement(src, tgt);
704    if (src.hasIdentity()) tgt.setIdentityElement(Id40_50.convertId(src.getIdentityElement()));
705    if (src.hasLanguage()) tgt.setLanguageElement(Code40_50.convertCode(src.getLanguageElement()));
706    if (src.hasMap()) tgt.setMapElement(String40_50.convertString(src.getMapElement()));
707    if (src.hasComment()) tgt.setCommentElement(String40_50.convertStringToMarkdown(src.getCommentElement()));
708    return tgt;
709  }
710
711  public static org.hl7.fhir.r4.model.ElementDefinition.ElementDefinitionMappingComponent convertElementDefinitionMappingComponent(org.hl7.fhir.r5.model.ElementDefinition.ElementDefinitionMappingComponent src) throws FHIRException {
712    if (src == null) return null;
713    org.hl7.fhir.r4.model.ElementDefinition.ElementDefinitionMappingComponent tgt = new org.hl7.fhir.r4.model.ElementDefinition.ElementDefinitionMappingComponent();
714    ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyElement(src, tgt);
715    if (src.hasIdentity()) tgt.setIdentityElement(Id40_50.convertId(src.getIdentityElement()));
716    if (src.hasLanguage()) tgt.setLanguageElement(Code40_50.convertCode(src.getLanguageElement()));
717    if (src.hasMap()) tgt.setMapElement(String40_50.convertString(src.getMapElement()));
718    if (src.hasComment()) tgt.setCommentElement(String40_50.convertString(src.getCommentElement()));
719    return tgt;
720  }
721}