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