001package org.hl7.fhir.convertors.conv10_50.datatypes10_50;
002
003import org.hl7.fhir.convertors.VersionConvertorConstants;
004import org.hl7.fhir.convertors.context.ConversionContext10_50;
005import org.hl7.fhir.convertors.conv10_50.datatypes10_50.complextypes10_50.Coding10_50;
006import org.hl7.fhir.convertors.conv10_50.datatypes10_50.primitivetypes10_50.*;
007import org.hl7.fhir.convertors.conv10_50.resources10_50.Enumerations10_50;
008import org.hl7.fhir.dstu2.utils.ToolingExtensions;
009import org.hl7.fhir.exceptions.FHIRException;
010import org.hl7.fhir.r5.conformance.ProfileUtilities;
011import org.hl7.fhir.r5.model.ElementDefinition;
012import org.hl7.fhir.utilities.Utilities;
013
014import java.util.List;
015import java.util.stream.Collectors;
016
017public class ElementDefinition10_50 {
018  public static org.hl7.fhir.r5.model.ElementDefinition convertElementDefinition(org.hl7.fhir.dstu2.model.ElementDefinition src, List<String> slicePaths, List<org.hl7.fhir.dstu2.model.ElementDefinition> context, int pos) throws FHIRException {
019    if (src == null || src.isEmpty()) return null;
020    org.hl7.fhir.r5.model.ElementDefinition tgt = new org.hl7.fhir.r5.model.ElementDefinition();
021    ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyElement(src, tgt);
022    if (src.hasPathElement()) tgt.setPathElement(String10_50.convertString(src.getPathElement()));
023    tgt.setRepresentation(src.getRepresentation().stream().map(ElementDefinition10_50::convertPropertyRepresentation).collect(Collectors.toList()));
024    if (src.hasName()) {
025      if (slicePaths.contains(src.getPath())) tgt.setSliceNameElement(String10_50.convertString(src.getNameElement()));
026      if (src.hasNameElement()) tgt.setIdElement(String10_50.convertString(src.getNameElement()));
027    }
028    if (src.hasLabel()) tgt.setLabelElement(String10_50.convertString(src.getLabelElement()));
029    for (org.hl7.fhir.dstu2.model.Coding t : src.getCode()) tgt.addCode(Coding10_50.convertCoding(t));
030    if (src.hasSlicing()) tgt.setSlicing(convertElementDefinitionSlicingComponent(src.getSlicing(), context, pos));
031    if (src.hasShort()) tgt.setShortElement(String10_50.convertString(src.getShortElement()));
032    if (src.hasDefinition()) tgt.setDefinitionElement(MarkDown10_50.convertMarkdown(src.getDefinitionElement()));
033    if (src.hasComments()) tgt.setCommentElement(MarkDown10_50.convertMarkdown(src.getCommentsElement()));
034    if (src.hasRequirements()) tgt.setRequirementsElement(MarkDown10_50.convertMarkdown(src.getRequirementsElement()));
035    for (org.hl7.fhir.dstu2.model.StringType t : src.getAlias()) tgt.addAlias(t.getValue());
036    if (src.hasMin()) tgt.setMin(src.getMin());
037    if (src.hasMax()) tgt.setMaxElement(String10_50.convertString(src.getMaxElement()));
038    if (src.hasBase()) tgt.setBase(convertElementDefinitionBaseComponent(src.getBase()));
039    if (src.hasNameReference()) tgt.setContentReference("#" + src.getNameReference());
040    for (org.hl7.fhir.dstu2.model.ElementDefinition.TypeRefComponent t : src.getType())
041      convertElementDefinitionTypeComponent(t, tgt.getType());
042    if (src.hasDefaultValue())
043      tgt.setDefaultValue(ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().convertType(src.getDefaultValue()));
044    if (src.hasMeaningWhenMissing())
045      tgt.setMeaningWhenMissingElement(MarkDown10_50.convertMarkdown(src.getMeaningWhenMissingElement()));
046    if (src.hasFixed())
047      tgt.setFixed(ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().convertType(src.getFixed()));
048    if (src.hasPattern())
049      tgt.setPattern(ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().convertType(src.getPattern()));
050    if (src.hasExample())
051      tgt.addExample().setLabel("General").setValue(ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().convertType(src.getExample()));
052    if (src.hasMinValue())
053      tgt.setMinValue(ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().convertType(src.getMinValue()));
054    if (src.hasMaxValue())
055      tgt.setMaxValue(ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().convertType(src.getMaxValue()));
056    if (src.hasMaxLength()) tgt.setMaxLengthElement(Integer10_50.convertInteger(src.getMaxLengthElement()));
057    for (org.hl7.fhir.dstu2.model.IdType t : src.getCondition()) tgt.addCondition(t.getValue());
058    for (org.hl7.fhir.dstu2.model.ElementDefinition.ElementDefinitionConstraintComponent t : src.getConstraint())
059      tgt.addConstraint(convertElementDefinitionConstraintComponent(t));
060    if (src.hasMustSupport()) tgt.setMustSupportElement(Boolean10_50.convertBoolean(src.getMustSupportElement()));
061    if (src.hasIsModifier()) tgt.setIsModifierElement(Boolean10_50.convertBoolean(src.getIsModifierElement()));
062    if (tgt.getIsModifier()) {
063      String reason = org.hl7.fhir.dstu2.utils.ToolingExtensions.readStringExtension(src, VersionConvertorConstants.MODIFIER_REASON_EXTENSION);
064      if (Utilities.noString(reason)) reason = VersionConvertorConstants.MODIFIER_REASON_LEGACY;
065      tgt.setIsModifierReason(reason);
066    }
067    if (src.hasIsSummary()) tgt.setIsSummaryElement(Boolean10_50.convertBoolean(src.getIsSummaryElement()));
068    if (src.hasBinding()) tgt.setBinding(convertElementDefinitionBindingComponent(src.getBinding()));
069    for (org.hl7.fhir.dstu2.model.ElementDefinition.ElementDefinitionMappingComponent t : src.getMapping())
070      tgt.addMapping(convertElementDefinitionMappingComponent(t));
071    if (!tgt.hasId()) tgt.setId(tgt.getPath());
072    return tgt;
073  }
074
075  public static org.hl7.fhir.dstu2.model.ElementDefinition convertElementDefinition(org.hl7.fhir.r5.model.ElementDefinition src) throws FHIRException {
076    if (src == null || src.isEmpty()) return null;
077    org.hl7.fhir.dstu2.model.ElementDefinition tgt = new org.hl7.fhir.dstu2.model.ElementDefinition();
078    ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyElement(src, tgt);
079    if (src.hasPathElement()) tgt.setPathElement(String10_50.convertString(src.getPathElement()));
080    tgt.setRepresentation(src.getRepresentation().stream().map(ElementDefinition10_50::convertPropertyRepresentation).collect(Collectors.toList()));
081    if (src.hasSliceName()) tgt.setNameElement(String10_50.convertString(src.getSliceNameElement()));
082    else tgt.setNameElement(String10_50.convertString(src.getIdElement()));
083    if (src.hasLabelElement()) tgt.setLabelElement(String10_50.convertString(src.getLabelElement()));
084    for (org.hl7.fhir.r5.model.Coding t : src.getCode()) tgt.addCode(Coding10_50.convertCoding(t));
085    if (src.hasSlicing()) tgt.setSlicing(convertElementDefinitionSlicingComponent(src.getSlicing()));
086    if (src.hasShortElement()) tgt.setShortElement(String10_50.convertString(src.getShortElement()));
087    if (src.hasDefinitionElement()) tgt.setDefinitionElement(MarkDown10_50.convertMarkdown(src.getDefinitionElement()));
088    if (src.hasCommentElement()) tgt.setCommentsElement(MarkDown10_50.convertMarkdown(src.getCommentElement()));
089    if (src.hasRequirementsElement())
090      tgt.setRequirementsElement(MarkDown10_50.convertMarkdown(src.getRequirementsElement()));
091    for (org.hl7.fhir.r5.model.StringType t : src.getAlias()) tgt.addAlias(t.getValue());
092    tgt.setMin(src.getMin());
093    if (src.hasMaxElement()) tgt.setMaxElement(String10_50.convertString(src.getMaxElement()));
094    if (src.hasBase()) tgt.setBase(convertElementDefinitionBaseComponent(src.getBase()));
095    if (src.hasContentReference()) tgt.setNameReference(src.getContentReference().substring(1));
096    for (org.hl7.fhir.r5.model.ElementDefinition.TypeRefComponent t : src.getType())
097      convertElementDefinitionTypeComponent(t, tgt.getType());
098    if (src.hasDefaultValue())
099      tgt.setDefaultValue(ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().convertType(src.getDefaultValue()));
100    if (src.hasMeaningWhenMissingElement())
101      tgt.setMeaningWhenMissingElement(MarkDown10_50.convertMarkdown(src.getMeaningWhenMissingElement()));
102    if (src.hasFixed())
103      tgt.setFixed(ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().convertType(src.getFixed()));
104    if (src.hasPattern())
105      tgt.setPattern(ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().convertType(src.getPattern()));
106    if (src.hasExample())
107      tgt.setExample(ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().convertType(src.getExampleFirstRep().getValue()));
108    if (src.hasMinValue())
109      tgt.setMinValue(ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().convertType(src.getMinValue()));
110    if (src.hasMaxValue())
111      tgt.setMaxValue(ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().convertType(src.getMaxValue()));
112    if (src.hasMaxLengthElement()) tgt.setMaxLengthElement(Integer10_50.convertInteger(src.getMaxLengthElement()));
113    for (org.hl7.fhir.r5.model.IdType t : src.getCondition()) tgt.addCondition(t.getValue());
114    for (org.hl7.fhir.r5.model.ElementDefinition.ElementDefinitionConstraintComponent t : src.getConstraint())
115      tgt.addConstraint(convertElementDefinitionConstraintComponent(t));
116    if (src.hasMustSupportElement())
117      tgt.setMustSupportElement(Boolean10_50.convertBoolean(src.getMustSupportElement()));
118    if (src.hasIsModifierElement()) tgt.setIsModifierElement(Boolean10_50.convertBoolean(src.getIsModifierElement()));
119    if (src.hasIsModifierReason() && !VersionConvertorConstants.MODIFIER_REASON_LEGACY.equals(src.getIsModifierReason()))
120      org.hl7.fhir.dstu2.utils.ToolingExtensions.setStringExtension(tgt, VersionConvertorConstants.MODIFIER_REASON_EXTENSION, src.getIsModifierReason());
121    if (src.hasIsSummaryElement()) tgt.setIsSummaryElement(Boolean10_50.convertBoolean(src.getIsSummaryElement()));
122    if (src.hasBinding()) tgt.setBinding(convertElementDefinitionBindingComponent(src.getBinding()));
123    for (org.hl7.fhir.r5.model.ElementDefinition.ElementDefinitionMappingComponent t : src.getMapping())
124      tgt.addMapping(convertElementDefinitionMappingComponent(t));
125    return tgt;
126  }
127
128  static public org.hl7.fhir.r5.model.Enumeration<org.hl7.fhir.r5.model.ElementDefinition.PropertyRepresentation> convertPropertyRepresentation(org.hl7.fhir.dstu2.model.Enumeration<org.hl7.fhir.dstu2.model.ElementDefinition.PropertyRepresentation> src) throws FHIRException {
129    if (src == null || src.isEmpty()) return null;
130    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());
131    ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyElement(src, tgt);
132    if (src.getValue() == null) {
133      tgt.setValue(org.hl7.fhir.r5.model.ElementDefinition.PropertyRepresentation.NULL);
134    } else {
135      switch (src.getValue()) {
136        case XMLATTR:
137          tgt.setValue(org.hl7.fhir.r5.model.ElementDefinition.PropertyRepresentation.XMLATTR);
138          break;
139        default:
140          tgt.setValue(org.hl7.fhir.r5.model.ElementDefinition.PropertyRepresentation.NULL);
141          break;
142      }
143    }
144    return tgt;
145  }
146
147  static public org.hl7.fhir.dstu2.model.Enumeration<org.hl7.fhir.dstu2.model.ElementDefinition.PropertyRepresentation> convertPropertyRepresentation(org.hl7.fhir.r5.model.Enumeration<org.hl7.fhir.r5.model.ElementDefinition.PropertyRepresentation> src) throws FHIRException {
148    if (src == null || src.isEmpty()) return null;
149    org.hl7.fhir.dstu2.model.Enumeration<org.hl7.fhir.dstu2.model.ElementDefinition.PropertyRepresentation> tgt = new org.hl7.fhir.dstu2.model.Enumeration<>(new org.hl7.fhir.dstu2.model.ElementDefinition.PropertyRepresentationEnumFactory());
150    ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyElement(src, tgt);
151    if (src.getValue() == null) {
152      tgt.setValue(org.hl7.fhir.dstu2.model.ElementDefinition.PropertyRepresentation.NULL);
153    } else {
154      switch (src.getValue()) {
155        case XMLATTR:
156          tgt.setValue(org.hl7.fhir.dstu2.model.ElementDefinition.PropertyRepresentation.XMLATTR);
157          break;
158        default:
159          tgt.setValue(org.hl7.fhir.dstu2.model.ElementDefinition.PropertyRepresentation.NULL);
160          break;
161      }
162    }
163    return tgt;
164  }
165
166  public static org.hl7.fhir.r5.model.ElementDefinition.ElementDefinitionSlicingComponent convertElementDefinitionSlicingComponent(org.hl7.fhir.dstu2.model.ElementDefinition.ElementDefinitionSlicingComponent src, List<org.hl7.fhir.dstu2.model.ElementDefinition> context, int pos) throws FHIRException {
167    if (src == null || src.isEmpty()) return null;
168    org.hl7.fhir.r5.model.ElementDefinition.ElementDefinitionSlicingComponent tgt = new org.hl7.fhir.r5.model.ElementDefinition.ElementDefinitionSlicingComponent();
169    ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyElement(src, tgt);
170    org.hl7.fhir.dstu2.model.ElementDefinition slicingElement = context.get(pos);
171    for (org.hl7.fhir.dstu2.model.StringType t : src.getDiscriminator()) {
172      boolean isExists = false;
173      if (!t.asStringValue().contains("@")) {
174        int slices = 0;
175        boolean existsSlicePresent = false;
176        boolean notExistsSlicePresent = false;
177        String existsPath = slicingElement.getPath() + "." + t.asStringValue();
178        for (int i = pos + 1; i < context.size(); i++) {
179          org.hl7.fhir.dstu2.model.ElementDefinition e = context.get(i);
180          if (e.getPath().equals(slicingElement.getPath())) slices++;
181          else if (!e.getPath().startsWith(slicingElement.getPath() + ".")) break;
182          else if (e.getPath().equals(existsPath)) {
183            if (e.hasMin() && e.getMin() > 0) existsSlicePresent = true;
184            else if (e.hasMax() && e.getMax().equals("0")) notExistsSlicePresent = true;
185          }
186        }
187        isExists = (slices == 2 && existsSlicePresent && notExistsSlicePresent) || (slices == 1 && existsSlicePresent != notExistsSlicePresent);
188      }
189      tgt.addDiscriminator(ProfileUtilities.interpretR2Discriminator(t.getValue(), isExists));
190    }
191    if (src.hasDescriptionElement()) tgt.setDescriptionElement(String10_50.convertString(src.getDescriptionElement()));
192    if (src.hasOrderedElement()) tgt.setOrderedElement(Boolean10_50.convertBoolean(src.getOrderedElement()));
193    if (src.hasRules()) tgt.setRulesElement(convertSlicingRules(src.getRulesElement()));
194    return tgt;
195  }
196
197  public static org.hl7.fhir.dstu2.model.ElementDefinition.ElementDefinitionSlicingComponent convertElementDefinitionSlicingComponent(org.hl7.fhir.r5.model.ElementDefinition.ElementDefinitionSlicingComponent src) throws FHIRException {
198    if (src == null || src.isEmpty()) return null;
199    org.hl7.fhir.dstu2.model.ElementDefinition.ElementDefinitionSlicingComponent tgt = new org.hl7.fhir.dstu2.model.ElementDefinition.ElementDefinitionSlicingComponent();
200    ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyElement(src, tgt);
201    for (ElementDefinition.ElementDefinitionSlicingDiscriminatorComponent t : src.getDiscriminator())
202      tgt.addDiscriminator(ProfileUtilities.buildR2Discriminator(t));
203    if (src.hasDescriptionElement()) tgt.setDescriptionElement(String10_50.convertString(src.getDescriptionElement()));
204    if (src.hasOrderedElement()) tgt.setOrderedElement(Boolean10_50.convertBoolean(src.getOrderedElement()));
205    if (src.hasRules()) tgt.setRulesElement(convertSlicingRules(src.getRulesElement()));
206    return tgt;
207  }
208
209  static public org.hl7.fhir.r5.model.Enumeration<ElementDefinition.SlicingRules> convertSlicingRules(org.hl7.fhir.dstu2.model.Enumeration<org.hl7.fhir.dstu2.model.ElementDefinition.SlicingRules> src) throws FHIRException {
210    if (src == null || src.isEmpty()) return null;
211    org.hl7.fhir.r5.model.Enumeration<ElementDefinition.SlicingRules> tgt = new org.hl7.fhir.r5.model.Enumeration<>(new ElementDefinition.SlicingRulesEnumFactory());
212    ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyElement(src, tgt);
213    if (src.getValue() == null) {
214      tgt.setValue(ElementDefinition.SlicingRules.NULL);
215    } else {
216      switch (src.getValue()) {
217        case CLOSED:
218          tgt.setValue(ElementDefinition.SlicingRules.CLOSED);
219          break;
220        case OPEN:
221          tgt.setValue(ElementDefinition.SlicingRules.OPEN);
222          break;
223        case OPENATEND:
224          tgt.setValue(ElementDefinition.SlicingRules.OPENATEND);
225          break;
226        default:
227          tgt.setValue(ElementDefinition.SlicingRules.NULL);
228          break;
229      }
230    }
231    return tgt;
232  }
233
234  static public org.hl7.fhir.dstu2.model.Enumeration<org.hl7.fhir.dstu2.model.ElementDefinition.SlicingRules> convertSlicingRules(org.hl7.fhir.r5.model.Enumeration<ElementDefinition.SlicingRules> src) throws FHIRException {
235    if (src == null || src.isEmpty()) return null;
236    org.hl7.fhir.dstu2.model.Enumeration<org.hl7.fhir.dstu2.model.ElementDefinition.SlicingRules> tgt = new org.hl7.fhir.dstu2.model.Enumeration<>(new org.hl7.fhir.dstu2.model.ElementDefinition.SlicingRulesEnumFactory());
237    ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyElement(src, tgt);
238    if (src.getValue() == null) {
239      tgt.setValue(org.hl7.fhir.dstu2.model.ElementDefinition.SlicingRules.NULL);
240    } else {
241      switch (src.getValue()) {
242        case CLOSED:
243          tgt.setValue(org.hl7.fhir.dstu2.model.ElementDefinition.SlicingRules.CLOSED);
244          break;
245        case OPEN:
246          tgt.setValue(org.hl7.fhir.dstu2.model.ElementDefinition.SlicingRules.OPEN);
247          break;
248        case OPENATEND:
249          tgt.setValue(org.hl7.fhir.dstu2.model.ElementDefinition.SlicingRules.OPENATEND);
250          break;
251        default:
252          tgt.setValue(org.hl7.fhir.dstu2.model.ElementDefinition.SlicingRules.NULL);
253          break;
254      }
255    }
256    return tgt;
257  }
258
259  public static ElementDefinition.ElementDefinitionBaseComponent convertElementDefinitionBaseComponent(org.hl7.fhir.dstu2.model.ElementDefinition.ElementDefinitionBaseComponent src) throws FHIRException {
260    if (src == null || src.isEmpty()) return null;
261    ElementDefinition.ElementDefinitionBaseComponent tgt = new ElementDefinition.ElementDefinitionBaseComponent();
262    ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyElement(src, tgt);
263    if (src.hasPathElement()) tgt.setPathElement(String10_50.convertString(src.getPathElement()));
264    if (src.hasMin()) tgt.setMin(src.getMin());
265    if (src.hasMaxElement()) tgt.setMaxElement(String10_50.convertString(src.getMaxElement()));
266    return tgt;
267  }
268
269  public static org.hl7.fhir.dstu2.model.ElementDefinition.ElementDefinitionBaseComponent convertElementDefinitionBaseComponent(ElementDefinition.ElementDefinitionBaseComponent src) throws FHIRException {
270    if (src == null || src.isEmpty()) return null;
271    org.hl7.fhir.dstu2.model.ElementDefinition.ElementDefinitionBaseComponent tgt = new org.hl7.fhir.dstu2.model.ElementDefinition.ElementDefinitionBaseComponent();
272    ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyElement(src, tgt);
273    if (src.hasPathElement()) tgt.setPathElement(String10_50.convertString(src.getPathElement()));
274    if (src.hasMin()) tgt.setMin(src.getMin());
275    if (src.hasMaxElement()) tgt.setMaxElement(String10_50.convertString(src.getMaxElement()));
276    return tgt;
277  }
278
279  public static void convertElementDefinitionTypeComponent(org.hl7.fhir.dstu2.model.ElementDefinition.TypeRefComponent src, List<ElementDefinition.TypeRefComponent> list) throws FHIRException {
280    if (src == null) return;
281    ElementDefinition.TypeRefComponent tgt = null;
282    for (ElementDefinition.TypeRefComponent t : list)
283      if (t.getCode().equals(src.getCode())) tgt = t;
284    if (tgt == null) {
285      tgt = new ElementDefinition.TypeRefComponent();
286      list.add(tgt);
287      ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyElement(src, tgt);
288      tgt.setCode(src.getCode());
289    }
290    if (tgt.hasTarget()) {
291      for (org.hl7.fhir.dstu2.model.UriType u : src.getProfile()) tgt.addTargetProfile(u.getValue());
292    } else {
293      for (org.hl7.fhir.dstu2.model.UriType u : src.getProfile()) tgt.addProfile(u.getValue());
294    }
295    for (org.hl7.fhir.dstu2.model.Enumeration<org.hl7.fhir.dstu2.model.ElementDefinition.AggregationMode> t : src.getAggregation()) {
296      org.hl7.fhir.r5.model.Enumeration<ElementDefinition.AggregationMode> a = convertAggregationMode(t);
297      if (!tgt.hasAggregation(a.getValue()))
298        ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyElement(t, tgt.addAggregation(a.getValue()));
299    }
300  }
301
302  public static void convertElementDefinitionTypeComponent(ElementDefinition.TypeRefComponent src, List<org.hl7.fhir.dstu2.model.ElementDefinition.TypeRefComponent> list) throws FHIRException {
303    if (src == null) return;
304    org.hl7.fhir.dstu2.model.ElementDefinition.TypeRefComponent tgt = new org.hl7.fhir.dstu2.model.ElementDefinition.TypeRefComponent();
305    ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyElement(src, tgt);
306    if (src.hasCode()) tgt.setCode(src.getCode());
307    list.add(tgt);
308    if (src.hasTarget()) {
309      for (org.hl7.fhir.r5.model.UriType u : src.getTargetProfile()) {
310        tgt.addProfile(u.getValue());
311      }
312    } else {
313      for (org.hl7.fhir.r5.model.UriType u : src.getProfile()) {
314        tgt.addProfile(u.getValue());
315      }
316    }
317  }
318
319  static public org.hl7.fhir.r5.model.Enumeration<ElementDefinition.AggregationMode> convertAggregationMode(org.hl7.fhir.dstu2.model.Enumeration<org.hl7.fhir.dstu2.model.ElementDefinition.AggregationMode> src) throws FHIRException {
320    if (src == null || src.isEmpty()) return null;
321    org.hl7.fhir.r5.model.Enumeration<ElementDefinition.AggregationMode> tgt = new org.hl7.fhir.r5.model.Enumeration<>(new ElementDefinition.AggregationModeEnumFactory());
322    ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyElement(src, tgt);
323    if (src.getValue() == null) {
324      tgt.setValue(ElementDefinition.AggregationMode.NULL);
325    } else {
326      switch (src.getValue()) {
327        case CONTAINED:
328          tgt.setValue(ElementDefinition.AggregationMode.CONTAINED);
329          break;
330        case REFERENCED:
331          tgt.setValue(ElementDefinition.AggregationMode.REFERENCED);
332          break;
333        case BUNDLED:
334          tgt.setValue(ElementDefinition.AggregationMode.BUNDLED);
335          break;
336        default:
337          tgt.setValue(ElementDefinition.AggregationMode.NULL);
338          break;
339      }
340    }
341    return tgt;
342  }
343
344  static public org.hl7.fhir.dstu2.model.Enumeration<org.hl7.fhir.dstu2.model.ElementDefinition.AggregationMode> convertAggregationMode(org.hl7.fhir.r5.model.Enumeration<ElementDefinition.AggregationMode> src) throws FHIRException {
345    if (src == null || src.isEmpty()) return null;
346    org.hl7.fhir.dstu2.model.Enumeration<org.hl7.fhir.dstu2.model.ElementDefinition.AggregationMode> tgt = new org.hl7.fhir.dstu2.model.Enumeration<>(new org.hl7.fhir.dstu2.model.ElementDefinition.AggregationModeEnumFactory());
347    ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyElement(src, tgt);
348    if (src.getValue() == null) {
349      tgt.setValue(org.hl7.fhir.dstu2.model.ElementDefinition.AggregationMode.NULL);
350    } else {
351      switch (src.getValue()) {
352        case CONTAINED:
353          tgt.setValue(org.hl7.fhir.dstu2.model.ElementDefinition.AggregationMode.CONTAINED);
354          break;
355        case REFERENCED:
356          tgt.setValue(org.hl7.fhir.dstu2.model.ElementDefinition.AggregationMode.REFERENCED);
357          break;
358        case BUNDLED:
359          tgt.setValue(org.hl7.fhir.dstu2.model.ElementDefinition.AggregationMode.BUNDLED);
360          break;
361        default:
362          tgt.setValue(org.hl7.fhir.dstu2.model.ElementDefinition.AggregationMode.NULL);
363          break;
364      }
365    }
366    return tgt;
367  }
368
369  public static ElementDefinition.ElementDefinitionConstraintComponent convertElementDefinitionConstraintComponent(org.hl7.fhir.dstu2.model.ElementDefinition.ElementDefinitionConstraintComponent src) throws FHIRException {
370    if (src == null || src.isEmpty()) return null;
371    ElementDefinition.ElementDefinitionConstraintComponent tgt = new ElementDefinition.ElementDefinitionConstraintComponent();
372    ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyElement(src, tgt);
373    if (src.hasKeyElement()) tgt.setKeyElement(Id10_50.convertId(src.getKeyElement()));
374    if (src.hasRequirementsElement())
375      tgt.setRequirementsElement(String10_50.convertString(src.getRequirementsElement()));
376    if (src.hasSeverity()) tgt.setSeverityElement(convertConstraintSeverity(src.getSeverityElement()));
377    if (src.hasHumanElement()) tgt.setHumanElement(String10_50.convertString(src.getHumanElement()));
378    tgt.setExpression(ToolingExtensions.readStringExtension(src, ToolingExtensions.EXT_EXPRESSION));
379    if (src.hasXpathElement()) tgt.setXpathElement(String10_50.convertString(src.getXpathElement()));
380    return tgt;
381  }
382
383  public static org.hl7.fhir.dstu2.model.ElementDefinition.ElementDefinitionConstraintComponent convertElementDefinitionConstraintComponent(ElementDefinition.ElementDefinitionConstraintComponent src) throws FHIRException {
384    if (src == null || src.isEmpty()) return null;
385    org.hl7.fhir.dstu2.model.ElementDefinition.ElementDefinitionConstraintComponent tgt = new org.hl7.fhir.dstu2.model.ElementDefinition.ElementDefinitionConstraintComponent();
386    ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyElement(src, tgt);
387    if (src.hasKeyElement()) tgt.setKeyElement(Id10_50.convertId(src.getKeyElement()));
388    if (src.hasRequirementsElement())
389      tgt.setRequirementsElement(String10_50.convertString(src.getRequirementsElement()));
390    if (src.hasSeverity()) tgt.setSeverityElement(convertConstraintSeverity(src.getSeverityElement()));
391    if (src.hasHumanElement()) tgt.setHumanElement(String10_50.convertString(src.getHumanElement()));
392    if (src.hasExpression())
393      ToolingExtensions.addStringExtension(tgt, ToolingExtensions.EXT_EXPRESSION, src.getExpression());
394    if (src.hasXpathElement()) tgt.setXpathElement(String10_50.convertString(src.getXpathElement()));
395    return tgt;
396  }
397
398  static public org.hl7.fhir.r5.model.Enumeration<ElementDefinition.ConstraintSeverity> convertConstraintSeverity(org.hl7.fhir.dstu2.model.Enumeration<org.hl7.fhir.dstu2.model.ElementDefinition.ConstraintSeverity> src) throws FHIRException {
399    if (src == null || src.isEmpty()) return null;
400    org.hl7.fhir.r5.model.Enumeration<ElementDefinition.ConstraintSeverity> tgt = new org.hl7.fhir.r5.model.Enumeration<>(new ElementDefinition.ConstraintSeverityEnumFactory());
401    ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyElement(src, tgt);
402    if (src.getValue() == null) {
403      tgt.setValue(ElementDefinition.ConstraintSeverity.NULL);
404    } else {
405      switch (src.getValue()) {
406        case ERROR:
407          tgt.setValue(ElementDefinition.ConstraintSeverity.ERROR);
408          break;
409        case WARNING:
410          tgt.setValue(ElementDefinition.ConstraintSeverity.WARNING);
411          break;
412        default:
413          tgt.setValue(ElementDefinition.ConstraintSeverity.NULL);
414          break;
415      }
416    }
417    return tgt;
418  }
419
420  static public org.hl7.fhir.dstu2.model.Enumeration<org.hl7.fhir.dstu2.model.ElementDefinition.ConstraintSeverity> convertConstraintSeverity(org.hl7.fhir.r5.model.Enumeration<ElementDefinition.ConstraintSeverity> src) throws FHIRException {
421    if (src == null || src.isEmpty()) return null;
422    org.hl7.fhir.dstu2.model.Enumeration<org.hl7.fhir.dstu2.model.ElementDefinition.ConstraintSeverity> tgt = new org.hl7.fhir.dstu2.model.Enumeration<>(new org.hl7.fhir.dstu2.model.ElementDefinition.ConstraintSeverityEnumFactory());
423    ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyElement(src, tgt);
424    if (src.getValue() == null) {
425      tgt.setValue(org.hl7.fhir.dstu2.model.ElementDefinition.ConstraintSeverity.NULL);
426    } else {
427      switch (src.getValue()) {
428        case ERROR:
429          tgt.setValue(org.hl7.fhir.dstu2.model.ElementDefinition.ConstraintSeverity.ERROR);
430          break;
431        case WARNING:
432          tgt.setValue(org.hl7.fhir.dstu2.model.ElementDefinition.ConstraintSeverity.WARNING);
433          break;
434        default:
435          tgt.setValue(org.hl7.fhir.dstu2.model.ElementDefinition.ConstraintSeverity.NULL);
436          break;
437      }
438    }
439    return tgt;
440  }
441
442  public static ElementDefinition.ElementDefinitionBindingComponent convertElementDefinitionBindingComponent(org.hl7.fhir.dstu2.model.ElementDefinition.ElementDefinitionBindingComponent src) throws FHIRException {
443    if (src == null || src.isEmpty()) return null;
444    ElementDefinition.ElementDefinitionBindingComponent tgt = new ElementDefinition.ElementDefinitionBindingComponent();
445    ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyElement(src, tgt);
446    if (src.hasStrength()) tgt.setStrengthElement(Enumerations10_50.convertBindingStrength(src.getStrengthElement()));
447    if (src.hasDescriptionElement()) tgt.setDescriptionElement(String10_50.convertString(src.getDescriptionElement()));
448    if (src.hasValueSet()) {
449      org.hl7.fhir.r5.model.DataType vs = ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().convertType(src.getValueSet());
450      if (vs != null) {
451        tgt.setValueSet(vs instanceof org.hl7.fhir.r5.model.Reference ? ((org.hl7.fhir.r5.model.Reference) vs).getReference() : vs.primitiveValue());
452        tgt.setValueSet(VersionConvertorConstants.refToVS(tgt.getValueSet()));
453      }
454    }
455    return tgt;
456  }
457
458  public static org.hl7.fhir.dstu2.model.ElementDefinition.ElementDefinitionBindingComponent convertElementDefinitionBindingComponent(ElementDefinition.ElementDefinitionBindingComponent src) throws FHIRException {
459    if (src == null || src.isEmpty()) return null;
460    org.hl7.fhir.dstu2.model.ElementDefinition.ElementDefinitionBindingComponent tgt = new org.hl7.fhir.dstu2.model.ElementDefinition.ElementDefinitionBindingComponent();
461    ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyElement(src, tgt);
462    if (src.hasStrength()) tgt.setStrengthElement(Enumerations10_50.convertBindingStrength(src.getStrengthElement()));
463    if (src.hasDescriptionElement()) tgt.setDescriptionElement(String10_50.convertString(src.getDescriptionElement()));
464    if (src.hasValueSet()) {
465      String vsr = VersionConvertorConstants.vsToRef(src.getValueSet());
466      if (vsr != null) tgt.setValueSet(new org.hl7.fhir.dstu2.model.UriType(vsr));
467      else tgt.setValueSet(new org.hl7.fhir.dstu2.model.Reference(src.getValueSet()));
468    }
469    return tgt;
470  }
471
472  public static ElementDefinition.ElementDefinitionMappingComponent convertElementDefinitionMappingComponent(org.hl7.fhir.dstu2.model.ElementDefinition.ElementDefinitionMappingComponent src) throws FHIRException {
473    if (src == null || src.isEmpty()) return null;
474    ElementDefinition.ElementDefinitionMappingComponent tgt = new ElementDefinition.ElementDefinitionMappingComponent();
475    ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyElement(src, tgt);
476    if (src.hasIdentityElement()) tgt.setIdentityElement(Id10_50.convertId(src.getIdentityElement()));
477    if (src.hasLanguageElement()) tgt.setLanguageElement(Code10_50.convertCode(src.getLanguageElement()));
478    if (src.hasMapElement()) tgt.setMapElement(String10_50.convertString(src.getMapElement()));
479    return tgt;
480  }
481
482  public static org.hl7.fhir.dstu2.model.ElementDefinition.ElementDefinitionMappingComponent convertElementDefinitionMappingComponent(ElementDefinition.ElementDefinitionMappingComponent src) throws FHIRException {
483    if (src == null || src.isEmpty()) return null;
484    org.hl7.fhir.dstu2.model.ElementDefinition.ElementDefinitionMappingComponent tgt = new org.hl7.fhir.dstu2.model.ElementDefinition.ElementDefinitionMappingComponent();
485    ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyElement(src, tgt);
486    if (src.hasIdentityElement()) tgt.setIdentityElement(Id10_50.convertId(src.getIdentityElement()));
487    if (src.hasLanguageElement()) tgt.setLanguageElement(Code10_50.convertCode(src.getLanguageElement()));
488    if (src.hasMapElement()) tgt.setMapElement(String10_50.convertString(src.getMapElement()));
489    return tgt;
490  }
491}