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