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