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